VisualHMI - 告警参数(Lua)
在HMI(人机界面)系统中,为实现告警信息的动态化与语义清晰化,告警文本支持将寄存器中的实时数据嵌入。系统提供最多四个可独立配置的参数字段,每个参数可分别设置其显示格式(如小数位数)。告警内容可自动拼接,从而更直观的体现告警信息。
适用范围:VisualHMI - HMI&M系列&Dx系列
例程下载链接:ViusalHMI - 告警参数 Lua (点击下载)
1.API 说明
1.1.on_get_warning_param(warning_id)
告警参数动态回调函数,on_get_warning_param(warning_id) 是 HMI 系统提供的告警参数设置接口,当工程告警设置中为启用“告警参数”功能后,系统在显示告警详情时自动调用此函数,通过告警ID,根据具体业务逻辑,返回该告警的参数,支持返回最多 4 个数值/状态参数(data0~data3);实现个性化、可读性强的告警提示
📊 参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
warning_id |
number | 告警唯一标识符 |
📊 返回值说明
| 返回值 | 类型 | 必填 | 说明 |
|---|---|---|---|
data0 |
number | 否 | 告警参数 0 • 用于填充告警设置→中的 {#0:num1.num2}• 或者on_parse_warning(...)中的p0 |
data1 |
number | 否 | 告警参数 1 • 用于填充告警设置→中的 {#1:num1.num2}• 或者on_parse_warning(...)中的p1 |
data2 |
number | 否 | 告警参数 2 • 用于填充告警设置→中 {#2:num1.num2}• 或者on_parse_warning(...)中的p2 |
data3 |
number | 否 | 告警参数 3 • 用于填充告警设置→中 {#3:num1.num2}• 或者on_parse_warning(...)中的p3 |
1.2.on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3)
告警内容动态解析回调函数,on_parse_warning 是 HMI 系统提供的告警文本自定义生成接口,开发者根据告警 ID、画面信息,生成自定义的告警描述字符串。
📊 参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
id |
number | 告警 ID* • 对应 warning_set 中使用的 warning_id • 用于区分不同类型的告警 |
text |
string | 原始告警文本 • 此处可以忽略,因为本回调中,拼接新的字符串返回 |
screen_id |
number | 当前画面 ID |
control_id |
number | 当前控件 ID |
p0 ~ p3 |
number | 告警参数(0~3) • 仅在工程中为该告警启用了参数功能时有效 • 实际值由 on_get_warning_param 回调提供(见下方说明) |
返回值
| 返回值 | 类型 | 说明 |
|---|---|---|
str |
string | 告警描述字符串 • 支持拼接变量、单位、状态等 • 示例: "电机#3 温度 98°C 超过阈值 95°C!",带参配合on_get_warning_param `实现 |
encode |
number | 字符编码标识(可选) • 1:表示返回字符串为 UTF-8 编码(默认) • 0:GBK-8 编码 |
2.工程设置
2.1.告警设置
在工程的告警设置中,勾选“启用告警参数”,使用Lua脚本实现告警处理,告警设置不需要预先写入告警内容,如下图所示:

2.2.画面设置
在画面添加一个告警显示控件,“告警控件”属性配置如下所示:
- 告警模式:历史告警;
- 时间排序:时间逆序;
- 显示序号:√;
- 发生时间:显示时间;
- 解除时间:显示时间;
- 时间在前:√;
- 列宽比例:20;150;40;40;
- 每页行数:5;
- 显示滚动条:√;
- 增加触控范围:20

界面设置一个位状态指示灯,关联地址LW1000,用于触发和解除告警,配置属性如下:
读取地址:LW1000
- 开关类型:切换开关
- 切换开关:√
- 使用图库:√

界面设置四个数值控件,关联地址LW1200~LW1203,用于告警参数的模拟,配置属性如下:
- 读取地址:LW1200

界面设置四个字设置按钮,关联地址LW1200~1203,覆盖在数值控件上,用于设置数值控件,配置属性如下:
- 写入地址:LW1200;
操作模式:递增;
步长:1;
- 最小值:0;
- 最大值:100;
- 循环调节:√;
- 长按调节:√;

3.Lua脚本
脚本初始化开启告警脚本解析,按键按下对地址LW1000写入,触发回调函数on_updata,在回调函数内读取地址LW1000的值来对告警进行触发或关闭,通过回调函数on_get_warning_param返回告警参数,在回调函数on_parse_warning内拼接文本内容返回告警内容,代码如下显示:
function on_get_warning_param(warning_id)
local data0,data1,data2,data3 = 0,0,0,0
if warning_id == 1
then
data0 = get_uint16(VT_LW, 0x1200)
data1 = get_uint16(VT_LW, 0x1201)
data2 = get_uint16(VT_LW, 0x1202)
data3 = get_uint16(VT_LW, 0x1203)
end
print('on_get_warning_param('..warning_id..') : '..data0..', '..data1..', '..data2..', '..data3)
return data0,data1,data2,data3
end
--告警解析
function on_parse_warning(warning_id,text,screen_id,control_id, p0,p1,p2,p3)
local id = 0
text = nil
if warning_id == 1
then
text = '馈线'..(string.format('%03d', p0))..' '..'电流上限告警:' ..' '..(p1/10)..'A\n'..(string.format('%03d', p2))..'号箱电压:'..(p3/10)..'V'
end
if text ~= nil
then
return text, 1
end
end
function on_init()
warning_set_mode(1)--告警脚本解析
end
function on_update(slave,vtype,addr)
if vtype == VT_LW and addr == 0x1000
then
local val = get_uint16(VT_LW, 0x1000)
warning_set(1 , val, 1)
end
end
4.运行预览
运行虚拟屏,通过字设置按钮对数值控件进行数值写入,点击位状态指示灯触发告警查看告警带参数显示,如下所示:
