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

Python读取Modbus寄存器遇GatewayNoResponse错误求助

Modbus TCP读取报错:Exception Response(131, 3, GatewayNoResponse) 求解

我正在开发Python脚本读取电气柜中带Modbus功能的中央测量单元数据,运行时遇到错误:

Error reading registers: Exception Response(131, 3, GatewayNoResponse)

脚本目的是读取Modbus TCP设备的保持寄存器并打印32位无符号整数值,但目前无法获取数据。以下是使用的代码片段:

from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.client.sync import ModbusTcpClient

def read_modbus_registers(host, port, unit_id, starting_address, register_count):
    # Create a Modbus TCP client
    client = ModbusTcpClient(host, port)

    try:
        # Connect to the Modbus TCP server
        client.connect()

        # Read holding registers
        result = client.read_holding_registers(starting_address, register_count, unit=unit_id)

        if result.isError():
            print("Error reading registers:", result)
        else:
            decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder=Endian.Big)
            uint32_values = [decoder.decode_32bit_uint() for _ in range(register_count // 2)]
            print("32-bit uint values read from Modbus registers:", uint32_values)

    except Exception as e:
        print("Error:", e)

    finally:
        # Close the Modbus TCP connection
        client.close()

# Modbus settings
modbus_host = '192.168.50.6'
modbus_port = 502
modbus_unit_id = 0x01
modbus_starting_address = 0
modbus_register_count = 161

# Call the function to read Modbus registers
read_modbus_registers(modbus_host, modbus_port, modbus_unit_id, modbus_starting_address, modbus_register_count)

我已尝试的操作:

  • 运行脚本连接目标Modbus TCP服务器
  • 尝试读取起始地址0的161个保持寄存器

预期结果是成功读取并打印32位无符号整数值,但实际出现上述错误,未获取到数据。希望有人帮忙分析错误原因并给出解决指导,让我能成功获取并显示寄存器值。

内容的提问来源于stack exchange,提问作者moiscs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:52:14