了解Linux中的RS-485

时间:2019-05-24 08:55:26

标签: c linux rs485

我正在尝试通过在两台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

1 个答案:

答案 0 :(得分:0)

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

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

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

BIOS settings for COM2

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

USB Cable settings

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

Wiring diagrams

如果电缆不是太长(可能小于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查找有关您的硬件的详细信息。