Grundkonzept des Handshakes

Die Kommunikation in der Anwendung LumiScan CamDriver beruht auf dem Grundkonzept des Handshakes. Die Namenskonvention für Handshake-Parameter besteht in der Regel aus der Funktionalität und den Namen -ready oder -request.

Der Handshake funktioniert für jede Operation außer trigger. Die meisten Operationen können auch mit einem einzelnen Schreibvorgang auf ihren execute-Knoten gestartet werden - siehe Eine Methode ausführen für einen Vergleich der beiden Arten.

Jede Operation hat einen Knoten <parent address>/<functionality name>/ready (schreibgeschützt, von der Anwendung gesetzt: true, wenn die Funktionalität gestartet werden darf) und einen Knoten <parent address>/<functionality name>/request (beschreibbar, von Ihnen gesetzt, um sie zu starten). Der allgemeine Handshake - seine Adressen, sein Ablauf und seine Regeln - ist in Handshake beschrieben. Diese Seite beschreibt, wie der Cam Driver ihm folgt.

Ausführung einer Funktionalität

Um nicht jedes Mal die gesamte Adresse zu wiederholen, werden in diesem Abschnitt der unveränderliche Teil mit der übergeordneten Adresse und der variable Funktionalitätsname (capture, connect-camera, disconnect-camera) durch XXX ersetzt.
Die Adresse hdvisionsystems/lumiscan-cam-driver/<camera name>/control/connect-camera/ready wird also als XXX/ready geschrieben.

Entsprechend wird die Adresse hdvisionsystems/lumiscan-cam-driver/<camera name>/control/connect-camera/request als XXX/request geschrieben.

Stellen Sie sicher, dass immer nur ein Prozess auf XXX/request zugreift.
Das Ergebnis der Ausführung ist undefiniert, wenn:
  1. Prozess A XXX/request auf True setzt.

  2. Prozess B XXX/request auf False setzt, ohne Prozess A zu berücksichtigen.

  3. Unsere Anwendung könnte dann XXX/request von Prozess A verpassen.

Um eine Funktionalität auszuführen, führen Sie die folgenden Schritte aus (siehe auch Schritte zur Ausführung einer Funktionalität):

  1. Warten Sie, bis XXX/ready auf True gesetzt ist.

  2. Setzen Sie XXX/request auf True.

  3. Warten Sie, bis XXX/ready auf False wechselt: Die Anwendung hat den Request erkannt.

  4. Setzen Sie XXX/request auf False.

  5. Warten Sie, bis die Funktionalität abgeschlossen ist, und lesen Sie ihren Ausgang: siehe die Tabelle unten.

Schritte zur Ausführung einer Funktionalität
%% Der ready/request-Handshake. Mermaid rendert es im Browser; bearbeiten und Vorschau unter https://mermaid.live
sequenceDiagram
  autonumber
  participant C as Client (SPS oder Programm)
  participant M as Modul
  M-->>C: ready = true: die Funktion kann starten
  C->>M: request = true
  M-->>C: ready = false: die Anforderung wurde gesehen
  C->>M: request = false
  Note over M: führt die Funktion aus
  M-->>C: ready = true: die Funktion ist fertig
  C->>M: control/status/code und output/ lesen

Wann eine Funktionalität läuft

Es wird immer nur ein Request bedient, in dieser Reihenfolge: reset, connect-camera, disconnect-camera, save, capture, load, list-images, remove.

Tabelle 1. Wann jede Funktionalität läuft
Funktionalität Läuft Am Ende

capture

Sofort, sobald die Anwendung den Request erkennt: Sie wartet nicht, bis XXX/request zurückfällt. status/code ist 2 (running), solange es läuft, dann 3 (waitingForClient), solange die Anwendung darauf wartet, dass XXX/request zurückfällt.

Erfolg: status/code 0, capture/ready True, und output/package-identifier ist um eins gestiegen.
Fehler: status/code bleibt 3, nicht der Fehlercode des Capture, und capture/ready bleibt False, bis ein reset erfolgreich ist.

connect-camera, disconnect-camera, reset, save, load, list-images, remove

Nachdem XXX/request zurückgefallen ist. status/code ist bis dahin 3 und 2, solange sie läuft.

status/code 0 oder ein Fehler (unter 0).

Ein fehlgeschlagenes capture, reset, save oder load bleibt gespeichert: Sein Status bleibt bestehen, bis ein reset erfolgreich ist. (Ein save, bevor etwas aufgenommen wurde, -10005, wird nicht gespeichert.) Jeder andere Fehler steht nur etwa 100 ms auf status/code, dann ersetzt ihn 0. Prüfen Sie also, ob die Kamera verbunden ist, mit hdvisionsystems/lumiscan-cam-driver/<camera name>/device-info/is-connected, nicht mit dem Status.

Um den Ausgang eines Capture direkt zu lesen, verwenden Sie stattdessen control/capture/execute. Der Status behält dann den eigenen Code des Capture. Siehe Eine Methode ausführen.