0

我正在开发一个 RaspPi 程序,该程序将负责在基于 RS-485 的 Modbus 网络上记录传感器数据。

正在我的 Windows 笔记本电脑上运行 Linux 的虚拟机上进行开发。目前,这两者是通过我在 Windows 端使用 com0com 设置的虚拟空 COM 调制解调器链接的。

从我的应用程序端的调试信息中,我知道程序正在输出有效的 MODBUS RTU 帧。但是,当我的从属模拟器(Unslave)收到信息时,它似乎已被破坏,值已更改,并且帧不再有效。

COM0COM 是否与这种用途相媲美(无法通过 google 验证)?是否有更好的应用程序/框架可用于这种情况?

任何帮助将不胜感激。似乎确实有一个商业解决方案宣传 RS-485 支持,但理想情况下我想使用更开放的解决方案。

4

1 回答 1

0

由于您已经在 Linux 上进行开发,因此一种选择可能是忘记 Windows 并使用等效的 Linux 工具并测试 VM 内的所有内容。

  • 对于零调制解调器电缆模拟,tty0tty内核模块。(您可能必须自己编译它,但这些都是在 Linux 上运行的标准。)
  • 对于稍微简单但不太现实的模拟,有socat。它可以通过网络进行转发,但某些应用程序不能使用它(因为它们所做的 IOCTL 的细节)。
  • 作为用于快速测试的 modbus 客户端(master)是mbpoll,可能还有其他的。
  • 您可以使用pymodbus来测试/模拟设备,它可以做服务器(从)或客户端(主)。

另一种选择是使用真正的零调制解调器电缆。(一种避免复杂软件设置的硬件解决方案。)例如,您可以简单地插入两个 USB 加密狗(可能是 RS232 而不是 RS485)并将其中一个 USB 设备映射到 Linux VM(因此它使用 Linux 驱动程序)。

但最终,这真的取决于你想要测试什么。(你还没有真正告诉我们。)

  • 如果您只想测试程序的逻辑,也许可以将串行接口抽象出来并编写单元测试。或者您的应用程序可能同时支持 Modbus-RTU 和 Modbus-TCP,因此您可以通过 TCP 进行大多数测试,避开所有串行端口问题。
  • 如果您想测试 RS485 细节,最好使用真正的 RS485 总线(硬件)。有一些特定的时序问题(例如某些设备没有足够快地放弃总线,破坏其他设备的数据)或您无法合理模拟的 Linux 端的 IOCTL 设置。
于 2022-01-25T20:18:07.903 回答