Allgemeines Konzept des Handshakes
Die Kommunikation mit der Anwendung LumiScan AI Object Matching beruht auf dem allgemeinen Konzept des Handshakes. Die Namenskonvention für Handshake-Parameter besteht in der Regel aus der Funktion und den Namen -ready oder -request.
Der Handshake funktioniert auf dem ctrlX Data Layer und auf LumiScan Keryx gleich. Seine allgemeinen Regeln sind in Handshake beschrieben; diese Seite beschreibt, wie AI Object Matching ihm folgt und wo es abweicht.
| Adresse | Beschreibung |
|---|---|
|
Schreibgeschützt, von unserer App gesetzt, um anzuzeigen, ob die jeweilige Funktion ausgeführt werden darf. |
|
Beschreibbar. Wird vom Anwender gesetzt, um unsere Anwendung zur Ausführung der jeweiligen Funktion zu veranlassen. |
Ausführung einer Funktion
|
Um nicht jedes Mal die gesamte Adresse zu wiederholen, werden in diesem Abschnitt der unveränderliche Teil mit der übergeordneten Adresse und der variable Funktionsname (inference, reset) durch XXX ersetzt. Die Adresse Entsprechend wird die Adresse |
Um eine Funktion auszuführen, führen Sie die folgenden Schritte aus (siehe auch die Abbildung Schritte der Funktionsausführung):
-
Warten Sie, bis XXX/ready auf True gesetzt ist.
-
Setzen Sie XXX/request auf True.
Stellen Sie sicher, dass jeweils 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 dadurch das XXX/request von Prozess A übersehen.
-
-
Warten Sie, bis XXX/ready auf False wechselt: Die Anwendung hat den Request erkannt.
-
Setzen Sie XXX/request auf False.
-
Warten Sie, bis XXX/ready wieder True ist: Die Funktion ist abgeschlossen.
-
Lesen Sie
control/status/codeund die Ergebnisse.
%% 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 Funktion läuft
Nicht jede Funktion wartet, bis XXX/request zurückfällt, bevor sie startet:
| Funktion | Läuft | status/code am Ende |
|---|---|---|
|
Sofort, sobald die Anwendung den Request erkennt. |
|
|
Sofort, ohne zu warten, bis XXX/request zurückfällt. Läuft in jedem Zyklus erneut, solange XXX/request True bleibt. |
|
|
Nachdem XXX/request zurückgefallen ist. |
|
Solange das Modul einen Fehler hat, ignoriert es jeden Request außer reset. XXX/ready zeigt weiterhin
True, aber der Request wird nie quittiert: XXX/ready fällt nicht. Fordern Sie reset an.
Solange der Bild-Stream läuft, ist inference/ready False. Eine trotzdem angeforderte Inferenz setzt
status/code auf 100002 (StreamActive) und wird nicht quittiert.
Ausgang einer Inferenz
Eine über den Handshake angeforderte Inferenz endet unabhängig von ihrem Ausgang mit status/code 3.
Den Ausgang erkennen Sie an hdvisionsystems/lumiscan-ai-object-matching/<network name>/output/package-identifier:
Er steigt mit jeder erfolgreichen Inferenz um eins, und nur dann.
Ist er nicht gestiegen, ist die Inferenz fehlgeschlagen. Entweder:
-
konnte das Bild nicht gelesen werden: Es gab kein Bild, oder es war leer. Stellen Sie ein Bild bereit und fordern Sie die Inferenz erneut an; oder
-
die Inferenz selbst ist fehlgeschlagen. Das Modul hat dann einen Fehler und ignoriert jeden Request außer
reset(siehe oben). Fordern Sieresetan und prüfen Sie das Log der Anwendung auf die Ursache.
Um den Ausgang direkt zu lesen, starten Sie die Inferenz stattdessen mit
control/inference/execute. status/code behält ihn dann: 0, 100001 oder -1. Siehe
Eine Methode ausführen.