前言
现场一台EATON空调总是没回包,怀疑是发包发错了。
厂家支持也不给力,看协议文档,也没看出发包的组包哪里错了。
后来同事从以前的设备驱动库中找出一个插件,可以和这台设备通讯。
去看了一下这个插件的发包组包,才明白错在哪里了。
错误原因:
- 协议包校验和算法看错了。
- 即使校验和算对了,摆的顺序也是小端布局。其实协议上已经写清楚了。
所以说,和第三方设备通讯,厂家支持要给力。要不谁知道哪里错了。各种可能的错误组合太多了。
笔记
发包的协议初看起来挺简单的。
一共5个字节的发包,头3个字节是数据,后2个字节是校验和。
第1个字节填1,这个可能是设备ID, 但是同事没在设备仪表上看到。看以前同事填的值就是1.
第2个字节填1(固定值)
第3个字节填2(固定值)
第4个字节是校验和低位。
第5个字节是校验和高位。
发包数据如下:
01 01 02 SUM_L SUM_H
现在算校验和:
看协议,校验和是字节0字节2的累加和的2进制补码。开始没仔细看,按照字节0字节2的累加和算的…
字节0~字节2的累加和 = 0x01 + 0x01 + 0x02 = 0x04
字节0~字节2的累加和的补码 = 0x04按位取反 + 1 = B0000,0100 取反 + 1
= 1111,1011 + 1
= 1111,1100
= FF FC
SUM_L = FC
SUM_H = FF
所以最后的发包 = 01 01 02 FC FF