---
title: "Allgemeines Konzept des Handshakes"
product: "LumiScan AI Object Matching"
component: "lumiscan-ai-object-matching-de"
version: "2.1.0"
display_version: "2.1.0.9"
latest_version: true
language: "de"
url: "https://docs.hdvisionsystems.com/de/lumiscan-ai-object-matching-de/2.1.0/lumiscan-ai-object-matching/general-concept-of-handshake.html"
---

# Allgemeines Konzept des Handshakes – LumiScan AI Object Matching

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](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/handshake.html) 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

> [!NOTE]
> 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](https://docs.hdvisionsystems.com/de/lumiscan-ai-object-matching-de/2.1.0/lumiscan-ai-object-matching/general-concept-of-handshake.html#functionality-execution-steps)):

1. Warten Sie, bis XXX/ready auf **True** gesetzt ist.
2. Setzen Sie XXX/request auf **True**.
   > [!NOTE]
   > Stellen Sie sicher, dass jeweils nur ein Prozess auf XXX/request zugreift.
   >
   > Das Ergebnis der Ausführung ist **undefiniert**, wenn:
   >
   > a. Prozess A XXX/request auf True setzt.
   >
   > b. Prozess B XXX/request auf False setzt, ohne Prozess A zu berücksichtigen.
   >
   > c. 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**

```mermaid
%% 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 {#when-a-functionality-runs}

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](https://docs.hdvisionsystems.com/de/lumiscan-ai-object-matching-de/2.1.0/lumiscan-ai-object-matching/general-concept-of-handshake.html#outcome-of-an-inference). |
| `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 {#outcome-of-an-inference}

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](https://docs.hdvisionsystems.com/de/lumiscan-ai-object-matching-de/2.1.0/lumiscan-ai-object-matching/initializing-the-inference.html#execute-a-method).
