我正在尝试通过在两台Linux计算机之间发送数据来学习RS-485接口。 主计算机正在运行ubuntu16.04,另一台计算机正在内核4.19上运行基于debian的系统。
主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和传感器的。我也读过有关ioctl的文章,但我仍然陷于困境。
如果有人有经验或技巧,我将非常感激。
最好的问候, W
答案 0 :(得分:0)
我不能完全确定,但是我认为您根本不需要使用RTS切换,因为默认情况下您的设备似乎支持硬件半双工。
检查以下内容以确保您的硬件设置正确:
根据Cincoze的手册,您必须在BIOS级别上选择每个端口的操作模式:
然后确保您的USB电缆也与微动开关半双工(默认情况下应该没问题):
最后,请确保按照以下图表正确连接设备:
如果电缆不是太长(可能小于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
查找有关您的硬件的详细信息。