我正在用pymodbus测试我的电子板。通过使用RTU版本,我没有任何问题,但是当我测试TCP部分时,pymodbus失败了,我不明白为什么!python的版本为3.9,pymodbus为2.5.3。
我的代码是:
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())错误是:
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发布于 2022-07-17 18:11:58
在示例中,https://github.com/riptideio/pymodbus/blob/dev/examples/common/synchronous_client.py
arguments是不同的。
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)https://stackoverflow.com/questions/71969680
复制相似问题