LumiScan in Ihre Anwendung integrieren

Am Ende nimmt Ihr eigenes Programm mit dem Cam Driver ein Bild auf und liest ein Ergebnis des Template Finder. Sieben Schritte; jeder endet mit Erledigt, wenn und verweist auf den nächsten.

Die Beispiele setzen voraus, dass die Apps installiert sind und eine Kamera konfiguriert ist - die Schritte 1 bis 4 von Ihre erste industrielle Vision-Anwendung. Die LumiScan-Apps haben kein eigenes SDK: Jede Funktion ist ein Knoten des Data Layer, daher kann jeder Client sie nutzen, der Data-Layer- oder OPC-UA-Knoten lesen, schreiben und aufrufen kann.

Schritt 1 von 7 - Schnittstelle wählen

1 Schnittstelle · 2 Knoten · 3 Verbinden · 4 Aufruf · 5 Handshake · 6 Ergebnisse · 7 Fehler

Ihr Programm läuft Schnittstelle Hinweise

auf dem ctrlX-Gerät (als eigene App)

ctrlX-Data-Layer-Client

wie jede ctrlX-App, zum Beispiel mit dem ctrlX AUTOMATION SDK gebaut

auf einem PC oder einem anderen Rechner im Netzwerk

OPC UA, über den LumiScan OPC UA Connector

jede OPC-UA-Client-Bibliothek, jede Sprache; die Apps laufen auf einem PC mit LumiScan Keryx

in einem Skript oder Test

krxclient, der Kommandozeilen-Client von LumiScan Keryx

read, write, execute, subscribe, handshake, browse

Knotenadressen und Aufrufmuster sind auf ctrlX OS und auf dem PC gleich; Ihre Logik hängt also nicht von der Plattform ab. Siehe ctrlX Data Layer und LumiScan Keryx.

Erledigt, wenn: Sie wissen, welchen Client Ihr Programm verwendet.
Weiter: Schritt 2 - Knoten finden

Schritt 2 von 7 - Knoten finden

1 Schnittstelle ✓ · 2 Knoten · 3 Verbinden · 4 Aufruf · 5 Handshake · 6 Ergebnisse · 7 Fehler

Jede Adresse hat dieselbe Form:

hdvisionsystems/<app>/<module>/<folder>/...   die Knoten eines Moduls (eine Kamera, ein Finder-Modul, ...)
hdvisionsystems/<app>/system/...              was die ganze App betrifft
types/hdvisionsystems/<app>/<type>            die FlatBuffers-Typen, die die App veröffentlicht

<folder> ist control/ (die Funktionen und der Status des Moduls), input/, output/ oder setting/. Eine Execute-Methode hält ihre eigenen Ein- und Ausgaben unter ihrer Funktion, zum Beispiel hdvisionsystems/lumiscan-template-finder/module-1/find-template/input/…​ und …​/output/result.

Die Knoten einer App stehen in der Data-Layer-Referenz ihres Handbuchs; den aktuellen Baum sehen Sie in der Data-Layer-Ansicht der Weboberfläche von ctrlX OS oder auf dem PC unter http://127.0.0.1:7555/. Siehe Adressen und Module.

Erledigt, wenn: Sie hdvisionsystems/lumiscan-cam-driver/camera1/control/capture/execute und hdvisionsystems/lumiscan-template-finder/module-1/find-template/execute im Baum gefunden haben.
Weiter: Schritt 3 - Verbinden

Schritt 3 von 7 - Verbinden

1 Schnittstelle ✓ · 2 Knoten ✓ · 3 Verbinden · 4 Aufruf · 5 Handshake · 6 Ergebnisse · 7 Fehler

  • OPC UA: Starten Sie den OPC UA Connector nach den Apps. Endpunkt opc.tcp://<pc>:4840, Security Policy None, anonym. Ermitteln Sie den Namespace-Index von urn:hdvisionsystems:keryx aus dem NamespaceArray des Servers - nie fest einprogrammieren. Die NodeId eines Knotens ist seine Data-Layer-Adresse: ns=<n>;s=hdvisionsystems/lumiscan-cam-driver/camera1/control/status/code.

  • krxclient: verbindet sich mit dem Broker unter tcp://127.0.0.1:5555; einen anderen setzen Sie mit --keryx-url oder HDV_KERYX_URL.

  • ctrlX-Data-Layer-Client: Verbinden Sie sich mit dem Data Layer des Geräts, wie Ihr SDK es beschreibt.

Der OPC UA Connector hat weder Authentifizierung noch Verschlüsselung. Betreiben Sie ihn in einem vertrauenswürdigen Netzwerk und öffnen Sie TCP 4840 in der Firewall nur für die Adresse Ihres Clients. Siehe Sicherheit.

Erledigt, wenn: Ihr Programm hdvisionsystems/lumiscan-cam-driver/camera1/control/status/code liest.
Weiter: Schritt 4 - Eine Funktion aufrufen

Schritt 4 von 7 - Eine Funktion aufrufen

1 Schnittstelle ✓ · 2 Knoten ✓ · 3 Verbinden ✓ · 4 Aufruf · 5 Handshake · 6 Ergebnisse · 7 Fehler

Operationen, die in etwa 1 s fertig sind, sind Execute-Methoden: Eingaben schreiben (eigene Knoten), dann execute aufrufen; der Aufruf kehrt zurück, wenn die Operation fertig ist.

krxclient execute hdvisionsystems/lumiscan-cam-driver/camera1/control/capture/execute
krxclient read    hdvisionsystems/lumiscan-cam-driver/camera1/control/status/code
krxclient write   hdvisionsystems/lumiscan-template-finder/module-1/find-template/input/template-name screw
krxclient execute hdvisionsystems/lumiscan-template-finder/module-1/find-template/execute
krxclient read    hdvisionsystems/lumiscan-template-finder/module-1/find-template/output/status-code

Mit OPC UA rufen Sie die Methode mit dem Dienst Call auf: objectId ist die übergeordnete Adresse (…​/camera1/control/capture), methodId der execute-Knoten. Stellen Sie den Call-Timeout Ihres Clients höher als Ihre langsamste Methode; der Connector wartet bis zu 60 s.

Prüfen Sie beide Ergebnisse: Das Ergebnis des Aufrufs sagt, ob die Operation überhaupt laufen konnte, der Statusknoten, ob sie erfolgreich war. Siehe Execute-Methoden.

Erledigt, wenn: Ihr Programm ein Bild aufnimmt und eine Suche ausführt.
Weiter: Schritt 5 - Eine lange Operation als Handshake ausführen

Schritt 5 von 7 - Eine lange Operation als Handshake ausführen

1 Schnittstelle ✓ · 2 Knoten ✓ · 3 Verbinden ✓ · 4 Aufruf ✓ · 5 Handshake · 6 Ergebnisse · 7 Fehler

Operationen, die länger dauern können - eine Kamera verbinden, ein Reset, eine Inferenz - sind Handshakes, damit nichts blockiert: auf ready = true warten, request = true setzen, auf ready = false warten, request wieder auf false setzen, dann Status und Ausgaben prüfen. Fragen Sie alle 50 bis 100 ms ab.

In einem Skript führt krxclient handshake diesen Ablauf für Sie aus, siehe krxclient.

Welches Muster eine Funktion verwendet, steht in der Data-Layer-Referenz der App; die Regeln stehen unter Ein Muster wählen und Handshake.

Erledigt, wenn: Ihr Programm die Kamera selbst verbindet (hdvisionsystems/lumiscan-cam-driver/camera1/device-info/is-connected = true).
Weiter: Schritt 6 - Ergebnisse lesen und jedes Bild empfangen

Schritt 6 von 7 - Ergebnisse lesen und jedes Bild empfangen

1 Schnittstelle ✓ · 2 Knoten ✓ · 3 Verbinden ✓ · 4 Aufruf ✓ · 5 Handshake ✓ · 6 Ergebnisse · 7 Fehler

  • Einfache Werte - Zahlen, Boolesche Werte, Strings, Arrays - lesen Sie direkt. Bauen Sie Ihre Logik auf ihnen auf.

  • Strukturierte Ergebnisse und Bilder sind FlatBuffers; ihre Schemata liegen auf dem Data Layer unter types/hdvisionsystems/<app>/…​. Dekodieren Sie sie mit der FlatBuffers-Bibliothek Ihrer Sprache.

  • Jedes Bild, ohne Aufruf pro Bild: Lassen Sie die Verarbeitungs-App den Stream der Kamera abonnieren und abonnieren Sie mit Ihrem Programm den Ergebnisknoten der App (OPC UA: eine Subscription auf diesen Knoten):

    krxclient write     hdvisionsystems/lumiscan-template-finder/module-1/control/subscribe/input/address hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream
    krxclient write     hdvisionsystems/lumiscan-template-finder/module-1/control/subscribe/input/enable true
    krxclient execute   hdvisionsystems/lumiscan-template-finder/module-1/control/subscribe/execute
    krxclient subscribe hdvisionsystems/lumiscan-template-finder/module-1/control/subscribe/output/stream/result --count 5

Bild-Streams sind in den aktuellen Versionen experimentell. Siehe Streams und Adressen und Module.

Erledigt, wenn: Ihr Programm das Ergebnis des Template Finder für ein Bild liest.
Weiter: Schritt 7 - Fehler behandeln

Schritt 7 von 7 - Fehler behandeln

1 Schnittstelle ✓ · 2 Knoten ✓ · 3 Verbinden ✓ · 4 Aufruf ✓ · 5 Handshake ✓ · 6 Ergebnisse ✓ · 7 Fehler

  • Ein abgelehnter Aufruf (Rejected bei LumiScan Keryx, DL_INVALID_VALUE beim ctrlX Data Layer, ein OPC-UA-Statuscode über den Connector) bedeutet: Die Operation ist nicht gelaufen - nichts wurde eingereiht.

  • Ein Aufruf, der gelaufen ist, kann trotzdem fehlschlagen: Lesen Sie nach jedem Aufruf den control/status/code des Moduls bzw. den <method>/output/status-code des Finders.

  • Ein Modul führt eine Operation zur Zeit aus: Ein Aufruf, während eine andere läuft, wird als belegt abgelehnt (TooManyOperations, ctrlX DL_TOO_MANY_OPERATIONS). Wiederholen Sie ihn, sobald die laufende Operation fertig ist.

Die Codes und ihre Bedeutung: Statuscodes und Ergebnisse; wenn etwas nicht funktioniert: Fehlerbehebung.

Erledigt, wenn: Ihr Programm auf einen abgelehnten Aufruf und auf eine fehlgeschlagene Operation reagiert - es ist integriert.

Wie es weitergeht