Grundkonzept des Handshakes

Jede Funktion eines Moduls kann mit einem Handshake auf zwei Knoten gestartet werden, ready und request (Tabelle 1). Eine Funktion kann stattdessen auch mit einem einzigen Schreibzugriff auf ihre execute-Methode gestartet werden, siehe Execute-Methoden. Der Handshake aller LumiScan-Anwendungen ist unter Handshake 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.

Eine Funktion ausführen

  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
%% 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.

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.

Ein Programm, das sich nicht mit anderen abstimmen kann, kann stattdessen die execute-Methoden verwenden, die einen zweiten Aufruf ablehnen, solange einer läuft.