首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有read_input_register函数的Pymodbus误差

带有read_input_register函数的Pymodbus误差
EN

Stack Overflow用户
提问于 2022-04-22 13:37:44
回答 1查看 281关注 0票数 0

我正在用pymodbus测试我的电子板。通过使用RTU版本,我没有任何问题,但是当我测试TCP部分时,pymodbus失败了,我不明白为什么!python的版本为3.9,pymodbus为2.5.3。

我的代码是:

代码语言:javascript
复制
from pymodbus.client.sync import ModbusTcpClient as ModbusClient

SERVER_HOST = '192.168.1.123'
SERVER_PORT = 502

if __name__ == '__main__':

    c = ModbusClient(SERVER_HOST, port=SERVER_PORT, timeout=4)
    c.connect()

    if not c.is_socket_open():
         if not c.connect():
            print("unable to connect!")

    ver = c.read_input_registers(
                    address=0x05, 
                    count=1, 
                    unit=1)

    assert(not ver.isError())

错误是:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/warcomeb/Projects/AMMICROSYSTEMS/LOCCIONI_BatterySimulator_CFirmware/test/test_modbustcp_basic.py", line 138, in <module>
    ver = c.read_input_registers(
  File "/usr/local/lib/python3.9/site-packages/pymodbus/client/common.py", line 125, in read_input_registers
    return self.execute(request)
  File "/usr/local/lib/python3.9/site-packages/pymodbus/client/sync.py", line 109, in execute
    return self.transaction.execute(request)
  File "/usr/local/lib/python3.9/site-packages/pymodbus/transaction.py", line 174, in execute
    response, last_exception = self._transact(
  File "/usr/local/lib/python3.9/site-packages/pymodbus/transaction.py", line 271, in _transact
    packet = self.client.framer.buildPacket(packet)
  File "/usr/local/lib/python3.9/site-packages/pymodbus/framer/socket_framer.py", line 206, in buildPacket
    data = message.encode()
  File "/usr/local/lib/python3.9/site-packages/pymodbus/register_read_message.py", line 33, in encode
    return struct.pack('>HH', self.address, self.count)
struct.error: required argument is not an integer
EN

回答 1

Stack Overflow用户

发布于 2022-07-17 18:11:58

在示例中,https://github.com/riptideio/pymodbus/blob/dev/examples/common/synchronous_client.py

arguments是不同的。

代码语言:javascript
复制
    arguments = {
        "read_address": 1,
        "read_count": 8,
        "write_address": 1,
        "write_registers": [20] * 8,
    }
    log.debug("Read write registers simultaneously")
    rq = client.readwrite_registers(unit=UNIT, **arguments)
    rr = client.read_holding_registers(1, 8, unit=UNIT)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71969680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档