VisualHMI 告警过滤:on_filter_warning 多设备告警分流

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

告警过滤回调 on_filter_warning(warning_id)(定制固件专属):决定某条告警显示还是不显示。返回 0 不显示、1 显示。典型场景:一台 HMI 管理两台设备,设备 1 的告警(ID 1~100)在画面 0 看,设备 2 的告警(ID 101~200)在画面 2 看——不靠过滤就得建两套告警。

1. 启用过滤

on_init 里置位启用:

function on_init()
  set_uint16(VT_LW, 0x0115, 1)   -- 启用告警过滤
end

function on_filter_warning(warning_id)
  local cur = get_uint16(VT_LW, 0x0114)   -- 当前画面/设备号
  if cur == 0 then
    return (warning_id >= 1 and warning_id = 101 and warning_id <= 200) and 1 or 0
  end
  return 1
end

2. 结合 warning_set 分发

多从机场景:告警数据从 Modbus 读回来,用 warning_set 批量触发,过滤回调只放行当前设备相关的:

-- 读回告警后逐个触发
function on_cmd_resp(slave, vtype, addr, count, ret, wr)
  ...
  for j = 0, 15 do
    local bitv = (val >> j) & 0x01
    warning_set(idx + slave * 100, bitv, 1)   -- 设备号编码进告警ID
  end
end

-- 过滤:只显示当前选中设备的告警
function on_filter_warning(warning_id)
  local dev = get_uint16(VT_LW, 0x0114)      -- 当前设备号
  local wdev = math.floor(warning_id / 100)  -- 告警所属设备
  return (wdev == dev) and 1 or 0
end

刷新显示:切换设备后往 0x0114 写 0x0022 触发告警列表刷新(不同版本刷新机制看固件手册)。

两个坑:①on_filter_warning 返回 0 是隐藏、1 是显示,别写反;②过滤和告警控件是联动关系——过滤只影响显示,告警数据本身还在,切换条件后要主动刷新列表才能看到变化。

整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「告警过滤」,版权归大彩科技所有。

来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 LUA 脚本 / 串口屏/HMI 开发 字数 984 字 · 阅读约 3 分钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51507.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注