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: |
-
Prozess A XXX/request auf True setzt.
-
Prozess B XXX/request auf False setzt, ohne Prozess A zu berücksichtigen.
-
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):
-
Warten Sie, bis XXX/ready auf True gesetzt ist.
-
Setzen Sie XXX/request auf True.
-
Warten Sie, bis XXX/ready auf False wechselt: Die Anwendung hat den Request erkannt.
-
Setzen Sie XXX/request auf False.
-
Warten Sie, bis die Funktionalität abgeschlossen ist, und lesen Sie ihren Ausgang: siehe die Tabelle unten.
%% 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.
| Funktionalität | Läuft | Am Ende |
|---|---|---|
|
Sofort, sobald die Anwendung den Request erkennt: Sie wartet nicht, bis XXX/request zurückfällt.
|
Erfolg: |
|
Nachdem XXX/request zurückgefallen ist. |
|
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.