CRC叫做循环冗余校验,是检验发送数据是否正确的一种方法。比如你发过来的是0x010300000003这个数据,要是发送过程中出现了干扰,变成了其他数据比如0x010300000103,这样送到设备上会出问题的。所以MODBUS利用了一种方法,就是把每一个BYTE的数据和一个固定值(16位数值)进行一次运算(循环的,比如上面的数据中01运算完结果用在03上运算,再往下以此类推),最后得到一个2BYTE的数值(16位)。也就是经过这一系列的运算,发送方和接收方算出来的CRC数值应该相同的;如果传送中数据的某一位或者某几位出现了问题,那么运算出来的结果就会不一样(并不是100%,但是已经很高了),那么这个数据就不能要了。懂了吗?
有CRC16-MODBUS算法计算而来,可以用支持这类通信的软件,像格西烽火等,都不错,测试一下。
下面是一个命令的构成,有CRC校验自动生成。