关于这个协议似乎有点问题,大神们进来看看
本帖最后由 u010373906 于 2013-09-05 09:59:23 编辑
A.底层协议
1.1帧结构
帧结构如下:
包头数据包长度UPT地址设备上报地址数据包校验和
1 Byte2 Bytes(N)1 Byte1 Byte(N-4) Bytes2 Bytes
包头:1字节,固定为0x7e
数据包长度:两字节无符号整数,低位在前,高位在后。包括UPT地址、设备上报地址、数据包及校验和加在一起的长度。
UPT地址:1字节,CONFIG.TXT文件中[UPTID]中的地址。
设备上报地址:1字节,CONFIG.TXT文件中[EQUIP]中相关设备的上报地址
数据包:(N-4)字节,实际传送的数据内容。
CHECKSUM: 2字节。除校验和之外所有字节的两字节算术和,取反再加1,低位字节在前,高位字节在后。
1.2换码规则:每一帧数据发送出去前,所有字节都要进行换码,即:如果字节X是0x7F,,则将其变为两字节:0X7F和0x00。如果有连续两个以上,255个以下相同字节,则变为三个字节,0x7F,N(相同字节数量),字节X。
7E 06 00 00 01 88 00 F3 FE
7E 1C 00 00 01 81 00 00 0A 42 66 66 26 42 9A 99
4D 44 9A 99 4D 44 00 00 40 40 7F 3C 00 23 F9
7E 08 00 00 02 81 7F 50 00 AA FE
CHECKSUM: 2字节。除校验和之外所有字节的两字节算术和,取反再加1,低位字节在前,高位字节在后。这个规则算第一组数据:
7E 06 00 00 01 88 00 F3 FE
2字节。除校验和之外所有字节的两字节算术和:
7E+06+00+00+01+88+00 = 010D
取反
~010D = FEF2
再加1
FEF2+1 = FEF3
高位字节在后
F3 FE
7E 1C 00 00 01 81 00 00 0A 42 66 66 26 42 9A 99
4D 44 9A 99 4D 44 00 00 40 40 7F 3C 00 23 F9
7E 08 00 00 02 81 7F 50 00 AA FE
你抓包看到的报文:
7E 08 00 00 02 81 7F 50 00 AA FE
按照"1.2换码规则"注意的字节
7E 08 00 00 02 81 [7F 50 00] AA FE
套用"1.2换码规则"得到*未换码*的报文:
如果有连续两个以上[*不包含两个*],255个(这里是0x50个)以下相同字节,
则变为三个字节,0x7F,N(相同字节数量),字节X (这里X是 00) 即0x7F 50 00
7E 08 00 00 02 81 [00 00 00 00 00 ...(共0x50个)... 00 ] AA FE
tip:应该就是较简单的压缩报文长度的想法,在大量相同的重复字节的情况下能很好的减少报文长度,
这里减少了0x50-3个字节呢 :P
校验和:AA FE (**仍然不符合**)
~ (+ 7E 08 00 00 02 81 [00 00 ...(共0x50个)... 00]) + 1 =