主题
3.4 方式三:云组态直连设备寄存器
前面三种方式都是「数据先进实时数据库,画面再从数据库取」。这一种不一样:云组态画面直接读写 PLC 寄存器,不经过实时数据库。
配置最快:设备端无需任何配置,在画面上选定寄存器即可显示和控制。代价是没有历史、没有报警。
3.4.1 变量前缀体系
云组态里变量名的第一个字符决定它从哪来:
| 前缀 | 类型 | 数据来源 | 通道 |
|---|---|---|---|
| 无前缀 | 项目变量 | 服务器实时数据库的数据点 | WebSocket 推送 + HTTP 轮询兜底 |
@ | 设备变量 | 直接读写 PLC 寄存器 | HTTP 轮询,不落库 |
# | MQTT 变量 | 浏览器直连 MQTT Broker 的 Topic | MQTT |
$ | 内部变量 | 画面本地变量,脚本用 | 不与服务器交互 |
本节讲 @。项目变量见方式一到方式三;MQTT 变量见 5.7 云组态 MQTT 变量。
3.4.2 语法
@设备ID.寄存器.数据类型例如 @25733508.D100.S16 表示读设备 25733508 的 D100,按 16 位有符号整数解释。
省略数据类型的旧写法 @设备ID.D100 仍兼容,系统按寄存器字母推断(X/Y/M/S 按位,其余按 16 位)。新工程建议写全,避免歧义。
3.4.3 支持的数据类型与寄存器
只有 5 种数据类型(没有 U16 无符号 16 位):
| 数据类型 | 含义 | 可用的寄存器 |
|---|---|---|
BIT | 位 | X / Y / M / S |
S16 | 16 位有符号整数 | D / T / C(C0-C199) |
S32 | 32 位有符号整数 | D / C(C200-C255) |
FLOAT | 单精度浮点 | D |
DOUBLE | 双精度浮点 | D |
地址范围:
- X / Y:八进制 0-377
- M:0-7679
- S:0-4095
- D:0-7999
- T:0-511
3.4.4 怎么配
在组态编辑器里选中控件,打开数据绑定,在变量选择器中切到「设备变量」标签,依次选:
- 数据类型(S16 / BIT / FLOAT …)
- 设备(下拉列出该账号下的在线设备)
- 寄存器类型和编号(如 D、100)
下方会实时显示拼好的完整变量名,如 @11315751.DD0.S16,点确定即完成绑定。
3.4.5 读写机制:轮询,不是推送
这一点和项目变量差别很大,直接影响体验预期。
读取:自适应轮询。上一轮成功则 500ms 一次,上一轮有失败则退到 2 秒一次。画面打开时会立即拉一次,首帧延迟约 0.3~0.5 秒。
合并读取:同一设备、同一寄存器字母、同一数据类型的绑定会被合并成一次请求。例如画面上有 @设备.D0.S16 和 @设备.D6.S16,实际是一次读回 D0 起 7 个寄存器。
所以把要显示的寄存器地址排列得尽量连续,可减少请求次数;跨设备、跨寄存器类型、跨数据类型不能合并。
写入:失败会重试 3 次(间隔 500ms),8 秒超时。写完 2 秒内画面会忽略服务器返回的旧值(写保护),避免刚点下去的按钮又跳回原状态。如果设备离线,会提示写入失败。
3.4.6 产品组态:一套画面对应多台设备
批量出货时,不必给每台设备做一份画面。做法是用「产品组态」:
- 编辑器的工程属性里开启「产品组态」,并指定一个预览设备
- 画面上所有设备变量都绑到这台预览设备,如
@11315751.D100.S16 - 发布时选择目标设备,系统自动把画面里所有
@11315751.前缀整体替换成目标设备 ID
替换覆盖控件属性、显示事件、点击事件、动画、动态管线,以及页面脚本里的变量字面量。
这样一套模板可以发给多台同型号设备,修改画面只需改模板一处。详见云组态手册的产品组态章节。
3.4.7 不适用的场景
| 需求 | 能不能用 @ |
|---|---|
| 画面上显示一个实时值 | 可以 |
| 按钮控制 Y 输出、输入框改 D 设定值 | 可以 |
| 历史曲线、报表 | 不行,要用方式一让数据进实时数据库并设置存盘 |
| 超限发邮件(事件触发) | 不行,事件触发只认实时数据库的数据点 |
| 页面关掉后仍要记录数据 | 不行,@ 只在画面打开时才有通信 |
| 其它系统(ERP / SCADA)要取这个数据 | 不行,对外接口只暴露实时数据库的数据点 |
3.4.8 混用建议
实践中最常见的组合:
- 需要存盘、报警、对外提供的核心量 → 方式一绑进实时数据库,画面用项目变量
- 只在调试或维护画面上临时看的寄存器 → 直接挂
@,不占用云端数据点,也不用改设备配置