我正在尝试通过在两台 Linux 计算机之间发送数据来学习 RS-485 接口(interface)。
主计算机运行 ubuntu16.04,另一台运行内核 4.19 的基于 debian 的系统。

主PC有一个USB转RS-485适配器,另一台PC有RS-485接口(interface)。

最初我认为我可以简单地在界面上回显数据,但我不能。
如果我与 picocom 连接,我可以输入数据但不能发送它。通过环顾四周,我意识到这是因为两台 PC 都在等待需要切换的 RTS。

然后我得出结论,我需要某种 C 程序来初始化接口(interface)(如果我错了,请纠正我)。

我去了https://www.kernel.org/doc/Documentation/serial/serial-rs485.txt
其中 是设置 RS-485 的示例代码。

但是,当我尝试运行它时,它总是在以下位置失败:

status = ioctl(fd,TIOCSRS485, &ctrl485);
  if (status) {
    printf("ERROR PORT 1! TIOCSERSETRS485 failed %i", status);
    return -1;
  }

我在谷歌上搜索了我能想到的 RS-485 的每个组合,但大多数信息都是关于 modbus 和传感器的。我还阅读了有关 ioctls 的信息,但我仍然被困住了。

如果有人有经验或提示,我将非常感激。

此致,

最佳答案

我不能完全确定,但我认为您根本不需要玩 RTS 切换,因为您的设备似乎默认支持硬件半双工。

检查以下内容以确保您的硬件设置正确:

根据您的 Cincoze 手册,您必须在 BIOS 级别选择每个端口的操作模式:

c - 了解 Linux 中的 RS-485-LMLPHP

然后确保您的 USB 电缆也与微动开关半双工工作(默认情况下应该没问题):

c - 了解 Linux 中的 RS-485-LMLPHP

最后,请确保按照以下图表正确连接设备:

c - 了解 Linux 中的 RS-485-LMLPHP

如果您的电缆不太长(可能小于 50 米?),您不必担心终止或阻抗那么大,否则您可能需要在计算机 DB9 上添加一个电阻并移动 USB 电缆上的开关。

最后,请注意您的设备也支持全双工;如果您按照上述说明更改设置但选择 RS422 并进行 4 线设置,您应该能够在两台计算机上打开一个终端并同时发送和接收,以防万一。

编辑 1: 为完整起见,我在这里添加了一些引用资料,供那些使用不支持硬件方向控制的设备的人使用:

RS485: Inappropriate ioctl for device

Pymodbus - Read input register of Energy meter over rs485 on uart of raspberry pi3

编辑 2: 正如下面的评论中所讨论的,对于这个特定的硬件,您可以在 BIOS 中选择不同的操作模式,另外要记住的是端口的命名(在操作系统级别)可能会改变选择新的操作模式。使用 $cat /proc/tty/driver/serial 查找有关您的硬件的详细信息。

关于c - 了解 Linux 中的 RS-485,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56289116/

10-12 21:08