DCBUS 用于主控板读写屏幕变量。本节以“海岸泵站”演示写入设定、读取水温和屏幕主动上传。
核心功能
在 工程 → 设置 → 工程设置 中配置通信参数。

| 序号 | 参数 | 本例 | 作用 |
|---|---|---|---|
| 1 | 波特率 | 115200 | 通信速率,两端保持一致;本例 115200。 |
| 2 | 数据位 | 8 | 每字符的数据位数;本例 8 位。 |
| 3 | 校验位 | 无 | 串口奇偶校验;本例无校验,与报文 CRC 分开设置。 |
| 4 | 停止位 | 1位 | 每字符的结束位;本例 1 位。 |
| 5 | 接收回调 | 否 | 将接收字节交给 Lua 的 on_uart_recv;自由协议示例开启。 |
| 6 | 协议类型 | DCBUS | 选择当前工程使用的通信协议。 |
| 7 | 帧头 | 0xAA55 | 2 字节识别码,发送端须与本项一致。 |
| 8 | 站号 | 0 | DCBUS 设备地址;本例 0,报文中为 00。 |
| 9 | 启用CRC | 否 | 校验报文内容;双方同时开启或关闭,计算方法见报文说明。 |
| 10 | 自动上传 | 是 | 屏幕操作改变变量后,主动上传对应地址和数据。 |
| 11 | 写命令应答 | 否 | 收到有效写命令后返回确认;关闭时写入仍可执行。 |
公共串口说明: 本例使用一对虚拟串口 COM2 ↔ COM3;模拟器选择 COM2,联调助手选择 COM3。实际电脑使用各自的配对端口号。两端不能打开同一个 COM。
| 控件 | 地址 | 用途 |
|---|---|---|
| 水温 | LW1014 |
16 位水温值 |
| 液位 | LW1015 |
0~100% |
| 转速设定 / 低速 / 高速 | LW1016 |
输入数值或写 40 / 70 |
| 水泵指示 / 启动 / 停止 | LW1020 |
0=停止,1=运行 |

地址中的数字及下列报文字节均为十六进制;画面显示的 25、40、70 为十进制数值。
以下以水温值 9 演示;工程初始值为 25。先写入 9,再核对对应读应答。
| 字段 | 字节数 | 说明 |
|---|---|---|
| 帧头 | 2 | 本例 AA 55,可在工程设置中修改 |
| 站号 | 1 | 本例 00,请求须与屏幕站号一致 |
| 长度 | 1 | 从功能码到帧尾的字节数,包含末尾 2 字节 |
| 功能码 | 1 | F1 写变量;F2 读变量、读应答或自动上传 |
| 起始地址 | 2 | 高字节在前,例如 10 14 表示 0x1014 |
| 数量或数据 | 不定 | 读请求含 1 字节字数;写请求直接放数据;读应答含字数和数据 |
| 校验 | 2 | CRC 关闭时仍保留 CC CC;开启时为 CRC 低字节、高字节 |
每个字占 2 字节,高字节在前。批量数据按起始地址连续存放,地址每增加 1 表示下一个字。
| 报文类型 | 长度字段 | 总帧长 |
|---|---|---|
| 写 N 个字 | 5 + 2×N |
9 + 2×N 字节 |
| 写成功应答 | 03 |
7 字节 |
| 读 N 个字的请求 | 06 |
10 字节 |
| 读应答或上传 N 个字 | 6 + 2×N |
10 + 2×N 字节 |
单次读取 1~124 个字,单次写入最多 125 个字;最后一个地址不能超过 0xFFFF。写成功应答只包含帧头、站号、长度、功能码和校验,不包含地址或数据。
在串口工具中选择十六进制发送。主板给水温控件写入 9:
主板 → 屏幕:AA 55 00 07 F1 10 14 00 09 CC CC
屏幕 → 主板:AA 55 00 03 F1 CC CC
第二行仅在工程设置开启“写命令应答”时返回。屏幕处理写入后,绑定 LW1014 的水温控件显示数值 9。
主板读取 LW1014,假设当前值为 9:
主板 → 屏幕:AA 55 00 06 F2 10 14 01 CC CC
屏幕 → 主板:AA 55 00 08 F2 10 14 01 00 09 CC CC
请求中的 01 表示读 1 个字,应答中的 01 后面跟随该字的数据 00 09。读取会返回读应答,不要求开启“自动上传”或“写命令应答”。
给转速设定 LW1016 写入 9,只需将地址改为 10 16:
主板 → 屏幕:AA 55 00 07 F1 10 16 00 09 CC CC
下面一次写入 3 个连续地址:LW1014=9、LW1015=0、LW1016=9。LW1015 是两个控件地址之间的字,也包含在本次写入中。
主板 → 屏幕:AA 55 00 0B F1 10 14 00 09 00 00 00 09 CC CC
屏幕 → 主板:AA 55 00 03 F1 CC CC
再从 LW1014 起读取 3 个字:
主板 → 屏幕:AA 55 00 06 F2 10 14 03 CC CC
屏幕 → 主板:AA 55 00 0C F2 10 14 03 00 09 00 00 00 09 CC CC
写指令没有独立的字数字段,字数由长度计算;读请求的 03 才是读取字数。
在工程设置中开启“自动上传”。用户在屏幕上将转速设定 LW1016 改为 9,屏幕可主动发送:
屏幕 → 主板:AA 55 00 08 F2 10 16 01 00 09 CC CC
自动上传使用 F2,结构与读应答相同;主板按地址、字数和数据解析。“自动上传”控制屏幕操作后的主动发送,“写命令应答”控制主板写入后的确认,两项分别设置。
工程与主板同时启用 CRC。使用 CRC16:初值 0xFFFF,右移多项式 0xA001;从站号开始,计算到最后一个数量或数据字节,包含站号、长度、功能码和地址,不包含帧头与 CRC 自身。结果低字节先发、高字节后发。
DCBUS 开关 CRC 不改变长度字段和总帧长,只替换末尾 CC CC。例如水温值 9 的报文为:
| 操作 | CRC 开启后的完整报文 |
|---|---|
主板写 LW1014=9 |
AA 55 00 07 F1 10 14 00 09 E3 A0 |
| 屏幕写成功应答 | AA 55 00 03 F1 B0 B4 |
主板读 LW1014 1 个字 |
AA 55 00 06 F2 10 14 01 75 A6 |
| 屏幕返回数值 9 | AA 55 00 08 F2 10 14 01 00 09 89 2C |
第一行的 CRC 计算输入为 00 07 F1 10 14 00 09,结果是 0xA0E3,线上发送 E3 A0。更改站号、长度、功能码、地址、字数或数据后,须重新计算 CRC。
向画面寄存器 LW0100 写入目标画面 ID。例如切换到画面 2:
主板 → 屏幕:AA 55 00 07 F1 01 00 00 02 CC CC
目标画面须存在于工程中。切换完成后,LW0100 可读回实际主画面 ID。
| 现象 | 检查项 |
|---|---|
| 没有应答 | 串口连接、帧头、长度和 CRC 是否匹配,站号是否正确 |
| 写入成功但没返回 | “写命令应答”是否开启;读取一次核对结果 |
| 屏幕操作没有上传 | “自动上传”是否开启,控件地址是否对应 |
| 翻页无变化 | 目标画面是否存在 |