You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:57:02