Útmutatók

Hardver (I2C, kamera)

A hardvert a Context.Hardware (IHardwareAccess) adja. Minden eszköz egy erőforrás (i2c-1:0x40, video:/dev/video0, gpio:18), amelyet egyszerre csak egy példány használhat. A második példány hibával (Faulted, „foglalt: a(z) 'X' példány használja”) áll le.

protected override Task InitializeAsync(CancellationToken ct)
{
    _device = Context.Hardware.OpenI2cDevice(Settings.BusId, Settings.Address); // lefoglal és megnyit
    WriteNeutral();
    Context.Hardware.RegisterFailsafe(() => { lock (_lock) WriteNeutral(); });   // watchdog
    return Task.CompletedTask;
}

Szabályok

  • A megnyitott eszközök a példányéi: leálláskor és hibánál a KOFA előbb lefuttatja a regisztrált failsafe-eket, aztán lezárja az eszközöket és felszabadítja a foglalást. A DisposeAsync-ben nem kell (és nem érdemes) lezárnod őket.
  • Ha a beállításokból kiderül, milyen erőforrás kell, a beállítás-rekord valósítsa meg az IHardwareResourceSettings-et: a gráf ellenőrzése így már alkalmazás előtt jelzi, ha két csomópont ugyanazt kérné.
  • Működtetőnél (motor, szervó, relé) a bemeneti Deadline + OnInputTimeout kötelező, és ajánlott egy estop bemenet is; lásd Életciklus és biztonság.

Kamera

OpenVideoCapture(new VideoCaptureOptions(device, width, height, fps)), majd ReadFramesAsync JPEG képkockákat ad (MJPEG-et dekódolás nélkül). A kimenet típusa CameraFrame. A képkocka nagy adat: távoli használatnál relay prioritás Low való rá.

A Kofa.Abstractions.Imaging egy baseline JpegDecoder-t és egy ImageResampler.ResizeBox átméretezőt ad. A progresszív JPEG-et nem dekódolja; egy JpegDecoder példányt egy szálról használj.

Szimulált hardver

Fejlesztői gépen (Windows, macOS) a szimulált backend fut: minden I2C cím válaszol (a regisztereket tárolja), a kamera tesztképet ad, és a Context.Hardware.IsSimulated igaz. Így a Komodod valódi eszköz nélkül is kipróbálható.

Más eszközök (GPIO, soros port)

Az Acquire("gpio:18") lefoglal egy erőforrást anélkül, hogy eszközt nyitna: a lábat vagy portot te magad hajtod (például saját NuGet csomaggal, mint a System.Device.Gpio), a foglalás pedig megakadályozza, hogy egy másik példány ugyanazt használja. A visszaadott IHardwareLease-t a leállítás felszabadítja. Natív könyvtárak: Natív függőségek.