1

是否可以使用 linux box 或 arduino 构建 modbus-RTU 以太网网关?

我有使用 modbus RTU 将 plc 从站连接在一起,我想通过 TCP 将其中一个连接到我的电脑作为主机。

我想知道我是否可以使用连接到路由器的 linux 机器(rasbery pi/raspbian)作为 modbus-to-tcp 转换器,方法是将 USB 端口通过管道连接到某个端口上的本地 ip,因为一个 plc 将连接到 modbus rtu到linux盒子的usb端口。管道命令将是这样的:

nc -l 5626 > /dev/ttyUSB0 < /dev/ttyUSB0

我的目标是使用 modbus 通过 linux 盒将 pc(与 linux 盒联网)连接到该 plc。

4

3 回答 3

1

是的,您可以使用带有以太网端口的 linux 机器。

它不是一个简单的“nc”。

首先,您需要知道,您的 PLC 是否支持 Modbus TCP 或 Modbus RTU over TCP。

bcos 两种格式不一样,不能互换。

一旦你确定了这一点,你就需要编写一个 TCP 客户端来在从属服务器运行服务器时连接它们。

如果他们还不支持 Modbus TCP,您还需要编写一个 TCP 服务器。

最重要的是,你有握手延迟和半开连接等等。

如果它是商业设备,您还需要查看它将运行的设置。

希望这可以帮助

于 2018-12-13T15:03:57.340 回答
1

我不完全确定您的要求是什么,但您可能想看看以下库。这是一个 Modbus TCP->RTU 库,我假设您可以使用。

https://github.com/3cky/mbusd

此致

于 2019-01-31T15:45:48.683 回答
0

虽然当然可以构建 Modbus TCP/RTU 网关,但您无法使用简单的nc命令来完成,原因有两个:

  1. 实际的 Modbus 协议数据单元 (PDU),仅包含 Modbus 功能代码和数据,嵌入在应用程序数据单元 (ADU) 中,因此请求可以无通信错误地到达正确的设备。这个 ADU 对于 RTU 和 TCP 是不同的。通常,ADU 如下所示:

    ------------------------------------------
    | Additional address | PDU | Error check |
    ------------------------------------------
    

    对于 RTU,“附加地址”是识别串行线路上的单元/从机的单字节,“错误检查”是 16 位 CRC。

    对于 TCP,“附加地址”是 7 字节的 Modbus 应用协议头 (MBAP),由事务标识符、协议标识符和一个长度字段(每个 2 个字节)以及一个标识单元/从机的单字节组成(通常255,但对于网关,这将是它后面的 RTU 从站的 ID)。“错误检查”是空的(零字节),因为它已经由 TCP 处理。

  2. RTU 和 TCP 的通信语义不同。

    对于 RTU,您向串行线路写入请求,等待回复,然后才写入下一个请求。帧之间必须有 3½ 个字符的静音。

    对于 TCP,原则上您可以同时提供多个连接。如果您试图同时将两个 TCP 请求转发到串行线路,就会出现混乱。

不过,您可以使用比以下稍微复杂的程序构建一个工作网关nc

  • 在 TCP 端口 5626 上接受连接(注意实际推荐的 Modbus TCP 端口号是 502),将接收到的 TCP ADU 转换为 RTU ADU 并与反向通道一起放入队列中。
  • 程序的另一部分每次从该队列中取出一个项目,通过串行线路发送 ADU 并通过反向通道报告结果。然后它继续到下一个项目,依此类推。
  • 到达反向通道的结果被转换为 TCP ADU 并在各自的 TCP 连接上发回。

这肯定适用于 Raspberry Pi,也可能适用于 Arduino,具体取决于您希望队列的大小。


资料来源:

于 2018-08-26T10:30:31.360 回答