VisualHMI 定时器:시작_timer/on_timer 与倒计时完整案例

무료무료 기술 자료

이 글은 바로 읽을 수 있으며 기초 학습과 검색 유입에 적합합니다.

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

1. API 总表

函数매개변수설명
시작_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()
  시작_timer(0, 1000, 0, 0)   -- 1秒周期,无限重复
  시작_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)
      시작_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);시작_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 튜토리얼「定时器」,版权归大彩科技所有。

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

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

엔지니어 회원

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

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

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

답글 작성

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