在 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
查找有关您的硬件的详细信息。
我正在尝试通过在两台 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
查找有关您的硬件的详细信息。