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 튜토리얼「告警过滤」,版权归大彩科技所有。

실제 프로젝트에 이 자료를 활용하시겠습니까?

도구 센터에서 프레임 분석, CRC 검증, 장비 디버깅을 진행하거나 요청을 제출하여 선정 및 연동 제안을 받아보세요.

엔지니어 회원

이 글을 실행 가능한 디버깅 자료로 활용하세요

가입하면 고급 프레임 분석, 자료 패키지 다운로드, 코드 예제, 엔지니어링 사례, 우선 기술 지원을 이용할 수 있어 실제 프로젝트 납품에 적합합니다.

고급 도구 무제한 이용
자료 패키지와 코드 패키지
완전한 엔지니어링 사례 라이브러리
우선 기술 지원 채널

답글 작성

이메일 주소는 공개되지 않습니다. 必填项已用 * 标注