串口通讯协议求助,关于艾默生DataMate3000空调的。
通讯协议:
http://wenku.baidu.com/view/eb122bd176a20029bd642d93.html
求助各位大侠:
1、协议内容比较晦涩难懂,请高手提点一下,特别是“16进制解释 ASCII码传输”;
2、能否给一个算法,特别是校验码(LENGTH、CHKSUM)的计算;
3、能否给一个或者几个例子:获取VAR(版本号)和获取模拟量量化后数据(温度)的;
谢谢!!!
[解决办法]
最好是自己慢慢调吧,比较耗时间的。
[解决办法]
1.比如发送数据“CS023”,那么将每个字符翻译为十六进制就OK,比如其中"0”对应的十六进制就是0x30,依此类推。
2.这个。。。没去看那个协议了,建议先用串口调试助手试试,看发个什么字符,返回的是什么东东,然后根据协议进行解析就是。
[解决办法]
到网上找个串口使用工具的源码研究下。编程技术很简单。麻烦的是协议。建议和楼上一样串口调试工具 一条一条测试。熟悉其功能。有设备的话是很简单的!
[解决办法]
到网上找个串口使用工具的源码研究下。编程技术很简单。麻烦的是协议。建议和楼上一样串口调试工具 一条一条测试。熟悉其功能。有设备的话是很简单的!
[解决办法]
要源码的话,去pudn找吧!这是个技术坛子
[解决办法]
略微看了一下协议,
好像并不是太复杂,
只是命令多了一些而已,基本格式也很简单
[解决办法]
很简单的一个协议,即使用明ASC码表示16进制而已,而且说了超过500ms空调无应答为通信失败
如设置字符串char sCmd[50];sCmd为要发送的到串口的字符串,简单解析一下协议如下:
sCmd[0] = 0x7e ;//首字符,标志符号,不按照说明处理
sCmd[1] = '2'; sCmd[2] = '1'; // 版本号,用asc字符表示16进制
sCmd[3] = '0'; sCmd[4] = '2'; // 设备地址为0x02 ,用16进制表示1个字符,故地址最大255,0xff
sCmd[5] = '6'; sCmd[6] = '0'; // 控制标志码,后面有注明,为0x60
以下就不一一写了,需要前后对照,仔细点很简单的,需要注意开始说明的每个功能的大小
[解决办法]
http://download.csdn.net/detail/xjdx051/3756635
看看这个,也许会帮到您
[解决办法]
DynamicArray<byte> commandByte; commandByte.Length = 6 ; //指定命令动态数组的大小 commandByte[0] = 0x02 ; //开始 commandByte[1] = 0x41 + addr; //仪表地址 0 和 1 commandByte[2] = 0x44 ; //命令 commandByte[3] = 0x30 ; //校验高位 均为0x30 commandByte[4] = 0x30 + commandByte[1]^commandByte[2]; //校验低位 commandByte[5] = 0x03 ; //结束 Comm1->OutputByte(commandByte) ; //发送读取命令