首页 > 解决方案 > 使用节点 red 模拟多个 modbus 从设备

问题描述

我已经设法在我的树莓派上使用节点红色模拟单个从设备,使用函数将数据随机值发送到 Modbus flex 服务器。但是,现在我希望能够在端口号上模拟多个 Modbus 从设备,但我不确定如何执行此操作。

我尝试创建另一个具有相同端口号的 Modbus flex 服务器,但这会导致整个 node-red 应用程序在部署时崩溃。其次,我尝试使用不同的 Modbus flex-write 节点来模拟不同的从设备,但我不确定这是否正确,如果是,我将如何将它们配置为不同的从设备。这是因为到目前为止,我的树莓派显示为奴隶 1,但我不确定这是从哪里来的。我猜这与 Modbus flex-server 的 unit-id 有关,但是当我将 unit-id 更改为不同的数字并将该数字输入为主地址时,它表示没有连接。

总之,是否可以使用单个树莓派来使用 node-red-contrib-modbus 在 node-red 上模拟多个从设备,如果可以,你怎么做?

标签: raspberry-pinode-redmodbus

解决方案


Modbus TCP 中从站的概念与Modbus TCP 规范中规定的 RTP 有所不同:

通常在 MODBUS 串行线路上使用的 MODBUS“从地址”字段被 MBAP 报头中的单字节“单元标识符”替换。“单元标识符”用于通过使用单个 IP 地址支持多个独立 MODBUS 终端单元的网桥、路由器和网关等设备进行通信。

因此,Modbus RTP 和 TCP 在术语上存在差异,并且该字段的预期用途也存在差异。该规范建议的解决方案是在不同的端口上设置多个服务器(您不能在单个端口上运行多个服务器)。

话虽如此,一些 TCP->RTP 网关(和其他设备)使用 unitid 作为从 ID,所以我假设您正在尝试模拟这样的事情?

Modbus Flex Server第一个问题是( reported ) 中似乎存在一个错误,即当您更改 unit-id 时,它被存储为字符串而不是数字。如果您导出流程,您将看到类似的内容"unitId": "3",;将其更改为"unitId": 3,(3 周围没有引号)并导入修复了问题(因此这可能解释了为什么您无法使其正常工作)。

话虽如此,更改unit-id类似这样对您没有帮助,因为它只支持一个 ID。但是,如果您将其设置unit-id为 255,那么它将侦听所有单元 ID(这是内部使用的modbus-serial模块的一个功能)。请记住,由于该错误,您当前需要手动修复配置以使其正常工作。

完成此操作后,您可以执行以下操作来响应对不同单元 ID 的请求(该示例将返回所有地址的单元 ID(1 或 2),因此没有用,但显示了概念):

在此处输入图像描述


推荐阅读