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.

Tabelle 1. Allgemeines Konzept des Handshakes: Adresse
Adresse Beschreibung

<parent address>/<functionality name>/ready

Schreibgeschützt, von unserer App gesetzt, um anzuzeigen, ob die jeweilige Funktion ausgeführt werden darf.

<parent address>/<functionality name>/request

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 hdvisionsystems/lumiscan-ai-object-matching/<network name>/control/inference/ready wird also als XXX/ready geschrieben.

Entsprechend wird die Adresse hdvisionsystems/lumiscan-ai-object-matching/<network name>/control/inference/request als XXX/request geschrieben.

Um eine Funktion auszuführen, führen Sie die folgenden Schritte aus (siehe auch die Abbildung Schritte der Funktionsausführung):

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

  2. 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:

    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 dadurch das XXX/request von Prozess A übersehen.

  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 XXX/ready wieder True ist: Die Funktion ist abgeschlossen.

  6. Lesen Sie control/status/code und die Ergebnisse.

Schritte der Funktionsausführung
%% 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:

Tabelle 2. Wann die einzelnen Funktionen laufen
Funktion Läuft status/code am Ende

inference

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

3, unabhängig davon, ob die Inferenz erfolgreich war. Siehe Ausgang einer Inferenz.

reset

Sofort, ohne zu warten, bis XXX/request zurückfällt. Läuft in jedem Zyklus erneut, solange XXX/request True bleibt.

0

list-result-files, load, save, save-result-image, remove

Nachdem XXX/request zurückgefallen ist. status/code ist vom Request bis zum Abschluss 2.

0 oder ein Fehler (unter 0)

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 Sie reset an 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.