资料说明
这是北京京创鑫业科技有限公司 AirTS 系列高大空间空调机组的 Modbus RTU 通讯协议,触屏控制系统终端做从站,上位机做主机。协议只有 15 个有效寄存器,但有几个地方容易踩坑:温度要除 10、启停控制要用不同值写同一个寄存器、写操作只支持 0x06 单寄存器、以及写目标温度/角度/强度时范围比读出来的范围窄。
物理层和对参数
RS-485 两线制,A 接 A、B 接 B。串口参数(注意:PDF 里写的是 9600,实际使用前先确认你设备上设的波特率,别上来就用默认):
| 参数 | 值 |
|---|---|
| 接口 | RS-485(不支持其他方式) |
| 波特率 | 9600 bps(默认) |
| 起始位 | 1 |
| 数据位 | 8 |
| 校验 | 无 |
| 停止位 | 1 |
| 从站地址 | 0x01 ~ 0xFF(1 号~255 号设备),看触屏上显示的设备编号 |
终端内部会把空调的本地数据转发给上位机,所以你对空调发任何命令,对象都是这个触屏控制终端。
协议硬规则
- 只支持 Modbus RTU,不支持 ASCII 或 TCP。
- 功能码:0x03 读保持寄存器(可连续读多个),0x06 写单个寄存器(不支持 0x10 写多个)。
- 数据格式:高字节在前,低字节在后。
- CRC:16 位,低字节在前,高字节在后。
- 写范围受限:目标温度写范围 0~32℃、出风角度写范围 0~64、出风强度写范围 0~64;但读出来显示的是 0~50℃、0~100 度、0~100%。写的时候别超上限,否则设备可能不认。
- 不支持多设备打包命令,每条命令只针对一个从站地址。
寄存器点表(完整版)
| 十进制地址 | 十六进制地址 | 功能码 | 读写 | 名称 | 说明 |
|---|---|---|---|---|---|
| 1 | 0x0001 | 0x03 | 只读 | 风机状态 | 0000=过热,0001=正常 |
| 2 | 0x0002 | 0x03 | 只读 | 备用 | 保留 |
| 3 | 0x0003 | 0x03 | 只读 | 备用 | 保留 |
| 4 | 0x0004 | 0x03 | 只读 | 备用 | 保留 |
| 5 | 0x0005 | 0x03 | 只读 | 回风温度 | 返回值÷10,带 1 位小数(例 0x012D=301→30.1℃) |
| 6 | 0x0006 | 0x03 | 只读 | 出风温度 | 返回值÷10,带 1 位小数 |
| 7 | 0x0007 | 0x03 | 只读 | 工作区温度 | 返回值÷10,带 1 位小数 |
| 8 | 0x0008 | 0x03 | 只读 | 启停状态 | 0000=停运,0001=开启 |
| 8 | 0x0008 | 0x06 | 写 | 设备开启 | 写 0001 |
| 8 | 0x0008 | 0x06 | 写 | 设备停运 | 写 0004 |
| 9 | 0x0009 | 0x03/0x06 | 读写 | 第一温控时段目标温度 | 读 0~50℃,写 0~32℃ |
| 10 | 0x000A | 0x03/0x06 | 读写 | 第二温控时段目标温度 | 读 0~50℃,写 0~32℃ |
| 11 | 0x000B | 0x03/0x06 | 读写 | 第三温控时段目标温度 | 读 0~50℃,写 0~32℃ |
| 12 | 0x000C | 0x03/0x06 | 读写 | 第四温控时段目标温度 | 读 0~50℃,写 0~32℃ |
| 13 | 0x000D | 0x03/0x06 | 读写 | 出风角度 | 读 0~100 度,写 0~64 |
| 14 | 0x000E | 0x03/0x06 | 读写 | 出风强度 | 读 0~100(显示加 %),写 0~64 |
| 15 | 0x000F | 0x03 | 只读 | 控制权限 | 0000=就地,0001=远程,0002=两者均可 |
常用报文示例(以 2 号设备为例,已逐条 CRC 校验)
下面这些帧都跟 PDF 原厂示例一致(或按协议规则推算并验证 CRC)。如果你不是 2 号设备,把第一个字节换成你的地址,重新算 CRC 即可。
| 动作 | 下发帧 | 说明 |
|---|---|---|
| 读风机状态 | 02 03 00 01 00 01 D5 F9 |
应答 00 01=正常 |
| 读启停状态 | 02 03 00 08 00 01 05 FB |
应答 00 01=开启 |
| 设备开启 | 02 06 00 08 00 01 C9 FB |
写寄存器 8 为 0001 |
| 设备停运 | 02 06 00 08 00 04 09 F8 |
写寄存器 8 为 0004 |
| 读所有寄存器 1~14 | 02 03 00 01 00 0E 95 FD |
一次读回 14 个状态寄存器 |
| 读控制权限 | 02 03 00 0F 00 01 B4 3A |
读寄存器 15 |
| 设置目标温度 25℃ | 02 06 00 09 00 19 98 31 |
写寄存器 9 为 25(写范围 0~32) |
| 设置出风角度 90° | 02 06 00 0D 00 5A 98 01 |
写寄存器 13 为 90(写范围 0~64) |
| 设置出风强度 80% | 02 06 00 0E 00 50 E8 06 |
写寄存器 14 为 80(写范围 0~64) |
读所有寄存器 1~14 的返回帧拆解
下发 02 03 00 01 00 0E 95 FD 后,收到 33 字节应答(数据区 28 字节):
02 03 1C 00 01 00 01 01 2D 01 29 01 05 01 28 01 0E 00 01 00 12 00 11 00 10 00 0F 00 5A 00 50 FE 96
按真实字节顺序拆解(地址 1 到地址 14,每个寄存器 2 字节):
| 地址 | 十六进制 | 十进制 | 含义 |
|---|---|---|---|
| 1 风机状态 | 00 01 | 1 | 正常 |
| 2 备用 | 00 01 | 1 | 备用 |
| 3 备用 | 01 2D | 301 | 备用 |
| 4 备用 | 01 29 | 297 | 备用 |
| 5 回风温度 | 01 2D | 301 | 30.1℃ |
| 6 出风温度 | 01 29 | 297 | 29.7℃ |
| 7 工作区温度 | 01 05 | 261 | 26.1℃ |
| 8 启停状态 | 00 01 | 1 | 开启 |
| 9 第一目标温度 | 00 12 | 18 | 18℃ |
| 10 第二目标温度 | 00 11 | 17 | 17℃ |
| 11 第三目标温度 | 00 10 | 16 | 16℃ |
| 12 第四目标温度 | 00 0F | 15 | 15℃ |
| 13 出风角度 | 00 5A | 90 | 90 度 |
| 14 出风强度 | 00 50 | 80 | 80% |
注意:这个返回帧读的是地址 1~14 共 14 个寄存器,不包含地址 15(控制权限)。原厂 PDF 在列举「字节位置→寄存器」对照时,把地址 3、4 列成了回风/出风温度,和真实字节顺序对不上——那个对照表本身有错位,上面这版是按实际十六进制字节顺序重新对齐的,你可以照着数:第 5~6 字节才是回风温度 0x012D。
如果要读控制权限,单独发 02 03 00 0F 00 01 B4 3A。
温度解析
地址 5、6、7 都是温度,数值放大了 10 倍:
比如返回 01 2D = 301(十进制),真实温度 = 301 ÷ 10 = 30.1℃。
目标温度(寄存器 9~12)没做缩放,寄存器值就是温度值,比如 00 19 = 25℃,就是 25℃(但写的时候只能写到 32℃)。
启停控制
同一个寄存器地址 8,写不同值实现不同动作:
| 值 | 动作 |
|---|---|
| 0x0001 | 开启 |
| 0x0004 | 停运 |
不要写 0x0000 去关,PDF 里没定义这个值,写 0x0004 才是停运。
调试注意
- 下发开机、关机、角度、强度这类控制命令后,要留足执行时间:设备返回应答后、或间隔大于 1 秒再发下一条,避免命令没执行完。
- 如果所有数据都读不通,先用串口软件连 USB 转 485 直接监听下发指令,看是不是 CRC 算错或地址不对。
- 写操作只支持 0x06 单寄存器,别用 0x10。
- 控制权限寄存器 15 显示当前是就地还是远程控制,如果是就地,远程写命令可能不生效。
- 写目标温度/角度/强度时范围比读出来窄(温度 0~32、角度/强度 0~64),别超上限。
点位表 / 寄存器表
按地址、功能码、数据类型和倍率整理,适合调试、归档和项目交付。