树莓派使用pymodbus通过Modbus TCP连接报ConnectionException错误求助
问题根因与修复方案
核心配置错误
你当前代码中ModbusTcpClient('192.168.137.238')传入的是树莓派自身eth0网卡的IP,而Modbus TCP客户端需要传入的是你要读取的目标Modbus设备的IP地址,不是运行客户端程序的树莓派自身的IP,这是连接失败的核心原因。
逐步排查修复步骤
- 先确认你的Modbus TCP设备已经接入和树莓派同一网段的网络,配置好静态IP,比如设备如果接在树莓派eth0所在的192.168.137.x网段,先获取设备的实际IP
- 在树莓派终端执行
ping 【设备IP】确认网络连通,无丢包 - 执行
telnet 【设备IP】 502确认Modbus TCP默认的502端口开放可访问,如果telnet失败,检查设备的端口配置、防火墙规则,确认设备端Modbus TCP功能已开启 - 修复代码参数,可显式指定端口、超时时间、从站ID避免默认配置问题,参考代码如下:
from pymodbus.client.sync import ModbusTcpClient # 替换为你的Modbus设备实际IP,显式指定默认端口502和超时时间 client = ModbusTcpClient('替换为设备实际IP', port=502, timeout=3) connection = client.connect() # 先判断连接结果再执行后续操作 if not connection: print("连接Modbus设备失败,请检查网络和设备配置") exit() # 读取寄存器时根据设备实际配置修改unit参数(从站ID) request = client.read_input_registers(1008, 3, unit=1) if request.isError(): print(f"读取寄存器失败:{request}") else: result = request.registers print(result) # 操作完成后关闭连接 client.close()
其他排查点
- 如果你的Modbus设备使用非502的自定义端口,必须在代码中显式指定port参数为对应端口
- 部分Modbus设备有访问白名单限制,需要将树莓派的IP加入设备的访问白名单才能正常连接
- 检查树莓派本地防火墙规则,确认没有限制对外502端口的出站访问
内容的提问来源于stack exchange,提问作者Banks
相关产品推荐
相关产品推荐

