如何 read/write 设备的寄存器通过 TCP 使用 pymodbus 连接到网关

How to read/write a device's register connected to a gateway with pymodbus via TCP

我必须使用 pymodbus 读写传感器。我没有直接连接到传感器,而是通过 TCP 连接到网关,网关通过串行连接到传感器。
我是这样和网关建立连接的:

client = ModbusClient("192.168.127.254", 502)
connection = client.connect()

与网关的连接有效,因为套接字已打开。但是我不能以这种方式从传感器读取:

if connection:
    request = client.read_holding_registers(0x00, 8, unit=1)
    data = validator(request)
    print(data)

    request = client.read_holding_registers(0x00, 8, unit=1)  
    data = validator(request)
    print(data)

    client.close()

如何连接指定传感器连接到网关(id:230,波特率:9600,奇偶校验:None,接口:RS-4852线)?

PS: 网关是 Moxa MGate MB3170

首先你应该了解你的 modbus 从站寄存器表(你的传感器) 并了解它的功能代码如果读取的功能代码是 0x3 你应该使用 Read Holding Registers 如果功能代码是 0x4 你应该使用 Read Input Registers 功能

之后你应该找到你需要的寄存器地址,ex:temp寄存器地址是0x05,字节数是2,你的传感器ID是230,需求功能代码是0x3

read_holding_registers(0x05 , 2, unit=230)  

首先,您需要确定网关与Modbus设备之间的连接。

之后,您可以通过modbus poll应用程序获取数据和测试数据寄存器。

只要建立连接,就可以开始编码了...