在 Linux 中了解 RS-485

Understanding RS-485 in Linux

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

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

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

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

我去了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 的内容,但我仍然卡住了。

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

此致, W

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

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

根据您的德承手册,您必须 select 每个端口的运行模式在 BIOS 级别:

然后确保您的 USB 数据线也可以 half-duplex 与微动开关一起工作(默认情况下应该没问题):

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

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

作为最后的评论,请注意您的设备也支持 full-duplex;如果您按照上述说明更改设置但改为 select RS422 并进行 4 线设置,您应该能够在两台计算机上打开终端并同时发送和接收,以备不时之需.

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

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

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