VisualHMI 定时器:start_timer/on_timer 与倒计时完整案例

免费免费技术资料

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

本文目录
  1. 1. 1. API 总表
  2. 2. 2. 基础用法
  3. 3. 3. 应用:倒计时完成后给 PLC 发指令

VisualHMI 的 Lua 支持 32 个软件定时器(索引 0~31)。启动后超时触发 on_timer(timer_id) 回调,做周期性任务、延时操作、状态轮询。⚠️ 这是应用层软件定时器,精度受系统负载影响,不适用于硬实时控制

1. API 总表

函数 参数 说明
start_timer(timer_id, timeout, countdown, repeat) timeout 毫秒(最小约 10~20ms);countdown 0=顺计时/1=倒计时;repeat 0=无限重复/N=触发 N 次后自动停 启动定时器
stop_timer(timer_id) 定时器 ID 立即停止
on_timer(timer_id) 超时回调统一入口 用 timer_id 区分并发定时器
get_timer_value(timer_id) 定时器 ID 获取当前计时值(ms),支持顺/倒计时

countdown 参数只影响内部计时显示/调试,不改 on_timer 的触发行为——顺计时到 timeout 触发,倒计时从 timeout 减到 0 触发,回调都是同一个。

2. 基础用法

function on_init()
  start_timer(0, 1000, 0, 0)   -- 1秒周期,无限重复
  start_timer(1, 5000, 1, 1)   -- 5秒倒计时,只触发1次
end

function on_timer(timer_id)
  if timer_id == 0 then
    -- 每秒做一次:状态轮询
  elseif timer_id == 1 then
    -- 5秒后执行一次
  end
end

3. 应用:倒计时完成后给 PLC 发指令

需求:设定时/分后倒计时,倒计时结束复位按钮并给主板发指令。控件布局:位状态指示灯 LW1002(切换开关)控制启停;滚轮控件 LW1000(时,0~23)、LW1001(分)设时长;文本控件 LW1010 显示倒计时。

_TIMER_REPEAT_ = 0     -- 总时长(秒)
_TIMER_CNT_ = 0        -- 已触发次数

function on_update(slave, vtype, addr)
  if vtype == VT_LW and addr == 0x1002 then
    if get_uint16(VT_LW, 0x1002) == 1 and _TIMER_REPEAT_ > 0 then
      stop_timer(0)
      start_timer(0, 1000, 0, _TIMER_REPEAT_)  -- 每秒一次,共 repeat 次
    else
      stop_timer(0)
    end
  end
end

function on_timer(timer_id)
  if timer_id == 0 then
    _TIMER_CNT_ = _TIMER_CNT_ + 1
    local remain = _TIMER_REPEAT_ - _TIMER_CNT_
    -- 显示剩余时间 mm:ss
    set_string(VT_LW, 0x1010,
      string.format("%02d:%02d", math.floor(remain / 60), remain % 60))
    if remain == 0 then
      set_uint16(VT_LW, 0x1002, 0x00)   -- 复位启停按钮
      set_uint16(VT_LW, 0x1003, 0x01)   -- 发指令给主板
    end
  end
end

要点:_TIMER_REPEAT_ 在用户设定时长时计算(hour*3600 + min*60);start_timer 的 repeat 传总次数,on_timer 每次累加 _TIMER_CNT_,相等即结束。set_notify(0/1) 控制定时器期间是否发出指令通知,需要下发时置 1。

三个坑:①软件定时器精度受系统负载影响,做硬实时控制会翻车;②timeout 最小约 10~20ms,别传 1ms 期望准;③repeat=N 触发 N 次后自动停,要无限循环传 0;多个定时器并发时用 timer_id 区分,on_timer 是统一入口。

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

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

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

工程师会员

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

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

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

发表回复

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