Alapfogalmak

Életciklus és biztonság

A példány életciklusa

 létrehozás ─▶ InitializeAsync ─▶ ExecuteAsync ─▶ (leállítás) ─▶ DisposeAsync
                  │                  │
          erőforrás foglalás    fő ciklus; közben:
                                OnSettingsChangedAsync, OnInputTimeout
Hook Mikor fut
InitializeAsync A példány indulásakor: itt foglald le az erőforrásokat. Kivétel esetén a példány Faulted állapotba kerül.
ExecuteAsync(ct) A fő ciklus. A ct jelzi a leállítást. Korai visszatérés megengedett (passzív Komod).
OnSettingsChangedAsync Beállítás változásakor, lásd Beállítások.
OnInputTimeout(port) Egy bemenet határideje lejárt üzenet nélkül.
DisposeAsync Leálláskor: felszabadítás.

A példány állapotai (Starting, Running, Faulted, Stopped) megjelennek a gráfban. Ha az ExecuteAsync kivételt dob, a példány hibával leáll, és az üzenet látszik a felületen.

Állapotjelzés

Context.ReportStatus(KomodHealth.Ok, "21,4 °C");
Context.ReportStatus(KomodHealth.Warning, "Nincs adat");

Az állapot (Ok / Warning / Error) a csomóponton és a dashboardon látszik. Ez az elsődleges módja, hogy a felhasználó lássa, mi van a Komoddal: rövid, emberi szöveget adj.

Failsafe: biztonságos állapot

Egy RC jármű vezérlésénél a legrosszabb eset az, hogy a vezérlés elnémul, miközben a motor tovább megy. Ezért:

  1. Minden bemenetnek, amely hatással van egy működtetőre, legyen Deadline-ja. Ha lejár, az OnInputTimeout állítsa semleges, biztonságos állapotba a kimenetet (gáz 0, fűtés ki, kormány középen).
  2. Hardvernél regisztrálj failsafe-t (Context.Hardware.RegisterFailsafe): a KOFA leálláskor és hibánál előbb lefuttatja, aztán zárja az eszközt. Lásd Hardver.
  3. Vészleállítás: ajánlott egy Trigger típusú estop bemenet (Multiple = true), amely feloldásig reteszel.
  4. Böngészőből érkező vezérlés folyamatosan, ismételve érkezzen (pl. 20 Hz) és Deadline-os legyen: a böngésző eltűnése így biztonságos állásba viszi a járművet. Lásd UI bemenet.

Figyelem

A Komod a szerveren teljes jogú kódként fut. A hibás vagy rosszindulatú csomag kárt tehet a járműben és a gépben is, ezért csak megbízható csomagot telepíts, és saját Komodot is teszteld szimulált hardveren, mielőtt valódi járműre kötöd.

Fejlesztés hardver nélkül

Fejlesztői gépen a hardver szimulált: minden I2C cím válaszol, a kamera tesztképet ad, a Context.Hardware.IsSimulated igaz. A Komodod tehát futtatható valódi eszköz nélkül.

Naplózás

A Logger (ILogger) a KOFA naplójába ír, a példány azonosítójával. Hibát LogError-ral jelezz; az ExecuteAsync-ből kiszökő kivételt a KOFA maga naplózza.