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

免费免费技术资料

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

🌐 Diese Seite ist noch nicht auf Deutsch verfügbar. Die chinesische Version wird angezeigt. Zurück zur chinesischen Seite.
本文目录
  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 参数只影响内部计时显示/Tests,不改 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 发指令

需求:设定时/分后倒计时,倒计时Ende复位按钮并给主板发指令。控件布局:位状态指示灯 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_,相等即Ende。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
推荐工具:ModbusTests助手 微信小程序
Modbus中文网官方推出的ModbusDebugging-Tools,支持 Modbus RTU/TCP 实时通信Tests、寄存器读写、线圈控制、Daten监控和报文分析。 无需安装,微信搜索「ModbusTests助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC-Prüfung和设备Tests,或Anforderungen einreichen获取选型与接入建议。

工程师会员

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

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

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

发表回复

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