我有一个通过以太网电缆连接到网络的设备。它的手册说它接受modbusTCP通信协议,实际上,配置端口中的nmap显示一个modbus服务是打开的(nmap输出在末尾)。我不是modbus专家,但我找到了pyModbusTCP python模块来尝试建立第一个连接。根据教程和文档,我尝试使用的代码保存为modbus_client.py,如下所示:
#!/usr/bin/python3
import sys
from pyModbusTCP.client import ModbusClient
client = ModbusClient(host="device_IP", port = 502, auto_open=True,debug=True)
client.open()
client.read_holding_registers(int(sys.argv[1]),int(sys.argv[2]))我主要关注于read_holding_registers功能,主要是因为设备手册中说实现的modbus功能是读保持寄存器(0x03)、写入多个寄存器(0x10)和写入单个寄存器(0x06),并且我有设备的寄存器映射。
根据寄存器映射(下面的图像),我尝试用
./modbus_client.py 4096 32和
./modbus_client.py 4096 16但作为输出,我得到的只是:
Tx
[59 50 00 00 00 06 01] 03 0F FF 00 20
timeout error我还注意到,每次执行代码时,括号内的数字都会发生变化,而括号外的数字则保持不变。将端口更改为任何其他都会导致连接被拒绝,所以我认为我正在连接到正确的端口,但是我不知道在那之后我做错了什么。
对如何调试这个有什么想法吗?是否有一种更简单的方法来检查与设备的modbusTCP通信?提前谢谢。
OBS1:我试图访问的寄存器的图像。手册上说一个单词是16位。

OBS2: nmap在两个不同端口中的输出:
$ nmap -p 502 device_IP
Starting Nmap 7.80 ( https://nmap.org ) at 2022-07-12 21:21 -03
Nmap scan report for device_IP
Host is up (0.028s latency).
PORT STATE SERVICE
502/tcp open mbap
Nmap done: 1 IP address (1 host up) scanned in 0.63 seconds和
$ nmap -p 503 device_IP
Starting Nmap 7.80 ( https://nmap.org ) at 2022-07-12 21:22 -03
Nmap scan report for device_IP
Host is up (0.027s latency).
PORT STATE SERVICE
503/tcp closed intrinsa
Nmap done: 1 IP address (1 host up) scanned in 0.64 seconds发布于 2022-07-21 22:19:54
原来是网络面具的问题。该设备的网络掩码配置为24,但我试图从超出该范围的it访问它。
在我的例子中,我试图从一台I.P.为10.0.X.Y的计算机上访问I.P.10.20.41.90。
我将网络掩码配置为8,这一切都成功了。
https://stackoverflow.com/questions/72959652
复制相似问题