VisualHMI LUA 告警集中管理:warning_set 批量触发与 8 从机解析

免费免费技术资料

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

本文目录
  1. 1. 1. API
  2. 2. 2. 场景:8 台 PLC 告警集中管理
  3. 3. 3. LUA 实现
  4. 4. 3.1 初始化
  5. 5. 3.2 触发/解除告警
  6. 6. 3.3 解析告警文本(带从机前缀)

多台 PLC 告警数量庞大时,图形化告警配置效率低。用 LUA 脚本做告警集中管理:warning_set_mode 开启脚本告警,warning_set 按位批量触发/清除,on_parse_warning 动态生成告警文本。

1. API

函数 说明
warning_set_mode(en) 告警模式总开关:1=开启 Lua 解析告警模式,0=关闭。必须先调用,否则 warning_set 无效
warning_set(warning_id, value, count) 按位批量设置:value 是位掩码,低 count 位对应从 warning_id 开始 count 个告警(1=触发,0=清除),count 1~16
on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3) 告警内容动态解析回调,返回自定义字符串(可拼接变量/单位/状态)+ 编码标志(1=UTF8/0=GBK)

VisualHMI LUA 告警集中管理:warning_set 批量触发与 8 从机解析插图

2. 场景:8 台 PLC 告警集中管理

Modbus RTU 总线挂 8 台 PLC(站地址 1~8),每台 100 个同构告警点,告警起始地址 4×1000、连续 6 个地址(每个地址 16 个 bit 对应 16 个告警)。

工程配置:工程→告警设置,告警条数设 768(8 台×96 条,不能小于实际条数)。告警控件属性按需配。

VisualHMI LUA 告警集中管理:warning_set 批量触发与 8 从机解析插图1

3. LUA 实现

3.1 初始化

function on_init()
  warning_set_mode(1)          -- 启用 Lua 告警解析
  set_auto_read(0)             -- 脚本控制读取
  create_resp_que()            -- 队列发送, 使能回调 on_cmd_resp
  for i = 0, 7 do
    select_slave(i)
    start_read(i+1, VT_4x, 0x1000, 6)  -- 读从机1~8的告警
  end
end

3.2 触发/解除告警

on_cmd_resp 里解析每个从机、每个寄存器(0x1000~0x1005)、每个 bit:

-- 告警文本表: 4x1000 bit0~bit15 ... 4x1005 bit0~bit15 共96条
_warningTb = {
  "相序保护","水流开关保护","水位开关保护","制热出水温度过高",
  "下水流开关断开","1#电流故障","2#电流故障","线控器通讯故障",
  -- ... 完整96条见源文档
}

function on_cmd_resp(slave, vtype, addr, count, ret, wr)
  if ret == 0 and wr == 0 then
    if vtype == VT_4x and addr == 0x1000 and count == 6 then
      select_slave(slave)  -- 从机1~8
      for i = 0, 5 do      -- 6个告警寄存器
        local val = get_uint16(VT_4x, 0x1000 + i)
        for j = 0, 15 do   -- 16个bit
          local idx = i*16 + j + 1
          -- 跳过"预留"位: idx==35, 41~48, 85~96
          if idx ~= 35 and not (idx >= 41 and idx = 85 and idx > j) & 0x01), 1)
          end
        end
      end
    end
  end
end

3.3 解析告警文本(带从机前缀)

function on_parse_warning(id, text, screen_id, control_id, p0, p1, p2, p3)
  local slaveId = (id // 96) + 1     -- 第几个从机
  local msgId   = id % 96            -- 告警类型ID
  if msgId == 0 then msgId = 96 end
  local curWarnMsg = "从机" .. string.format("%02d", slaveId) .. ": " .. _warningTb[msgId]
  return curWarnMsg, 1               -- 返回GBK编码(0=UTF8/1=GBK)
end

VisualHMI LUA 告警集中管理:warning_set 批量触发与 8 从机解析插图2

告警集中管理三要点:①warning_set_mode(1) 必须最先调用;②warning_set 的 value 是 16 位掩码,一次最多批量设 16 条;③on_parse_warning 的返回编码参数别搞反——1=GBK、0=UTF-8,和中文显示乱码直接相关

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

技术术语(共 3 个)—— 点击展开
Modbus RTU基于串行链路的Modbus协议,使用二进制编码和CRC校验
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
PLC可编程逻辑控制器,工业自动化控制的核心设备
来源/工具信息 —— 点击展开
来源 Modbus.cn — China's leading Modbus communication protocol technical community 分类 LUA 脚本 / 串口屏/HMI 开发 字数 1745 字 · 阅读约 5 分钟 更新 2026-08-04 永久链接 http://www.modbus.cn/en/51503.html
Recommended: Modbus Debug Assistant Mini Program
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

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

工程师会员

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

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

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

发表回复

Your email address will not be published. 必填项已用 * 标注