Lua-Unterstützung für VisualHMI32 Software-Timer(Index 0 ~ 31). Nach dem Start wird ein Timeouton_timer(timer_id)ausgelöst, um periodische Aufgaben, verzögerte Operationen und Status-Abfragen durchzuführen. und️ Dies ist einApplication-Layer - Software-Timermit einer Genauigkeit, die von der Systemlast beeinflusst wird,nicht für die Hard-Echtzeit - Steuerung。
1. API Gesamtübersicht
| Funktion | Parameter | Beschreibung |
|---|---|---|
start_timer(timer_id, timeout, countdown, repeat) | timeout millisekunden (minimum ca. 10 ~ 20ms); countdown 0 = vorwärtszeit / 1 = Countdown; repeat 0 = unendliche Wiederholung / N = automatisch nach N-Trigger stoppt | Start des Timers |
stop_timer(timer_id) | Timeout-Rückruf Unified Port | Sofort stoppt |
on_timer(timer_id) | Timer-ID | Unterscheidung von gleichzeitigen Timern mit timer _ id |
get_timer_value(timer_id) | Timer-ID | erhalten den aktuellen Zeitwert (ms), unterstützt vorwärts / Countdown |
Countdown Parameternur beeinflussen internen Timer-Anzeige / DebuggingDas Triggerverhalten von on _ timer wird nicht geändert - der Zeituntergang bis zum Trigger Timeout, der Countdown von Timeout bis zum Trigger 0 reduziert und der Rückruf ist derselbe.
2. Basisnutzung
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
end3. Anwendung: Anweisung an die PLC nach Abschluss des Countdowns
Anforderung: Einstellung der Zeit / Minute nach dem Countdown, Countdown beendet Reset-Button und Anweisungen an das Motherboard. Layout der Steuerung: Bit-Status - Anzeige LW1002 (Schalter) steuert Start-Stopp; Rollsteuerung LW1000 (Stunden, 0 ~ 23), LW1001 (Minuten) Zeit; Textsteuerung LW1010 Zeige Countdown.
_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
endWichtige Punkte: _TIMER_REPEAT_ wird berechnet, wenn der Benutzer die Dauer festlegt (stunde * 3600 + min * 60); die Gesamtzahl der Wiederholungen von start _ timer, auf _ timer wird _TIMER _ CNT _ jedes Mal akkumuliert, gleich ist das Ende. set_notify(0/1) Steuert, ob eine Anweisung während des Timers ausgegeben wird oder nicht, wobei ein Set 1 ausgegeben wird.
Aus dem VisualHMI-Entwicklungsdokument von Guangzhou Dacai Technology (hmi-doc.gz-dc.com) LUA-Tutorial "Timer" zusammengestellt, das Urheberrecht liegt bei Dacai Technology.
Antwort veröffentlichen