1

我正在使用minimummodbus使用USB-RS485 适配器电缆通过 RS485与PID 控制器(Love 16C-3)进行通信。

但是,当尝试读取寄存器时,会显示以下错误。这个错误是什么意思?

raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
ValueError: The slave is indicating an error. The response is: '\x01\x83\x02\xc0\xf1'

来自硬件手册

在此处输入图像描述

Python代码

instrument = minimalmodbus.Instrument(port, 1, 'rtu')
instrument.serial.baudrate = 9600
instrument.serial.bytesize=8
instrument.serial.parity='E'
instrument.serial.stopbits=1
instrument.read_register(4096,1)

在此处输入图像描述

4

1 回答 1

1

如果您参考 modbus 规范,您会发现通过在函数字节中设置 MSB 会导致函数异常......有效地将 0x80 添加到回复中的函数号。

在您的示例中,您尝试读取保持寄存器。您的请求使用的函数编号为 0x03。您收到的异常是 MSB 设置为高的函数 0x03,导致回复函数为 0x83。异常代码是函数号后面的数字,在您的情况下是 0x02。

在 Modbus Spec 中,当不支持寄存器地址时使用异常代码 2。

顺便说一句,modbus 是一个非常简单的协议,原始规范本身非常小且易于获得。如果您打算在任何深度使用 modbus,我强烈建议您至少手头有它:Modbus Application Protocol v1.1

于 2018-03-01T14:20:07.163 回答