Handshake

Der Handshake ist für eine Operation gedacht, die länger als etwa 1 s dauern kann oder die ein Client starten muss, ohne auf sie zu warten. Client und Modul wechseln sich auf zwei Knoten ab, ready und request. Niemand wartet innerhalb eines Aufrufs: Der Client pollt, und das Modul antwortet über Knoten.

Cam Driver, AI Object Matching und Calibration bieten Handshakes an.

Adressen

Adresse Typ Bedeutung

<module>/control/<function>/ready

bool, schreibgeschützt

vom Modul gesetzt: true, wenn die Funktion gestartet werden kann

<module>/control/<function>/request

bool, beschreibbar

vom Client gesetzt, um die Funktion zu starten

<module>/control/status/code

int32, schreibgeschützt

der Status des Moduls, einer für alle seine Funktionen. Siehe Statuscodes und Ergebnisse

<module>/control/status/text

string, schreibgeschützt

dasselbe als Text, für Menschen - verwenden Sie in der Programmlogik den Code

<module>/input/…​

beschreibbar

die Eingaben der Funktion, vor dem Request geschrieben

<module>/output/…​

schreibgeschützt

ihre Ergebnisse

<module>/output/package-identifier

schreibgeschützt

zählt abgeschlossene Operationen: Ein neuer Wert bedeutet neue Ausgaben

<module> ist hdvisionsystems/<app>/<module name>, zum Beispiel hdvisionsystems/lumiscan-calibration/plane1/control/transform/request.

Der Ablauf

  1. Warten Sie, bis control/<function>/ready true ist.

  2. Schreiben Sie die Eingaben der Funktion.

  3. Setzen Sie control/<function>/request auf true.

  4. Warten Sie, bis ready false ist: Das Modul hat den Request erkannt.

  5. Setzen Sie request auf false.

  6. Warten Sie, bis ready wieder true ist: Die Funktion ist abgeschlossen.

  7. Lesen Sie control/status/code und die Ergebnisse unter output/. output/package-identifier ist um eins gestiegen.

Pollen Sie im Abstand von 50 bis 100 ms.

Was das Modul anzeigt

So, wie Calibration ihn ausführt:

Schritt ready request status/code

Leerlauf

true

false

0 ready, oder der letzte Fehler

Der Client fordert an

true

true

Das Modul quittiert

false

true

3 waitingForClient

Der Client bestätigt; die Funktion läuft

false

false

2 running

Fertig

true

false

0, oder ein Fehler (unter 0)

Regeln

  • Nur ein Programm schreibt einen request-Knoten. Schreiben zwei Programme ihn unabhängig voneinander, kann ein Request verloren gehen. Ein Programm, das sich nicht mit anderen abstimmen kann, verwendet die Execute-Methode, die einen zweiten Aufruf ablehnt, solange einer läuft.

  • Das Modul wartet darauf, dass request zurückfällt, so lange es dauert. Es gibt kein Timeout: Ein request, das danach noch true ist, würde als neuer Request gelesen.

  • Ein Handshake und eine Execute-Methode desselben Moduls teilen sich eine Sperre. Während ein Handshake läuft, antwortet ein Execute-Aufruf desselben Moduls, dass es belegt ist.

Unterschiede zwischen den Apps

Calibration folgt dem Ablauf genau. Cam Driver und AI Object Matching weichen in Punkten ab, die ein SPS-Programm kennen muss:

App Unterschied

Cam Driver

capture startet, sobald der Request erkannt wird, ohne zu warten, bis request zurückfällt. Ein fehlgeschlagenes Capture endet mit Status 3, nicht mit seinem eigenen Fehlercode, und capture/ready bleibt false, bis ein reset erfolgreich ist. Ein fehlgeschlagenes reset, save oder load bleibt ebenfalls bestehen, bis ein reset erfolgreich ist. Jeder andere Fehler steht nur etwa 100 ms im Status: Prüfen Sie eine Verbindung mit device-info/is-connected, nicht mit dem Status. Ohne Lizenz ist jedes ready false und der Status ist -4.

AI Object Matching

inference startet, sobald der Request erkannt wird, und endet unabhängig vom Ausgang mit Status 3; nur output/package-identifier, das ausschließlich bei Erfolg steigt, zeigt an, dass sie erfolgreich war. Nach einer fehlgeschlagenen Inferenz und solange das Modul einen Fehler hat, wird jeder Request außer reset ignoriert. reset wird sofort ausgeführt. Während der Stream läuft, ist inference/ready false und ein Request erhält Status 100002.

Um den Ausgang eines Cam-Driver-capture oder einer AI-inference direkt zu lesen, verwenden Sie die zugehörige Execute-Methode: Der Status behält dann den eigenen Code der Operation.