Modbus通信协议常见错误码及处理措施

Modbus协议定义了一系列的错误码(也称异常码),用来指示在执行Modbus请求时可能发生的错误情况。这些错误码可以帮助诊断通信问题,并且在接收到异常响应时进行适当的错误处理。

错误码

处理措施

1.验证功能码

2.检查地址码

3.检查数据

4.检查通讯接口

5.检查通讯参数

6.检查报文内容

7.使用调试工具

8.重试机制

9.错误日志记录


错误码

错误码

描述

0x01

非法功能 (Illegal Function)

0x02

非法数据地址 (Illegal Data Address)

0x03

非法数据值 (Illegal Data Value)

0x04

设备故障 (Slave Device Failure)

0x05

设备忙 (Acknowledge)

0x06

负号应答 (Negative Acknowledge)

0x07

内存区保留 (Memory Parity Error)

0x08

Gateway路径不存在 (Gateway Path Not Available)

0x0A

Gateway目标失败 (Target Device Failed to Respond)

0x01 (1) - 非法功能,请求的功能未被从设备识别或不支持。

0x02 (2) - 非法数据地址,数据地址不在设备的可访问范围内。

0x03 (3) - 非法数据值,请求的操作尝试设置一个无效或非法的值。

0x04 (4) - 从设备故障,未知的设备故障。

0x05 (5) - 从设备繁忙,设备正在执行另一个任务,无法立即响应请求。

0x06 (6) - 负号应答,请求的操作不能被执行,因为它是非法的(例如试图清除一个只读存储区)。

0x08 (8) - 内存溢出,执行请求时内存溢出。

0x0A (10) - 通讯超时,请求超出了允许的时间限制。

0x0B (11) - 从设备内部操作失败,设备内部发生了一个错误。

0x0C (12) - 从设备不支持此功能,设备不支持请求的功能。

0x0D (13) - 从设备不支持此数据类型,设备不支持请求的数据类型。

0x0E (14) - 从设备不支持此数据地址,设备不支持请求的数据地址。

0x0F (15) - 从设备不支持此数据长度,设备不支持请求的数据长度。


处理措施

1.验证功能码

检查发送的功能码是否正确,是否与设备上安装的Modbus协议版本匹配。如果不匹配,可以尝试升级或降级Modbus协议版本,以使功能码与设备上安装的Modbus协议版本匹配。

序号

功能码

描述

请求数据

预期响应

实际响应

测试结果

1

0x01

读取线圈状态

地址: 0x0000, 数量: 10

状态: [0x01, 0x00, ...]

-

成功/失败

2

0x02

读取离散输入

地址: 0x0000, 数量: 10

状态: [0x01, 0x00, ...]

-

成功/失败

3

0x03

读取保持寄存器

地址: 0x0000, 数量: 10

数据: [0x1234, 0x5678, ...]

-

成功/失败

4

0x04

读取输入寄存器

地址: 0x0000, 数量: 10

数据: [0x1234, 0x5678, ...]

-

成功/失败

5

0x05

写单个线圈

地址: 0x0000, 状态: 0x01

-

-

成功/失败

6

0x06

写单个保持寄存器

地址: 0x0000, 数据: 0x1234

-

-

成功/失败

7

0x0F

写多个线圈

地址: 0x0000, 数据: [0x01, 0x01, ...]

-

-

成功/失败

8

0x10

写多个保持寄存器

地址: 0x0000, 数据: [0x1234, 0x5678, ...]

-

-

成功/失败

2.检查地址码

检查发送的地址码是否正确,是否与设备上安装的地址码匹配。如果不匹配,可以尝试重新设置地址码,以使地址码与设备上安装的地址码匹配。

序号

功能码

地址范围

预期值

实际值

结果

1

0x01

00001-00010

状态1, 状态2, ...

状态1, 状态2, ...

符合/不符合

2

0x02

00011-00020

状态3, 状态4, ...

状态3, 状态4, ...

符合/不符合

3

0x03

00031-00040

数据1, 数据2, ...

数据1, 数据2, ...

符合/不符合

4

0x04

00041-00050

数据3, 数据4, ...

数据3, 数据4, ...

符合/不符合

5

0x05

00061-00070

写入状态1, 写入状态2, ...

状态1, 状态2, ...

符合/不符合

6

0x06

00071-00080

写入数据1, 写入数据2, ...

数据1, 数据2, ...

符合/不符合

7

0x0F

00091-00100

写入状态3, 写入状态4, ...

状态3, 状态4, ...

符合/不符合

8

0x10

00111-00120

写入数据3, 写入数据4, ...

数据3, 数据4, ...

符合/不符合

3.检查数据

检查发送的数据是否正确,是否与设备上安装的数据匹配。如果不匹配,可以尝试重新编辑数据,以使数据与设备上安装的数据匹配。

序号

功能码

设备地址

寄存器地址

预期值

实际值

测试结果

1

0x01

0x01

0x0000

ON/OFF

“”通过”、“失败”、“待定”

2

0x02

0x01

0x0001

ON/OFF

“”通过”、“失败”、“待定”

3

0x03

0x01

0x0002

100

“”通过”、“失败”、“待定”

4

0x04

0x01

0x0003

200

“”通过”、“失败”、“待定”

5

0x05

0x01

0x0004

ON

“”通过”、“失败”、“待定”

6

0x06

0x01

0x0005

300

“”通过”、“失败”、“待定”

7

0x0F

0x01

0x0006

[ON, OFF, ON]

“”通过”、“失败”、“待定”

8

0x10

0x01

0x0007

[400, 500, 600]

“”通过”、“失败”、“待定”

  • 序号:每一行代表一个测试项。
  • 功能码:使用的Modbus功能码。
  • 设备地址:Modbus设备的地址。
  • 寄存器地址:要访问的寄存器或线圈的地址。
  • 预期值:期望从设备获取的数据值或期望设置的数据值。
  • 实际值:通过Modbus读取的实际数据值。
  • 测试结果:根据实际值和预期值对比后的结果,可以标记为“通过”、“失败”或“待定”。

4.检查通讯接口

检查物理层连接,确保连接线缆没有损坏,连接端口正确无误,且电源正常。

5.检查通讯参数

确认波特率、数据位、停止位和校验方式等通讯参数与设备设置一致。

序号

参数名称

参数值

备注

1

设备地址

1

通常为1-247

2

波特率

9600

如9600, 19200等

3

数据位

8

通常为8位

4

停止位

1

通常为1位或2位

5

校验方式

N

如无校验(N), 奇校验(O), 偶校验(E)

6

超时时间

1秒

如1秒

7

连接类型

RTU

RTU, ASCII, TCP

8

功能码

0x03

如0x01, 0x03等

9

寄存器地址

100

10

寄存器数量

10

如果读取多个寄存器

11

写入值

1234

如果写入操作

12

CRC校验值

0x1234

如果使用RTU/ASCII

13

MBAP头部

0x00000006

如果使用TCP

6.检查报文内容

确保报文中的功能码、数据地址和数据值正确,同时确保报文格式符合Modbus协议的要求。

7.使用调试工具

利用Modbus调试工具如modscan、modbus poll等工具进行诊断。这些工具可以帮助确认通讯是否成功,以及是否收到了预期的响应。

8.重试机制

对于某些类型的错误(如设备繁忙、通讯超时等),可以实施重试策略,设置合理的重试次数和重试间隔时间。

9.错误日志记录

记录接收到的异常码及其上下文信息,以便后续分析和调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下一次春天見

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值