使用pymodbus读取寄存器

10 投票
2 回答
36796 浏览
提问于 2025-04-18 14:08

我刚接触Modbus和PyModBus,花了不少时间在学习和实验上。如果有人能给我指个方向,我会非常感激...


我有一个驱动器,它的距离、速度、加速度和减速度分别存储在40001、40003、40005和40007这些寄存器里。我最开始能成功写入距离寄存器,使用的是client.write_register(0000, n)。但是当我尝试写入速度时,驱动器就开始出现问题,故障了,而且转速比应该的快了10倍。不过,我最关心的还是读取寄存器的数据。我想从这些寄存器中读取数据,但完全没有成功。我尝试了

request = client.read_holding_registers(0000,4)
response = client.execute(request)
print response


但我得到的回应是“ReadRegisterResponse (0)”。

所以,我最想做的就是从这些寄存器中读取值...有什么建议吗?(顺便说一下,这是通过TCP进行的)

2 个回答

5

你可以自己解析这个响应,下面是我的代码示例:

    result = client.read_input_registers(0x01,1, unit=0x01)
    #print result
    t = result.registers[0]
    print "current temperature:", t, "  ", float(t/100.0)
12

试着这样做:

 response = client.read_holding_registers(0x00,4,unit=1)

这里的单位值是从设备的ID。

要打印所有内容:

print response.registers

也可以直接获取一个值(比如第三个寄存器):

print response.getRegister(2)

或者

print response.registers[2]  

撰写回答