变频器MODBUS协议(crc)浅谈
变频器MODBUS协议(crc)浅谈
有很多变频器都支持MODBUS通讯协议,MODBUS通讯协议有二种通讯模式,ASCII模式和RTU模式,两种模式都有CRC校验的,CRC校验是MODBUS协议中的CRC校验.可以保证通讯传输过程中数据的准确性
判断数据有没有丢失,CRC全称叫(循环校验码).
下面简单说明它的原理:
1. 发送方和接收方在通信前,约定好预设整数P.
2. 将16位寄存器置全1,即是FFFFH
3。第一个8位的讯息指令与位于16位寄存器将结果存入寄存器内.
4。又移位一位寄存器,将零填入高位.
5。检查右移的值,如果是零.将步骤3的新值存入寄存器.
6。重复4-5,将8位全部运算完成
7。重复3-6,取下一个8位的讯息指令.直到所有讯息指令运算完成.最后得到的寄存器的值,就是CRC的校验码
CRC的校验码必须交换放置在讯息指令的校验码中.
举个例子
发送方要传输的数据D是10110100共8位,发送方和接收方约定P为101,共三位,冗余位n-k共2位那么F=2n-kDmodP=(22*10110100)mod(101)=(1011010000)mod(101)=00那么传输帧T就是1011010000
这是一个简单的CRC校验程序:
#include "stdio.h"
unsigned char *data;
unsigned char length;
unsigned int crc_chk(unsigned char *data, unsigned char length)
{
int j;
unsigned int reg_crc=0xffff;
while (length--)
{
reg_crc^=*data++;
for(j=0;j<8;j++)
{
if(reg_crc&0x01)
{
reg_crc=(reg_crc>>1)^0xa001;
}
else
{
reg_crc=crc_reg>>1;
}
}
}
return reg_crc;
}