python pymodbus读取保持寄存器

问题描述 投票:2回答:2

我是Modbus python的新手,现在我对我的第一步有一些疑问

脚本:

from pymodbus.client.sync import ModbusTcpClient

host = '10.8.3.10'
port = 502   

client = ModbusTcpClient(host, port)
client.connect()

#Register address 0x102A (4138dec) with a word count of 1
#Value - MODBUS/TCP Connections
#Access - Read
#Description - Number of TCP connections

request = client.read_holding_registers(0x3E8,10,unit=0) 
response = client.execute(request)

print response
#print response.registers
print response.getRegister(12)
print response.registers[8]
client.close()

结果:

============= RESTART: D:\Users\mxbruckn\Desktop\read_modbus.py =============
ReadRegisterResponse (38)
0
0
>>> 

现在的问题:

  1. 我从寄存器1000中读取了10个字,从站号为0。这是正确的,但是它表示值38

  2. 我如何从寄存器1007中读取2个单词?我的代码不起作用:(0x3EF,2,unit = 0)异常响应(131,3,IllegalValue)

Ciao,Doc

python-2.7 modbus
2个回答
3
投票
首先,我认为您的代码有误。使用pymodbus 1.2.0时,代码应如下所示:

from pymodbus.client.sync import ModbusTcpClient host = 'localhost' port = 502 client = ModbusTcpClient(host, port) client.connect() rr = client.read_holding_registers(0x3E8,10,unit=0) assert(rr.function_code < 0x80) # test that we are not an error print rr print rr.registers # read 2 registers starting with address 1007 rr = client.read_holding_registers(0x3EF,2,unit=0) assert(rr.function_code < 0x80) # test that we are not an error print rr print rr.registers

这是输出(请注意,我用17实例化了modbusserver上的数据存储:]

ReadRegisterResponse (10) [17, 17, 17, 17, 17, 17, 17, 17, 17, 17] ReadRegisterResponse (2) [17, 17]

现在有您的问题:

    该值显示您从服务器读取的寄存器数量。
  1. 请参见上面的代码。
  • 希望有所帮助,我们

  • 0
    投票
    我正在尝试使用pymodbus从会议厅读取信息。

    手册说:

    FastTRAC控制器修订版16.04

    数据寄存器403201至403285为只读-通过端口502未分配的16位Modbus TCP

    例如:403213设定点1 ***(零件或空气离开工作区)是Modbus地址下列表中的一个。

    如果我使用read_holding_registers(0x6270D,2)它引发错误,因为它必须是整数类型,因此如何传递十六进制值?

    如果我通过十进制值403213,则错误超出范围。

    © www.soinside.com 2019 - 2024. All rights reserved.