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:
- Minden bemenetnek, amely hatással van egy működtetőre, legyen
Deadline-ja. Ha lejár, azOnInputTimeoutállítsa semleges, biztonságos állapotba a kimenetet (gáz 0, fűtés ki, kormány középen). - 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. - Vészleállítás: ajánlott egy
Triggertípusúestopbemenet (Multiple = true), amely feloldásig reteszel. - 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.