Alapfogalmak

Portok és adattípusok

A Komodok a portokon keresztül beszélnek egymással. Egy port típusos: csak azonos típusú kimenet és bemenet köthető össze (a gráfszerkesztő nem engedi a hibás kötést).

[Input("temperature", Deadline = "00:00:05")]
public required IInput<Scalar> Temperature { get; init; }

[Output("heater")]
public required IOutput<BoolValue> Heater { get; init; }

A KOFA tölti ki a property-ket a példány létrehozásakor (required … init). A port azonosítója ("temperature") a Komodon belül egyedi, és verziók között stabil legyen, mert a gráf kötései erre hivatkoznak.

Kimenet és bemenet

  • Kimenet: Publish(érték) (a mérés ideje a pillanat) vagy Publish(érték, időbélyeg). Egy kimenet több bemenetre is köthető (szétosztás).
  • Bemenet: ReadAllAsync (folyam), ReadAsync (a következő üzenet), TryRead (nem blokkol), Latest (az utolsó, akkor is, ha már olvastad).
  • Az üzenet egy KofaMessage<T>: Value, Seq (sorszám), TimestampUtc (a mérés ideje), SourceInstanceId.

Bemenet beállításai

[Input] tulajdonság Jelentés
Deadline Idő ("00:00:00.300"). Ha ennyi ideig nem érkezik üzenet, meghívódik az OnInputTimeout. Működtető Komodnál kötelező.
QueueCapacity 0 (alap): csak a legfrissebb érték marad, a régit eldobja (szenzor, vezérlés). Pozitív szám: sor, eseményekhez, naplóhoz.
Multiple Több kimenet köthető a bemenetre; az üzenetek összefésülődnek. Alapból egy forrás köthető.
FromUi A bemenet értékét a böngésző adja, nem kötés. UI bemenet.

Adattípusok

Az adat egy típus; minden típusnak van azonosítója (kofa.scalar/1: név és főverzió). Két port akkor köthető, ha az azonosító és a főverzió egyezik.

A KOFA kész, közös típusokat ad (Kofa.Abstractions.DataTypes), hogy a különböző szerzők Komodjai összekapcsolhatók legyenek:

Típus Azonosító Mire való
Scalar kofa.scalar/1 Általános mérőszám mértékegységgel.
BoolValue kofa.bool/1 Kapcsoló, állapot.
Trigger kofa.trigger/1 Esemény adat nélkül (vészleállítás, reset).
DriveCommand kofa.drive.command/1 Autó: kormány, gáz, fék.
SailCommand kofa.sail.command/1 Vitorlás: kormány, nagyvitorla, orrvitorla.
ActuatorChannels kofa.actuator.channels/1 PWM csatornák értékei.
CameraFrame kofa.camera.frame/1 Kamerakép.

A teljes lista, a mezőkkel: Adattípusok.

Konvenciók: SI mértékegységek (m, m/s, rad, V, A); a szögek radiánban; a normalizált vezérlőjelek [-1, 1] vagy [0, 1] tartományban (a típus leírása megmondja). A felület fokra váltja a szögeket.

Fontos

Mindig a meglévő közös típust használd, ha van ilyen: így a Komodod más szerzők Komodjaival is összeköthető. Új típust csak akkor vezess be, ha egyik sem illik; lásd Saját típusok.

Hogyan utazik az adat

A szerveren belül az objektum maga (másolás nélkül) megy át a Komodok között. A böngésző felé JSON-ként (camelCase, az enumok szövegként) jut el, és a szerver ritkítja (maxRateHz). Nagy adatot (kamerakép) ezért csak szükség szerint, ritkábban küldj; távoli (relay-es) kapcsolatnál lásd a relay prioritást.