文档版本:ApusTAI 1.0.27;更新日期:2026-10-08。
本页说明协议选择,并提供 DCBUS、XGUS 的具体收发格式和 CRC 算法。截图来自 ApusTAI 1.0.21 示例工程;报文已按协议格式核对,实际串口参数、帧头和 CRC 选项取自工程配置。
打开工程,进入“工程设置”。在“串口设置”中填写与控制器相同的波特率、数据位、校验位和停止位;在“协议设置”中选择工程实际使用的协议。下图①为串口参数,②为协议类型,③为 DCBUS 参数区域,④为帧头、站号、CRC 和自动上传等选项。图中的 115200、8 位、无校验、1 位停止位及站号 0 是示例工程参数。

主板发送写命令,屏幕解析后更新变量和绑定控件;主板发送读命令,屏幕返回变量数据;开启“自动上传”后,操作屏幕控件会主动上传变量值。“写命令应答”和“自动上传”分别控制两种发送行为,读取应答不依赖这两个开关。
| 项目 | DCBUS | XGUS |
|---|---|---|
| 帧格式 | 帧头 2 字节 + 站号 1 字节 + 长度 1 字节 + 功能码及数据 + 校验 2 字节 | 帧头 2 字节 + 长度 1 字节 + 功能码及数据 + 可选 CRC 2 字节 |
| 写变量 | F1 |
82 |
| 读变量、读应答、主动上传 | F2 |
83 |
| 地址与每个 16 位字 | 高字节在前 | 高字节在前 |
| 长度字段 | 从功能码到校验末尾;总帧长 = 长度 + 4 | 从功能码到帧尾;总帧长 = 长度 + 3 |
| 关闭 CRC | 尾部保留 CC CC |
尾部不带 CRC 字节 |
| 开启 CRC | 替换尾部 CC CC,长度不变 |
尾部增加 2 字节,长度加 2 |
下面将旧教程的温度与滑块地址作为示例:温度 0x1014、滑块 0x1016,数值 9 表示为 00 09。报文中的地址和数据均为十六进制。DCBUS 使用帧头 AA 55、站号 00;XGUS 使用帧头 A5 5A;两者先关闭 CRC。帧头均可配置,发送时须与工程一致。
| 方向与操作 | 完整报文 |
|---|---|
| 主板 → 屏幕:写温度为 9 | AA 55 00 07 F1 10 14 00 09 CC CC |
| 屏幕 → 主板:写成功应答(需开启) | AA 55 00 03 F1 CC CC |
| 主板 → 屏幕:读温度 1 个字 | AA 55 00 06 F2 10 14 01 CC CC |
| 屏幕 → 主板:返回温度值 9 | AA 55 00 08 F2 10 14 01 00 09 CC CC |
| 主板 → 屏幕:写滑块为 9 | AA 55 00 07 F1 10 16 00 09 CC CC |
| 屏幕 → 主板:滑块改为 9 后主动上传(需开启) | AA 55 00 08 F2 10 16 01 00 09 CC CC |
写请求中,F1 后是起始地址及连续数据;读请求中,F2 后是起始地址和 1 字节字数;读应答/上传中,字数后跟随数据,每个字占 2 字节。单次读取 1~124 个字,写入最多 125 个字,最后一个地址不能超过 0xFFFF。
| 方向与操作 | 完整报文 |
|---|---|
| 主板 → 屏幕:写温度为 9 | A5 5A 05 82 10 14 00 09 |
| 屏幕 → 主板:写成功应答(需开启) | A5 5A 03 82 4F 4B |
| 主板 → 屏幕:读温度 1 个字 | A5 5A 04 83 10 14 01 |
| 屏幕 → 主板:返回温度值 9 | A5 5A 06 83 10 14 01 00 09 |
| 主板 → 屏幕:写滑块为 9 | A5 5A 05 82 10 16 00 09 |
| 屏幕 → 主板:滑块改为 9 后主动上传(需开启) | A5 5A 06 83 10 16 01 00 09 |
写应答的 4F 4B 表示字符 OK。XGUS 没有站号字段。关闭 CRC 时单次读最多 125 个字、写最多 126 个字;开启时读最多 124 个字、写最多 125 个字,最后一个地址不能超过 0xFFFF。
两种协议均使用初值 0xFFFF、右移多项式 0xA001。CRC 结果低字节先发送,高字节后发送。
#include <stdint.h>
uint16_t calculate_crc(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
for (uint16_t i = 0; i < length; ++i) {
crc ^= data[i];
for (uint8_t bit = 0; bit < 8; ++bit) {
crc = (crc & 1) ? (uint16_t)((crc >> 1) ^ 0xA001)
: (uint16_t)(crc >> 1);
}
}
return crc;
}
DCBUS 从站号开始计算,包含站号、长度、功能码、地址、数量或数据;XGUS 从功能码开始计算,不包含帧头和长度。两者都不计算 CRC 字节自身。
| 操作 | 开启 CRC 的完整报文 |
|---|---|
| DCBUS 写温度为 9 | AA 55 00 07 F1 10 14 00 09 E3 A0 |
| DCBUS 写应答 | AA 55 00 03 F1 B0 B4 |
| DCBUS 读温度 | AA 55 00 06 F2 10 14 01 75 A6 |
| DCBUS 读应答,值为 9 | AA 55 00 08 F2 10 14 01 00 09 89 2C |
| XGUS 写温度为 9 | A5 5A 07 82 10 14 00 09 D8 DC |
| XGUS 写应答 | A5 5A 05 82 4F 4B A5 EF |
| XGUS 读温度 | A5 5A 06 83 10 14 01 E6 A5 |
| XGUS 读应答,值为 9 | A5 5A 08 83 10 14 01 00 09 4A 1D |
例如 DCBUS 写温度的计算输入是 00 07 F1 10 14 00 09,结果 0xA0E3,线上发送 E3 A0;XGUS 对应输入是 82 10 14 00 09,结果 0xDCD8,线上发送 D8 DC。修改参与计算的任何字段后都须重新计算 CRC。
以下报文关闭 CRC,并假设工程中存在画面 2:
| 协议与方式 | 主板 → 屏幕 |
|---|---|
DCBUS 写 LW0100 |
AA 55 00 07 F1 01 00 00 02 CC CC |
XGUS 模式 1:80 直接切页 |
A5 5A 04 80 03 00 02 |
XGUS 模式 2:82 写翻页入口 0084 |
A5 5A 07 82 00 84 5A 01 00 02 |
XGUS 写 LW0100 |
A5 5A 05 82 01 00 00 02 |
两种 XGUS 翻页命令按工程模式选择。00 02 表示画面 ID 2;82 翻页中的 5A 01 是切页标记。切页完成后,可读 LW0100 获取实际主画面 ID。
AA 55、站号 00,先关闭 CRC。LW1014,数据类型选 UINT16;保存并编译工程。AA 55 00 07 F1 10 14 00 09 CC CC,控件应显示 9。AA 55 00 06 F2 10 14 01 CC CC,核对屏幕返回的地址、字数及数值。F2 上传帧。如结果不符,依次检查接线与串口参数、协议类型、帧头、站号、CRC、地址和数据类型,并保存收发记录。