RS485 Modbus-RTU设备给出的错误是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RS485 Modbus-RTU设备给出的错误是什么?相关的知识,希望对你有一定的参考价值。

我正在使用minimalmodbus通过RS485使用PID controller (Love 16C-3)USB-RS485 adapter cable进行通信。

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

raise ValueError('The slave is indicating an error. The response is: {!r}'.format(response))
ValueError: The slave is indicating an error. The response is: 'x01x83x02xc0xf1'

从硬件手册

enter image description here

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)

enter image description here

答案

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

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

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

BTW,modbus是一个非常简单的协议,原始规格本身很小,很容易获得。如果您计划在任何深度使用modbus,我强烈建议至少手头有这个:Modbus Application Protocol v1.1

以上是关于RS485 Modbus-RTU设备给出的错误是什么?的主要内容,如果未能解决你的问题,请参考以下文章

STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发

标准modbus-rtu通信协议是485通信吗?

普通PC通过USB转485串口 ModBus-RTU通信协议控制伺服电机

使用PHP控制MODBUS-RTU设备

如何在电脑上通过RS485接口读取PMC-630A三相数字式多功能测控电表。最好能写上详细过程。功能码为0x03.

嵌入式 Linux 设备在启动期间阻塞 RS485 总线