BBC、LRC、CRC校验
库介绍:
使用软件和硬件环境:
STEP 7-Micro/WIN SMART V2.2及以上
S7-200 SMART固件V2.2及以上
特点:
伴随着新版本的STEP 7-Micro/WIN SMART和S7-200 SMART CPU的发布,S7-200 SMART CPU性能越来越强大。由于串口通信设计较为困难,基于此笔者设计了BBC(异或校验)、LRC(纵向冗余检验)、CRC(循环冗余校验),便于初学者快速用于Modbus RTU/ASCII协议及相关支持BBC、LCR和CRC协议的设计,为后续工作打下坚实的基础。
使用注意事项:
1)计算 BBC 校验值
说明:
本程序使用异或的方法计算信息帧的BBC 值。
输入参数:
Ris_Edge 使能信号 : 上升沿信号有效触发转换
P_Dint 缓冲区头指针,由第一个字节给出信息长度
Num 校验数据数量
输出参数:
Out_Value BBC 计算结果
通信报文:30 35 38 45 34 32,注意此通信报文为ASCII格式的16进制表示
需要带求的校验码:37 45 对应的ASCII格式为'7' 'E'
BBC校验
2)计算 LRC 校验值
说明:
本程序使用位或的方法计算信息帧的 LRC 值。
输入参数:
First_on 使能信号 : 上升沿信号有效触发转换
Pint 缓冲区头指针,由第一个字节给出信息长度
Num 校验数据数量
输出参数:
Out_Value LRC 计算结果
本例程以Modbus Ascii通信的报文为依据求取相应的校验码
通信报文:30 31 30 33 30 30 30 30 30 30 30 31,注意此通信报文为ASCII格式的16进制表示需要转换为
真实的16进制
需要带求的校验码:46 42 对应的ASCII格式为'F' 'B'
LRC校验
3)计算 CRC16 校验值
说明:
本程序使用位或的方法计算信息帧的 CRC 值。
使用缓冲区的第一个字节作为待计算的数据长度,信息字节串紧随其后
注意:
本程序用到累加器 AC0,但并不自动保存/恢复它
因本库中调用它的程序会保存累加器,所以这里不需要保存
但如在本库以外的地方调用此程序,则需要用户自己做保存/恢复工作
输入参数:
pBuf 缓冲区头指针,由第一个字节给出信息长度
bExchg 是否交换计算结果的高低字节 : 1=交换、0=不交换
bPutBack 结果写回缓冲区数据尾部 : 1=写入、0=不写入
本库其实不需要这两个参数,仅仅是为了增加在本库以外的地方使用本程序的兼容性
输出参数:
wCrc CRC 计算结果
结果同时被放回到缓冲区紧随数据之后
本例程以Modbus RTU通信的报文为依据求取相应的校验码
初始化校验数据:01 03 00 00 00 01其中VB0=6代表数据字节个数
CRC16数据01 03 00 00 00 01 输出结果16#84 0A 10#33802
CRC校验
源代码链接:https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-19247315394.37.68455c83dQG7t7&id=578581253719