我试过了modbus-tk同时,我也得到了同样的错误响应,所以在我的Python代码中,一定是某种东西导致了这个问题。从遗留系统(vb.net)中检索到的读数与我在JACE上看到的输出相同。
这是从Modbus检索数据的简单功能。我们在40160和40162第一个是阅读366哪个是正确的,第二个是读数367(这就是我遇到的问题)。我也看到了其他寄存器的相同问题,在这些寄存器中,即使在JACE上看到值增加了,读取也不会更新。
# -*- coding: utf-8 -*-
from __future__ import division, print_function, unicode_literals
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
def get_modbus_register_data(ip_address, register, device, count=2):
"""
Retrieve modbus data.
"""
client = ModbusTcpClient(ip_address, timeout=10)
client.connect()
# Read registers
response = client.read_holding_registers(
address=register, # 40162
count=count, # 2
unit=device) # 4
decoder = BinaryPayloa