none
串口数据解析:帧头,数据提取的优选方案,SerialPort类实现 RRS feed

  • 常规讨论

  • 我的数据包格式是一个帧头为02H的字节,后边紧接的一个字节位数据包的标识位,后边再紧接着是7个字节的数据,最后紧接一个字节位校验和字节。
     
      例如:02H01HXXXXXXXC02H02HYYYYYYYC02H03HZZZZZZZC02H01HYYYYYYYC..........,02H为每个数据包的帧头,01H为标识位,XYZ均为与帧头不同的任意数据字节,C为校验和字节。)
     
    以下是我的处理思路:
    private void GetSerialData()
    {  
     
      if(mySerialPort.ReadByte()==2)//找到帧头,本来想用0X02,
       {
          byte[] D_Buffer=new byte[9]; 
          mySerialPort.Read(D_Buffer,0,D_Buffer.Length);       
          byte[] myData=new byte[7];    
          int ID=D_Buffer[0];     //数据包标识
          //如果通过校验和,则将缓冲区数据取出存入相应数据数组中。
          if(Check(D_Buffer,D_Buffer[8])==true); 
           {
           switch(ID)
            {
            case 1:
               for(i=1;i<=7;i++) 
                 myData1[i-1]=D_Buffer[i];
                 break;
            case 2:
               for(i=1;i<=7;i++) 
                 myData2[i-1]=D_Buffer[i];
                 break;
            case 3:
               for(i=1;i<=7;i++) 
                 myData3[i-1]=D_Buffer[i];
                 break;
             }
            }
        }
    }
    
    
    //校验函数
    private bool Check(byte d_Buffer,byte checkSum)
    {
         byte sum=0;
         for (i=1;i<=7;i++)
           {
            sum+=d_Buffer[i];
           }
         if(sum==checkSum)//说明校验和通过,返回true。
              return true;
         
         else  return false;//说明校验和不通过,返回false; 
    }
    请问:这种思路有疏漏,或者,有更优的解决方案吗?

    还原魔方

    2013年3月20日 1:36

全部回复