# LumiScan QR Code Reader 1.0.0.5 – complete documentation

> All pages of the LumiScan QR Code Reader 1.0.0.5 manual (language: de) by HD Vision Systems GmbH, in navigation order. Each page starts with a level-1 heading followed by its URL; cite that URL. Manual: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/

# Beschreibung – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/description.html

LumiScan QR Code Reader findet QR-Codes in einem Kamerabild und meldet für jeden Code, was er enthält und wo er liegt.

Er liest **QR**-Codes — die 2D-Symbologie mit einem quadratischen Finder-Muster in drei Ecken, der am weitesten verbreitete Code für längere Nutzdaten wie eine URL oder eine Seriennummer. Jeder im Bild gefundene Code wird gemeldet: Es gibt keine Begrenzung auf einen Code pro Durchlauf und keinerlei Referenzbild oder Trainingsschritt.

> [!NOTE]
> Die Anwendung benötigt **keine Vorlage und keine Konfiguration**. Sie geben ihr die Adresse eines Bildes und rufen `execute` auf; sie liest jeden QR-Code in diesem Bild. Ihre Schwester-Apps lesen die anderen Symbologien — LumiScan DMC Reader, LumiScan Aztec Code Reader und LumiScan Barcode Reader — und arbeiten auf dieselbe Weise.

## Woher die Bilder kommen

Die Anwendung spricht nicht selbst mit einer Kamera. Sie liest einen Bildknoten, den eine andere Anwendung auf dem Data Layer veröffentlicht - dem ctrlX Data Layer auf ctrlX OS, LumiScan Keryx auf einem PC -, angegeben als Adresse in `input/image-address`, zum Beispiel:

Was für jede LumiScan-App gleich ist - wie Adressen aufgebaut sind, der Handshake, die Aufrufmuster für Execute und Streams, Statuscodes, Einstellungen und Werkzeuge - ist im Handbuch [LumiScan Keryx](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/index.html) beschrieben. Dieses Handbuch behandelt nur, was spezifisch für LumiScan QR Code Reader ist; seine eigenen Knoten sind in der [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html) aufgeführt.

```
hdvisionsystems/lumiscan-cam-driver/camera1/output/image
```

Der Knoten muss `data`, `width`, `height` und `pixel-type` veröffentlichen - genau das, was LumiScan Cam Driver bereitstellt. Siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html).

## Keine Module

Anders als die LumiScan-Anwendungen, die nach etwas Konfiguriertem suchen, hat dieser Reader **keine Module**. Es gibt einen Reader pro Installation, unter einer Data-Layer-Adresse. Auf ctrlX OS deckt ihn ein Lizenzplatz ab.

Es gibt nichts pro Instanz zu konfigurieren, weil es überhaupt nichts zu konfigurieren gibt: Die einzige Eingabe, die sich zwischen zwei Durchläufen ändert, ist das zu lesende Bild.

## Die Ergebnisse sehen

Die Ergebnisse sind Zahlen auf dem Data Layer. Um sie in dem Bild, in dem sie gefunden wurden, gezeichnet zu **sehen**, öffnen Sie LumiScan Cockpit: Es führt diese Anwendung als eine einzelne Ansicht namens `qr-code` und zeichnet ein Rechteck um jeden Code, beschriftet mit dem dekodierten Text und dem Score.

# Voraussetzungen – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html

## Lizenz {#licence}

Wie LumiScan QR Code Reader lizenziert wird, hängt davon ab, wo Sie es gekauft haben und wo es läuft:

| Gekauft bei | Läuft auf | Lizenzierung |
| --- | --- | --- |
| HD Vision Systems | Windows 11 oder Ubuntu 24.04 | Die Lizenz liegt auf Ihrem LumiScan Key. Sie ist ein Einmalkauf und wird nicht verlängert.<br><br>[Lizenzierungsweg: gekauft bei HD Vision Systems](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/path-hdvs.html) |
| ctrlX Store | Windows 11 | Die Lizenz liegt in ctrlX WORKS. Zusätzlich ist der LumiScan Key erforderlich; er schützt die Software vor Reverse Engineering.<br><br>[Lizenzierungsweg: ctrlX Store, Windows](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/path-ctrlx-windows.html) |
| ctrlX Store | ctrlX OS (ctrlX CORE oder IPC) | ctrlX-Lizenz `SWL-W-XCx-QRxxxCRDSxHDVSx-V1NN`, eine Lizenz pro App-Instanz. Advanced-Funktionen benötigen zusätzlich `SWL-W-XCx-QRxxxCRDAxHDVSx-V1NN`.<br><br>[Lizenzierungsweg: ctrlX Store, ctrlX OS](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/path-ctrlx-os.html) |

Jedes Gerät, auf dem LumiScan QR Code Reader gleichzeitig läuft, benötigt einen eigenen LumiScan Key. Keys können zwischen Geräten ausgetauscht werden.

Wie Sie die CodeMeter Runtime installieren und Lizenzen anfordern, verlängern und an einem anderen PC verwenden, steht in [LumiScan Lizenzierung](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/index.html).

Auf ctrlX OS wird die Lizenz beim Start bis zu zehn Sekunden lang geprüft; wird in dieser Zeit keine verfügbar, beendet sich der Reader, und der Grund wird in das Systemprotokoll geschrieben.

Ist eine Advanced-Lizenz verfügbar, verwendet die Anwendung sie automatisch. Ist keine verfügbar, läuft sie mit den Standard-Funktionen, statt den Start zu verweigern.

## Eine Bildquelle auf demselben Data Layer

Die Anwendung liest ihre Bilder aus dem Data-Layer-Bildknoten einer anderen Anwendung.

**Auf ctrlX OS:** Diese Anwendung muss auf **demselben ctrlX CORE oder ctrlX IPC** laufen — ein Zugriff auf einen entfernten Data Layer wird nicht unterstützt.

**Auf einem PC:** Diese Anwendung muss mit demselben LumiScan-Keryx-Broker verbunden sein wie der Reader (siehe [LumiScan Keryx auf einem PC](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/keryx.html)).

In der Praxis ist das LumiScan Cam Driver, aber jede Anwendung funktioniert, solange der in `input/image-address` angegebene Knoten diese vier Kindknoten bereitstellt:

| Knoten | Typ | Beschreibung |
| --- | --- | --- |
| `data` | Array aus uint8 | Rohe, unkomprimierte Pixeldaten |
| `width` | uint64 | Bildbreite in Pixeln |
| `height` | uint64 | Bildhöhe in Pixeln |
| `pixel-type` | string | Name des GenICam-Pixelformats |

### Unterstützte Pixelformate

`Mono8`, `Mono12`, `RGB8`, `RGB12`, `BGR8`, `BGR12`, `Bayer_GR8`, `Bayer_RG8`, `Bayer_GR12`, `Bayer_RG12`.

Der Name wird ohne Rücksicht auf Groß- und Kleinschreibung abgeglichen, und der Unterstrich darf in den Bayer-Namen fehlen — `BayerGR8` und `bayer_gr8` sind dasselbe Format. Bayer-Bilder werden vor der Suche in Farbe umgewandelt.

Jedes andere Pixelformat wird abgelehnt, und der Durchlauf liefert kein Ergebnis.

> [!NOTE]
> Die Bilddaten müssen für das angegebene Format **mindestens** `width x height x bytes-per-pixel` Bytes umfassen. Ein Puffer, der kürzer ist, als die Metadaten versprechen, wird abgelehnt, statt über sein Ende hinaus gelesen zu werden.

## Speicherung

Das Lesen eines Codes speichert nichts: Es gibt kein Referenzbild und keine Modulliste, und die Adresse in `input/image-address` liegt auf dem Data Layer.

Der Bild-Stream (experimentell) hält zwei Dinge im Konfigurationsverzeichnis der Anwendung (siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving)): seinen Stream-Modus und das, was er abonniert, in `qr-code-reader.json`, dort gespeichert, sobald sie sich ändern, sowie das, wofür jeder Einstellungs-Hash steht, in `settings-history/` - eine kleine JSON-Datei pro Hash, die nie gelöscht wird. Siehe [Codes auf einem Bild-Stream lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html).

## Zeitverhalten

Das Lesen ist **synchron**: Der Schreibzugriff auf `execute` kehrt zurück, wenn die Suche beendet ist. Wie lange das dauert, hängt von der Bildgröße ab, da bei jedem Durchlauf das gesamte Bild nach Codes durchsucht wird.

# Einen Code lesen – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-a-code.html

Ein Durchlauf hat zwei Schritte: angeben, welches Bild zu lesen ist, dann `execute` aufrufen. Alle Pfade unten sind relativ zum Basispfad der Anwendung, `hdvisionsystems/lumiscan-qr-code-reader`.

## 1. Den Reader auf ein Bild richten

Schreiben Sie die Adresse des Bildknotens in `input/image-address`:

```
hdvisionsystems/lumiscan-cam-driver/camera1/output/image
```

Das ist die Adresse des Bildknotens **selbst**, nicht die seines Kindknotens `data` — der Reader hängt beim Lesen `/data`, `/width`, `/height` und `/pixel-type` an.

Die Adresse wird gemerkt; sie muss also nur neu gesetzt werden, wenn sich die Bildquelle ändert.

## 2. execute aufrufen

Schreiben Sie einen leeren Wert in die Methode `execute`.

Der Aufruf ist **blockierend**: Er kehrt zurück, wenn die Suche beendet ist. Danach enthält `output/results` jeden QR-Code, der in diesem Bild gefunden wurde — siehe [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html).

## Was ein Durchlauf tut

1. Liest die Adresse aus `input/image-address`.
2. Liest `data`, `width`, `height` und `pixel-type` von dieser Adresse und wandelt die Pixel in ein Bild um — mit De-Bayering, wenn das Format es erfordert.
3. Durchsucht das **gesamte** Bild nach QR-Codes.
4. Schreibt jeden gefundenen Code in `output/results`.

Es gibt keine Region of Interest und keine Teilsuche: Jeder Durchlauf liest den gesamten aktuellen Inhalt des Bildknotens.

## Wenn ein Durchlauf fehlschlägt

Ein Durchlauf schlägt fehl, wenn das Bild nicht gelesen werden kann — keine Adresse gesetzt, eine Adresse, die sich nicht auflösen lässt, ein fehlender oder zu kurzer `data`-Puffer oder ein Pixelformat, das der Reader nicht unterstützt. Der Grund wird in das Anwendungsprotokoll geschrieben: das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC).

> [!WARNING]
> Ein fehlgeschlagener Durchlauf lässt `output/results` **unverändert**; es enthält weiterhin die Codes des vorherigen Durchlaufs. Diese Version veröffentlicht keinen Statusknoten und gibt keinen Identifier zurück, sodass sich am Ergebnis allein nicht erkennen lässt, ob es aktuell ist. Wenn der Ausgang eines Durchlaufs wichtig ist, prüfen Sie das Protokoll — oder lesen Sie `output/results` vorher und nachher und vergleichen Sie.
>
> Ein leeres `output/results` bedeutet, dass das Bild erfolgreich gelesen wurde und keinen QR-Code enthielt.

# Das Ergebnis – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html

`output/results` ist ein FlatBuffer mit einem Eintrag pro gefundenem QR-Code, im registrierten Typ `types/hdvisionsystems/lumiscan-qr-code-reader/code_detect_result`.

Die Wurzel ist ein Array — `CodeDetectResultArray.results` —, sodass ein Durchlauf, der nichts gefunden hat, ein leeres Array veröffentlicht und keinen Fehler.

## Was jeder Eintrag enthält

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `center` | `Point2f` | Der Mittelpunkt des Codes im Bild, in Pixeln |
| `text` | string | Der dekodierte Inhalt des Codes |
| `score` | float | Wie sicher das Leseergebnis ist |
| `polygons` | Array aus `Point2f` | Die Eckpunkte, die den Code im Bild umreißen |

`Point2f` ist ein Paar von Floats, `x` und `y`, in Bildpixelkoordinaten. Die Koordinaten sind Floats, weil der Mittelpunkt und die Ecken eines Codes selten genau auf einer Pixelgrenze liegen.

## Das Ergebnis lesen

(ctrlX OS) Über die ctrlX REST API kommt ein FlatBuffer als JSON an, und seine Zahlen kommen **in Anführungszeichen** zurück — ein Float ist in der Antwort ein String. Parsen Sie sie auf Ihrer Seite als Zahlen, statt sie als Text zu vergleichen.

`center` und `text` sind immer vorhanden. `polygons` kann bei einem Eintrag fehlen; behandeln Sie einen fehlenden Umriss als „kein Umriss angegeben" und nicht als Fehler.

## Das Ergebnis zeichnen

Um die Codes im Bild zu sehen, statt Koordinaten zu lesen, öffnen Sie LumiScan Cockpit. Es zeichnet ein Rechteck um jeden Code, beschriftet mit dem dekodierten Text und dem Score, in einer Ansicht namens `qr-code`.

Ein Code, der **gefunden, aber nicht dekodiert** wurde, hat keinen Text; Cockpit beschriftet ihn nur mit seinem Score.

# Codes auf einem Bild-Stream lesen (experimentell) – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html

> [!IMPORTANT]
> Der Bild-Stream ist **experimentell**. Seine Knoten und Einstellungen können sich noch ändern. Verwenden Sie ihn zur Evaluierung, und prüfen Sie ihn mit Ihren Kameras und Ihrem Data Layer, bevor Sie sich auf ihn verlassen.

`execute` liest ein Bild pro Aufruf: Ihr Programm setzt `input/image-address` und schreibt in `execute`. Ein Bild-Stream funktioniert andersherum. Der Cam Driver veröffentlicht jedes Bild, das er aufnimmt, auf `<camera name>/control/publish/output/stream/frame`, mit seiner Größe, seinem Pixelformat und seiner Lineage (siehe das Handbuch des Cam Driver, *Bilder streamen*). Der Reader abonniert den Stream einer Kamera, liest jeden QR-Code in jedem Frame, sobald er eintrifft, und veröffentlicht ein Ergebnis pro Frame auf `control/subscribe/output/stream/result`.

Jeder Frame wird genau so gelesen, wie `execute` ein Bild liest. `execute` hat keine Eingabe außer der Bildadresse, und an deren Stelle tritt der Frame. `input/parameter` wird von keinem der beiden gelesen: siehe [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html).

Jedes Ergebnis trägt die Lineage seines Frames - welche Kamera ihn aufgenommen hat, in welchem Lauf des Kamera-Streams, als welchen Frame des Laufs - ergänzt um den eigenen Schritt des Readers. Siehe [Die Lineage eines Ergebnisses](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#lineage).

Standardmäßig fällt der Reader nie hinter seine Kamera zurück. Treffen Frames schneller ein, als der Reader sie liest, nimmt er jedes Mal, wenn das vorherige Lesen beendet ist, den neuesten Frame. Die Frames dazwischen werden als übersprungen gezählt. Wie viele Frames warten dürfen, wird mit der Warteschlangengröße festgelegt, siehe [Die Warteschlangengröße](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#queue-size).

Wie Streams in allen LumiScan-Apps funktionieren - Produzenten und Konsumenten, Starten und Stoppen, die Lineage - ist unter [Streams](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/streams.html) im Handbuch LumiScan Keryx beschrieben. Diese Seite beschreibt den Stream des Readers.

## Die Knoten des Streams {#addresses}

Der Reader hat die Knoten des Streams, ob er einen Stream abonniert oder nicht. Es ist kein Neustart nötig, um sie zu verwenden. Alle Adressen unten beginnen mit `hdvisionsystems/lumiscan-qr-code-reader/`. Es gibt keine Module: ein Stream pro Installation.

**Tabelle 1. Methoden**

| Adresse | Bedeutung |
| --- | --- |
| `control/subscribe/execute` | Prüft die fünf Eingaben von `control/subscribe` gemeinsam, speichert sie in der Einstellungsdatei des Readers und wendet sie dann an: Ein laufender Stream folgt in seinem nächsten Zyklus, ohne Neustart. Das Schreiben einer Eingabe allein ändert nichts. Siehe [Die Quelle ändern](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#subscribing). |
| `control/unsubscribe/execute` | Entfernt die in `control/unsubscribe/input/address` genannte Quelle, womit auch der Stream-Modus endet. Das Tag bleibt. Wird wie ein Subscribe in der Einstellungsdatei des Readers gespeichert. |

**Tabelle 2. Eingaben von control/subscribe**

| Adresse | Typ | Bedeutung |
| --- | --- | --- |
| `control/subscribe/input/enable` | bool | Stream-Modus: `true` lässt den Stream laufen, `false` stoppt ihn. |
| `control/subscribe/input/address` | string | Die eine Quelle: der Stream-Ordner einer Kamera, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`. Der Reader liest dessen Knoten `frame`. Eine andere Adresse ersetzt die Quelle. |
| `control/subscribe/input/tag` | string | Das Tag, das der Reader auf seine Ergebnisse setzt: Der Schritt des Readers in der Lineage jedes Ergebnisses trägt es, sodass jeder, der ein Ergebnis weiter hinten in der Kette liest, sieht, welches Modul es gelesen hat. Leer: der Name des Readers, `lumiscan-qr-code-reader`. Ein neues Tag markiert das nächste Ergebnis; die Quelle bleibt abonniert. |
| `control/subscribe/input/queue-size` | uint32 | Wie viele Frames warten dürfen, während ein Frame gelesen wird: `1` bis `64`. Siehe [Die Warteschlangengröße](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#queue-size). |
| `control/subscribe/input/keep-latest-output` | bool | `true`, um jedes Stream-Ergebnis zusätzlich in `output/results` zu schreiben. Siehe [Die neueste Ausgabe behalten](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#keep-latest-output). |

Die Eingaben beginnen mit dem, was beim Start der Anwendung angewendet ist, sodass ein Client eine davon ändern und ausführen kann.

Was die Quelle enthalten muss: Lesen Sie `system/meta/subscription-schema`. Es ist ein JSON Schema des Knotens `frame` der Quelle, eines `stream_image` mit seiner `lineage` und seinem `image`, in seiner JSON-Form. Siehe [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html#system).

**Tabelle 3. Eingabe von control/unsubscribe**

| Adresse | Typ | Bedeutung |
| --- | --- | --- |
| `control/unsubscribe/input/address` | string | Die zu entfernende Quelle: die Adresse, die `setting/stream/address` zeigt. Ein `/` an einem der beiden Enden zählt nicht. |

**Tabelle 4. Einstellungen**

| Adresse | Typ | Bedeutung |
| --- | --- | --- |
| `setting/stream/enable`, `setting/stream/address`, `setting/stream/tag`, `setting/stream/queue-size`, `setting/stream/keep-latest-output` | wie die Eingaben | Was `control/subscribe/execute` oder `control/unsubscribe/execute` zuletzt angewendet hat, so wie die Einstellungsdatei es speichert. Schreibgeschützt. |
| `setting/settings-hash` | string | Der Hash dessen, womit die Ergebnisse erzeugt werden, als 16 Hexziffern. Schreibgeschützt. Siehe [Der Einstellungs-Hash](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#settings-hash). |

**Tabelle 5. Ausgaben**

| Adresse | Typ | Bedeutung |
| --- | --- | --- |
| `control/subscribe/output/stream/active` | bool | `true`, solange der Stream läuft. |
| `control/subscribe/output/stream/result` | flatbuffers `stream_codes` | Die aus jedem Frame gelesenen Codes und die Lineage des Frames. Abonnieren Sie ihn, um jedes Ergebnis zu erhalten. Siehe [Das Ergebnis eines Frames](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#result). |
| `control/subscribe/output/stream/last-failure` | string | Warum der letzte Frame, der nicht gelesen werden konnte, fehlgeschlagen ist. Nennt die Quelle mit ihrer Adresse, zum Beispiel `a frame of 'hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream' failed: …`. Wird beim Start des Streams geleert. |
| `control/subscribe/output/stream/statistics/…` | uint64 | Zähler des aktuellen oder des letzten Streams, siehe [Die Statistik lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#statistics). |

> [!NOTE]
> `execute` schreibt in `output/results`, der Stream in `control/subscribe/output/stream/result` - Singular. Der Stream schreibt nur mit eingeschaltetem `keep-latest-output` auch in `output/results`.

## Einrichten {#setting-up}

1. Stellen Sie sicher, dass der Stream des Cam Driver läuft: Sein `hdvisionsystems/lumiscan-cam-driver/<camera name>/control/publish/output/stream/active` ist `true`.
2. Schreiben Sie den Stream-Ordner der Kamera, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`, in `control/subscribe/input/address`. Lassen Sie `control/subscribe/input/tag` leer, um die Ergebnisse mit dem Namen des Readers zu markieren, oder schreiben Sie ein eigenes Tag hinein.
3. Abonnieren Sie `control/subscribe/output/stream/result`.
4. Setzen Sie `control/subscribe/input/enable` auf `true` und schreiben Sie dann in `control/subscribe/execute`. Warten Sie, bis `control/subscribe/output/stream/active` `true` ist. Ab dann treffen die Ergebnisse ein.
5. Zum Stoppen setzen Sie `control/subscribe/input/enable` auf `false` und schreiben erneut in `control/subscribe/execute`. Der gerade gelesene Frame wird zuerst fertig gelesen.

Auf ctrlX OS nehmen Sie dieselben Schreibzugriffe in der Data-Layer-Ansicht der Weboberfläche von ctrlX OS oder aus Ihrem SPS-Programm vor.

Auf einem PC dieselben Schritte mit `krxclient`, dem Kommandozeilen-Client, der eine SPS vertritt (siehe [krxclient](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/tools.html#krxclient)). Ergänzen Sie die Optionen `--keryx-backend` und `--keryx-url`, die Ihr Broker benötigt:

```none
krxclient write hdvisionsystems/lumiscan-qr-code-reader/control/subscribe/input/address hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream
krxclient write hdvisionsystems/lumiscan-qr-code-reader/control/subscribe/input/enable true
krxclient execute hdvisionsystems/lumiscan-qr-code-reader/control/subscribe/execute
krxclient subscribe hdvisionsystems/lumiscan-qr-code-reader/control/subscribe/output/stream/result --count 5
```

`krxclient subscribe` zeigt einen FlatBuffer nur anhand seiner Größe. Es zeigt Ihnen, dass Ergebnisse eintreffen, nicht, was sie enthalten.

Gut zu wissen:

- Der Stream-Modus ist ein **Zustand**, kein Kommando: Der Stream läuft, solange das angewendete `enable` `true` ist.
- Der Stream kann vor dem Stream des Cam Driver gestartet werden. Ergebnisse treffen ein, sobald Frames eintreffen.
- Was `control/subscribe/execute` anwendet, wird in der Einstellungsdatei des Readers gespeichert. Nach einem Neustart der Anwendung startet der Reader, wie er war: Einer, der gestreamt hat, streamt sofort wieder, ohne dass Ihr Programm etwas ausführt. Siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving).

## Die Quelle ändern {#subscribing}

Ein Reader hat eine Quelle. Eine SPS oder ein anderer Client ändert sie, während die Anwendung läuft, mit oder ohne laufenden Stream:

1. Schreiben Sie die neuen Werte in die Eingaben von `control/subscribe` - nur die, die Sie ändern: Die anderen halten das, was angewendet ist.
2. Schreiben Sie in `control/subscribe/execute`. Die Eingaben werden gemeinsam geprüft, in der Einstellungsdatei des Readers gespeichert und erst dann angewendet: `setting/stream/` zeigt sie sofort, und ein laufender Stream folgt in seinem nächsten Zyklus. Eine andere Adresse ersetzt die Quelle; die Frames, die bei der alten Quelle warteten, werden als übersprungen gezählt. Ein neues Tag, eine neue Warteschlangengröße oder ein neues `keep-latest-output` braucht kein neues Abonnement: Ein neues Tag markiert das nächste Ergebnis.
3. Um die Quelle zu entfernen, schreiben Sie ihre Adresse in `control/unsubscribe/input/address` und dann in `control/unsubscribe/execute`. Damit endet der Stream-Modus. Die Eingaben von `control/subscribe` werden auf das gesetzt, was angewendet wurde: Stream-Modus aus, keine Adresse. Das Tag bleibt: Es markiert die Ergebnisse des Readers, nicht die Quelle.

Wenn die Einstellungsdatei nicht geschrieben werden kann, ändert sich nichts. Siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving).

Die Methoden antworten:

| ctrlX Data Layer | LumiScan Keryx | Wann |
| --- | --- | --- |
| `DL_OK` | `Ok` | Erledigt. |
| `DL_INVALID_VALUE` | `Rejected` | `control/subscribe/execute`: Stream-Modus ohne Adresse oder eine Warteschlangengröße außerhalb von `1` bis `64`. `control/unsubscribe/execute`: Die Adresse ist nicht die Quelle, oder es gibt keine Quelle. |
| `DL_CREATION_FAILED` | `CreationFailed` | Die Einstellungsdatei konnte nicht geschrieben werden, zum Beispiel weil sie kein gültiges JSON ist. Nichts hat sich geändert. |

Siehe auch [Ergebnisse eines Methodenaufrufs](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/status-codes.html#method-results).

Der Grund für eine Ablehnung wird in das Anwendungsprotokoll geschrieben.

Kann die Quelle nicht abonniert werden, versucht der Reader es alle 5 Sekunden erneut, solange der Stream läuft, und protokolliert den ersten Fehlschlag.

## Das Ergebnis eines Frames {#result}

`control/subscribe/output/stream/result` enthält eine FlatBuffers-Tabelle vom Typ `stream_codes` (Datei-Identifier `HSCD`), auf dem Data Layer registriert als `types/hdvisionsystems/lumiscan-qr-code-reader/stream_codes`. Ihr kompiliertes Schema wird als `bfbs/stream_codes.bfbs` installiert.

| Feld | Bedeutung |
| --- | --- |
| `lineage` | Woher das Ergebnis stammt, siehe [Die Lineage eines Ergebnisses](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#lineage). |
| `result` | Die Codes, als `CodeDetectResultArray`: dieselbe Tabelle, die `execute` für dasselbe Bild in `output/results` schreibt, beschrieben unter [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html). Ein Frame ohne QR-Code ergibt ein leeres Array `results`. |

Ein Lesen von `control/subscribe/output/stream/result` liefert das neueste Ergebnis; vor dem ersten Frame ein leeres. Das letzte Ergebnis bleibt nach dem Stopp des Streams stehen.

Ein Frame wird dekodiert, wie `execute` den Bildknoten dekodiert, es werden also dieselben Pixelformate akzeptiert, siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html). Der gesamte Frame wird durchsucht. Ein Frame und dasselbe Bild, über `input/image-address` gelesen, ergeben dieselben Codes.

Ein Frame, der nicht gelesen werden kann - zum Beispiel einer in einem Pixelformat, das der Reader nicht unterstützt, oder einer, dessen Pixel die angegebene Größe nicht füllen - ergibt kein Ergebnis. Er wird in `statistics/failed-frames` gezählt, und `control/subscribe/output/stream/last-failure` nennt den Grund.

## Die Lineage eines Ergebnisses {#lineage}

`lineage.steps` listet auf, woher das Ergebnis stammt, der Ursprung zuerst:

1. Der Schritt der Kamera, wie der Cam Driver ihn erzeugt hat: `producer` ist die Adresse der Kamera, `hdvisionsystems/lumiscan-cam-driver/<camera name>`; `run`, wann der Stream der Kamera gestartet wurde; `sequence` die Nummer des Frames in diesem Lauf; `external_id` die eigene Frame-Nummer der Kamera; `settings_hash` die Einstellungen der Kamera; `tag` das Tag des Cam Driver für die Kamera, standardmäßig ihre Modul-ID, zum Beispiel `camera1`.
2. Der Schritt des Readers: `producer` ist die Adresse des Readers, `hdvisionsystems/lumiscan-qr-code-reader`; `run`, wann der Stream des Readers gestartet wurde (jeder Start ist ein neuer Lauf); `sequence` die Nummer des Ergebnisses im Lauf, ab `1`; `settings_hash` die Einstellungen des Readers, siehe [Der Einstellungs-Hash](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#settings-hash); `elapsed_us` die Mikrosekunden vom Eintreffen des Frames beim Reader bis zu seinem Ergebnis, Wartezeit eingeschlossen; `time_us`, wann das Ergebnis erzeugt wurde, in Mikrosekunden seit der Epoche; `tag` das Tag des Readers, `control/subscribe/input/tag`, oder `lumiscan-qr-code-reader`, wenn es leer ist.

Ein Ergebnis benennt seinen Frame also genau: die Kamera über `producer`, den Frame über `run` und `sequence`. Um zu wissen, von welcher Kamera ein Ergebnis stammt, lesen Sie den `producer` seines ersten Schritts. Eine Lücke in der `sequence` des Kamera-Schritts zwischen zwei Ergebnissen derselben Kamera sind Frames, die übersprungen wurden, fehlgeschlagen oder verloren sind.

Eine Lineage enthält höchstens 16 Schritte. Eine längere behält den Ursprung und die neuesten Schritte, und `dropped` zählt die ausgelassenen Schritte.

Ein Frame ohne Lineage ergibt ein Ergebnis nur mit dem Schritt des Readers. Ein Wert auf dem Knoten `frame` eines Streams, der kein `stream_image` ist, wird ignoriert und einmalig protokolliert.

## Der Einstellungs-Hash {#settings-hash}

`setting/settings-hash` und der `settings_hash` des Reader-Schritts in jedem Ergebnis identifizieren, womit die Ergebnisse erzeugt werden. Der Knoten zeigt den Hash als 16 Hexziffern; der Schritt enthält denselben Wert als Zahl.

Der Reader hat keine Einstellung, die ein Lesen verändert, daher umfasst der Hash nur den Codetyp sowie den Namen und die Version der Anwendung: Er ändert sich, wenn die Anwendung aktualisiert wird. Er umfasst nicht den Stream-Modus, die Quelle, die Warteschlangengröße oder keep-latest-output, die die Frames auswählen und takten.

Wenn ein Hash zum ersten Mal auftritt, schreibt der Reader die Einstellungen, für die er steht, nach `settings-history/qr-code-reader-<hash>.json` im Konfigurationsverzeichnis der Anwendung, sodass ein in einem Ergebnis gefundener Hash später nachgeschlagen werden kann. Die Anwendung löscht diese Dateien nicht. Eine Datei sieht so aus:

```json
{
    "format": 1,
    "settings": {
        "code-type": "qr-code",
        "software.name": "lumiscan-qr-code-reader",
        "software.version": "<version>"
    },
    "settingsHash": "<16 hex digits>"
}
```

## Die Statistik lesen {#statistics}

Die Zähler beginnen bei jedem Start des Streams bei null, werden etwa viermal pro Sekunde aktualisiert, solange er läuft, und behalten nach dem Stopp ihre letzten Werte. Alle Adressen beginnen mit `control/subscribe/output/stream/statistics/`.

| Zähler | Bedeutung |
| --- | --- |
| `elapsed-ms` | Millisekunden seit dem Start des Streams. Teilen Sie einen Zähler dadurch, um eine Rate zu erhalten. |
| `received-frames` | Frames, die das Abonnement geliefert hat. |
| `processed-frames` | Gelesene Frames, jeder mit einem auf `control/subscribe/output/stream/result` veröffentlichten Ergebnis. |
| `skipped-frames` | Nie gelesene Frames: von neueren aus der Warteschlange verdrängt, während ein Frame gelesen wurde (siehe [Die Warteschlangengröße](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#queue-size)), oder wartend, als die Quelle ersetzt oder entfernt wurde. |
| `failed-frames` | Frames, die nicht gelesen werden konnten. `control/subscribe/output/stream/last-failure` nennt den Grund für den letzten Fehlschlag, und das Protokoll nennt die Fehlschläge, höchstens eine Zeile alle 5 Sekunden. |
| `lost-frames` | Frames, die verworfen wurden, bevor sie eintrafen, ermittelt aus Lücken in der `sequence` der Kamera innerhalb eines Laufs ihres Streams. Eine neue Quelle oder ein neuer Lauf des Kamera-Streams beginnt die Zählung neu. |
| `processing-us` | Mikrosekunden, die alle Lesevorgänge zusammen gedauert haben. Teilen Sie durch `processed-frames` für den Mittelwert. |

Frames, die beim Stopp des Streams noch warten, werden verworfen, ohne gezählt zu werden.

## In der Einstellungsdatei gespeichert {#saving}

Stream-Modus und Quelle sind Einstellungen des Readers. Sie werden im Element `stream` der Einstellungsdatei des Readers gespeichert, `qr-code-reader.json` im Konfigurationsverzeichnis der Anwendung.

`control/subscribe/execute` und `control/unsubscribe/execute` speichern dort selbst, was sie anwenden, alle fünf Werte in einem Schreibvorgang, bevor sie sie anwenden. Wenn die Datei nicht geschrieben werden kann, antwortet die Methode mit `CreationFailed` (ctrlX `DL_CREATION_FAILED`), und nichts ändert sich. Nach einem Neustart abonniert der Reader dieselbe Quelle und startet, wenn `stream.enable` `true` ist, seinen Stream sofort: Niemand muss etwas ausführen.

Das Speichern ändert nur das Element `stream`; der Rest der Datei bleibt, wie er war, Kommentare eingeschlossen. Der Reader legt die Datei an, wenn es keine gibt.

Das Konfigurationsverzeichnis ist:

**Auf ctrlX OS:** `/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-qr-code-reader`.

**Auf einem PC (Windows):** `%APP_RESOURCE_DIR%\etc\lumiscan-qr-code-reader`; ohne `APP_RESOURCE_DIR` `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-qr-code\etc\lumiscan-qr-code-reader`.

Die Datei enthält ein Element, `stream`. Ein Beispiel - auf einem PC ist dies das Beispiel, das die Anwendung mit `--generate-settings` schreibt, siehe [Mit einem Beispiel beginnen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#generate-settings):

```json
{
    // The settings of the QR Code Reader, read once, at the start: the image stream it reads codes in.
    // control/subscribe/execute and control/unsubscribe/execute save what they change here before
    // they apply it, the rest of the file left as it is, comments included.
    "$schema": "schemas/qr-code-reader.schema.json",
    "stream": {
        // Stream mode: read every frame of the source as it arrives. Off if left out.
        "enable": false,
        // The one image stream to read: its folder.
        "address": "hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream",
        // "tag" (left out here): what marks the codes it reads, in their lineage - the reader's name,
        // lumiscan-qr-code-reader, if left out.
        // How many frames may wait while a frame is read: 1 to 64, 1 if left out.
        "queueSize": 1,
        // Each stream result also on output/results, as execute writes it. Off if left out.
        "keepLatestOutput": false
    }
}
```

| Schlüssel | Erforderlich | Bedeutung |
| --- | --- | --- |
| `enable` | Nein | Stream-Modus: `true` startet den Stream beim Start der Anwendung. Benötigt eine `address`. `false`, wenn weggelassen. |
| `address` | Nein | Die eine Quelle: der Stream-Ordner einer Kamera. |
| `tag` | Nein | Was die Ergebnisse des Readers markiert: das `tag` des Reader-Schritts in ihrer Lineage. Der Name des Readers, `lumiscan-qr-code-reader`, wenn weggelassen. |
| `queueSize` | Nein | Wie viele Frames warten dürfen: `1` bis `64`, `1`, wenn weggelassen. |
| `keepLatestOutput` | Nein | `true`, um jedes Stream-Ergebnis zusätzlich in `output/results` zu schreiben. `false`, wenn weggelassen. |
| `onEntry` | Nein | Die Schritte, die auf jeden eintreffenden Frame angewendet werden, jeder ein Objekt mit einem `kind`, wie der `stream` jeder LumiScan-Anwendung sie hat. Diese Anwendung hat noch keine: Lassen Sie es weg oder leer (`[]`). Ein Schritt startet den Reader außerhalb des Stream-Modus, mit einer Warnung im Protokoll; das Speichern behält ihn bei. |

`control/subscribe/execute` und `control/unsubscribe/execute` schreiben alle fünf.

Gut zu wissen:

- Die Datei wird einmal gelesen, beim Start der Anwendung. Änderungen, die von Hand an der Datei vorgenommen werden, wirken beim nächsten Start.
- Ein Wert, der nicht verwendet werden kann, wird ignoriert und protokolliert: ein `enable` oder `keepLatestOutput`, das nicht `true` oder `false` ist, eine `address` oder ein `tag`, das kein String ist, eine `queueSize` außerhalb von `1` bis `64` (`1` wird verwendet). Stream-Modus ohne `address` wird ignoriert: Der Reader startet außerhalb des Stream-Modus.
- Das Element `subscriptions` früherer Versionen wird nicht mehr gelesen, und der Reader protokolliert, dass es umgezogen ist: Geben Sie die Quelle als `address` an.
- Eine Datei, die kein gültiges JSON ist, wird ignoriert und protokolliert.

## Die Warteschlangengröße {#queue-size}

`control/subscribe/input/queue-size` legt fest, wie viele Frames warten dürfen, während ein Frame gelesen wird: `1` bis `64`, standardmäßig `1`. Sie wird als `stream.queueSize` gespeichert, und `setting/stream/queue-size` zeigt den verwendeten Wert. Ein Frame, der eintrifft, wenn so viele warten, verdrängt den ältesten von ihnen, der in `statistics/skipped-frames` gezählt wird. Eine neue Warteschlangengröße gilt ab dem nächsten eintreffenden Frame, ohne neues Abonnement.

| Warteschlangengröße | Wirkung |
| --- | --- |
| 1 (Standard) | Der Reader liest den neuesten Frame. Er fällt nie zurück; wenn das Lesen langsamer ist als die Kamera, überspringt er Frames. |
| Mehr als 1 | Kurze Schübe von Frames werden alle gelesen, und weniger werden übersprungen. Wenn das Lesen länger langsamer ist als die Kamera, fällt der Reader zurück: Er liest Frames, die bis zu so viele Lesevorgänge alt sind. Jeder wartende Frame hält ein ganzes Bild im Speicher. |

## Die neueste Ausgabe behalten {#keep-latest-output}

Mit `control/subscribe/input/keep-latest-output` `true` - angewendet durch `control/subscribe/execute`, gespeichert als `stream.keepLatestOutput` - schreibt der Reader jedes Stream-Ergebnis zusätzlich in `output/results`, so wie `execute` es schreibt, sobald das Ergebnis auf `control/subscribe/output/stream/result` veröffentlicht ist. Ein Client, der `output/results` liest, hat dann das Ergebnis des neuesten Frames, ohne den Stream zu abonnieren. Es kostet eine Kopie jedes Ergebnisses. Standardmäßig aus.

## execute, während der Stream läuft {#while-streaming}

`execute` und der Stream halten einander nicht auf. Jeder Frame wird von einem eigenen Detektor gelesen, wie jeder Aufruf von `execute`, und nichts wird zwischen beiden geteilt: `execute` kann jederzeit aufgerufen werden, während der Stream läuft, und ein Frame wartet nie darauf.

## Einschränkungen {#limitations}

- `input/parameter` wird weder von `execute` noch vom Stream gelesen.
- (ctrlX OS, Ubuntu) Der Stream wurde nicht auf Linux, auf dem ctrlX Data Layer oder mit einer echten Kamera verifiziert.
- (PC) Der Stream wurde nur auf Windows mit LumiScan Keryx und simulierten Bildern getestet. Er wurde nicht mit einer echten Kamera verifiziert.
- LumiScan Cockpit zeichnet die Ergebnisse des Streams noch nicht.
- Änderungen, die von Hand an der Einstellungsdatei vorgenommen werden, wirken beim nächsten Start der Anwendung.

## Mit einem Beispiel beginnen (PC) {#generate-settings}

Auf einem PC schreibt der QR Code Reader ein Beispiel seiner Einstellungen in einen Ordner Ihrer Wahl und beendet sich, ohne zu starten. Zum Beispiel (Windows):

```shell
lumiscan-qr-code --generate-settings C:\work\qr-code-reader-settings
```

Ohne Ordner (`-g` allein) schreibt er in den aktuellen Ordner. Das Beispiel ist die Einstellungsdatei `qr-code-reader.json`: Stream-Modus aus, der Stream der `camera1` des Cam Driver als Quelle, die standardmäßige Warteschlangengröße und `keep-latest-output` aus. Daneben, in `schemas/`, liegen das Schema, das sie in `"$schema"` nennt, `qr-code-reader.schema.json`, und `stream.schema.json`, das den Abschnitt `stream` beschreibt; ein Editor, der JSON Schema versteht, kann die Datei dagegen prüfen. Kopieren Sie den Ordner `schemas` mit. Vorhandene Dateien werden nie überschrieben: Ist eine davon bereits im Ordner, wird nichts geschrieben, und der QR Code Reader nennt, welche.

Der QR Code Reader nennt dann den Ordner, aus dem er seine Einstellungen liest, auf Windows standardmäßig `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-qr-code\etc\lumiscan-qr-code-reader`. Bearbeiten Sie das Beispiel, kopieren Sie es dorthin, und starten Sie den QR Code Reader.

# Data-Layer-Referenz – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html

Alle Knoten liegen unter dem Basispfad der Anwendung:

```
hdvisionsystems/lumiscan-qr-code-reader/
```

Die Pfade unten sind relativ dazu angegeben. Ein einzelner Lesevorgang verwendet vier Knoten; der Bild-Stream (experimentell) ergänzt die Knoten unter [Bild-Stream](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html#stream), und [System](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html#system) sagt, was seine Quelle enthalten muss.

## Data Layer {#data-layer}

LumiScan QR Code Reader bietet seine Funktionen auf dem Data Layer unter `hdvisionsystems/lumiscan-qr-code-reader` an.

Auf ctrlX OS (ctrlX CORE oder ctrlX IPC) nutzt LumiScan QR Code Reader den [ctrlX Data Layer](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/ctrlx-data-layer.html).

Auf einem PC mit Windows 11 oder Ubuntu 24.04 nutzt LumiScan QR Code Reader [LumiScan Keryx](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/keryx.html).

Knotenadressen, Typen und Aufrufmuster sind auf beiden gleich. LumiScan QR Code Reader bietet:

- [Execute-Methoden](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/execute.html)
- ein [Stream](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/streams.html)-Abonnement auf eine Quelle (experimentell)
- keine Modulebene: Seine Knoten liegen direkt unter `hdvisionsystems/lumiscan-qr-code-reader`

Wie Adressen aufgebaut sind, wie Funktionen aufgerufen werden, die Statuscodes und die Werkzeuge sind in [LumiScan Keryx](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/index.html) beschrieben.

## Knotenbaum

```
hdvisionsystems/lumiscan-qr-code-reader/
├── input/
│   ├── image-address        (string)      address of the image node to read
│   └── parameter            (flatbuffers) detection parameters
├── execute                  (method)      read every QR code in that image
├── output/
│   └── results              (flatbuffers) one entry per code found
├── control/
│   ├── subscribe/                         the image stream (experimental)
│   │   ├── execute
│   │   ├── input/{enable,address,tag,queue-size,keep-latest-output}
│   │   └── output/stream/...              the image stream's results
│   └── unsubscribe/{execute,input/address}
├── setting/{stream,settings-hash}
└── system/meta/subscription-schema    (string)      what the stream's source must hold
```

## Eingabe

| Knoten | Typ | Zugriff | Beschreibung |
| --- | --- | --- | --- |
| `input/image-address` | string | lesen, schreiben | Adresse des zu lesenden Data-Layer-Bildknotens. Der Reader hängt `/data`, `/width`, `/height` und `/pixel-type` an. Standardmäßig leer, wodurch ein Durchlauf fehlschlägt, bis die Adresse gesetzt ist. |
| `input/parameter` | flatbuffers | lesen, schreiben | Erkennungsparameter, Typ `types/hdvisionsystems/lumiscan-qr-code-reader/code_detect_parameters`. Siehe den Hinweis unten. |

> [!NOTE]
> `input/parameter` enthält in dieser Version **keine Einstellungen** — seine Tabelle `DetectionParameters` ist leer. Der Knoten existiert, damit Feineinstellungen ergänzt werden können, ohne den Knotenbaum zu ändern. Ein Schreibzugriff darauf ändert nichts daran, wie ein Code gelesen wird. Auch der Bild-Stream liest ihn nicht.

## Methode

| Knoten | Blockierend | Wirkung |
| --- | --- | --- |
| `execute` | Ja | Liest das Bild unter `input/image-address` und schreibt jeden gefundenen QR-Code in `output/results`. Nimmt kein Argument entgegen — schreiben Sie einen leeren Wert. |

## Ausgabe

| Knoten | Typ | Zugriff | Beschreibung |
| --- | --- | --- | --- |
| `output/results` | flatbuffers | lesen | Jeder Code, den der letzte erfolgreiche Durchlauf gefunden hat, Typ `types/hdvisionsystems/lumiscan-qr-code-reader/code_detect_result`. Leeres Array, wenn das Bild keinen Code enthielt. Siehe [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html). |

## Bild-Stream (experimentell) {#stream}

Der Reader liest jeden Frame des abonnierten Cam-Driver-Streams, so wie `execute` ein Bild liest, und veröffentlicht ein Ergebnis pro Frame. Siehe [Codes auf einem Bild-Stream lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html).

| Knoten | Typ | Zugriff | Beschreibung |
| --- | --- | --- | --- |
| `control/subscribe/input/enable` | bool | lesen, schreiben | Stream-Modus: `true` lässt den Stream laufen, `false` stoppt ihn. |
| `control/subscribe/input/address` | string | lesen, schreiben | Die eine Quelle: der Stream-Ordner einer Kamera, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`. Eine andere Adresse ersetzt sie. |
| `control/subscribe/input/tag` | string | lesen, schreiben | Das Tag auf den Ergebnissen des Readers: Der Schritt des Readers in der Lineage jedes Stream-Ergebnisses trägt es. Leer: der Name des Readers, `lumiscan-qr-code-reader`. Ein neues Tag behält die Quelle; das nächste Ergebnis trägt es. |
| `control/subscribe/input/queue-size` | uint32 | lesen, schreiben | Wie viele Frames warten dürfen, während ein Frame gelesen wird, 1 bis 64. |
| `control/subscribe/input/keep-latest-output` | bool | lesen, schreiben | `true`, um jedes Stream-Ergebnis zusätzlich in `output/results` zu schreiben. |
| `control/unsubscribe/input/address` | string | lesen, schreiben | Die zu entfernende Quelle, so wie `setting/stream/address` sie zeigt. |
| `setting/stream/enable`, `address`, `tag`, `queue-size`, `keep-latest-output` | wie die Eingaben | lesen | Was `control/subscribe/execute` oder `control/unsubscribe/execute` zuletzt angewendet hat, so wie `qr-code-reader.json` es unter `stream` speichert. |
| `setting/settings-hash` | string | lesen | Der Hash dessen, womit die Ergebnisse erzeugt werden, als 16 Hexziffern. |
| `control/subscribe/output/stream/active` | bool | lesen | `true`, solange der Stream läuft. |
| `control/subscribe/output/stream/result` | flatbuffers | lesen | Ein Ergebnis pro gelesenem Frame, Typ `types/hdvisionsystems/lumiscan-qr-code-reader/stream_codes`: die `lineage` des Frames und `result`, die Tabelle, die auch `output/results` enthält. Abonnieren Sie ihn, um jedes Ergebnis zu erhalten. |
| `control/subscribe/output/stream/last-failure` | string | lesen | Warum der letzte Frame, der nicht gelesen werden konnte, fehlgeschlagen ist; nennt die Quelle mit ihrer Adresse. |
| `control/subscribe/output/stream/statistics/elapsed-ms`, `received-frames`, `processed-frames`, `skipped-frames`, `failed-frames`, `lost-frames`, `processing-us` | uint64 | lesen | Die Zähler des Streams, siehe [Die Statistik lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#statistics). |

| Knoten | Blockierend | Wirkung |
| --- | --- | --- |
| `control/subscribe/execute` | Ja | Prüft die Eingaben von `control/subscribe` gemeinsam, speichert sie in `qr-code-reader.json` und wendet sie dann an. Das Schreiben einer Eingabe allein ändert nichts. Wird abgelehnt bei Stream-Modus ohne Adresse oder einer Warteschlangengröße außerhalb von 1 bis 64. |
| `control/unsubscribe/execute` | Ja | Entfernt die in `control/unsubscribe/input/address` genannte Quelle, womit der Stream-Modus endet; das Tag bleibt. Wird wie ein Subscribe in `qr-code-reader.json` gespeichert. Wird abgelehnt, wenn die Adresse nicht die Quelle ist. |

Die Eingaben von `control/subscribe` beginnen mit dem, was angewendet ist, und nur `control/subscribe/execute` wendet sie an. Wenn `qr-code-reader.json` nicht geschrieben werden kann, antworten beide Methoden mit `CreationFailed` (ctrlX `DL_CREATION_FAILED`) und ändern nichts. Ein abgelehnter Aufruf antwortet mit `Rejected` (ctrlX `DL_INVALID_VALUE`). Siehe [Ergebnisse eines Methodenaufrufs](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/status-codes.html#method-results).

## System (experimentell) {#system}

| Knoten | Typ | Zugriff | Beschreibung |
| --- | --- | --- | --- |
| `system/meta/subscription-schema` | string | lesen | Was der Knoten, den der Reader abonniert, enthalten muss: ein JSON Schema (draft-04) seiner JSON-Form. Hier der Knoten `frame` des abonnierten Stream-Ordners, ein `stream_image`: ein Objekt mit `lineage` und `image`. Experimentell. |

## In dieser Version nicht vorhanden

Wer von den anderen LumiScan-Anwendungen kommt, sollte wissen, was diese Anwendung **nicht** veröffentlicht:

- **Kein Statusknoten.** Es gibt keinen `status-code` und keinen `status-text`; ein fehlgeschlagener Durchlauf wird nur im Anwendungsprotokoll gemeldet (auf ctrlX OS im Systemprotokoll von ctrlX OS) und lässt in `output/results` die Codes des vorherigen Durchlaufs stehen.
- **Kein Daten-Identifier.** Es gibt nichts, was zurückgegeben wird, sodass ein Ergebnis nicht der Anfrage zugeordnet werden kann, die es erzeugt hat.
- **Kein Ergebnisbild.** Die Anwendung rendert nichts — es gibt keinen Knoten `result-image` und keine Methode `plot`. Verwenden Sie LumiScan Cockpit, um die Codes im Bild gezeichnet zu sehen.
- **Keine Module.** Ein Reader pro Installation, unter dem einen Basispfad oben.
- **Keine Region of Interest.** Jeder Durchlauf durchsucht das gesamte Bild.

# FAQ – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/faq.html

Kurze Antworten auf häufige Fragen und Fehlermeldungen zu LumiScan QR Code Reader. Jeder Eintrag verweist auf die Seite mit den Details.

> [!TIP]
> Durchsuchen Sie diese Seite nach der genauen Fehlermeldung. Jeder Eintrag hat einen festen Anker (zum Beispiel `#faq-failed-run`).

## Voraussetzungen und Einrichtung

### Welche Codes liest der Reader? {#faq-what-codes}

- **Antwort:** Er liest QR-Codes, die 2D-Symbologie mit einem quadratischen Finder-Muster in drei Ecken. Jeder im Bild gefundene Code wird gemeldet; es gibt keine Begrenzung auf einen Code pro Durchlauf. Es wird keine Vorlage, kein Referenzbild, kein Trainingsschritt und keine Konfiguration benötigt: Sie geben dem Reader die Adresse eines Bildes und rufen `execute` auf.
- **Mehr:** [Beschreibung](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/description.html)

### Welche Bildquelle benötigt der Reader? {#faq-image-source}

- **Antwort:** Der Reader spricht nicht selbst mit einer Kamera. Er liest den in `input/image-address` angegebenen Bildknoten, den eine andere Anwendung auf demselben Data Layer veröffentlicht - auf ctrlX OS auf **demselben ctrlX CORE oder ctrlX IPC** (ein Zugriff auf einen entfernten Data Layer wird nicht unterstützt), auf einem PC über denselben LumiScan-Keryx-Broker -, normalerweise LumiScan Cam Driver, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/output/image`. Der Knoten muss `data` (rohe, unkomprimierte uint8-Pixeldaten), `width`, `height` und `pixel-type` (Name des GenICam-Pixelformats) bereitstellen. Geben Sie die Adresse des Bildknotens selbst an, nicht die seines Kindknotens `data`: Der Reader hängt `/data`, `/width`, `/height` und `/pixel-type` an.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html), [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-a-code.html)

### Welche Pixelformate werden unterstützt? {#faq-pixel-formats}

- **Antwort:** `Mono8`, `Mono12`, `RGB8`, `RGB12`, `BGR8`, `BGR12`, `Bayer_GR8`, `Bayer_RG8`, `Bayer_GR12` und `Bayer_RG12`. Der Name wird ohne Rücksicht auf Groß- und Kleinschreibung abgeglichen, und der Unterstrich darf in den Bayer-Namen fehlen (`BayerGR8` und `bayer_gr8` sind dasselbe Format). Bayer-Bilder werden vor der Suche in Farbe umgewandelt. Jedes andere Pixelformat wird abgelehnt, und der Durchlauf liefert kein Ergebnis. Die Bilddaten müssen für das angegebene Format mindestens `width x height x bytes-per-pixel` Bytes umfassen; ein kürzerer Puffer wird abgelehnt.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html)

## Codes lesen

### Wie lese ich einen Code? {#faq-read-code}

- **Antwort:** Alle Pfade sind relativ zu `hdvisionsystems/lumiscan-qr-code-reader`.
  - Schreiben Sie die Adresse des Bildknotens in `input/image-address`. Sie wird gemerkt; setzen Sie sie also nur neu, wenn sich die Bildquelle ändert.
  - Schreiben Sie einen leeren Wert in die Methode `execute`. Der Aufruf ist blockierend und kehrt zurück, wenn die Suche beendet ist.
  - Lesen Sie `output/results`: Es enthält jeden QR-Code, der in diesem Bild gefunden wurde.
- **Mehr:** [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-a-code.html)

### Was enthält ein Ergebniseintrag? {#faq-result-fields}

- **Antwort:** `output/results` ist ein FlatBuffer (`CodeDetectResultArray.results`) mit einem Eintrag pro Code: `center` (ein `Point2f` mit `x` und `y` in Bildpixeln), `text` (der dekodierte Inhalt), `score` (wie sicher das Leseergebnis ist) und `polygons` (die Eckpunkte, die den Code umreißen). Auf ctrlX OS kommen die Zahlen über die ctrlX REST API in Anführungszeichen, als Strings, zurück; parsen Sie sie also als Zahlen. `center` und `text` sind immer vorhanden; `polygons` kann bei einem Eintrag fehlen, was bedeutet, dass kein Umriss angegeben wurde - kein Fehler.
- **Mehr:** [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html)

### Wie erkenne ich, ob ein Durchlauf fehlgeschlagen ist? Es gibt keinen Knoten `status-code`. {#faq-failed-run}

- **Ursache:** Dieser Reader veröffentlicht keinen Knoten `status-code` oder `status-text` und gibt keinen Identifier zurück. Ein Durchlauf schlägt fehl, wenn das Bild nicht gelesen werden kann: keine Adresse gesetzt, eine Adresse, die sich nicht auflösen lässt, ein fehlender oder zu kurzer `data`-Puffer oder ein nicht unterstütztes Pixelformat. Ein fehlgeschlagener Durchlauf lässt `output/results` unverändert; es enthält weiterhin die Codes des vorherigen Durchlaufs.
- **Lösung:** Prüfen Sie das Anwendungsprotokoll, in das der Grund geschrieben wird (auf ctrlX OS das Systemprotokoll von ctrlX OS, auf einem PC die Konsolenausgabe der App), oder lesen Sie `output/results` vor und nach dem Durchlauf und vergleichen Sie.
- **Mehr:** [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-a-code.html), [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html)

### Kann ich die Erkennung feineinstellen, eine Region of Interest setzen oder Module anlegen? {#faq-no-settings}

- **Antwort:** Nein, nicht in dieser Version. `input/parameter` enthält keine Einstellungen (seine Tabelle `DetectionParameters` ist leer), ein Schreibzugriff darauf ändert also nichts; auch der Bild-Stream liest ihn nicht. Es gibt keine Region of Interest: Jeder Durchlauf durchsucht das gesamte Bild. Es gibt keine Module: ein Reader pro Installation, unter einem einzigen Basispfad. Es gibt auch kein Ergebnisbild; verwenden Sie LumiScan Cockpit, um die Codes zu sehen.
- **Mehr:** [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html)

### Wie kann ich die Codes im Bild gezeichnet sehen? {#faq-see-results}

- **Antwort:** Öffnen Sie LumiScan Cockpit. Es führt den Reader als Ansicht namens `qr-code` und zeichnet ein Rechteck um jeden Code, beschriftet mit dem dekodierten Text und dem Score. Ein Code, der gefunden, aber nicht dekodiert wurde, hat keinen Text und wird nur mit seinem Score beschriftet. Cockpit zeichnet die Ergebnisse des Bild-Streams noch nicht.
- **Mehr:** [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html)

### Wie lange dauert ein Lesevorgang? {#faq-timing}

- **Antwort:** Das Lesen ist synchron: Der Schreibzugriff auf `execute` kehrt zurück, wenn die Suche beendet ist. Wie lange das dauert, hängt von der Bildgröße ab, da bei jedem Durchlauf das gesamte Bild durchsucht wird.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html)

## Bild-Stream (experimentell)

### Wie lese ich die Codes in jedem Frame eines Kamera-Streams? {#faq-stream-setup}

- **Antwort:** Verwenden Sie den Bild-Stream (experimentell). Nur `control/subscribe/execute` wendet seine Eingaben an: Das Schreiben einer Eingabe allein ändert nichts. Alle Pfade sind relativ zu `hdvisionsystems/lumiscan-qr-code-reader`.
  - Stellen Sie sicher, dass der Stream des Cam Driver läuft (`hdvisionsystems/lumiscan-cam-driver/<camera name>/control/publish/output/stream/active` ist `true`).
  - Schreiben Sie den Stream-Ordner der Kamera, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`, in `control/subscribe/input/address`.
  - Abonnieren Sie `control/subscribe/output/stream/result`.
  - Setzen Sie `control/subscribe/input/enable` auf `true` und schreiben Sie dann in `control/subscribe/execute`. Die Ergebnisse treffen ein, sobald `control/subscribe/output/stream/active` `true` ist.
- **Mehr:** [Codes auf einem Bild-Stream lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#setting-up), [Streams](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/streams.html)

### Wo liegt die Einstellungsdatei des Readers? {#faq-settings-file}

- **Antwort:** `qr-code-reader.json` liegt im Konfigurationsverzeichnis der Anwendung: auf ctrlX OS `/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-qr-code-reader`; auf einem PC (Windows) `%APP_RESOURCE_DIR%\etc\lumiscan-qr-code-reader` oder ohne `APP_RESOURCE_DIR` `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-qr-code\etc\lumiscan-qr-code-reader`. Auf einem PC schreibt `lumiscan-qr-code --generate-settings <folder>` ein Beispiel. Die Datei wird einmal gelesen, beim Start der Anwendung.
- **Mehr:** [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving)

## Fehlerbehebung {#troubleshooting}

Probleme und Fehlermeldungen sind Schritt für Schritt unter [Fehlerbehebung](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html) beschrieben:

- [Der Reader beendet sich beim Start](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-app-stops-after-start)
- [`output/results` ist ein leeres Array](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-empty-result)
- [`control/subscribe/execute` antwortet mit `Rejected` (ctrlX `DL_INVALID_VALUE`) oder `CreationFailed` (ctrlX `DL_CREATION_FAILED`)](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-stream-refused)
- [Der Stream läuft, aber es treffen keine Ergebnisse ein, oder `failed-frames` wächst](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-stream-no-results)
- [Nach einem Neustart streamt der Reader von selbst wieder](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-stream-restart)

## Lizenzierung und Support

### Standard- oder Advanced-Lizenz - welche verwendet der Reader? {#faq-standard-advanced}

- **Antwort:** Ist eine Advanced-Lizenz verfügbar, verwendet die Anwendung sie automatisch. Ist keine verfügbar, läuft sie mit den Standard-Funktionen, statt den Start zu verweigern.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html#licence), [FAQ zur Lizenzierung](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/faq.html)

### Welche Lizenz benötige ich? {#faq-licence}

- **Antwort:** Ein Lizenzplatz deckt den Reader ab, da es einen Reader pro Installation gibt. Bezugswege:
  - Bei HD Vision Systems gekauft: Die Lizenz liegt auf einem LumiScan Key (Windows 11 oder Ubuntu 24.04). Pro Gerät, auf dem die Software gleichzeitig läuft, wird ein LumiScan Key benötigt; Keys können zwischen Geräten getauscht werden.
  - Im ctrlX Store für Windows 11 gekauft: ctrlX WORKS plus ein LumiScan Key.
  - Im ctrlX Store für ctrlX OS (ctrlX CORE oder IPC) gekauft: eine ctrlX-Lizenz, kein Key.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html#licence), [FAQ zur Lizenzierung](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/faq.html)

### Wo finde ich weitere Antworten oder Support? {#faq-support}

- **Antwort:** Siehe die übergreifende [LumiScan-FAQ](https://docs.hdvisionsystems.com/de/faq.html) und für den Data Layer auf beiden Plattformen die [Data-Layer-FAQ](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/faq.html). Wenden Sie sich an den Customer Success von HD Vision Systems unter [customer.success@hdvisionsystems.com](mailto:customer.success@hdvisionsystems.com) oder +49 6221 6721905; für Lizenzen an [licenses@hdvisionsystems.com](mailto:licenses@hdvisionsystems.com).
- **Mehr:** [FAQ zur Lizenzierung](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/faq.html)

# Fehlerbehebung – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html

Diese Seite beschreibt Probleme mit LumiScan QR Code Reader und wie Sie sie lösen. Beginnen Sie mit den [allgemeinen Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#general-checks), und suchen Sie dann unten Ihr Symptom: Jedes Problem nennt seine Symptome, die möglichen Ursachen, eine Diagnose und die Lösung. Probleme des Data Layer selbst sind unter [Fehlerbehebung Data Layer](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/troubleshooting.html) beschrieben, Lizenzprobleme unter [Fehlerbehebung Lizenzierung](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/troubleshooting.html).

## Allgemeine Prüfungen {#general-checks}

1. **Lesen Sie das Anwendungsprotokoll.** Das Anwendungsprotokoll ist das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC). Der Reader schreibt den Grund dorthin, wenn ein Durchlauf fehlschlägt, wenn `control/subscribe/execute` oder `control/unsubscribe/execute` abgelehnt wird, wenn die Quelle des Bild-Streams nicht abonniert werden kann (der erste Fehlschlag), wenn Frames nicht gelesen werden können (höchstens eine Zeile alle 5 Sekunden) und wenn ein Wert in seiner Einstellungsdatei nicht verwendet werden kann.

2. **Prüfen Sie die Adressen.** Alle Knoten liegen direkt unter `hdvisionsystems/lumiscan-qr-code-reader/`; der Reader hat keine Module. Adressen sind kleingeschrieben. Erwartet: Ihre SPS oder Ihr Client verwendet genau diese Adressen, wie in der [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/datalayer-reference.html) aufgeführt.

3. **Prüfen Sie die Bildquelle.** Die Anwendung, die den Bildknoten veröffentlicht, normalerweise LumiScan Cam Driver, muss auf **demselben ctrlX CORE oder ctrlX IPC** laufen (ctrlX OS) oder mit demselben LumiScan-Keryx-Broker verbunden sein wie der Reader (PC, siehe [LumiScan Keryx auf einem PC](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/keryx.html)). Erwartet: Der in `input/image-address` genannte Knoten stellt `data`, `width`, `height` und `pixel-type` bereit.

4. **Prüfen Sie, ob ein Durchlauf fehlgeschlagen ist.** Dieser Reader veröffentlicht keinen Knoten `status-code` oder `status-text`. Ein fehlgeschlagener Durchlauf lässt `output/results` unverändert, mit den Codes des vorherigen Durchlaufs. Lesen Sie `output/results` vor und nach dem Durchlauf und vergleichen Sie, oder prüfen Sie das Protokoll. Siehe [Wie erkenne ich, ob ein Durchlauf fehlgeschlagen ist?](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/faq.html#faq-failed-run).

5. **Prüfen Sie die Einstellungsdatei des Bild-Streams.** Der Reader speichert seine Stream-Einstellungen in `qr-code-reader.json` im Konfigurationsverzeichnis der Anwendung:

   | Plattform | Konfigurationsverzeichnis |
   | --- | --- |
   | ctrlX OS | `/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-qr-code-reader` |
   | PC (Windows) | `%APP_RESOURCE_DIR%\etc\lumiscan-qr-code-reader`; ohne `APP_RESOURCE_DIR` `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-qr-code\etc\lumiscan-qr-code-reader` |

   Die Datei wird einmal gelesen, beim Start der Anwendung: Von Hand vorgenommene Änderungen wirken beim nächsten Start. Ein Wert, der nicht verwendet werden kann, wird ignoriert und protokolliert; eine Datei, die kein gültiges JSON ist, wird ignoriert und protokolliert. Siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving).

## Problem: Der Reader beendet sich beim Start {#faq-app-stops-after-start}

**Symptome**

Auf ctrlX OS beendet sich der Reader kurz nach dem Start. Seine Knoten unter `hdvisionsystems/lumiscan-qr-code-reader` verschwinden aus dem Data Layer.

**Mögliche Ursachen**

- Die ctrlX-Lizenz `SWL-W-XCx-QRxxxCRDSxHDVSx-V1NN` ist auf dem ctrlX-OS-Gerät, auf dem der Reader läuft, nicht verfügbar. Die Lizenz wird beim Start bis zu zehn Sekunden lang geprüft; wird in dieser Zeit keine verfügbar, beendet sich der Reader.

**Diagnose**

1. Öffnen Sie das Systemprotokoll von ctrlX OS - erwartet: der Grund für das Beenden. Das Systemprotokoll nennt die fehlende Lizenz.
2. Prüfen Sie die Lizenzen im License Manager von ctrlX OS - erwartet: Die ctrlX-Lizenz `SWL-W-XCx-QRxxxCRDSxHDVSx-V1NN` ist auf dem Gerät verfügbar, auf dem der Reader läuft. Ein Lizenzplatz deckt den Reader ab. Die Advanced-Lizenz `SWL-W-XCx-QRxxxCRDAxHDVSx-V1NN` wird für den Start nicht benötigt: Ohne sie läuft der Reader mit den Standard-Funktionen.

**Lösung**

- **Wenn die ctrlX-Lizenz fehlt:**

  a. Kaufen Sie die Lizenz `SWL-W-XCx-QRxxxCRDSxHDVSx-V1NN` im ctrlX Store.

  b. Aktivieren Sie sie im License Manager von ctrlX OS auf dem Gerät, auf dem der Reader läuft. Folgen Sie dabei der Dokumentation von Bosch Rexroth für ctrlX OS.

  c. Starten Sie den Reader erneut. Erwartet: Er läuft weiter, und seine Knoten sind im Data Layer.

Siehe [Lizenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html#licence) und [Meine ctrlX-App beendet sich kurz nach dem Start](https://docs.hdvisionsystems.com/de/lumiscan-licensing-de/1.0.4/troubleshooting.html#faq-ctrlx-app-stops).

**Wenn das Problem weiterhin besteht**

Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit den Zeilen des Systemprotokolls von ctrlX OS, die die Lizenz nennen. Für Lizenzen wenden Sie sich an [licenses@hdvisionsystems.com](mailto:licenses@hdvisionsystems.com).

## Problem: `output/results` ist ein leeres Array {#faq-empty-result}

**Symptome**

Nachdem `execute` zurückgekehrt ist, enthält `output/results` ein leeres Array: `CodeDetectResultArray.results` hat keinen Eintrag. Im Bild-Stream hat ein Ergebnis auf `control/subscribe/output/stream/result` ein leeres Array `results`.

**Mögliche Ursachen**

- Das Bild enthält keinen QR-Code. Ein leeres `output/results` ist kein Fehler: Es bedeutet, dass das Bild erfolgreich gelesen wurde und keinen QR-Code enthielt. Ein Durchlauf, der nichts gefunden hat, veröffentlicht ein leeres Array und keinen Fehler.
- Der Code ist kein QR-Code. Der Reader liest QR-Codes, die 2D-Symbologie mit einem quadratischen Finder-Muster in drei Ecken. Data-Matrix-Codes, Aztec-Codes und lineare Barcodes lesen seine Schwester-Apps.
- `input/image-address` nennt einen Bildknoten, der den Code nicht zeigt. Jeder Durchlauf liest den gesamten aktuellen Inhalt des dort genannten Bildknotens.
- Der letzte Durchlauf ist fehlgeschlagen, und das leere Array ist das Ergebnis eines früheren Durchlaufs. Ein fehlgeschlagener Durchlauf lässt `output/results` unverändert. Ein Durchlauf schlägt fehl, wenn das Bild nicht gelesen werden kann: keine Adresse gesetzt, eine Adresse, die sich nicht auflösen lässt, ein fehlender oder zu kurzer `data`-Puffer oder ein nicht unterstütztes Pixelformat.

**Diagnose**

1. Lesen Sie das Anwendungsprotokoll zum Zeitpunkt des Durchlaufs - erwartet: kein Fehlschlag. Ein fehlgeschlagener Durchlauf schreibt seinen Grund dorthin: in das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC).
2. Lesen Sie `input/image-address` - erwartet: die Adresse des Bildknotens der Kamera, die den Code sieht, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/output/image`.
3. Prüfen Sie die Art des Codes - erwartet: ein QR-Code, mit einem quadratischen Finder-Muster in drei Ecken.

**Lösung**

- **Wenn das Bild keinen QR-Code enthält:** Mit dem Reader ist alles in Ordnung. Rufen Sie `execute` erneut auf, wenn der Bildknoten ein Bild mit dem Code enthält.

- **Wenn der Code kein QR-Code ist:** Verwenden Sie die Schwester-App für seine Symbologie: LumiScan DMC Reader, LumiScan Aztec Code Reader oder LumiScan Barcode Reader. Sie arbeiten auf dieselbe Weise.

- **Wenn `input/image-address` einen anderen Bildknoten nennt:**

  a. Schreiben Sie die Adresse des richtigen Bildknotens in `input/image-address`. Es ist die Adresse des Bildknotens selbst, nicht die seines Kindknotens `data`. Die Adresse wird gemerkt.

  b. Schreiben Sie einen leeren Wert in `execute`. Erwartet: `output/results` enthält einen Eintrag pro Code.

- **Wenn der letzte Durchlauf fehlgeschlagen ist:** Beseitigen Sie den Grund, den das Protokoll nennt: Setzen Sie `input/image-address`, korrigieren Sie eine Adresse, die sich nicht auflösen lässt, oder sorgen Sie dafür, dass die Bildquelle vollständige `data` in einem unterstützten Pixelformat liefert (siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html)). Schreiben Sie dann erneut einen leeren Wert in `execute`. Erwartet: Das Protokoll zeigt für diesen Durchlauf keinen Fehlschlag.

Siehe [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-a-code.html) und [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/the-result.html).

**Wenn das Problem weiterhin besteht**

Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit dem Wert von `input/image-address`, `width`, `height` und `pixel-type` dieses Bildknotens und der Symbologie des Codes.

## Problem: `control/subscribe/execute` antwortet mit `Rejected` (ctrlX `DL_INVALID_VALUE`) oder `CreationFailed` (ctrlX `DL_CREATION_FAILED`) {#faq-stream-refused}

**Symptome**

Ein Schreibvorgang auf `control/subscribe/execute` (oder auf `control/unsubscribe/execute`) antwortet mit `Rejected` (ctrlX `DL_INVALID_VALUE`) oder `CreationFailed` (ctrlX `DL_CREATION_FAILED`) statt mit `Ok` (ctrlX `DL_OK`). Nichts hat sich geändert: `setting/stream/` zeigt weiterhin die zuvor angewendeten Werte.

**Mögliche Ursachen**

- `Rejected` / `DL_INVALID_VALUE` von `control/subscribe/execute`: Stream-Modus ohne Adresse oder eine Warteschlangengröße außerhalb von `1` bis `64`.
- `Rejected` / `DL_INVALID_VALUE` von `control/unsubscribe/execute`: Die Adresse ist nicht die Quelle, oder es gibt keine Quelle.
- `CreationFailed` / `DL_CREATION_FAILED`: Die Einstellungsdatei `qr-code-reader.json` konnte nicht geschrieben werden, zum Beispiel weil sie kein gültiges JSON ist.

**Diagnose**

1. Lesen Sie die Antwort des Methodenaufrufs - erwartet: `Ok` oder `DL_OK`. `Rejected` oder `DL_INVALID_VALUE` weist auf eine Eingabe hin, `CreationFailed` oder `DL_CREATION_FAILED` auf die Einstellungsdatei.
2. Lesen Sie das Anwendungsprotokoll - erwartet: der Grund für die Ablehnung. Auf dem ctrlX Data Layer trägt ein abgelehnter Aufruf keinen Grund; der Reader schreibt ihn in sein Protokoll.
3. Lesen Sie nach einem abgelehnten `control/subscribe/execute` die Knoten `control/subscribe/input/enable`, `control/subscribe/input/address` und `control/subscribe/input/queue-size` - erwartet: eine Adresse, sobald `enable` `true` ist, und eine Warteschlangengröße von `1` bis `64`.
4. Vergleichen Sie nach einem abgelehnten `control/unsubscribe/execute` den Wert von `control/unsubscribe/input/address` mit `setting/stream/address` - erwartet: dieselbe Adresse. Ein `/` an einem der beiden Enden zählt nicht.
5. Öffnen Sie nach `CreationFailed` oder `DL_CREATION_FAILED` die Datei `qr-code-reader.json` im Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#general-checks)) - erwartet: eine gültige JSON-Datei.

**Lösung**

- **Wenn der Stream-Modus keine Adresse hat:** Schreiben Sie den Stream-Ordner der Kamera, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`, in `control/subscribe/input/address`, und schreiben Sie dann erneut auf `control/subscribe/execute`. Erwartet: `Ok` oder `DL_OK`.

- **Wenn die Warteschlangengröße außerhalb von `1` bis `64` liegt:** Schreiben Sie einen Wert von `1` bis `64` in `control/subscribe/input/queue-size`, und schreiben Sie dann erneut auf `control/subscribe/execute`. Erwartet: `Ok` oder `DL_OK`.

- **Wenn die zu entfernende Adresse nicht die Quelle ist:** Schreiben Sie die Adresse, die `setting/stream/address` anzeigt, in `control/unsubscribe/input/address`, und schreiben Sie dann erneut auf `control/unsubscribe/execute`. Ist `setting/stream/address` leer, gibt es keine Quelle, die entfernt werden kann.

- **Wenn die Einstellungsdatei nicht geschrieben werden konnte:**

  a. Korrigieren Sie `qr-code-reader.json`, sodass die Datei gültiges JSON ist. Auf einem PC schreibt `lumiscan-qr-code --generate-settings <folder>` ein Beispiel, mit dem Sie beginnen können.

  b. Schreiben Sie erneut auf `control/subscribe/execute`. Erwartet: `Ok` oder `DL_OK`, und `setting/stream/` zeigt die neuen Werte.

     Von Hand vorgenommene Änderungen an der Datei wirken beim nächsten Start der Anwendung.

Siehe [Die Quelle ändern](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#subscribing) und [Ergebnisse eines Methodenaufrufs](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/status-codes.html#method-results).

**Wenn das Problem weiterhin besteht**

Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit der Antwort des Methodenaufrufs, den Werten der Eingaben von `control/subscribe` (oder von `control/unsubscribe/input/address`) und `qr-code-reader.json`.

## Problem: Der Stream läuft, aber es treffen keine Ergebnisse ein, oder `failed-frames` wächst {#faq-stream-no-results}

**Symptome**

Nach `control/subscribe/execute` trifft auf `control/subscribe/output/stream/result` kein Ergebnis ein, oder der Zähler `control/subscribe/output/stream/statistics/failed-frames` wächst.

**Mögliche Ursachen**

- Der Stream des Readers läuft nicht: Die Eingaben von `control/subscribe` wurden geschrieben, aber `control/subscribe/execute` wurde nicht aufgerufen. Eine Eingabe allein zu schreiben ändert nichts.
- Von der Quelle treffen keine Frames ein: Der Stream des Cam Driver läuft nicht, oder `control/subscribe/input/address` ist nicht der Stream-Ordner der Kamera. Der Stream des Cam Driver bleibt über einen Neustart des Cam Driver nicht erhalten.
- Die Quelle kann nicht abonniert werden. Der Reader versucht es dann alle 5 Sekunden erneut, solange der Stream läuft.
- Frames treffen ein, können aber nicht gelesen werden, zum Beispiel Frames in einem Pixelformat, das der Reader nicht unterstützt, oder Frames, deren Pixel die angegebene Größe nicht ausfüllen.
- Ergebnisse werden veröffentlicht, aber Ihr Client abonniert `control/subscribe/output/stream/result` nicht. Ein Lesen des Knotens liefert nur das neueste Ergebnis.

**Diagnose**

1. Lesen Sie `control/subscribe/output/stream/active` - erwartet: `true`. Ist der Wert `false`, lesen Sie `setting/stream/enable` und `setting/stream/address` - erwartet: `true` und der Stream-Ordner der Kamera.
2. Lesen Sie `hdvisionsystems/lumiscan-cam-driver/<camera name>/control/publish/output/stream/active` - erwartet: `true`.
3. Lesen Sie `control/subscribe/output/stream/statistics/received-frames` zweimal, im Abstand von einigen Sekunden - erwartet: Der Wert wächst. Die Zähler werden etwa viermal pro Sekunde aktualisiert, solange der Stream läuft.
4. Lesen Sie `statistics/failed-frames` und `control/subscribe/output/stream/last-failure` - erwartet: `failed-frames` wächst nicht, und `last-failure` ist leer. `last-failure` sagt, warum der letzte Frame, der nicht gelesen werden konnte, fehlgeschlagen ist; der Knoten wird geleert, wenn der Stream startet.
5. Lesen Sie `statistics/processed-frames` - erwartet: Der Wert wächst. Für jeden verarbeiteten Frame wird ein Ergebnis auf `control/subscribe/output/stream/result` veröffentlicht.
6. Lesen Sie das Anwendungsprotokoll - erwartet: kein Fehlschlag beim Abonnieren der Quelle und keine fehlgeschlagenen Frames.

**Lösung**

- **Wenn der Stream des Readers nicht läuft:**

  a. Schreiben Sie den Stream-Ordner der Kamera in `control/subscribe/input/address`.

  b. Setzen Sie `control/subscribe/input/enable` auf `true`.

  c. Schreiben Sie auf `control/subscribe/execute`. Erwartet: `Ok` oder `DL_OK`, danach ist `control/subscribe/output/stream/active` `true`.

- **Wenn der Stream des Cam Driver nicht läuft:** Starten Sie ihn, siehe das Handbuch des Cam Driver, *Bilder streamen*. Sein Stream bleibt über einen Neustart nicht erhalten: Verbinden Sie nach jedem Start des Cam Driver die Kamera, und rufen Sie seine Methode `control/publish/execute` mit `enable` = `true` auf. Der Stream des Readers kann vor dem Stream des Cam Driver gestartet werden; Ergebnisse treffen ein, sobald Frames eintreffen.

- **Wenn die Adresse nicht der Stream-Ordner der Kamera ist:** Schreiben Sie den Ordner, zum Beispiel `hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream`, in `control/subscribe/input/address`, und schreiben Sie auf `control/subscribe/execute`. Der Reader liest den Knoten `frame` des Ordners. Erwartet: `received-frames` wächst.

- **Wenn die Quelle nicht abonniert werden kann:** Stellen Sie sicher, dass der Cam Driver läuft und den in `control/subscribe/input/address` genannten Stream-Ordner veröffentlicht. Solange der Stream läuft, versucht der Reader die Quelle alle 5 Sekunden erneut; bei derselben Adresse müssen Sie nicht erneut ausführen.

- **Wenn Frames nicht gelesen werden können:** Lesen Sie den Grund in `control/subscribe/output/stream/last-failure`. Stellen Sie sicher, dass die Frames ein unterstütztes Pixelformat verwenden: `Mono8`, `Mono12`, `RGB8`, `RGB12`, `BGR8`, `BGR12`, `Bayer_GR8`, `Bayer_RG8`, `Bayer_GR12` oder `Bayer_RG12` (siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html)). Erwartet: `failed-frames` wächst nicht mehr.

- **Wenn `processed-frames` wächst, Ihr Client aber nichts erhält:** Abonnieren Sie `control/subscribe/output/stream/result`, um jedes Ergebnis zu erhalten. Oder setzen Sie `control/subscribe/input/keep-latest-output` auf `true`, und schreiben Sie auf `control/subscribe/execute`: Der Reader schreibt dann jedes Stream-Ergebnis zusätzlich in `output/results`. `krxclient subscribe hdvisionsystems/lumiscan-qr-code-reader/control/subscribe/output/stream/result --count 5` zeigt, dass Ergebnisse eintreffen; es zeigt einen Flatbuffer nur mit seiner Größe an.

Ein Frame ohne QR-Code ergibt ein Ergebnis mit einem leeren Array `results`, siehe [Problem: `output/results` ist ein leeres Array](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#faq-empty-result). Siehe auch [Die Statistik lesen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#statistics) und [Ein Stream liefert nichts](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/troubleshooting.html#stream-nothing).

**Wenn das Problem weiterhin besteht**

Der Bild-Stream ist experimentell. Auf ctrlX OS wurde er nicht unter Linux, nicht auf dem ctrlX Data Layer und nicht mit einer echten Kamera verifiziert. Auf einem PC wurde er nur unter Windows mit LumiScan Keryx und simulierten Bildern getestet; er wurde nicht mit einer echten Kamera verifiziert. Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit den Werten von `control/subscribe/output/stream/active`, `control/subscribe/output/stream/last-failure`, den Zählern unter `control/subscribe/output/stream/statistics/` und `setting/stream/` sowie dem Wert von `control/publish/output/stream/active` des Cam Driver.

## Problem: Nach einem Neustart streamt der Reader von selbst wieder {#faq-stream-restart}

**Symptome**

Nach einem Neustart der Anwendung ist `control/subscribe/output/stream/active` `true`, und auf `control/subscribe/output/stream/result` treffen Ergebnisse ein, obwohl Ihr Programm nichts ausgeführt hat.

**Mögliche Ursachen**

- Der Reader startet so, wie er war. Das ist beabsichtigt: `control/subscribe/execute` und `control/unsubscribe/execute` speichern, was sie anwenden, im Element `stream` von `qr-code-reader.json`. Nach einem Neustart abonniert der Reader dieselbe Quelle und startet, wenn `stream.enable` `true` ist, seinen Stream sofort.
- `stream.enable` wurde in `qr-code-reader.json` von Hand auf `true` gesetzt. `true` startet den Stream beim Start der Anwendung.

**Diagnose**

1. Lesen Sie `setting/stream/enable` und `setting/stream/address` - sie zeigen, was zuletzt angewendet wurde, so wie die Einstellungsdatei es speichert. Erwartet, wenn der Reader nach einem Start nicht streamen soll: `setting/stream/enable` ist `false`.
2. Öffnen Sie `qr-code-reader.json` im Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#general-checks)) - erwartet, wenn der Reader nach einem Start nicht streamen soll: `stream.enable` ist `false` oder fehlt.

**Lösung**

- **Wenn der Reader nach einem Start nicht streamen soll:** Setzen Sie `control/subscribe/input/enable` auf `false`, und schreiben Sie dann auf `control/subscribe/execute`. Das stoppt den Stream sofort und wird in `qr-code-reader.json` gespeichert; der Reader startet beim nächsten Mal also außerhalb des Stream-Modus. Der Frame, der gerade gelesen wird, wird zuerst abgeschlossen. Erwartet: `control/subscribe/output/stream/active` ist `false`, und `setting/stream/enable` ist `false`.
- **Wenn der Reader auch die Quelle nicht behalten soll:** Schreiben Sie die Adresse, die `setting/stream/address` anzeigt, in `control/unsubscribe/input/address`, und schreiben Sie dann auf `control/unsubscribe/execute`. Damit endet der Stream-Modus. Erwartet: `setting/stream/address` ist leer.

Siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/reading-codes-on-an-image-stream.html#saving).

**Wenn das Problem weiterhin besteht**

Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit `qr-code-reader.json` und den Werten von `setting/stream/`.

## Informationen für den Support {#support-information}

Besteht ein Problem weiterhin, senden Sie diese Informationen an den Support:

- **Software-Version:** die Version von LumiScan QR Code Reader, die Sie einsetzen. Die Dateien, die der Bild-Stream in `settings-history/` im Konfigurationsverzeichnis ablegt, halten sie als `software.version` fest.
- **Plattform:** ctrlX OS (ctrlX CORE oder ctrlX IPC) und die Version von ctrlX OS, oder ein PC mit Windows 11 oder Ubuntu 24.04.
- **Data Layer:** der ctrlX Data Layer (ctrlX OS) oder LumiScan Keryx (PC). Auf einem PC zusätzlich die Broker-Adresse, die der Reader verwendet; jede App nennt sie beim Start in ihrem Protokoll.
- **Protokoll:** das Anwendungsprotokoll aus der Zeit des Fehlers: das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC).
- **Zeitpunkt:** Datum und Uhrzeit des Fehlers.
- **Kommunikationsstatus:** die Antwort eines abgelehnten Methodenaufrufs (zum Beispiel `Rejected` oder `DL_INVALID_VALUE`) und die Knotenwerte, die der Eintrag des Problems nennt.
- **Konfigurationsdateien:** `qr-code-reader.json` und die Dateien in `settings-history/` aus dem Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html#general-checks)).

Wenden Sie sich an den Customer Success von HD Vision Systems unter [customer.success@hdvisionsystems.com](mailto:customer.success@hdvisionsystems.com) oder +49 6221 6721905; für Lizenzen an [licenses@hdvisionsystems.com](mailto:licenses@hdvisionsystems.com).

# Release Notes: v1.0.0 – LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/release-notes/v1-0-0.html

Erste funktionsfähige Version von LumiScan QR Code Reader.

## Neu

**Lesen von QR-Codes.** `execute` liest das in `input/image-address` angegebene Bild und veröffentlicht, was es gefunden hat, in `output/results`. Jeder Code wird mit seinem dekodierten `text`, dem `center` und den `polygons`, die ihn im Bild umreißen, sowie einem `score` gemeldet.

**Jede Bildquelle auf demselben ctrlX CORE.** `input/image-address` benennt den zu lesenden Bildknoten, sodass der Reader jeder Anwendung folgt, die das Bild veröffentlicht. Mono-, RGB-, BGR- und Bayer-Formate werden mit 8 und 12 Bit akzeptiert, und Bayer-Bilder werden vor der Suche in Farbe umgewandelt.

**Gezeichnete Ergebnisse in LumiScan Cockpit**, das den Reader als Ansicht namens `qr-code` führt und ein Rechteck um jeden Code zeichnet, beschriftet mit dem dekodierten Text und dem Score.

## Gut zu wissen

**`input/parameter` hat noch keine Einstellungen.** Seine Tabelle `DetectionParameters` ist leer; der Knoten existiert, damit später Feineinstellungen ergänzt werden können, ohne den Knotenbaum zu ändern.

**Ein fehlgeschlagener Durchlauf lässt das vorherige Ergebnis stehen.** Diese Version veröffentlicht keinen Statusknoten und gibt keinen Identifier zurück, sodass `output/results` allein ein aktuelles Leseergebnis nicht von einem veralteten unterscheidet. Der Grund für einen Fehlschlag wird in das Anwendungsprotokoll geschrieben. Ein leeres Ergebnis ist eindeutig: Das Bild wurde gelesen und enthielt keinen QR-Code.

**Jeder Durchlauf durchsucht das gesamte Bild.** Es gibt keine Region of Interest, daher wächst die Laufzeit mit der Bildgröße.

## Frühere Versionen

**Version 0.0.1** — Platzhalter. Der Knotenbaum war registriert, und `execute` las nichts.

# LumiScan QR Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/index.html

|   |   |   |
| --- | --- | --- |
| ![Zwei Etiketten mit QR-Codes](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/_images/intro/step-1.svg)<br><br>**Die Codes aufnehmen.** Für lange Inhalte wie eine URL oder eine Seriennummer. | ![Beide QR-Codes umrandet, mit gelesenem Inhalt](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/_images/intro/step-2.svg)<br><br>**Jeden Code finden und lesen.** Beliebig viele pro Bild, ohne Template oder Training. | Beispielergebnis<br><br><br><br><br><br><br>Codes<br>2<br><br><br>Text<br>SN 4711-0425-77<br><br><br>Mitte<br>388, 270 px<br><br>**Das Ergebnis an die SPS geben.** Inhalt und Position jedes Codes. |

LumiScan QR Code Reader findet jeden QR-Code im Kamerabild und meldet Inhalt und Position, ohne Grenze von einem Code pro Lauf. QR-Codes tragen lange Inhalte wie eine URL oder eine Seriennummer. Der Reader braucht weder Template noch Training noch Konfiguration: Bildadresse angeben und ausführen, auf ctrlX OS oder einem Windows- oder Ubuntu-PC.

Zur Lizenzierung siehe [Lizenz](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/lumiscan-qr-code-reader/requirements.html#licence). Fragen? Siehe die [FAQ](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/faq.html). Ein Problem oder eine Fehlermeldung? Siehe [Fehlerbehebung](https://docs.hdvisionsystems.com/de/lumiscan-qr-code-reader-de/1.0.0/troubleshooting.html).
