你这个不是MODBUS协议的问题,而是对CRC校验的概念不明确,CRC是循环的,全称是循环冗余校验码。
针对你的问题,我们举这样一个例子,我们约定校验方式为“累加和为零”,这个简单好理解。
假设现在要发送N个字节的数据,累加和为0xAB,按字节累加,抛弃进位,
校验字是这样得到的 0x00-0xAB=0x55,
发送方发送N个字节后附上校验字0x55就可以了。
显然,发送的这N+1个字节的“累加和为零”。
接收方收到所有N+1个字节,加起来,检查“累加和为零”就可以了,不用要明确的去检查校验字是不是0x55。使用数据的时候,取N个字节,最后的校验字节丢弃就可以了。
CRC与此类似,不过是用多项式除法代替按字节累加而已。
看完整的源程序吧
一端程序能看出什么呢
你做仪表吗,当初我也是在这些上搞不懂,仔细想想,多做实验,慢慢就懂了