网上有关MODBUS的协议不要太多,很简单,至于CRC16,有两种方法我贴个小一点的:
void calcrc(BYTE frame[],int n,BYTE *cod)
{ // 求MODBUS校验码
unsigned short crc=0xffff;
for (int i=0;i<n;i++)
{
crc^=frame[i];
for (int j=0;j<8;j++)
{
unsigned short flag=crc&1;
crc>>=1;
if (flag)
crc^=0xa001;
}
}
*(unsigned short *)cod=crc;
}