自动附加校验位 Checksum CRC16 CRC32
为什么需要校验位
在工业协议、车载协议等场景中,通信双方需要确认收到的数据没有损坏。校验位就是附带在数据包末尾的一个或几个字节,接收方收到后用同样的算法重新算一遍,对比结果是否一致。
NetAssist 支持的校验格式
| 格式 | 说明 | 典型应用 |
|---|---|---|
| 校验和(CheckSum) | 所有字节相加取低 8 位 | 简单的累加校验 |
| 异或(XOR) | 所有字节逐个异或 | 简单的异或校验 |
| CRC8 | 8 位 CRC | 蓝牙、部分传感器 |
| CRC16 | 16 位 CRC | Modbus RTU、工业串口 |
| CRC32 | 32 位 CRC | 文件完整性校验 |
| 固定字节 | 附加一个固定值 | 帧尾标记 |
启用自动校验
在发送区的附加设置中勾选"自动附加校验位",然后从下拉菜单选择想要的校验格式。之后每次点击发送,NetAssist 会在你输入的数据后面自动算出校验值并追加。
自定义 CRC 参数
V4.3.26 起允许修改 CRC 的计算参数(多项式、初始值、结果异或值、输入反转、输出反转)。不同协议可能使用略有差异的 CRC 实现,自定义参数让 NetAssist 能兼容更多协议变体。
字节顺序(大小端)
CRC16/CRC32 的计算结果默认按小端(Little Endian)附加——低字节在前。在"附加设置"中可以切换为大端(Big Endian),以匹配目标协议的要求。
校验偏移与固定帧尾
V5.0.2 新增了校验偏移和固定帧尾选项:
- 校验偏移:可以指定"从第几个字节开始计算校验",跳过协议头部分。
- 固定帧尾:在校验位之后再附加固定的字节,比如
\r\n或0x7E。
这对调试自定义二进制协议特别有用——很多私有协议的格式是:协议头 + 主体 + 校验 + 帧尾。
实操示例:Modbus RTU 写线圈请求
Modbus RTU 的标准帧格式:从站地址 + 功能码 + 数据 + CRC16(低字节在前)。
假设要向从站地址 01 写线圈 0000 为 ON(FF00):
- 发送内容输入:
01 05 00 00 FF 00 - 自动校验位选 CRC16(默认参数)
- 字节顺序选小端
- 点击发送
NetAssist 会自动算出 CRC16 值(计算结果是 8C 3A),实际发出:01 05 00 00 FF 00 3A 8C(小端附加)。