菜单

1.3 ApusTAI 协议与通信设置

下载

文档版本:ApusTAI 1.0.27;更新日期:2026-10-08。

本页说明协议选择,并提供 DCBUS、XGUS 的具体收发格式和 CRC 算法。截图来自 ApusTAI 1.0.21 示例工程;报文已按协议格式核对,实际串口参数、帧头和 CRC 选项取自工程配置。

选择协议与串口参数

打开工程,进入“工程设置”。在“串口设置”中填写与控制器相同的波特率、数据位、校验位和停止位;在“协议设置”中选择工程实际使用的协议。下图①为串口参数,②为协议类型,③为 DCBUS 参数区域,④为帧头、站号、CRC 和自动上传等选项。图中的 115200、8 位、无校验、1 位停止位及站号 0 是示例工程参数。

工程设置:串口参数、协议类型、帧头站号和 CRC 选项

DCBUS、XGUS 具体收发

主板发送写命令,屏幕解析后更新变量和绑定控件;主板发送读命令,屏幕返回变量数据;开启“自动上传”后,操作屏幕控件会主动上传变量值。“写命令应答”和“自动上传”分别控制两种发送行为,读取应答不依赖这两个开关。

项目 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。帧头均可配置,发送时须与工程一致。

DCBUS:写入、应答、读取与上传

方向与操作 完整报文
主板 → 屏幕:写温度为 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。

XGUS:写入、应答、读取与上传

方向与操作 完整报文
主板 → 屏幕:写温度为 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。

CRC16 算法与完整报文

两种协议均使用初值 0xFFFF、右移多项式 0xA001。CRC 结果低字节先发送,高字节后发送。

c 复制代码
#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。

最小案例:核对一个 LW 地址

  1. 在测试工程中选择 DCBUS,配置串口、帧头 AA 55、站号 00,先关闭 CRC。
  2. 在首页放置数值显示控件,绑定 LW1014,数据类型选 UINT16;保存并编译工程。
  3. 用串口工具选择十六进制发送,发出 AA 55 00 07 F1 10 14 00 09 CC CC,控件应显示 9。
  4. 发出 AA 55 00 06 F2 10 14 01 CC CC,核对屏幕返回的地址、字数及数值。
  5. 开启“自动上传”,增加输入控件并绑定同一地址,操作后核对主板收到的 F2 上传帧。

如结果不符,依次检查接线与串口参数、协议类型、帧头、站号、CRC、地址和数据类型,并保存收发记录。

按设备查阅详细教程

上一个
1.2 ApusTAI 工作界面介绍
下一个
1.4 使用 ApusTAI 创建简单样例工程
最近修改: 2026-10-08Powered by