none
利用SerialPort串口通信,先要找到02H帧头,在取02H后的数据字节的处理 RRS feed

  • 常规讨论

  • 我的数据包格式是一个帧头为02H的字节,后边紧接的一个字节位数据包的标识位,后边再紧接着是7个字节的数据,最后紧接一个字节位校验和字节。

      例如:02H01HXXXXXXXC02H02HYYYYYYYC02H03HZZZZZZZC........(02H为帧头,01H为标识位,XYZ均为与帧头不同的任意数据字节,C为校验和字节。)

    一下是我的处理思路:

    1.

    private void GetSerialData() { if(mySerialPort.ReadByte==0X02) { byte[] D_Buffer=new byte[9]; mySerialPort.Read(D_Buffer,0,D_Buffer.Length); //校验和通过,从缓冲字节数组取出数据字节存入myData字节数组中 byte[] myData=new byte[7]; if(Check(D_Buffer,D_Buffer[8])==true); { for(i=1;i<=7;i++) { myData[i-1]=D_Buffer[i]; } } } } //校验函数 private bool FrameAndCheck(byte d_Buffer,short checkSum) { short sum=0; for (i=1;i<=7;i++) { sum+=d_Buffer[i] } if(sum==checkSum)//说明校验和通过,返回true。;

    return true; else return false;//说明校验和不通过,返回false;

    }

    求讨论:有没有更优方法。或者这种方法有遗漏。

    还原魔方


    • 已编辑 Demi_China 2013年3月19日 2:05 语法出错
    2013年3月19日 2:03

全部回复

  • Hi  Demi_China,

      欢迎来到MSDN中文论坛。

      你还能考虑下异步传送方式以及对这串字符串进行加密以保证它的传输安全。


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2013年3月21日 2:36
    版主
  • hi,

    Jason Wang,

    我对后边的数据位进行了一种编码使得后边的数据字节不与帧头出现重复,

    实现方法为:在标识位后新增加一个字节,该字节从来存数据打包前后边6个字节的最高位,该字节的位为:1,1,daa6的最高位,data5的最高位,data4的最高位,data3的最高位,data2的最高位,data1的最高位,这个字节的第1位和第2位设置为1。)。后边的6位数据位的最高位都设置为1。


    还原魔方


    • 已编辑 Demi_China 2013年3月21日 9:14 语法
    2013年3月21日 9:14
  • Hi,

      你的办法可行!


    Jason Wang [MSFT]
    MSDN Community Support | Feedback to us

    2013年3月26日 8:23
    版主