VisualHMI - 告警过滤(定制)

为提升人机界面(HMI)的信息可读性与运维效率,需对来自不同设备的告警事件进行源端区分与分类展示:即设备1产生的告警信息仅显示于“设备1告警列表”,设备2的告警信息则独立呈现于“设备2告警列表”。通过配置告警过滤规则,依据告警变量所属的设备标识或寄存器地址范围,实现告警内容的自动分流与结构化呈现,避免信息混杂,便于操作人员快速定位故障来源。
适用范围:VisualHMI - HMI&M系列&Dx系列(需要定制固件)
1.API说明
1.1.on_filter_warning(warning_id)[定制]
告警分类显示过滤回调函数,on_filter_warning(warning_id) 是 HMI 系统提供的告警控制接口,属于定制功能。当一条告警被触发时,系统调用此函数,允许开发者根据 warning_id ,当前的画面ID,返回0 or 1(表示允许显示)。
📊 参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
warning_id |
number | 告警 ID • 与 warning_set 中使用的 ID 一致 • 用于识别告警类型或来源 |
2.应用
若HMI连接2个设备(设备1和设备2)Modbus 通讯,读取设备1和设备2的告警,并区分显示,告警内容如下所示
_warningTb = {
--1~96
'相序保护',
'水流开关保护',
'水位开关保护',
'制热出水温度过高',
'下水流开关断开',
'1#电流故障',
'2#电流故障',
'线控器通讯故障',
'进水传感器故障',
'出水传感器故障',
'水箱传感器故障',
'环境传感器故障',
'1#盘管传感器故障',
'2#盘管传感器故障',
'1#排气传感器故障',
'2#排气传感器故障',
'下回水传感器故障',
'1#回气传感器故障',
'2#回气传感器故障',
'1#高压开关保护',
'2#高压开关保护',
'1#低压开关保护',
'2#低压开关保护',
'冬季防冻保护',
'制冷进出水温度过低保护',
'进出水温差过大保护',
'1#制热环境与盘管温差过大保护',
'2#制热环境与盘管温差过大保护',
'3#制热环境与盘管温差过大保护',
'4#制热环境与盘管温差过大保护',
'3#电流故障',
'4#电流故障',
'1#增焓进口传感器故障',
'2#增焓进口传感器故障',
'预留',
'子设备掉线',
'1#增焓出口传感器故障',
'2#增焓出口传感器故障',
'3#增焓出口传感器故障',
'4#增焓出口传感器故障',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'压机1过载保护',
'压机2过载保护',
'压机3过载保护',
'压机4过载保护',
'内风机1过载保护',
'内风机2过载保护',
'内风机3过载保护',
'内风机4过载保护',
'外风机1过载保护',
'外风机2过载保护',
'外风机3过载保护',
'外风机4过载保护',
'电辅热1过载保护',
'电辅热2过载保护',
'电辅热3过载保护',
'电辅热4过载保护',
'系统1高压保护',
'系统2高压保护',
'系统3高压保护',
'系统4高压保护',
'系统1低压保护',
'系统2低压保护',
'系统3低压保护',
'系统4低压保护',
'系统1排气过高保护',
'系统2排气过高保护',
'系统3排气过高保护',
'系统4排气过高保护',
'系统1电流保护',
'系统2电流保护',
'系统3电流保护',
'系统4电流保护',
'室内翅片1探头故障',
'室内翅片2探头故障',
'室内翅片3探头故障',
'室内翅片4探头故障',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
'预留',
}
2.1.画面配置
在"画面0"添加1个告警显示控件,用来显示设备1的告警,同理,在"画面2"显示设备2告警。

2.2.Lua
2.2.1.初始化告警
由于设备1和设备2的告警均是一致,可以在脚本解析告警内容,在on_init 初始化相关配置
function on_init()
set_auto_read(0) --脚本控制读取
create_resp_que() --队列发送,使能回调 on_cmd_resp
select_slave(0)
start_read(1, VT_4x, 0x1000, 0x0001) --读取从机1告警
select_slave(1)
start_read(2, VT_4x, 0x1000, 0x0001)--读取从机2告警
set_uint16(VT_LW, 0x0115, 1)--启用告警过滤
warning_set_mode(1)--启用脚本解析高级
end
2.2.2.指令/告警解析
在on_cmd_resp 系统通讯回调中,对设备1和设备2告警寄存器按位判断,设备1告警ID为1~100,设备2告警ID为101~200,本例程只演示告警ID1~16/ID101~116,如下所示
--告警解析回调函数
function on_parse_warning(warning_id,text,screen_id,control_id)
if warning_id < 100 --设备1
then
curWarnMsg = '设备1 : '.._warningTb[warning_id]
elseif warning_id > 100--设备2
then
curWarnMsg = '设备2 : '.._warningTb[warning_id % 100]
end
return curWarnMsg, 1
end
--指令解析函数
function on_cmd_resp(slave,vtype,addr,count,ret,wr)
if ret == 0 and wr == 0 --通讯正常 & 读指令
then
if slave == 0 --设备1
then
if vtype == VT_4x and addr == 0x1000 and count == 1
then
select_slave(0)
local val = get_uint16(VT_4x, 0x1000)
for i = 0, 15
do
warning_set(i+1 ,((val >> i) & 0x01), 1)--告警1~16
--print('warning_set('..(i+1)..' ,'..((val >> i) & 0x01)..', 1) : '..val)
end
set_uint16(VT_LW, 0x0114, 0x0022) --刷新告警
end
elseif slave == 1--设备2
then
if vtype == VT_4x and addr == 0x1000 and count == 1
then
select_slave(1)
local val = get_uint16(VT_4x, 0x1000)
for i = 0, 15
do
warning_set(i+101 ,((val >> i) & 0x01), 1)--告警1~16
--print('warning_set('..(i+101)..' ,'..((val >> i) & 0x01)..', 1) : '..val)
end
set_uint16(VT_LW, 0x0114, 0x0022) --刷新告警
end
end
end
end
2.2.3.告警过滤
在告警过滤 on_parse_warning 系统回调函数中,判断当前画面和告警ID,返回1或0,若当前在画面0,且告警warning_id为1~100,返回1,反之,返回0
--告警解析回调函数
function on_parse_warning(warning_id,text,screen_id,control_id)
if warning_id <= 100 --设备1
then
curWarnMsg = '设备1 : '.._warningTb[warning_id]
elseif warning_id > 100--设备2
then
curWarnMsg = '设备2 : '.._warningTb[warning_id % 100]
end
return curWarnMsg, 1
end
--指令解析函数
function on_cmd_resp(slave,vtype,addr,count,ret,wr)
if ret == 0 and wr == 0 --通讯正常 & 读指令
then
if slave == 0 --设备1
then
if vtype == VT_4x and addr == 0x1000 and count == 1
then
select_slave(0)
local val = get_uint16(VT_4x, 0x1000)
for i = 0, 15
do
warning_set(i+1 ,((val >> i) & 0x01), 1)--告警1~16
--print('warning_set('..(i+1)..' ,'..((val >> i) & 0x01)..', 1) : '..val)
end
set_uint16(VT_LW, 0x0114, 0x0022) --刷新告警
end
elseif slave == 1--设备2
then
if vtype == VT_4x and addr == 0x1000 and count == 1
then
select_slave(1)
local val = get_uint16(VT_4x, 0x1000)
for i = 0, 15
do
warning_set(i+101 ,((val >> i) & 0x01), 1)--告警1~16
--print('warning_set('..(i+101)..' ,'..((val >> i) & 0x01)..', 1) : '..val)
end
set_uint16(VT_LW, 0x0114, 0x0022) --刷新告警
end
end
end
end
2.3.运行预览
下拉切换画面,显示对应设备的告警,如下所示
