告警매개변수回调 on_get_warning_param(warning_id) 解决一个문제:告警콘텐츠里要带实时数值。比如「온도过高:当前 85.5℃」——告警文本是模板,数字是运行时的。回调返回最多 4 个매개변수(데이터0~데이터3),填入告警设置里的 {#N:num1.num2} 占位符。
1. 占位符형식 {#데이터:num1.num2}
在告警设置里,告警콘텐츠可以写成:
온도过高:{#0:2.2} ℃| 필드 | 含义 |
|---|---|
| 데이터 | 매개변수 ID,从 0 开始,最多 4 个(데이터0~데이터3) |
| num1 | 整数位前置空格数(对齐用) |
| num2 | 小数位补零数 |
例:{#0:2.2} 表示 데이터0 显示 2 位整数(不足前补空格)+ 2 位小数(不足补零)。
2. 回调实现
function on_get_warning_param(warning_id) -- 返回最多 4 个매개변수 local 데이터0 = get_uint16(VT_LW, 0x1001) / 100 -- 缩小100倍:85.5 存的是 8550 local 데이터1 = get_uint16(VT_LW, 0x1002) local 데이터2 = get_uint16(VT_LW, 0x1003) local 데이터3 = get_uint16(VT_LW, 0x1004) return 데이터0, 데이터1, 데이터2, 데이터3 end
온도 85.5℃ 在레지스터里存 8550(放大 100 倍),回调里 /100 还原,再按 {#0:2.2} 형식化成「85.50」显示。
3. 与 on_parse_warning 的区别
on_get_warning_param 只负责返回数值매개변수,文本模板在告警设置里配;而 on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3) 是完全接管告警文本生成——返回 (문자串, 编码),编码 1=GBK(중국어屏推荐)/0=UTF-8。两者互斥,用매개변수填充就别用全接管。
三个坑:①回调只对设置了 {#N:...} 占位符的告警生效,没占位符的告警不会调它;②매개변수最多 4 个(데이터0~데이터3),超了不显示;③缩放注意单位——레지스터存的是放大值,回调里必须还原,否则显示 8550 而不是 85.50。
整理自 广州大彩科技 VisualHMI 개발문서(hmi-doc.gz-dc.com)LUA 튜토리얼「告警매개변수」,版权归大彩科技所有。
답글 작성