格式: ESC+ID+COMMAND+DATA+CHECKSUM+END(ASCII 码传送)
说明:
名称 内容 长度(BYTE) 说明
ESC 0x1B 1
ID 序列号 11 FFFFFFFFFFF或用户设定
COMMAND 命令 1
DATA 数据 由程序员定
CHECKSUM 校验和 2 CHECKSUM为除ESC与END以及本身之外的所有之和
END 0x05 1
ESC ID COMMAND DATA CHECKSUM END
1B |46 46 46 46 46 46 46 46 46 46 46| 52| |35 34 |05
(此处 DATA为空)
请问CHECKSUM 如何计算出来的,
CHECKSUM都是自己规定的,但是楼主的CHECKSUM规则明显和数据不符(和为0x0354)。
我猜楼主是接收到数据,要反推CHECKSUM算法吧?那1组数据肯定是不够了。多发几组(比如把其中一个0x46改为0x45),自己检测一下,类似于矩阵或者说解方程那样,应该也不是太复杂吧。
一般人不会去用非常偏的算法的,
不是加和,那试试异或和校验,要不就是CRC
也就常用的那么几种,呵呵
35 34
对应的值是 54
ID :aaaaaaaaaaa
把前面的值也换成这样的,把前面的都加起来,然后取个反,只要最低8个bit 看值得不是54对应的hex进制的 值
是不是
ID + COMMAND 后是 354,只取末尾 54,扩展成 ASCII码 35 34.
嗯,很像某plc的Frame Check Sum
1B |46 46 46 46 46 46 46 46 46 46 46 44 |34 36 | 05
1B |30 30 30 30 30 30 30 30 30 30 30 52 |36 32 | 05
1B |30 30 30 30 30 30 30 30 30 30 31 52 |36 33 | 05
1B |30 30 30 30 30 30 30 30 30 30 32 52 |36 34 | 05
1B |30 30 30 30 30 30 30 30 30 30 30 44 |35 34 | 05
1B |30 30 30 30 30 30 30 30 30 30 31 44 |35 35 | 05
这是使用ACCESSPORT 截获的数据
1B ?30 30 30 30 30 30 30 30 30 30 30 52 ?36 32 ? 05
1B ?30 30 30 30 30 30 30 30 30 30 31 52 ?36 33 ? 05
1B ?30 30 30 30 30 30 30 30 30 30 32 52 ?36 34 ? 05
从这个三组看,应该是我说的方法 嘿嘿,加和后,取反+1,与0xff
1B ?46 46 46 46 46 46 46 46 46 46 46 58 ?35 41 ? 05
和为(0x035A)
ascii码 应该是 35 65 吧
楼主,65是十进制的ASCII码,十六进制的时候,这个数是0x41。。。。。。。