我试图通过在两台Linux计算机之间发送数据来学习RS-485接口。主计算机运行ubuntu16.04,另一台运行基于debian内核4.19的系统。
主PC有USB到RS-485适配器,另一台有RS-485接口.
最初,我假设我可以简单地在接口上回显数据,但我不能。如果我连接到picocom,我可以输入数据,但不能发送数据。环顾四周,我意识到这是因为两台电脑都在等待需要切换的RTS。
然后我得出结论,我需要一些C程序来初始化接口(如果我错了,请纠正我)。
我去了https://www.kernel.org/doc/Documentation/serial/serial-rs485.txt,在那里is是设置RS-485的示例代码。
但是,当我尝试运行它时,它总是失败于:
status = ioctl(fd,TIOCSRS485, &ctrl485);
if (status) {
printf("ERROR PORT 1! TIOCSERSETRS485 failed %i", status);
return -1;
}我搜索了我能想到的每一个RS-485的组合,但大多数信息都是关于modbus和传感器的。我也读过一些关于ioctls的书,但我还是被困住了。
如果有人有经验或技巧,我会非常感激。
向你问好,W
发布于 2019-05-24 17:16:47
我不能完全确定,但我认为您根本不需要玩RTS切换,因为默认情况下,您的设备似乎支持硬件半双工。
检查以下内容以确保硬件设置是正确的:
根据您的Cincoze手册,您必须在BIOS级别上选择每个端口的操作模式:

然后确保您的USB电缆也与微开关一起工作半双工(默认情况下应该很好):

最后,确保您的设备接线正确,遵循以下图表:

如果你的电缆不太长(可能不到50米?)您不必担心终端或阻抗,否则您可能需要在计算机DB9上添加一个电阻,并移动开关上的USB电缆。
最后,请注意,您的设备也支持全双工;如果您按照上面的说明更改设置,但选择RS422,然后进行四线设置,您应该能够在两台计算机上打开一个终端,同时发送和接收,以防您需要。
编辑1:为了完整起见,我在这里为那些使用不支持硬件方向控制的设备的人添加了几个引用:
RS485: Inappropriate ioctl for device
Pymodbus - Read input register of Energy meter over rs485 on uart of raspberry pi3
编辑2:,如下面的注释所述,对于这个特定的硬件,您可以在BIOS中选择不同的操作模式,另外要记住的一点是,当您选择新的操作模式时,端口的命名(在OS级别)可能会发生变化。使用$cat /proc/tty/driver/serial查找有关硬件的详细信息。
https://stackoverflow.com/questions/56289116
复制相似问题