【发布时间】:2018-09-06 08:20:58
【问题描述】:
data blocks I cant seem to be able to read
我对 python 和 modbus 还很陌生,我一直在努力研究如何使用 pymodbus 和 minimummodbus 读取这个控制器的 MSBytes 和 LSBytes 一两个星期,所以希望有头脑的人相信这里或许能把我引向正确的方向。
这个特定的控制器有 3 个数字/线圈寄存器(2 个寄存器地址是只读的,8 MSBytes 和 8 LSBytes 和一个寄存器 1536,如上图所示,它读取和写入 8 MSbytes 和 8 LSBytes)但是我很困惑,因为我似乎无法弄清楚如何正确阅读它们。
我似乎只在尝试使用 read_coil/bits only 函数读取它们时出现错误,但 read_register 和 read_registers 函数返回单个布尔结果 0 或 1,寄存器计数为 1。
使用最小的modbus
instrument.read_register(1536)
返回:0
instrument.read_registers(1536, 1)
返回:[0]
instrument.read_bit(1536)
返回:错误
2018 年 12 月 9 日更新:
控制关闭/待机时读取寄存器。
In: client.read_register(1536, 0, 3, False)
Out: 1
控制打开时读取寄存器。
In: client.read_register(1536, 0, 3, False)
Out: 0
控制器在除霜时读取寄存器。
In: client.read_register(1536, 0, 3, False)
Out: 4
尝试写入寄存器的响应:
控制文档说使用功能代码 6 将更改写入寄存器,但它似乎采用新值而没有错误,但不会更新或更改控制器寄存器。
如果我使用功能码 6
In: client.write_register(1536, 1, 0, 6, False)
(no error or output, and register value doesn't change)
如果我按照建议使用功能代码 16,则会留下以下错误。
In: client.write_register(1536, 1, 0, 16, False)
ValueError Traceback (most recent call last)
<ipython-input-22-66ccb391e76c> in <module>()
----> 1 client.write_register(1536, 1, 0, 16, False)
/usr/local/lib/python3.5/dist-packages/minimalmodbus.py in write_register(self, registeraddress, value, numberOfDecimals, functioncode, signed)
294 _checkNumerical(value, description='input value')
295
--> 296 self._genericCommand(functioncode, registeraddress, value, numberOfDecimals, signed=signed)
297
298
/usr/local/lib/python3.5/dist-packages/minimalmodbus.py in _genericCommand(self, functioncode, registeraddress, value, numberOfDecimals, numberOfRegisters, signed, payloadformat)
695
696 ## Communicate ##
--> 697 payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
698
699 ## Check the contents in the response payload ##
/usr/local/lib/python3.5/dist-packages/minimalmodbus.py in _performCommand(self, functioncode, payloadToSlave)
796
797 # Extract payload
--> 798 payloadFromSlave = _extractPayload(response, self.address, self.mode, functioncode)
799 return payloadFromSlave
800
/usr/local/lib/python3.5/dist-packages/minimalmodbus.py in _extractPayload(response, slaveaddress, mode, functioncode)
1086
1087 if receivedFunctioncode == _setBitOn(functioncode, BITNUMBER_FUNCTIONCODE_ERRORINDICATION):
-> 1088 raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
1089
1090 elif receivedFunctioncode != functioncode:
ValueError: The slave is indicating an error. The response is: '\x02\x90\x01}À'`
【问题讨论】:
-
如果您无法帮助我理解并理解,但真的要投反对票吗?
标签: python minimalmodbus