假设我有一个Modbus RTU温度控制器连接到一个设备,该设备从网络读取TCP数据包,并通过RS485将所述数据包的有效载荷发送到温度控制器。如果我想通过在Linux命令行上使用netcat在TCP/IP上发送Modbus RTU [Read Input Registers]请求来测试这样的设置,假设可以的话,完整的命令是什么?
nc 192.168.0.5 2000 # ...what now?
假设以下细节适用:
- 设备地址:1
- 功能代码:3(读取输入寄存器)
- 存储器地址:1000H
- 登记册数目:1
- 服务器IP地址:192.168.0.5
- 客户端IP地址:192.168.0.4
- 服务器上的端口:2000
我觉得我也可以用netcat来监听响应。我能不能用:
nc -l 3456
是这样吗?要像这样发送请求并记录响应,我想我必须指定发送请求的端口为3456(或其他)。有办法做到吗?
特别是,我对如何将Modbus消息(如[01][03][1000 H][01][CRC])转换为字节等效值感到困惑。
非常感谢。
2条答案
按热度按时间9ceoxa921#
您可以使用以下命令发送原始字节:
特别是,我对如何将Modbus消息(如[01][03][1000 H][CNC])转换为其字节等效值感到困惑。
这将是:
我不打算为你计算,因为我认为除了好玩之外,做这样的事情没有任何意义。
你必须把Modbus框架的所有部分放在一起,只是谷歌它。最困难的部分是在帧结束时计算CRC。我想这就是CNC的意思吧?
如果你有困难,我建议你试试QModMaster。使用菜单 * 查看 * 编辑 * 原始数据 * 查看原始数据并使用这些字节。
请注意,除了构建帧之外,QModMaster还可以发送帧,甚至可以侦听和接收响应。这应该是您的Modbus一站式商店。你还可以找到许多其他的工具,如pymodbus,libmodbus,minimalmodbus,甚至是Windows和Linux的命令行工具。
如果你编辑你的问题,提出一个合理的理由,为什么你需要使用
nc
(显然不是为了好玩),也许我可以尝试提供更多的帮助。我找不到任何关于使用netcat发送和/或接收Modbus帧的参考资料。我不知道这是因为我没有找到足够长的时间,还是因为它是毫无意义的。也许两者都有
swvgeqrz2#
如果它对任何人都有用,这个问题的答案是:
-e允许转换转义字符
-n防止追加换行符
使用Netcat侦听传入消息不起作用,显然是因为单个Netcat进程希望自己建立TCP连接,否则它对到达指定端口的任何消息都不感兴趣。尽管如此,我还是能够看到使用Wireshark从设备返回的回复,并且还写入了寄存器并成功控制了设备。