Aufruf-Funktion: on _ init / on _ run / on _ press / on _ update

kostenlosKostenloses technisches Material

Dieser Inhalt ist direkt lesbar und eignet sich für das Grundlagenlernen und die Suche.

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ückweisungAuslöser ZeitNutzung
on_init()Einmal nach dem Aufladendofile 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 MalTastenverarbeitung, freie Wartezeit
on_update(slave,vtype,addr)VariablenwertänderungDatengesteuerte Logik (empfohlen)
on_screen_change(screen)Nach dem BildschirmwechselBildinitialisierung, 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
end

4. 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
end

5. 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.

Vier Gruben:1on_run ist streng verboten delay_ms / long loop, wird die Hauptschleife blockieren;2Modbus Master Station schreibt nicht in on_run HochfrequenzBusverstopfung ohne Diskussion;3on_update set_xxx wird nicht wieder auslösen Callbackerwarten Sie nicht, dass die Kette auslöst;Setzen Sie _ EN _ ON _ UPDATA _ API _ auf 0 vor der Initialisierung des Registersvor der Masseninitialisierung des Registers, um einen Callback-Sturm zu vermeiden

Aus dem VisualHMI-Entwicklungsdokument von Guangzhou Dacai Technology (hmi-doc.gz-dc.com) LUA-Tutorial "Systemrufeback" zusammengestellt, das Urheberrecht liegt bei Dacai Technology.

Sollte man diese Informationen für ein echtes Projekt verwenden?

Gehen Sie zum Tool Center, um Nachrichten zu analysieren, CRC-Prüfungen und Geräte-Debugging zu erledigen, oder senden Sie Anforderungen für Auswahl - und Zugangsvorschläge.

Ingenieur Mitglied

Verwandeln Sie diesen Artikel in ein umsetzbares Debuggermaterial

Erweiterte Nachrichtenanalyse, Paket-Downloads, Codebeispiele, Engineering-Szenarien und Priority-Technischer Support sind für die Real-Projekt - Bereitstellung möglich.

Unbegrenzte Werkzeuge
Datenpaket und Codepaket
Vollständige Engineering Case-Basis
Vorrangiger Zugang zum technischen Support

Antwort veröffentlichen

Ihre E-Mail - Adresse wird nicht öffentlich gemacht. Erforderliche Elemente wurden verwendet * markiert.