- 1. 1 适用范围与开发环境
- 2. 2 串口屏 Modbus 协议基础
- 3. 3 Modbus 协议与变量配置(前置条件)
- 4. 3.1 屏作主机 / 从机配置项
- 5. 3.2 建立变量
- 6. 4 数据记录控件的两种用法(先读这段,再配)
- 7. 4.1 用法一:bit 位映射(寄存器返回位图,需要拆子节点)
- 8. 4.2 用法二:值映射(寄存器直读事件编号,不拆子节点)
- 9. 4.3 两种用法怎么选
- 10. 5 教程实现(以 bit 用法完整演示,值映射见 4.2)
- 11. 5.1 准备工程素材
- 12. 5.2 新建工程
- 13. 5.3 配置 Modbus 主机
- 14. 5.4 画面与控件配置
- 15. 5.5 当前告警画面
- 16. 5.6 历史告警画面
- 17. 5.7 运行预览
- 18. 6 下载工程
- 19. 7 工程实操要点(踩坑提示)
数据记录控件是大彩串口屏里专门用来做告警 / 事件记录的工具。在 Modbus 工程里,它把从机(PLC、变频器、温控模块)上来的报警状态按时间排好显示在屏上。本教程走一遍从协议配置、变量建立到画面联调的完整流程,并重点把两种最常见的事件记录用法分开讲清楚,避免配错导致屏上不显示、记不下来。文档整理自广州大彩光电科技有限公司《MODBUS 教程_数据记录控件 V1.0》,版权归大彩。
1 适用范围与开发环境
该文档适用于大彩所有支持 Modbus 协议的串口屏产品:基本型、经济型、商业型、F 型、物联型、86 盒、485 系列。NANO 系列除外(NANO 仅支持大彩组态协议,不支持 Modbus)。
搭建工程前先确认版本够用,版本不够会在编译或运行期出诡异问题,调半天发现是固件旧了:
| 软件 / 固件 | 最低版本要求 | 查看方式 |
|---|---|---|
| VisualTFT 上位机 | V3.0.0.1037 及以上 | 启动页右上角 / 软件右下角 |
| 基本型 / 经济型 / 商业型 固件 | MB 2.22.912.259 及以上 | 屏背面贴纸,或文本控件绑「系统变量→固件版本号」 |
| 物联型固件 | V3.0.301.0 及以上 | 同上 |
| F 型固件 | V4.1.66.0 及以上 | 同上 |
本例程硬件验证平台为大彩基本型 7 寸屏 DC80480B070,其它尺寸串口屏照此教程即可。上位机用大彩自研的 VisualTFT,官网 http://www.gz-dc.com 下载。
2 串口屏 Modbus 协议基础
大彩除 NANO 外的所有系列串口屏,都同时支持两种协议版本:大彩组态协议、Modbus RTU 协议。屏的串口物理规格固定为:1 起始位 / 8 数据位 / 无校验 / 1 停止位(8N1)。波特率范围:RS232 支持 1200~921600bps(典型 115200),RS485 支持 1200~115200bps(典型 9600)。
开发 Modbus 工程时,你在 VisualTFT 里配好的变量和协议,编译后会固化进工程包下到屏里。屏作主机时,按你设的轮询周期周期性地往从机发读指令,收到从机应答后解析,刷新绑定的控件或触发预设动作;屏作从机时则响应外部主站的轮询。
3 Modbus 协议与变量配置(前置条件)
打开 VisualTFT 菜单【工具】→【协议与变量设置】,左侧选文件路径,右侧协议设置栏设协议类型。数据记录控件本身不绑定具体寄存器读取,它显示的是「变量」的状态变化,而变量是从 Modbus 寄存器映射上来的——所以协议和变量必须先配好。
3.1 屏作主机 / 从机配置项


| 配置项 | 默认值 | 说明 |
|---|---|---|
| 启用协议 | — | 必须勾上才支持 Modbus |
| 协议类型 | — | 选「Modbus 主机」或「Modbus 从机」;本例程即主机模式 |
| 从机地址 | 1 | 仅从机模式需要,主机模式下从机地址在变量里单独填 |
| 轮询周期 | 1 秒 | 周期性读变量的间隔 |
| 轮询延时 | 100 毫秒 | 相邻两条读命令之间的间隔 |
| 应答超时 | 100 毫秒 | 允许从机的最大响应延时 |
| 连续读取 | — | 连续地址变量一次性最大读取数 |
| 优化读取 | — | 开启后只读本画面相关的变量,省串口带宽 |
| 存储设置 | — | 不存储 / 全部存储 / 存储指定变量(推荐后者,存很少改的系统参数) |
| 存储标记 | — | 数据格式改了手动改这个值,防止读到旧版本存储 |
存储设置里「全部存储」不推荐——频繁写 Flash 会加速坏块。要掉电保存的,用「存储指定变量」勾选特定变量即可。屏作从机时配置项少一些:启用协议、协议类型选「Modbus 从机」、从机地址(默认 1)、存储设置、存储标记。
3.2 建立变量


添加变量节点后在属性窗口设置。几个关键属性:
| 属性 | 说明 |
|---|---|
| 名称 | 默认 Variable1/2/3…,建议改成有意义的,如「机组状态」;分段变量默认 Field1/2/3…,可改「开/关机」 |
| 格式 / 符号 | 短整型、长整型、单精度浮点、字符串;可设无符号 / 有符号 |
| 读写设置 | 可读写 / 只读取 / 只写入 |
| 默认值 | 默认显示值 |
| 数值转换 | 实际值 = 原始值 × 缩放 + 平移,比如 0.1 倍率把寄存器整数转成带小数工程量 |
| 显示格式 | 设置整数和小数部分的位数 |
| 数组类型 | 开启后从该地址连续操作 N 个寄存器 |
| 是否储存 | 协议开启存储设置后,此处勾选可掉电保存 |
变量参数里:变量类型支持线圈、离散输入、保持寄存器、输入寄存器、内存变量、系统变量;屏作主机时才需要填从机地址和变量地址(16 进制填写);「初始化从机」是上电后把变量值写回从机;「读取失败归零」是读不到时变量归零(报警场合慎用,可能误显)。
4 数据记录控件的两种用法(先读这段,再配)
数据记录控件记录的是「变量状态变化产生的事件」。要让某条告警显示出来,要做两件事:
- 告警解析:建立「事件 ID → 文本 / 颜色」的对照表。屏上显示什么字、什么颜色,由这里决定。
- 事件记录[触发]:决定「什么时候记一条」。只有触发条件满足,才会按告警解析里的文本生成一条带时间戳的记录。
事件 ID 怎么填、触发条件怎么写,取决于你的从机返回的是什么数据。实务里有两种用法,配法完全不同,下面分层讲。
4.1 用法一:bit 位映射(寄存器返回位图,需要拆子节点)
适用场景:从机在一个寄存器里用不同 bit 表示不同告警,返回的是「位图」。例如建一个离散输入变量「机组故障」(占 1 个 16 位寄存器),bit0=压缩机低压、bit1=风机故障、bit2=烟感报警、bit3=过滤网堵塞。
必须建子节点:因为这种用法要把每一位单独拆出来当成一个变量,否则控件分不清是哪一位。在变量下添加子节点(分段变量),把 bit0~bit3 分别命名:
| 子节点(分段变量) | 对应 bit | 含义 |
|---|---|---|
| Field1 | bit0 | 压缩机低压 |
| Field2 | bit1 | 风机故障 |
| Field3 | bit2 | 烟感报警 |
| Field4 | bit3 | 过滤网堵塞 |
告警解析:事件 ID 填子节点序号 0/1/2/3(对应 bit0~bit3),并设好描述和颜色。
事件记录[触发]:事件参数选变量、事件 ID 选对应子节点(0/1/2/3),执行条件写「该子节点 == 1」。例如:事件参数=变量 / 事件 ID=0 / 执行条件=等于 / 变量=机组故障/压缩机低压 / 数值=1。
⚠ 注意:bit 用法里事件 ID 是子节点序号(从 0 开始),不是寄存器返回的 0001/0002。底层对应寄存器值 0x0001/0x0002/0x0004/0x0008。一个 16 位寄存器最多 bit0~bit15 共 16 个事件。事件关联发生在屏侧:控件拿寄存器值按 bit 匹配子节点,再去告警解析取文本。
4.2 用法二:值映射(寄存器直读事件编号,不拆子节点)
适用场景:从机直接返回一个「事件编号」值,例如读到 0x0001 表示事件一、0x0002 表示事件二、0x0003 表示事件三……寄存器里放的就是编号本身,不需要拆 bit、不需要建子节点。
不建子节点:这种用法下,变量就一个,读回来的值就是事件编号,别去拆位。
告警解析:事件 ID 填从机返回的那个编号值(如 1、2、3,或对应的十六进制 0001、0002、0003,按你寄存器实际返回填),并设好描述和颜色。
事件记录[触发]配置(严格按下面 5 步):
- 事件参数:选择「变量」
- 事件 ID:选择上面设定的那个寄存器变量(就是读编号的那个变量本身)
- 执行条件:选择「等于」
- 变量:还是选这个寄存器(和步骤 2 同一个)
- 数值:填写从机返回的值(如 1 / 2 / 3,或 0001 / 0002 / 0003,与告警解析里的事件 ID 一致)
⚠ 注意:值映射用法不设子节点、不写「某位 == 1」。条件是「寄存器值 == 某个编号」,命中后屏直接按告警解析里那个编号对应的文本显示 / 记录时间。告警解析里的事件 ID 和此处「数值」必须完全一致,否则读过来的数对不上文本,屏上就不显示、也不计时。
4.3 两种用法怎么选
| 对比项 | 用法一 bit 位映射 | 用法二 值映射 |
|---|---|---|
| 从机返回 | 位图(每位一个告警) | 事件编号值(0001/0002/0003…) |
| 是否建子节点 | 需要(拆 bit) | 不需要 |
| 事件 ID 填什么 | 子节点序号 0/1/2/3 | 寄存器返回的编号值 |
| 执行条件 | 某子节点 == 1 | 寄存器 == 某个编号 |
| 常见场景 | 一个故障字含多个开关量 | 从机主动上报事件流水号 |
5 教程实现(以 bit 用法完整演示,值映射见 4.2)
数据记录控件支持三种记录类型:当前告警、历史告警、历史告警与解除(比「历史告警」多了每条告警的解除时间)。本例程对前两种做示范,整体分三步:准备素材 → 功能实现 → 下载工程。下面以 4.1 的 bit 用法走完整流程(有图);若你的工程是 4.2 值映射,把「事件记录[触发]」按 4.2 的 5 步改即可,其它一致。
5.1 准备工程素材
硬件用 DC80480B070 基本型 7 寸屏;软件用 VisualTFT;UI 用准备好的美工图。工程结构采用首页导航 + 分画面:首页放两个按钮切到【当前告警】和【历史告警】画面,每个子画面有返回首页按钮。另外配【当前告警说明】和【历史告警说明】两个纯说明画面。
5.2 新建工程

打开菜单【文件】→【新建工程】,弹出新建工程窗口,设置好工程名称、路径、设备类型,点击【确定】。
5.3 配置 Modbus 主机

进入【工具】→【协议与变量设置】,协议类型设「Modbus 主机」,参数按 3.1 节。轮询周期 1 秒、轮询延时 100ms、应答超时 100ms 是默认,一般不用动。
5.4 画面与控件配置


首页放两个按钮(控件 ID:1),触控类型「切换画面」,目标画面分别指【当前告警】和【历史告警】。按钮属性里把触控类型设为「切换画面」、目标画面选【当前告警】,另一个同理。
5.5 当前告警画面
从机产生报警时,数据记录控件显示当前的告警和触发时间;报警解除后控件不再显示该条。配置步骤:
- 画面加一个数据记录控件(控件 ID:1),把「记录类型」设为当前告警;
- 在「告警解析」里设置各事件 ID 的数值、显示颜色、描述;
- 针对每个事件 ID,加一条用途为「事件记录[触发]」的逻辑处理,执行条件设成该位 == 1(bit 用法)或该寄存器值 == 编号(值映射,见 4.2)。


「告警解析」对话框三列:事件 ID(数值)、前景颜色、描述。本例用 bit 用法,建离散输入变量「机组故障」取前 4 位,事件 ID 填子节点序号 0=压缩机低压、1=风机故障、2=烟感报警、3=过滤网堵塞(当前告警里颜色按严重度区分,例如压缩机低压红、风机/烟感绿、滤网蓝)。

每个事件 ID 对应一条「事件记录[触发]」逻辑。bit 用法写法形如:事件记录[触发] / 控件(1,1) / 事件(0) / 条件(机组故障/压缩机低压 == 1),即该位为 1 时触发一条告警记录。四个事件分别为事件0(压缩机低压)、事件1(风机故障)、事件2(烟感报警)、事件3(过滤网堵塞)——事件 ID 必须和「告警解析」里填的数值一一对上。
若你用的是 4.2 值映射,这里就按 4.2 的 5 步来:事件参数=变量 / 事件 ID=那个寄存器 / 执行条件=等于 / 变量=同寄存器 / 数值=返回的编号(如 1)。
5.6 历史告警画面
历史告警与当前告警配置几乎一样,唯一区别是记录类型选历史告警。不同点:报警解除后,历史告警的这条记录仍然留在表格里;如果在 Modbus 协议里开了存储设置,还能掉电保存,重新上电不丢。



历史告警的「告警解析」与「事件记录[触发]」逻辑和当前告警完全对称,只是控件指向画面 2,且告警解析里四项颜色统一设为红(255,0,0),强调”已发生即留痕”。事件 ID 同样从 0 起始对应子节点序号(bit 用法),逻辑里同样要写”各位 == 1″的条件;值映射用法见 4.2。
5.7 运行预览


本例程屏作主机,用 Modbus Slave 软件模拟从机应答。运行虚拟屏,与 Modbus Slave 联机即可看到效果:当前告警画面列出活动告警(压缩机低压、烟感报警、过滤网堵塞)及其触发时间,右侧 Modbus Slave 显示对应寄存器值与通信日志。具体操作参考大彩《【MODBUS】串口屏_应用文档_V1.0.pdf》。
6 下载工程

VisualTFT 编译成功后输出窗口会提示「编译成功」,再下到屏里,两种方式:
- USB 下载:点菜单【下载到设备】,用 USB 线把配置下进屏;
- SD 卡下载:菜单【工具】→【量产向导】→ 选「SD 卡下载」,把弹窗里所有文件拷到 SD 卡根目录,插屏后重新上电,烧录完取下 SD 卡。
7 工程实操要点(踩坑提示)
- 先定用法,再配:从机返回的是位图(bit 用法,要拆子节点)还是事件编号(值映射,不拆子节点)?两种配法完全不同,混着写屏上必然不显示。
- bit 用法:事件 ID = 子节点序号 0/1/2/3,对应寄存器值 0x0001/0x0002/0x0004/0x0008。别把”寄存器返回 0001/0002/0003″当编号填进事件 ID——0003 是 bit0+bit1 同置,不是”事件 3″。
- 值映射用法:不建子节点、不写「某位 == 1」。事件记录[触发]按 4.2 的 5 步:事件参数=变量 → 事件 ID=那个寄存器 → 执行条件=等于 → 变量=同寄存器 → 数值=返回编号。告警解析里的事件 ID 与这里数值必须完全一致。
- 事件 ID 必须对齐:「告警解析」里填的 ID,和「事件记录[触发]」逻辑里的事件 ID(或数值)是同一个东西,对不上屏上就不显示那条告警。
- 逻辑必设条件:「事件记录[触发]」不写执行条件会无条件触发,所有事件都被记下来,画面一团乱。
- 历史告警要掉电保存,记得开存储:只在 Modbus 协议配置里开了「存储设置 = 存储指定变量」,且变量属性里勾了「是否储存」,历史告警断电后才不丢。两处都要设,只设一处不生效。
- 当前告警 vs 历史告警的语义:当前告警是「活的」——解除即消失;历史告警是「记账」——解除也留痕。选型时想清楚你要的是实时状态还是审计记录。
- 轮询周期别太狠:从机响应慢或总线设备多时,1 秒轮询 + 100ms 延时要酌情放大,否则会出现读到一半超时、报警跳变。
- 颜色 ID 有意义:当前告警按严重度用不同前景色(红/绿/蓝),历史告警统一红——别随便填,否则屏上区分不出来。
整理自广州大彩光电科技有限公司《MODBUS 教程_数据记录控件 V1.0》(www.gz-dc.com),版权归大彩所有。如需联机调试细节,参见大彩《【MODBUS】串口屏_应用文档_V1.0.pdf》。
发表回复