使用节点红色模拟多个Modbus从站设备

问题描述 投票:0回答:1

我设法使用node-red在树莓派上模拟单个从属设备,使用功能将数据随机值发送到Modbus flex服务器。但是,现在我希望能够在端口号上模拟多个Modbus从站设备,但我不确定如何执行此操作。

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

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

raspberry-pi node-red modbus
1个回答
0
投票

[Modbus TCP Spec中列出的Modbus TCP中的从站概念与RTP有所不同:

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

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

已经说过某些TCP-> RTP网关(和其他设备)使用unitid作为从属ID,所以我假设您正在尝试模拟类似的东西?

[第一个问题是Modbus Flex Serverreported)中似乎存在一个错误,因为当您更改unit-id时,它以字符串而不是数字的形式存储。如果导出流,您将看到类似"unitId": "3",的信息。将其更改为"unitId": 3,(3周围没有引号)并导入即可解决此问题(因此可以解释为什么您无法执行此操作)。

已经说过像这样更改unit-id对您没有帮助,因为它仅支持一个ID。但是,如果将unit-id设置为255,它将监听所有单元ID(这是内部使用的modbus-serial模块的功能)。请记住,由于该错误,您当前需要手动修复配置才能使其正常工作。

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.