Der System-Aufruf wird zwischen dem LUA und dem HMI-Kern durchgeführt.Ereignis-SchnittstelleDer Kernel setzt Ihre Funktionen automatisch zu einem bestimmten Zeitpunkt ein, Sie müssen nicht pollen, nicht selbst auslösen. Das Verständnis des Trigger-Timings und der Beschränkungen für jeden Rückruf ist eine Voraussetzung für das Schreiben stabiler Skripte.
1. Rückübertragung der Gesamtliste
| Zurückweisung | Auslöser Zeit | Nutzung |
|---|---|---|
on_init() | Einmal nach dem Aufladen | dofile Lade-Modul, Initialisierungsparameter / PLC / Laufwerk |
on_run(screen) | Zyklus-Ausführung (set_run_cycle-Einstellungszyklus) | Kern-Planungseingang, periodische Aufgabe |
on_press(state,x,y) | Berührungsereignis, 100ms bis zu einem Mal | Tastenverarbeitung, freie Wartezeit |
on_update(slave,vtype,addr) | Variablenwertänderung | Datengesteuerte Logik (empfohlen) |
on_screen_change(screen) | Nach dem Bildschirmwechsel | Bildinitialisierung, Zustandsynchronisierung |
2. on _ run: Zyklusplanung
on _ run ist ein Zyklus-Callback, in dem die Dauer der Arbeit viel kleiner sein muss als der Zyklus. Drei Tabu:
- Modbus RTU Master Hochfrequenz Schreiben leicht Bus-Verstopfung- - on_run nicht in der Regel pro Sekunde Schreiben von Frames
- Nicht verfügbar delay_ms, lange Schleife, Netzwerk-Synchronisation- blockieren Sie die Hauptschleife, Bild-Gesamtkarte
- Set_run_cycle-Stoplock verboten- - Ein Rückruf kann dazu führen, dass es nie ausgelöst wird
function on_init() set_run_cycle(1000) -- 设定 1 秒周期 end function on_run(screen) -- 每秒做一次的事情:状态轮询、超时判断 end
3. on_press: Touch-Rückruf und Leerlauf
on_press(state, x, y), state: 0 = hoch, 1 = gedrückt, 2 = lang gedrückt. Es wird maximal einmal pro 100 ms ausgelöst. Typische VerwendungInstandhaltung Energieeinsparung: Seit einiger Zeit nicht automatisch ausgeschaltet / übersprungen Homepage berührt.
_IDLE_TIMEOUT = 300000 -- 5分钟无操作
_idle_tick = 0
function on_press(state, x, y)
_idle_tick = 0 -- 有触摸就重置计时
end
function on_run(screen)
_idle_tick = _idle_tick + 1000 -- 假设周期1s
if _idle_tick >= _IDLE_TIMEOUT then
set_screen(0) -- 跳回主画面
_idle_tick = 0
end
end4. on _ update: Datentreiber (vorrangig)
on_update(slave, vtype, addr) wird bei einer Änderung des Wertes der Variablen ausgelöst, istDatentreiberModus - Ressourcen sparen als on _ run. Drei Eigenschaften müssen Sie wissen:
- Externe Serielle / Modbus-Masterschreibung nicht auslöst- - nur für interne Variablenänderungen im HMI wirksam
- on_update Interpol set_xxx maskt- - unendliche Rekursion verhindert, Wertänderungen werden nicht wieder auslöst
- Globale Variable _ EN_ON_UPDATA_API_Control Switch- - 0 wird vorübergehend deaktiviert, wird bei Batchinitialisierung verwendet
_EN_ON_UPDATA_API_ = 0 -- 初始化期间关回调
-- ... 批量写寄存器 ...
_EN_ON_UPDATA_API_ = 1 -- 开回回调
function on_update(slave, vtype, addr)
if vtype == VT_LW then
if addr == 0x1000 then
-- LW1000 变化了,处理业务
end
end
end5. on _ screen _ change: Initialisierung nach dem Bildschirmwechsel
Nach Abschluss des Bildschirmschaltes wird ausgelöst, um die Initialisierung des Bildschirms, die Zustandsynchronisierung und das Laden von Ressourcen zu erledigen - stabiler als vor dem Bildschirm.
Aus dem VisualHMI-Entwicklungsdokument von Guangzhou Dacai Technology (hmi-doc.gz-dc.com) LUA-Tutorial "Systemrufeback" zusammengestellt, das Urheberrecht liegt bei Dacai Technology.
Antwort veröffentlichen