VisualHMI - 告警过滤(定制)

image-20231129090729848

为提升人机界面(HMI)的信息可读性与运维效率,需对来自不同设备的告警事件进行源端区分与分类展示:即设备1产生的告警信息仅显示于“设备1告警列表”,设备2的告警信息则独立呈现于“设备2告警列表”。通过配置告警过滤规则,依据告警变量所属的设备标识或寄存器地址范围,实现告警内容的自动分流与结构化呈现,避免信息混杂,便于操作人员快速定位故障来源。

适用范围:VisualHMI - HMI&M系列&Dx系列(需要定制固件)

入门应用:VisualHMI - 告警过滤(点击下载)

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告警。

image-20260119155832214

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.运行预览

下拉切换画面,显示对应设备的告警,如下所示

Video_2026-01-19_162538 00_00_00-00_00_30

Copyright ©Dacai all right reserved,powered by Gitbook该文件修订时间: 2026-02-05 15:29:15

results matching ""

    No results matching ""