我已经成功使用节点红色在树莓派上模拟了一个从属设备,使用功能将数据随机值发送到Modbus flex服务器。但是,现在我希望能够在端口号上模拟多个Modbus从站设备,并且我不确定如何执行此操作。
我尝试创建另一个具有相同端口号的Modbus flex服务器,但这会导致整个节点红色应用程序在部署时崩溃。其次,我尝试使用不同的Modbus flex-write节点来模拟不同的从属设备,但是我不确定这是否正确,如果可以,我如何配置它们以显示为不同的从属设备。这是因为到目前为止,我的树莓派显示为从属1,但我不确定它来自何处。我猜想这与Modbus flex服务器的unit-id有关,但是当我将unit-id更改为另一个数字并将该数字作为主站中的地址键入时,它说没有连接。
总而言之,是否可以使用单个树莓派使用node-red-contrib-modbus在node-red上模拟多个从设备,如果是的话,该怎么做?
答案 0 :(得分:0)
Modbus TCP中的从站概念与Modbus TCP Spec中所述的RTP有所不同:
通常在MODBUS串行线路上使用的MODBUS“从站地址”字段为 替换为MBAP标头中的单字节“单元标识符”。 “单元标识符”用于通过诸如 使用单个IP地址支持的网桥,路由器和网关 多个独立的MODBUS终端单元。
因此,Modbus RTP和TCP之间的术语有所不同,并且该字段的预期用途也有所不同。规范建议的解决方案是在不同的端口上设置多个服务器(不能在单个端口上运行多个服务器)。
已经说过,某些TCP-> RTP网关(和其他设备)使用unitid作为从属ID,所以我假设您正在尝试模拟类似的东西?
第一个问题是Modbus Flex Server
(reported)中似乎存在一个错误,因为当您更改unit-id时,它被存储为字符串而不是数字。如果导出流,您将看到类似"unitId": "3",
的内容;将其更改为"unitId": 3,
(三个引号周围没有引号)并导入即可解决此问题(因此很可能解释了为什么您无法使它正常工作)。
已经说过像这样更改unit-id
对您没有帮助,因为它仅支持一个ID。但是,如果将unit-id
设置为255,它将监听所有单元ID(这是内部使用的modbus-serial模块的功能)。请记住,由于该错误,您当前需要手动修复配置才能使其正常工作。
完成后,您可以执行以下操作来响应对不同单元ID的请求(该示例将为所有地址返回单元ID(1或2),因此没有用,但显示了概念):