菜单

6.1 DCBUS

下载

DCBUS 用于主控板读写屏幕变量。本节以“海岸泵站”演示写入设定、读取水温和屏幕主动上传。

核心功能

  • 变量读写与连续多字传输。
  • 屏幕操作自动上传、写命令应答。
  • CRC 校验与画面切换。

1. 参数设置

在 工程 → 设置 → 工程设置 中配置通信参数。

6.1 DCBUS 参数编号,完整 IDE 窗口
序号 参数 本例 作用
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。

2. 应用

下载本节工程 · 6.8 示例下载

控件 地址 用途
水温 LW1014 16 位水温值
液位 LW1015 0~100%
转速设定 / 低速 / 高速 LW1016 输入数值或写 40 / 70
水泵指示 / 启动 / 停止 LW1020 0=停止,1=运行
  1. 打开 SeasideDCBUS.apustai,编译并运行。
  2. 模拟器串口副屏选择 工程通信,打开 COM2。
  3. 联调助手选择 DCBUS,打开 COM3,CRC 保持关闭。
  4. 点击“写入设定”,屏上转速变为 70;点击“读取”,返回水温 25。
  5. 在屏上切换低速、高速,观察助手收到的上传报文;用助手按钮测试水泵启停。
DCBUS 真实串口操作:写设定、读水温、自动上传及启停

地址中的数字及下列报文字节均为十六进制;画面显示的 25、40、70 为十进制数值。

3. 报文说明

以下以水温值 9 演示;工程初始值为 25。先写入 9,再核对对应读应答。

3.1 帧格式和长度

字段 字节数 说明
帧头 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。写成功应答只包含帧头、站号、长度、功能码和校验,不包含地址或数据。

3.2 单字写入与读取

在串口工具中选择十六进制发送。主板给水温控件写入 9:

text 复制代码
主板 → 屏幕:AA 55 00 07 F1 10 14 00 09 CC CC
屏幕 → 主板:AA 55 00 03 F1 CC CC

第二行仅在工程设置开启“写命令应答”时返回。屏幕处理写入后,绑定 LW1014 的水温控件显示数值 9。

主板读取 LW1014,假设当前值为 9:

text 复制代码
主板 → 屏幕: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:

text 复制代码
主板 → 屏幕:AA 55 00 07 F1 10 16 00 09 CC CC

3.3 连续多字收发

下面一次写入 3 个连续地址:LW1014=9、LW1015=0、LW1016=9。LW1015 是两个控件地址之间的字,也包含在本次写入中。

text 复制代码
主板 → 屏幕:AA 55 00 0B F1 10 14 00 09 00 00 00 09 CC CC
屏幕 → 主板:AA 55 00 03 F1 CC CC

再从 LW1014 起读取 3 个字:

text 复制代码
主板 → 屏幕: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 才是读取字数。

3.4 屏幕操作后的自动上传

在工程设置中开启“自动上传”。用户在屏幕上将转速设定 LW1016 改为 9,屏幕可主动发送:

text 复制代码
屏幕 → 主板:AA 55 00 08 F2 10 16 01 00 09 CC CC

自动上传使用 F2,结构与读应答相同;主板按地址、字数和数据解析。“自动上传”控制屏幕操作后的主动发送,“写命令应答”控制主板写入后的确认,两项分别设置。

3.5 开启 CRC 时的收发

工程与主板同时启用 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。

3.6 切换画面

向画面寄存器 LW0100 写入目标画面 ID。例如切换到画面 2:

text 复制代码
主板 → 屏幕:AA 55 00 07 F1 01 00 00 02 CC CC

目标画面须存在于工程中。切换完成后,LW0100 可读回实际主画面 ID。

4. 常见问题

现象 检查项
没有应答 串口连接、帧头、长度和 CRC 是否匹配,站号是否正确
写入成功但没返回 “写命令应答”是否开启;读取一次核对结果
屏幕操作没有上传 “自动上传”是否开启,控件地址是否对应
翻页无变化 目标画面是否存在

6.8 示例下载 · 6.2 XGUS

上一个
第六章 通信协议
下一个
6.2 XGUS
最近修改: 2026-11-06Powered by