首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解pyModbusTCP超时的原因

了解pyModbusTCP超时的原因
EN

Stack Overflow用户
提问于 2022-07-13 00:25:45
回答 1查看 160关注 0票数 0

我有一个通过以太网电缆连接到网络的设备。它的手册说它接受modbusTCP通信协议,实际上,配置端口中的nmap显示一个modbus服务是打开的(nmap输出在末尾)。我不是modbus专家,但我找到了pyModbusTCP python模块来尝试建立第一个连接。根据教程和文档,我尝试使用的代码保存为modbus_client.py,如下所示:

代码语言:javascript
复制
#!/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),并且我有设备的寄存器映射。

根据寄存器映射(下面的图像),我尝试用

代码语言:javascript
复制
./modbus_client.py 4096 32

代码语言:javascript
复制
./modbus_client.py 4096 16

但作为输出,我得到的只是:

代码语言:javascript
复制
Tx
[59 50 00 00 00 06 01] 03 0F FF 00 20
timeout error

我还注意到,每次执行代码时,括号内的数字都会发生变化,而括号外的数字则保持不变。将端口更改为任何其他都会导致连接被拒绝,所以我认为我正在连接到正确的端口,但是我不知道在那之后我做错了什么。

对如何调试这个有什么想法吗?是否有一种更简单的方法来检查与设备的modbusTCP通信?提前谢谢。

OBS1:我试图访问的寄存器的图像。手册上说一个单词是16位。

OBS2: nmap在两个不同端口中的输出:

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-21 22:19:54

原来是网络面具的问题。该设备的网络掩码配置为24,但我试图从超出该范围的it访问它。

在我的例子中,我试图从一台I.P.为10.0.X.Y的计算机上访问I.P.10.20.41.90。

我将网络掩码配置为8,这一切都成功了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72959652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档