命令格式如下:
 __________________________________________________________________
|       |  No.|of   |   |   |   |  Program Name    | Check   |     |  
|  STX  | Characters| C | 0 | P | Up to 15 Letters |  Sum    | ETX |
|_______|_____|_____|___|___|___|__________________|___|____|_____|
开始标志 字符个数   命令段     数据段     校验 结束标志因设备通讯协议没有说明算法,只有一个个试?
现征求CheckSum的算法,我知道的有,将每一位取反相加、两字节合起来相加

解决方案 »

  1.   

    我以前做過兩年串口通信, 象你上面的格式, 起碼有十几種校驗可能!!要麼, 你要有例子 , or 發送的 sample,
    要不, 這樣討論比較無目的!!
      

  2.   

    我现在手上只有一个设备的编程说明,找遍了都没有说CheckSum是怎么算的,只知道相加,但不知道该怎么加,用每个字节异或?还是像我上面说的,只有一个个试,很麻烦,我以前做的串口通讯,一般的协议里都会说明这东东是怎么算。
      

  3.   

    一般遇到这种情况,我根本不会去判CheckSum,串口通讯一般挺稳定的。。
      

  4.   

    加,
    如你這麼說, 那你可試如下:
    正常 STX, ETX 都不用理, 要求是什麼就什麼!
    如果是十六進制的, 直接相加, 
    如果是字符的, 轉為對應Ascii的碼值再計算, 
    如 C O P 之類都要轉化, 1, 所有的值累加, 
    2, 累加後, 與 $FF 异或注意 checksum 是多少位的!
      

  5.   

    checksum应该是校验码,校验码有很多种算法,天知道它采用的是哪一种,即使同一种算法,例如CRC,初始值不一样,移位方法不一样,得出来的结果也不同
      

  6.   

    >>一般遇到这种情况,我根本不会去判CheckSum,串口通讯一般挺稳定的。。
    不是這樣的, 沒checksum 是無法通訊的
      

  7.   

    要写硬件的人告诉你算法呀,他们是最清楚是什么算法,一般是CRC,BCC之类的,特别的算法也有公式的,硬件开发商会告诉的,CRC和BCC我这倒是有,需要的话发EMAIL给我
      

  8.   

    监控到机器发过来的数据如下:
    82 30 B4 D2 B1 50 C5 B8 B4 03 ---------04R1PE
    82 30 B4 D2 B1 D2 C5 B8 B2 03 --------04R1RE
    82 30 B4 D2 B1 50 D7 B7 B2 03 --------04R1PW
    其中82是开始标志,03是结束标志,请大家帮忙分析一下CheckSum是怎么算的?
    另外有个疑问:30是无校验的16进制,而B4是有校验位的16进制,因为按照协议格式,30 B4 是字符个数,在这条指令里命令段+数据段为4,B4实际应为无校验的34,好像又不像奇偶校验。