我们需要向远程modbus服务发送消息,并在设备上获取设备信息,就像shodan(https://www.shodan.io)从运行modbus服务的IP地址搜索一样。我们已阅读modbus规范并尝试构建消息,但我们通过TCP将其发送到服务器,它从不响应。 例如,以下消息应该可以解决问题,但对我们不起作用:
002B0E0104
00: address, not used.
2B: function code for get information
0E: additional function code for get device information
01: read device ID code
04: object ID.
我们应该如何构建正确的消息并将设备信息作为响应?
答案 0 :(得分:1)
不要求Modbus设备实际支持功能代码0x2B。
根据我的经验,这种情况非常罕见。
答案 1 :(得分:0)
例如,格式良好的消息(以十六进制表示)可以是:
000000000005002B0E0106
至少,服务器给了我一个可读的响应。该消息必须从十六进制转换为二进制,然后插入TCP数据包的数据部分,该数据包将被发送到服务器到502端口,并通过IP包发送到服务器。 Linux nc命令允许您在TCP数据包内发送消息,因此您不必处理OSI层。 我的问题是我发送到服务器的消息不符合modbus / TCP协议规则。