0

我正在开发一个 C++ Modbus应用程序,它已经使用libmodbuspp库来实现一个 Modbus 主设备,以在 TCP 或 RTU 模式下查询Modbus 从设备(分别用于通过以太网或 RS-232/485 串行链路连接的设备)。它已经工作正常,但最近设置了一个新要求,即此应用程序还应该通过 TCP 实现 RTU,因此它能够通过 TCP 与网关通信,该网关有许多 RTU Modbus 从设备连接到它的许多串行端口(网关只是将 RTU 数据包转发到其中设置的相应从属 ID)。基本上这意味着我们的应用程序应该通过 TCP/IP 连接而不是串行端口发送 Modbus RTU PDU。

对于一个快速而肮脏的解决方案(可能对其他人有帮助),我使用socat创建一个虚拟串行端口,该端口具有到目标 TCP 网关的出站 TCP 连接,使我的应用程序仅在其常规 RTU 模式下工作(虚拟串行端口是/dev/ttyS4和TCP 网关端点192.168.0.10:8000):

socat -d -d pty,link=/dev/ttyS4,raw,echo=0 tcp-connect:192.168.0.10:8000

但对于最终应用程序,我想要更干净的东西,而不依赖于外部应用程序。

我想知道是否可以使用libmodbuspp 的 virtual-rtu层来实现这一点。虽然libmodbuspp 文档非常好,但似乎这是一个新功能,所以对我来说还不是很清楚。文档和示例仅显示它可以通过服务器路由器(专用服务器)通过 TCP 接收 RTU,而后者又可以到达与这些对象关联的 RTU 从站,但我需要的恰恰相反:能够连接到作为客户端的 TCP 端点,但向其发送 Modbus RTU 而不是 Modbus TCP 数据报。

由于libmodbuspp库实际上是众所周知的 Modbus C 库libmodbus的 C++ 包装器,因此也有可能使用libmodbus 的这个分支,它增加了对 RTU over TCP 的支持,但我宁愿不必在 C++ 中重新实现支持包装库libmodbuspp如果它已经以某种方式支持它(但可能以不完整的方式 - 不在客户端连接中)。也许更熟悉libmodbuspp代码库的人可以在这里给我一些指示?谢谢!

4

0 回答 0