您当前的位置:五五电子网电子知识plc技术PLC入门CRC校验原理和其C语言实现分析 正文
CRC校验原理和其C语言实现分析

CRC校验原理和其C语言实现分析

点击数:7343 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   PLC入门
              n_CrcCode16=((n_CrcCode16>>8) & 0xff) ^ CRC_Code[LOCAIION];       //从表中取值计算 PLC资料网
          }
          std::cout<<"The CrcCode you need is:"<<n_CrcCode16<<endl;
          return n_CrcCode16;
}

      当然了,你要做的就是给它传递参数,也就是你要计算的数据,char类型。一般的串口通信、网络通信都是字符型通信,更适用于LINUX里面的字符型设备。这个类是在Suse10.1下面用Kdevelop写的,全部使用ANSI C/C++编写,在Linux和WINOOWs均可以编译通过并且正确运行。 /************************************************************
crc16校验程序
uint crc16(uint crcdata,uchar bufdata)
形参:bufdata     需要校验数据
       crcdata     校验后的数据
功能:接收字节crc校验,返回校验值
*************************************************************/
uint crc16(uint crcdata,uchar bufdata)
{
uchar i; PLC资料网
   
crcdata^=bufdata;
for(i=8;i>0;i--)
{
      crcdata>>=1;
      if(crcdata&0x01)
      crcdata^=0xa001;
     }
return crcdata;
} VBvbvbvbvbvbvbvvvvvvvvvvvvvvvvvvbbbbbbbbbbbbbbbbbb Private Sub Command1_Click()
          Dim CRC()       As Byte
          Dim d()       As Byte       '待传输数据
          ReDim d(5) As Byte
          d(0) = 2 '02 03 00 00 00 04    lo44 hi3A          d(1) = 3
          d(2) = 0 PLC
          d(3) = 0
          d(4) = 0
          d(5) = 4 '02 03 20 40 00 04    hi2E Lo4E
     
          CRC = CRC16(d)         '调用CRC16计算函数
          'CRC(0)为高位
          'CRC(1)为低位
        End Sub
        '注意:在数据传输时CRC的低位可能在前,而高位在后。
   
        Function CRC16(data() As Byte) As String
          Dim CRC16Lo       As Byte, CRC16Hi         As Byte          'CRC寄存器 PLC
          Dim CL       As Byte, CH         As Byte                    '多项式码&HA001
          Dim SaveHi       As Byte, SaveLo         As Byte
          Dim i       As Integer
          Dim Flag       As Integer
          CRC16Lo = &HFF
          CRC16Hi = &HFF
          CL = &H1
          CH = &HA0
          For i = 0 To UBound(data) PLC
            CRC16Lo = CRC16Lo Xor data(i)             '每一个数据与CRC寄存器进行异或
            For Flag = 0 To 7
              SaveHi = CRC16Hi
              SaveLo = CRC16Lo
              CRC16Hi = CRC16Hi \ 2                      '高位右移一位
              CRC16Lo = CRC16Lo \ 2                      '低位右移一位
              If ((SaveHi And &H1) = &H1) Then                 '如果高位字节最后一位为1 PLC资料网
                CRC16Lo = CRC16Lo Or &H80                '则低位字节右移后前面补1
              End If                                 '否则自动补0
              If ((SaveLo And &H1) = &H1) Then                 '如果LSB为1,则与多项式码进行异或
                CRC16Hi = CRC16Hi Xor CH
                CRC16Lo = CRC16Lo Xor CL

              End If
            Next Flag
          Next i
          Dim ReturnData(1)       As Byte
          ReturnData(0) = CRC16Hi                    'CRC高位
          ReturnData(1) = CRC16Lo                    'CRC低位
          CRC16 = ReturnData
        End Function

上一页  [1] [2] 


本文关键字:C语言  PLC入门plc技术 - PLC入门