You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中拆分Modbus十六进制错误码的方法及参考资料咨询

Modbus错误码拆分方案(C#)

协议背景

Modbus的异常响应里,功能码字节的最高位(对应十六进制0x80)会被置1,用来标记这是异常响应,剩下的7位对应原请求的功能码;而响应里紧接着的单独字节是具体的异常码主体,用来说明错误类型。你提到的0x84,本质是原功能码0x04的异常响应功能码,其中0x80是异常标识,0x04是原功能码。如果你的场景里把这个功能码字节当作“错误码”来处理,拆分逻辑就围绕位操作展开。

C#实现代码

用按位与操作就能快速拆分:

  • 提取头部(异常标识):errorCode & 0x80,结果要么是0x80(表示异常),要么是0(正常响应)
  • 提取主体(原功能码/异常内容):errorCode & 0x7F,得到低7位的有效内容

针对0x84的示例代码:

byte errorCode = 0x84;
byte header = (byte)(errorCode & 0x80); // 输出0x80
byte body = (byte)(errorCode & 0x7F);    // 输出0x04

如果是自定义的单字节错误码(把异常标识和错误类型合并在一个字节),同样可以用这套位操作逻辑拆分。

关键协议要点

  • 标准Modbus协议规定:异常响应的第一个字节是原功能码 | 0x80,第二个字节是异常码(范围0x01到0x0A)
  • 常见异常码主体含义:
    • 0x01:非法功能码(请求的功能码从站不支持)
    • 0x02:非法数据地址(请求的地址超出从站范围)
    • 0x03:非法数据值(请求的数据格式或范围无效)
    • 0x04:从站设备故障(从站执行请求时遇到不可恢复的错误)
    • 0x05:确认(从站已接收请求,但需要延迟处理)
    • 0x06:从站设备忙(从站正忙于处理其他请求,无法响应)

内容的提问来源于stack exchange,提问作者user7951064

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:03:21