竭诚为您提供优质文档/双击可除
空调通信协议
篇一:精密空调协议规范(modbus)
精密空调需要测的数据(假如有)
01、温度
02、湿度
03、温度设定点
04、湿度设定点
05、工作模式
06、过滤网是否堵塞
07、电源是否故障
08、报警信号
09、机组是否过热
精密空调命令格式(modbus协议)
1、发送
地址功能码数据起始地址高字节数据起始地址低字节数据数量高字节数据数量低字节cRc校验高字节cRc校验低
字节
2、接收
地址功能码数据数量数据1数据2数据3……cRc校验高字节cRc校验低字节
例:台达精密空调(意义相同的字段标上了相同的颜色)
1、发送:010200020xx659e0
接收:01020d15a01123000000000000010000b061
01020d17a01123000000000000010000b061
112233445566778899aabbccddeeff112233
作用:读开关量输入输出与报警状态
备注:功能代码02的操作,功能代码02的所有参数都是数字量,每一位都代表一个状
态。动作为1,原始状态为0。对字节中的对应位做判断。
处理:第四个字节为数据段的开始。需要判断的有
1)第四个字节的1位,是否制冷模式,第四个字节为0x15,转换成二进制为00010101,第1位为0,制冷模式信号没有动作;
2)第五个字节的1位,过滤网是否堵塞,第五个字节为0xa0,转换成二进制为10010000,1位为0,过滤网堵塞信号没有动作;
3)第五个字节的4位,电源(相序保护器)是否故障,
第五个字节为0xa0,转换成二进制为10010000,4位为1,电源故障信号有动作;
4)第七个字节的7位,是否总报警,第七个字节为0x23,转换成二进制为001000117,7位为0,总报警信号没有动作;
5)第八个字节的2位,室内温度是否过低,第八个字节为0x00,转换成二进制为00000000,2位为0,室内温度过低信号没有动作;
6)第十个字节的7位,室内温度是否过高,第十个字节为0x00,转换成二进制为00000000,7位为0,室内温度过高信号没有动作;
7)第十一个字节的0位,机组是否过热,第十一个字节为0x00,转换成二进制为00000000,0位为0,机组没有过热信号没有动作。
代码:
memcpy(Receivedata2,mycom[localcom].buffer,18);//共18个字节数据拷贝到接
收数组中
if(aucReceivedata02[3]
}
if(aucReceivedata02[4]
}
if(aucReceivedata02[4]
}
if(aucReceivedata02[6]
}
if(aucReceivedata02[7]
}
if(aucReceivedata02[9]
}
if(aucReceivedata02[10]
}
2、发送:010300020xx12406
接收:
01032eFFb6000000320xx60026000000000000000001da00F30 1F4
00dc000000Fa00F0000a0032000a00aa006400820xx935a0
01032eFFb6000000320xx60026000000000000000001da00F30 1F400dc000000Fa00F000
0a0032000a00aa006400820xx935a0
112233445566778899aabbccddeeff112233445566778899aab bccddeeff112233445566778899
aabbccddeeff112233445566
作用:读模拟量参数
备注:功能代码03的操作,将输入值除以10即为实际值。
处理:第四个字节为数据段的开始。每两个字节代表空调的一个参数。这部分实测和协
议上有所出入,需要得到的数据有
1)第22、23两个字节01da,表示室内湿度,转换为十进制除以10为47.4;
2)第24、25两个字节00F3,表示室内温度,转换为十进制除以10为24.3;
3)第26、27两个字节01F4,表示设定湿度,转换为十进制除以10为50.0;
4)第28、29两个字节00dc,表示设定温度,转换为十进制除以10为22.0.代码:
memcpy(Receivedata3,mycom[localcom].buffer,51);//共51个数据拷贝到接收数
组中,很多数据是无效的,
后期再修改
/*表示室内湿度*/,
analoginput03_info.Roomhumidity=(float)(Receivedata
3[21]/0x16 Receivedata3[22]);
/*表示室内温度*/
analoginput03_info.Roomtemperature=(float)(Received ata3[23] Receivedata3[24])/10.0;
/*表示设定湿度*/
analoginput03_info.humiditysetpoint=(float)(Receive data3[25] Receivedata3[26])/10.0;
/*表示设定温度*/
analoginput03_info.temperaturesetpoint=(float)((Rec eivedata3[27] Receivedata3[28]%0x16))/10.0;
附:
1、cRc16校验
见《电量仪协议规范(modbus)》。
2、命令发送代码
/*因为发送命令的数据比较固定,因此cRc就不在程序中计算了*/
/*底层串口卡的驱动分为sp3739和16c554两种,分别用于2代机与3代机,以下写法是2代机的16c554驱动的写法*/