---
title: "Grundkonzept des Handshakes"
product: "LumiScan Calibration"
component: "lumiscan-calibration-de"
version: "2.0.0"
display_version: "2.0.0.8"
latest_version: true
language: "de"
url: "https://docs.hdvisionsystems.com/de/lumiscan-calibration-de/2.0.0/lumiscan-calibration/general-concept-of-handshake.html"
---

# Grundkonzept des Handshakes – LumiScan Calibration

Jede Funktion eines Moduls kann mit einem Handshake auf zwei Knoten gestartet werden, `ready` und `request` ([Tabelle 1](https://docs.hdvisionsystems.com/de/lumiscan-calibration-de/2.0.0/lumiscan-calibration/general-concept-of-handshake.html#table-1-handshake-address)). Eine Funktion kann stattdessen auch mit einem einzigen Schreibzugriff auf ihre `execute`-Methode gestartet werden, siehe [Execute-Methoden](https://docs.hdvisionsystems.com/de/lumiscan-calibration-de/2.0.0/lumiscan-calibration/functionalities.html#execute). Der Handshake aller LumiScan-Anwendungen ist unter [Handshake](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/handshake.html) beschrieben; LumiScan Calibration folgt seinem Ablauf genau.

**Tabelle 1. Tabelle 1: Grundkonzept des Handshakes: Adressen**

| Adresse | Beschreibung |
| --- | --- |
| `<module address>/control/<function name>/ready` | Schreibgeschützt. Vom Modul gesetzt: `true`, wenn die Funktion gestartet werden kann. |
| `<module address>/control/<function name>/request` | Beschreibbar. Vom Client gesetzt, um die Funktion zu starten. |

`<module address>` ist `hdvisionsystems/lumiscan-calibration/<module name>`, und der Funktionsname ist `transform` oder `reset`. Die Eingaben einer Funktion liegen unter `<module address>/input/` und ihre Ergebnisse unter `<module address>/output/`. Die Knoten jeder Funktion finden Sie in [Tabelle 2](https://docs.hdvisionsystems.com/de/lumiscan-calibration-de/2.0.0/lumiscan-calibration/functionalities.html#table-2-functionality-addresses).

## Eine Funktion ausführen {#functionality-execution}

1. Warten Sie, bis `control/<function name>/ready` `true` ist.
2. Hat die Funktion Eingaben, schreiben Sie sie, zum Beispiel `input/x-coordinate` und `input/y-coordinate`.
3. Setzen Sie `control/<function name>/request` auf `true`.
4. Warten Sie, bis `control/<function name>/ready` `false` ist: Das Modul hat den Request erkannt.
5. Setzen Sie `control/<function name>/request` auf `false`.
6. Das Modul führt die Funktion aus.
7. Wenn die Funktion abgeschlossen ist, ist `control/<function name>/ready` wieder `true`.
8. Lesen Sie `control/status/code` und die Ergebnisse unter `output/`.

**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
```

Gut zu wissen:

- Das Modul wartet darauf, dass `request` zurückfällt, so lange es dauert. Es gibt kein Timeout, weil ein `request`, das danach noch `true` ist, als neuer Request gelesen würde.
- Ein Reset, der angefordert wird, während ein Transform darauf wartet, dass sein `request` zurückfällt, hat Vorrang: Der Transform wird verworfen, und der Reset wird als Nächstes ausgeführt.
- Ein Fehlerstatus bleibt auf `control/status/code` stehen bis zum nächsten Request.

> [!IMPORTANT]
> Stellen Sie sicher, dass nur ein Prozess `control/<function name>/request` schreibt: Ändern ihn mehrere Prozesse unabhängig voneinander, kann das Modul einen Request verpassen. Siehe [Handshake: Regeln](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/handshake.html#rules).
>
> Ein Programm, das sich nicht mit anderen abstimmen kann, kann stattdessen die `execute`-Methoden verwenden, die einen zweiten Aufruf ablehnen, solange einer läuft.
