是否可以使用linux box或arduino构建modbus-RTU以太网网关?
我有使用modbus RTU连接在一起的plc奴隶,我想通过TCP连接其中一个与我的电脑作为主电源。
我想知道我是否可以使用连接到路由器的linux盒子(rasbery pi / raspbian)作为modbus-to-tcp转换器,将usb端口连接到某个端口上的本地ip,因为一个plc将被连接在modbus rtu到linux box的usb端口。 管道命令将是这样的:
nc -l 5626 > /dev/ttyUSB0 < /dev/ttyUSB0
我的目标是使用modbus通过linux盒将pc(与linux盒子联网)连接到那个plc。
答案 0 :(得分:1)
是的,您可以使用带有以太网端口的Linux机器。
不是一个简单的“ nc”。
首先,您需要知道,您的PLC是否支持Modbus TCP或基于TCP的Modbus RTU。
bcos的两种格式不相同,并且不能互换。
一旦确定这一点,就需要编写一个TCP客户端以连接到从站运行服务器时。
如果它们还不支持Modbus TCP,则还需要编写一个TCP服务器。
最重要的是,您有握手延迟和半开放连接,而没有。
如果是商用设备,则需要查看它也将运行的设置。
希望这会有所帮助
答案 1 :(得分:0)
虽然肯定可以构建Modbus TCP / RTU网关,但由于以下两个原因,您将无法使用简单的nc
命令来做到这一点:
仅包含Modbus功能代码和数据的实际Modbus协议数据单元(PDU)嵌入在应用程序数据单元(ADU)中,因此请求可以到达没有通信错误的正确设备。 此ADU不同于RTU和TCP。通常,ADU如下所示:
------------------------------------------
| Additional address | PDU | Error check |
------------------------------------------
对于RTU,“附加地址”是一个字节,用于标识串行线路上的单元/从站,而“错误校验”是一个16位CRC。
对于TCP,“附加地址”是7字节的Modbus应用协议标头(MBAP),由事务标识符,协议标识符和长度字段(每个2字节)以及一个标识单位/的字节组成。从站(通常为255,尽管对于网关,这将是其后面的RTU从站的ID)。 TCP已解决了“错误检查”为空(零字节)的问题。
RTU和TCP的通信语义不同。
对于RTU,您将请求写入串行线路,等待答复,然后才写入下一个请求。帧之间必须有3½个沉默字符。
对于TCP,原则上可以同时服务多个连接。如果您尝试将两个TCP请求同时转发到串行线路,则会出现混乱。
不过,您可以使用比nc
稍微复杂的程序来构建工作网关:
这当然可以在Raspberry Pi上运行,也可能在Arduino上运行,具体取决于您希望队列的大小。
来源:
答案 2 :(得分:0)