首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于这个协议似乎有点有关问题,大神们进来看看

2013-09-12 
关于这个协议似乎有点问题,大神们进来看看本帖最后由 u010373906 于 2013-09-05 09:59:23 编辑A.底层协议

关于这个协议似乎有点问题,大神们进来看看
本帖最后由 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 

根本算不出来
[解决办法]
结论:信息不够得不到答案,请务必给出详尽的协议文本.

先求校验和,再套用"1.2换码规则",再发出 <- 被你抓包得到的报文,

所以逆向推导:
你抓包看到的报文: 


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 = 



还是没有符合规定,个人怀疑还有其他你未明示的规则.
强烈建议提供足够详细的描述信息.如你另一贴中提及的典型的没有足够信息得不到有效的判断.

本来愿意回帖的人就不多,再不提供足够有效的信息...如果不能判断什么信息有效,简单粗暴的方法是直接全部发上来.也许我不能给出满意的解答,至少给其他有能力且愿意帮助你的人一个机会.
[解决办法]
不知道你注意到没,
抓取数据包中的校验码与按照给出的协议计算的校验码的差是定值0x82.
至少后面两条都是符合的

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       ----------checksum 0xF8A1, 0xF923-0xF8A1 = 0x82

7E 08 00 00 02 81 7F 50 00 AA FE   ---checksum 0xFE28, 0xFEAA-0xFE28 = 0x82

再抓几个包看看是不是巧合。
是不是协议转码部分看漏了。
[解决办法]
应该是这样算的

7E 08 00 00 02 81 7F 50 00 AA FE 

7F 50 00 实际上应该是0x50个0x00

所以实际上发送的数据位

7E 55 00 00 02 81 (0x50个0x00 )AA FE 

验证 7E + 55 + 02 + 81 = 0x156

FFFF - 0x156 + 1 = 0xFEAA

热点排行