---
title: "LumiScan in Ihre Anwendung integrieren"
description: "Für Softwareentwickler: Ihr eigenes Programm mit den LumiScan-Vision-Apps verbinden - Schnittstelle wählen, Knoten finden, eine Funktion aufrufen, einen Handshake ausführen, Ergebnisse lesen, jedes Bild empfangen, Fehler behandeln."
product: "LumiScan Dokumentation"
component: "ROOT"
language: "de"
url: "https://docs.hdvisionsystems.com/de/getting-started/integrating.html"
---

# LumiScan in Ihre Anwendung integrieren – LumiScan Dokumentation

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](https://docs.hdvisionsystems.com/de/getting-started/first-application.html). 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.

**Ihr Fortschritt - haken Sie jeden Schritt ab, sobald er erledigt ist**

- [1. Schnittstelle wählen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-1)
- [2. Knoten finden](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-2)
- [3. Verbinden](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-3)
- [4. Eine Funktion aufrufen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-4)
- [5. Eine lange Operation als Handshake ausführen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-5)
- [6. Ergebnisse lesen und jedes Bild empfangen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-6)
- [7. Fehler behandeln](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-7)

## Schritt 1 von 7 - Schnittstelle wählen {#step-1}

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

**Erledigt, wenn:** Sie wissen, welchen Client Ihr Programm verwendet.\
**Weiter:** [Schritt 2 - Knoten finden](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-2)

## Schritt 2 von 7 - Knoten finden {#step-2}

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

**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](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-3)

## Schritt 3 von 7 - Verbinden {#step-3}

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

> [!WARNING]
> 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](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/opc-ua.html#security).

**Erledigt, wenn:** Ihr Programm `hdvisionsystems/lumiscan-cam-driver/camera1/control/status/code` liest.\
**Weiter:** [Schritt 4 - Eine Funktion aufrufen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-4)

## Schritt 4 von 7 - Eine Funktion aufrufen {#step-4}

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.

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

**Erledigt, wenn:** Ihr Programm ein Bild aufnimmt und eine Suche ausführt.\
**Weiter:** [Schritt 5 - Eine lange Operation als Handshake ausführen](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-5)

## Schritt 5 von 7 - Eine lange Operation als Handshake ausführen {#step-5}

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

Welches Muster eine Funktion verwendet, steht in der Data-Layer-Referenz der App; die Regeln stehen unter [Ein Muster wählen](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/calling-functions.html) und [Handshake](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/handshake.html).

**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](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-6)

## Schritt 6 von 7 - Ergebnisse lesen und jedes Bild empfangen {#step-6}

- **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):
  ```shell
  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](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/streams.html) und [Adressen und Module](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/addresses.html).

**Erledigt, wenn:** Ihr Programm das Ergebnis des Template Finder für ein Bild liest.\
**Weiter:** [Schritt 7 - Fehler behandeln](https://docs.hdvisionsystems.com/de/getting-started/integrating.html#step-7)

## Schritt 7 von 7 - Fehler behandeln {#step-7}

- 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](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/status-codes.html); wenn etwas nicht funktioniert: [Fehlerbehebung](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/troubleshooting.html).

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

## Wie es weitergeht

- Alle Knoten einer App: die **Data-Layer-Referenz** in ihrem Handbuch, verlinkt von der [Übersichtsseite](https://docs.hdvisionsystems.com/de/index.html).
- Alles über die Schnittstelle: [LumiScan Keryx](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/index.html).
