PYModbus 无法复制 Modpoll 寄存器读取

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

我尝试了许多与此平台上存在的 pymodpoll 相关的修复。我能够成功写入寄存器,但无法从中读取,我已确认我尝试读取的寄存器实际上是一个 RW 寄存器。 产品的数据表

正确读取寄存器的 mod poll 命令是这个

modpoll -m rtu -0 -1 -a 1 -b 9600 -p none -r 48 /dev/ttyUSB0

    from pymodbus.client import ModbusSerialClient as modbus
    #Connection to the modbus
    def connect(self) -> None:
        self.modbus = modbus(method='rtu', 
                            port="/dev/ttyUSB0", 
                            baudrate=9600,
                            stopbits=1,
                            bytesize=8,
                            timeout=1)
        self.modbus.connect()

    #function that works properly for setting the register value
    def set_voltage(self, voltage:float =0) -> None:
        if (voltage < self.min_volt) or (voltage > self.max_volt):
            raise modbusError(
                "Invalid voltage provided to the interface, voltage provided: {0}"
                .format(voltage))
        self.modbus.write_register(0x0030, int(voltage*100), unit=1)

    #Read register function
    def get_voltage_target(self) -> float:
        reg =  self.modbus.read_holding_registers(0x0030, 1, unit=1)
        print(reg.registers)

输出:

AttributeError: 'ModbusIOException' object has no attribute 'registers'

我从 reg.registers 打印中收到此错误,我假设这只是因为我没有正确连接到 modbus 以读取正确的寄存器。

这是我目前正在使用的代码,感谢您的帮助!


简化版编辑:

from pymodbus.client import ModbusSerialClient as modbus
modbus = modbus(method='rtu', port="/dev/ttyUSB0", baudrate=9600,stopbits=1,bytesize=8,timeout=1)
modbus.connect()
modbus.write_register(0x0030, int(10.2*100), unit=1) #correctly writes intended value
registers = modbus.read_holding_registers(0x0030, 1, unit=1)
print(registers.getRegister(0))


输出:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    print(registers.getRegister(0))
AttributeError: 'ModbusIOException' object has no attribute 'getRegister'
python python-3.x modbus pymodbus
© www.soinside.com 2019 - 2024. All rights reserved.