空调标准modbus协议编写的另一种方法

[复制链接]
crodigy 发表于 2019-2-22 21:00:18 | 显示全部楼层 |阅读模式
前言:
以下主要是通过“analog to serial”来完成空调的协议控制;以海林面板进行举例。
1、协议格式如下
  
功能码
  
寄存器地址
风机盘管
数 据 解 释
03/06
3(2)
状态
00:关、01:开、02:防冻启动(只读);
03/06
4(3)
模式
1:制冷、2:制热、3:通风;
03/06
5(4)
设设置温度
温度值(535);
03/06
6(5)
风机模式
01:高速、02:中速、03:低速、00:自动;
03
7(6)
机型
01:DA;02:DB;03:Y;04:FCV2;05B2;06A2
03/06
8(7)[8006暂无]
设定防冻温度
温度值(5~+17);
03
9(8)[8006暂无]
通讯检测
每次通讯在0/1间翻转;
03
10(9)[8006暂无]
室内温度
0-70
03/06
12(11)
防冻功能
00:关、01:开;
03/06
13(12)
键盘锁定
00:无; 01:有 02:锁定开关机键 03:锁定“模式”、“定时”、“风速”、“上”、“下”键;

2、逻辑块“analog to serial”介绍
Analog to Serial主要用于将输入的模拟量转换成串量。
只有当数字量< trig >状态值由0变1时,功能块将所有输入模拟量的现状态值分别转换成16进制,然后按顺序组合成字符串由<str$>输出;
当数字量< trig >状态值保持为0或1时,<str$>不输出;
当输入模拟量<ainN>的值大于255时,按255处理。
例如:由4个模拟量输入,其状态值在< trig >出现上升沿时分别为“10”、“100”、“200”“300”;<str$>输出:“\x0A\x64\xC8\xFF”。


二、逻辑编写-数字量控制部分
1、定义6个字节组合成串量;在将输出的串量进行CRC16计算得到完整的协议。
32.png
说明:
a、由于每条控制命令都是由8个字节组成,后两个字节是前6个字节的CRC;那么我们通过analog to serial”定义前6个字节。
b、当““KT1_trig”触发时,就会将组成的字节转成串量。


2、对前6个字节赋值。
2.1、地址赋值
a1.png
说明在这里我们将空调地址所在的1字节拿出来,单独通过“analog intial”进行赋值。
原因:便于复制其它空调地址的修改
2.2、控制命令赋值
a2.png
a3.png
说明:
a、我们通过“analog initialize sigin”实现“开机”、“关机”、“制冷”、“制热”、“风速高”、“风速中”
、“风速低”、“风速自动”控制命令分别对2-6各字节的赋值操作。


2.3组合输出
a4.png
说明:
a、通过“or”实现当上述的任意控制命令触发时,就输出触发“stepper”触发analog to serial”转成串量和“serial CRC16 modbus”块进行CRC16运算输出。
三、逻辑编写-温度控制部分
3.1温度组合
20190228105442.png
说明:
a、由于温度是APP上温度值模拟量的变化,然后触发输出对应的控制协议;为了便于区分,我们队温度部分同样使用了一组analog to serial”和“serial CRC16 modbus”。
3.2温度的2-6字节赋值
a6.png
说明:
a、由于第一个字节地址已经单独赋值过了,所以我们只需要对2-6字节赋值。
b、在此我们单独初始化了一个状态值为1的变量,后面会使用到。


3.3当温度变化时,触发输出温度控制协议
a7.png
说明:
a、为了知道温度值发生过变化,我们将APP输出的设置温度值进行加1后再减1的操作;得出的值在和空调输出的设置温度值进行比较。
b、通过“analog comparision”比较两个值是否相等。
c、???在次你可能会疑惑这两个值肯定相等???原因:是的,这两个值最终肯定相等;但是在加1减1的运算过程中,这两个值是不相等的。
d、当两个值不相等时,那么便表示空调的设置温度发生了变化,这个时候我们通过“stepper”触发analog to serial”转成串量和“serial CRC16 modbus”块进行CRC16运算输出。


四、状态查询
4.1、同样类似上面,我们对状态查询的2-6字节赋值
a9.png

4.2、对返回的数据过滤出该地址的数据。然后根据返回字节的含义分理出相应字节。
b1.png
4.3、对分离出的字节匹配出状态反馈
b2.png
说明:将反馈变量关联到APP块上,即完后单个空调的编写。

五、复制另一台空调的控制


5.1、将第一台空调控制的整个文件夹复制出来。
b4.png
5.2、将地址ID修改掉
b3.png

5.3、打开所有逻辑块,将所有“KT1_”替换成“KT2_”
b5.png
说明:
a、打开所有块,选择“替换打开页”,那么所有打开页的变量都会被统一替换掉。


六、以上完成海林空调面板的控制逻辑编写。
说明:
a、一台的控制比较繁琐;但完成一个后就可以复制粘贴其它的面板控制。
b、对前6个字节的赋值,是根据协议的格式来的。以下一个空调内机ID1的控制解析协议可以作为参考。
空调控制协议\x01\x06\x00\x02\x00\x01\xE9\xCA
\x01\x06\x00\x02\x00\x00\x28\x0A
风速自动\x01\x06\x00\x05\x00\x00\x99\xCB
\x01\x06\x00\x05\x00\x01\x58\x0B
\x01\x06\x00\x05\x00\x02\x18\x0A
\x01\x06\x00\x05\x00\x03\xD9\xCA
制热\x01\x06\x00\x03\x00\x02\xF8\x0B
制冷\x01\x06\x00\x03\x00\x01\xB8\x0A
18\x01\x06\x00\x04\x12\x00\xC4\xab
19\x01\x06\x00\x04\x13\x00\xC5\x3B
20\x01\x06\x00\x04\x14\x00\xC7\x0B
21\x01\x06\x00\x04\x15\x00\xC6\x9B

C、状态查询参考下方
查询:01 41 00 02 00 08 9D C3
反馈组成格式:01 41 10(数据长度)00 01(开关机)00 02(模式)10 05(温度整数和小数位)00 03(风速) 00 00 00 00 00 00 1C 05(室内温度)9A 77


a5.png

海林面板.cpro

159.5 KB, 下载次数: 943

饶绍荣 发表于 2019-2-23 09:18:59 | 显示全部楼层
逻辑还是比较复杂,有难度
回复

使用道具 举报

13228751750 发表于 2019-2-23 09:56:18 | 显示全部楼层
感谢楼主分享 !!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则