程序中使用CRC校验数据

(1.60.1及其以上上位机版本支持,目前仅支持crc-16/modbus)

使用crc校验的步骤

初始化crc校验

//初始化crc
crcrest 1,0xffff

使用crcputh/crcputs/crcputu将需要的数据放入校验

crcputh的用法参考printh

crcputs的用法参考prints

//将0x03 0x25放入crc校验
crcputh 03 25

//将字符串"aaa"放入crc校验
crcputs "aaa",0

//将字符串t0.txt放入crc校验
crcputs t0.txt,0

//将字符串t1.txt的前6个字节放入crc校验
crcputs t1.txt,6

//将数值16的低2字节放入crc校验
crcputs 16,2

//将数值n0.val放入crc校验
crcputs n0.val,0

//将数值n1.val的低2字节放入crc校验
crcputs n1.val,2

//将串口缓冲区的第5个字节开始的24个字节放入crc校验
crcputu 5,24

获取crc计算结果

crcval变量即为计算结果,可以随时获取

//将crcval的数据发送出去
prints crcval,2

crc校验示例

未进行校验的代码如下所示

//发送55 aa 作为帧头
printh 55 aa

//串口发送数值变量n0.val的低2字节
prints n0.val,2

//串口发送字符串变量t0.txt
prints t0.txt,0

//发送0d 0a作为帧尾
printh 0d 0a

将上方的代码添加crc-16校验并发送出去

//重置crc校验
crcrest 1,0xffff

//发送55 aa
printh 55 aa

//将55 aa 放入crc校验
crcputh 55 aa

//串口发送数值变量n0.val的低2字节
prints n0.val,2

//将数值变量n0.val的低2字节放入crc校验
crcputs n0.val,2

//串口发送字符串变量t0.txt
prints t0.txt,0

//将字符串变量t0.txt放入crc校验
crcputs t0.txt,0

//发送0d 0a作为帧尾
printh 0d 0a

//将0d 0a放入crc校验
crcputh 0d 0a

//串口发送校验结果
prints crcval,2

在大部分的应用场景下,crc校验仅仅是将printh改成crcputh,prints改为crcputs

../_images/crc2_1.jpg

注意

注意放入crc校验中变量的长度

crcputs n0.val,3,crcputs n0.val,2,crcputs n0.val,1和crcputs n0.val,0得出的crc校验值是完全不同的4个值!

串口屏计算出来的crc结果和单片机计算出来的结果不同如何排查

借助网上的crc在线校验工具,先计算出标准的modbus-crc16的值,然后对比一下是串口屏计算出来的crc有问题还是单片机计算出来的crc有问题,针对问题修改代码即可

crc校验-样例工程下载

演示工程下载链接:

《CRC校验》演示工程下载

《crc校验例程一对》演示工程下载