# LumiScan Aztec Code Reader 1.2.0.5 – complete documentation

> All pages of the LumiScan Aztec Code Reader 1.2.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-aztec-code-reader-de/1.2.0/

# Beschreibung – LumiScan Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/description.html

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

Die Anwendung liest **Aztec**-Codes — die kompakte 2D-Symbologie mit einem Bullseye-Suchmuster in der Mitte, die keine Ruhezone benötigt und sich deshalb für Tickets, Etiketten und kleine Teile eignet, auf denen kein Platz zu verschenken ist. Jeder im Bild gefundene Code wird gemeldet: Es gibt keine Begrenzung auf einen Code pro Lauf 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 Aztec-Code in diesem Bild. Ihre Schwester-Apps lesen die anderen Symbologien — LumiScan DMC Reader, LumiScan QR Code Reader und LumiScan Barcode Reader — und arbeiten auf dieselbe Weise.

## Die Anwendung ist in 1.1.0 umgezogen

Der Basispfad der Anwendung hat sich von `hdvisionsystems/lumiscan-aztec-code` zu `hdvisionsystems/lumiscan-aztec-code-reader` geändert, dem Namen, den die anderen Code Reader bereits verwenden.

Alles, was den alten Pfad adressiert — eine SPS, ein REST-Client, ein gespeicherter App-Zustand —, muss umgestellt werden. Die Knotennamen unterhalb der Anwendung sind unverändert, es ändert sich also nur das Präfix.

## 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 Execute und Stream, 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 Aztec Code Reader ist; seine eigenen Knoten sind in der [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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, also das, was LumiScan Cam Driver bereitstellt. Siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html).

## Keine Module

Anders als die LumiScan-Anwendungen, die nach einem konfigurierten Objekt 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 Läufen ändert, ist, welches Bild gelesen wird.

## Die Ergebnisse ansehen

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

# Voraussetzungen – LumiScan Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html

## Lizenz {#licence}

Wie LumiScan Aztec 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-AZTECCRDSxHDVSx-V1NN`, eine Lizenz pro App-Instanz. Advanced-Funktionen benötigen zusätzlich `SWL-W-XCx-AZTECCRDAxHDVSx-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 Aztec 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 **derselben ctrlX CORE oder demselben ctrlX IPC** laufen — der 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` genannte 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ß-/Kleinschreibung verglichen, und bei den Bayer-Namen darf der Unterstrich weggelassen werden — `BayerGR8` und `bayer_gr8` sind dasselbe Format. Bayer-Bilder werden vor der Suche in Farbbilder umgewandelt.

Jedes andere Pixelformat wird abgelehnt, und der Lauf 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) legt zwei Dinge im Konfigurationsverzeichnis der Anwendung ab (siehe [In der Einstellungsdatei gespeichert](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html#saving)): seinen Stream-Modus und das, was er abonniert, in `aztec-code-reader.json`, dort gespeichert, sobald sie sich ändern, und 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html).

## Zeitverhalten

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

# Einen Code lesen – LumiScan Aztec Code Reader

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

Ein Lauf hat zwei Schritte: angeben, welches Bild gelesen werden soll, dann `execute` aufrufen. Alle Pfade unten sind relativ zum Basispfad der Anwendung, `hdvisionsystems/lumiscan-aztec-code-reader`.

## 1. Den Reader auf ein Bild richten

Schreiben Sie die Adresse des Bildknotens nach `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 auf die Methode `execute`.

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

## Was ein Lauf tut

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

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

## Wenn ein Lauf fehlschlägt

Ein Lauf 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 Protokoll der Anwendung geschrieben: das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC).

> [!WARNING]
> Ein fehlgeschlagener Lauf lässt `output/results` **unverändert**; der Knoten enthält weiterhin die Codes des vorherigen Laufs. 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 Laufs 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 Aztec-Code enthielt.

# Das Ergebnis – LumiScan Aztec Code Reader

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

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

Die Wurzel ist ein Array — `CodeDetectResultArray.results` —, sodass ein Lauf, der nichts gefunden hat, ein leeres Array veröffentlicht statt eines Fehlers.

## Was jeder Eintrag enthält

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `center` | `Point2f` | Die Mitte 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 aus Gleitkommazahlen, `x` und `y`, in Bildpixelkoordinaten. Die Koordinaten sind Gleitkommazahlen, weil die Mitte 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 — eine Gleitkommazahl 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 also 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 `aztec-code`.

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

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

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 darauf verlassen.

`execute` liest ein Bild pro Aufruf: Ihr Programm setzt `input/image-address` und schreibt auf `execute`. Ein Bild-Stream arbeitet umgekehrt. 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 Aztec-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 außer der Bildadresse keine Eingabe, und der Frame tritt an deren Stelle. `input/parameter` wird von beiden nicht gelesen: siehe [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 welcher Frame des Laufs - ergänzt um den eigenen Schritt des Readers. Siehe [Die Lineage eines Ergebnisses](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html#lineage).

Standardmäßig fällt der Reader nie hinter seine Kamera zurück. Wenn Frames schneller eintreffen, als der Reader sie liest, nimmt er jedes Mal, wenn der vorherige Lesevorgang abgeschlossen ist, den neuesten Frame. Die Frames dazwischen werden als übersprungen gezählt. Wie viele Frames warten dürfen, wird mit der Warteschlangengröße eingestellt, siehe [Die Warteschlangengröße](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 in [Streams](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/streams.html) des Handbuchs 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 hat oder nicht. Um sie zu verwenden, ist kein Neustart nötig. Alle Adressen unten beginnen mit `hdvisionsystems/lumiscan-aztec-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 mit seinem nächsten Zyklus, ohne Neustart. Eine Eingabe allein zu schreiben ändert nichts. Siehe [Die Quelle ändern](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 nach `output/results` zu schreiben. Siehe [Die neueste Ausgabe behalten](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html#keep-latest-output). |

Die Eingaben sind mit dem vorbelegt, was beim Start der Anwendung angewendet ist, sodass ein Client eine von ihnen ä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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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` anzeigt. Ein `/` am Anfang oder Ende 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 Hexadezimalziffern. Schreibgeschützt. Siehe [Der Einstellungs-Hash](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 den Knoten, um jedes Ergebnis zu erhalten. Siehe [Das Ergebnis eines Frames](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 geleert, wenn der Stream startet. |
| `control/subscribe/output/stream/statistics/…` | uint64 | Zähler des aktuellen oder des letzten Streams, siehe [Die Statistik lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html#statistics). |

> [!NOTE]
> `execute` schreibt nach `output/results`, der Stream nach `control/subscribe/output/stream/result` - Singular. Der Stream schreibt nur mit eingeschaltetem `keep-latest-output` auch nach `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`, nach `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 auf `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 Sie erneut auf `control/subscribe/execute`. Der Frame, der gerade gelesen wird, 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-aztec-code-reader/control/subscribe/input/address hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream
krxclient write hdvisionsystems/lumiscan-aztec-code-reader/control/subscribe/input/enable true
krxclient execute hdvisionsystems/lumiscan-aztec-code-reader/control/subscribe/execute
krxclient subscribe hdvisionsystems/lumiscan-aztec-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 **Pegel**, kein Befehl: 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 so, 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 auf die Eingaben von `control/subscribe` - nur die, die Sie ändern: Die anderen enthalten, was angewendet ist.
2. Schreiben Sie auf `control/subscribe/execute`. Die Eingaben werden gemeinsam geprüft, in der Einstellungsdatei des Readers gespeichert und erst dann angewendet: `setting/stream/` zeigt sie sofort an, und ein laufender Stream folgt mit seinem nächsten Zyklus. Eine andere Adresse ersetzt die Quelle; die Frames, die bei der alten noch 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 nach `control/unsubscribe/input/address` und dann auf `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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 Protokoll der Anwendung geschrieben.

Wenn die Quelle nicht abonniert werden kann, versucht es der Reader 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-aztec-code-reader/stream_codes`. Ihr kompiliertes Schema ist installiert als `bfbs/stream_codes.bfbs`.

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

Ein Lesevorgang auf `control/subscribe/output/stream/result` liefert das neueste Ergebnis; vor dem ersten Frame ein leeres. Das letzte Ergebnis bleibt erhalten, nachdem der Stream gestoppt wurde.

Ein Frame wird so dekodiert, wie `execute` den Bildknoten dekodiert; es werden also dieselben Pixelformate akzeptiert, siehe [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html). Der ganze 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 ausfü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-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-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 Hexadezimalziffern; der Schritt enthält denselben Wert als Zahl.

Der Reader hat keine Einstellung, die einen Lesevorgang ändert; der Hash umfasst also 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/aztec-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": "aztec-code",
        "software.name": "lumiscan-aztec-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 ihre letzten Werte, nachdem er gestoppt wurde. 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 Stoppen 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 Abschnitt `stream` der Einstellungsdatei des Readers gespeichert, `aztec-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 es 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 den Abschnitt `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-aztec-code-reader`.

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

Die Datei enthält einen Abschnitt, `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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-codes-on-an-image-stream.html#generate-settings):

```json
{
    // The settings of the Aztec 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/aztec-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-aztec-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-aztec-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 nach `output/results` zu schreiben. `false`, wenn weggelassen. |
| `onEntry` | Nein | Die Schritte, die auf jeden Frame angewendet werden, sobald er eintrifft, jeder ein Objekt mit einem `kind`, wie der Abschnitt `stream` jeder LumiScan-Anwendung sie hat. Diese Anwendung hat noch keine: Lassen Sie den Schlüssel 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.
- Der Abschnitt `subscriptions` früherer Versionen wird nicht mehr gelesen, und der Reader protokolliert, dass er 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 an. Ein Frame, der eintrifft, wenn so viele warten, verdrängt den ältesten von ihnen, was 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 Frame-Schübe werden vollständig gelesen, und es werden weniger Frames ü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 nach `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. Das kostet eine Kopie jedes Ergebnisses. Standardmäßig aus.

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

`execute` und der Stream behindern sich nicht. 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 unter Linux, nicht auf dem ctrlX Data Layer und nicht mit einer echten Kamera verifiziert.
- (PC) Der Stream wurde nur unter 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 Aztec Code Reader ein Beispiel seiner Einstellungen in einen Ordner Ihrer Wahl und beendet sich, ohne zu starten. Zum Beispiel (Windows):

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

Ohne Ordner (`-g` allein) schreibt er in den aktuellen Ordner. Das Beispiel ist die Einstellungsdatei `aztec-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, `aztec-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: Liegt eine davon bereits im Ordner, wird nichts geschrieben, und der Aztec Code Reader nennt, welche.

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

# Data-Layer-Referenz – LumiScan Aztec Code Reader

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

Alle Knoten liegen unter dem Basispfad der Anwendung:

```
hdvisionsystems/lumiscan-aztec-code-reader/
```

Die Pfade unten sind relativ dazu angegeben. Ein einzelner Lesevorgang verwendet vier Knoten; der Bild-Stream (experimentell) fügt die unter [Bild-Stream](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/datalayer-reference.html#stream) aufgeführten Knoten hinzu, und [System](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/datalayer-reference.html#system) gibt an, was seine Quelle enthalten muss.

## Data Layer {#data-layer}

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

Auf ctrlX OS (ctrlX CORE oder ctrlX IPC) nutzt LumiScan Aztec 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 Aztec 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 Aztec 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-aztec-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-aztec-code-reader/
├── input/
│   ├── image-address        (string)      address of the image node to read
│   └── parameter            (flatbuffers) detection parameters
├── execute                  (method)      read every Aztec 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 Lauf fehlschlägt, bis die Adresse gesetzt ist. |
| `input/parameter` | flatbuffers | lesen, schreiben | Erkennungsparameter, Typ `types/hdvisionsystems/lumiscan-aztec-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 hinzugefügt werden können, ohne den Knotenbaum zu ändern. Ein Schreibvorgang darauf ändert nichts daran, wie ein Code gelesen wird. Der Bild-Stream liest ihn ebenfalls nicht.

## Methode

| Knoten | Blockierend | Wirkung |
| --- | --- | --- |
| `execute` | Ja | Liest das Bild unter `input/image-address` und schreibt jeden gefundenen Aztec-Code nach `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 Lauf gefunden hat, Typ `types/hdvisionsystems/lumiscan-aztec-code-reader/code_detect_result`. Leeres Array, wenn das Bild keinen Code enthielt. Siehe [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/the-result.html). |

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

Der Reader liest jeden Frame des Cam-Driver-Streams, den er abonniert hat, 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-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 nach `output/results` zu schreiben. |
| `control/unsubscribe/input/address` | string | lesen, schreiben | Die zu entfernende Quelle, so wie `setting/stream/address` sie anzeigt. |
| `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 `aztec-code-reader.json` es unter `stream` speichert. |
| `setting/settings-hash` | string | lesen | Der Hash dessen, womit die Ergebnisse erzeugt werden, als 16 Hexadezimalziffern. |
| `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-aztec-code-reader/stream_codes`: die `lineage` des Frames und `result`, die Tabelle, die `output/results` enthält. Abonnieren Sie den Knoten, 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 `aztec-code-reader.json` und wendet sie dann an. Eine Eingabe allein zu schreiben ä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 `aztec-code-reader.json` gespeichert. Wird abgelehnt, wenn die Adresse nicht die Quelle ist. |

Die Eingaben von `control/subscribe` sind mit den angewendeten Werten vorbelegt, und nur `control/subscribe/execute` wendet sie an. Wenn `aztec-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 Lauf wird nur im Protokoll der Anwendung gemeldet (auf ctrlX OS im Systemprotokoll von ctrlX OS) und lässt in `output/results` die Codes des vorherigen Laufs stehen.
- **Kein Daten-Identifier.** Es gibt nichts, was zurückgegeben wird; ein Ergebnis lässt sich also nicht dem Request zuordnen, der es erzeugt hat.
- **Kein Ergebnisbild.** Die Anwendung rendert nichts — kein 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 Lauf durchsucht das ganze Bild.

# FAQ – LumiScan Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/faq.html

Kurze Antworten auf häufige Fragen und Fehlermeldungen zu LumiScan Aztec 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 Aztec-Codes, die kompakte 2D-Symbologie mit einem Bullseye-Suchmuster in der Mitte, die keine Ruhezone benötigt. Jeder im Bild gefundene Code wird gemeldet; es gibt keine Begrenzung auf einen Code pro Lauf. Es sind keine Vorlage, kein Referenzbild, kein Trainingsschritt und keine Konfiguration nötig: Sie geben dem Reader die Adresse eines Bildes und rufen `execute` auf.
- **Mehr:** [Beschreibung](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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` genannten Bildknoten, den eine andere Anwendung auf demselben Data Layer veröffentlicht - auf ctrlX OS auf **derselben ctrlX CORE oder demselben ctrlX IPC** (der 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html), [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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ß-/Kleinschreibung verglichen, und bei den Bayer-Namen darf der Unterstrich weggelassen werden (`BayerGR8` und `bayer_gr8` sind dasselbe Format). Bayer-Bilder werden vor der Suche in Farbbilder umgewandelt. Jedes andere Pixelformat wird abgelehnt, und der Lauf 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html)

## Codes lesen

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

- **Antwort:** Alle Pfade sind relativ zu `hdvisionsystems/lumiscan-aztec-code-reader`.
  - Schreiben Sie die Adresse des Bildknotens nach `input/image-address`. Sie wird gemerkt; setzen Sie sie also nur neu, wenn sich die Bildquelle ändert.
  - Schreiben Sie einen leeren Wert auf die Methode `execute`. Der Aufruf ist blockierend und kehrt zurück, wenn die Suche abgeschlossen ist.
  - Lesen Sie `output/results`: Der Knoten enthält jeden in diesem Bild gefundenen Aztec-Code.
- **Mehr:** [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 zurück, als Strings; 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, nicht, dass ein Fehler vorliegt.
- **Mehr:** [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/the-result.html)

### Woran erkenne ich, ob ein Lauf 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 Lauf 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 Lauf lässt `output/results` unverändert; der Knoten enthält weiterhin die Codes des vorherigen Laufs.
- **Lösung:** Prüfen Sie das Protokoll der Anwendung, 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 Lauf und vergleichen Sie.
- **Mehr:** [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-a-code.html), [Data-Layer-Referenz](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/datalayer-reference.html)

### Kann ich die Erkennung einstellen, 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 Schreibvorgang darauf ändert also nichts; der Bild-Stream liest ihn ebenfalls nicht. Es gibt keine Region of Interest: Jeder Lauf durchsucht das ganze 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 `aztec-code` auf 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/the-result.html)

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

- **Antwort:** Das Lesen ist synchron: Der Schreibvorgang auf `execute` kehrt zurück, wenn die Suche abgeschlossen ist. Wie lange das dauert, hängt von der Bildgröße ab, da bei jedem Lauf das ganze Bild durchsucht wird.
- **Mehr:** [Voraussetzungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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: Eine Eingabe allein zu schreiben ändert nichts. Alle Pfade sind relativ zu `hdvisionsystems/lumiscan-aztec-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`, nach `control/subscribe/input/address`.
  - Abonnieren Sie `control/subscribe/output/stream/result`.
  - Setzen Sie `control/subscribe/input/enable` auf `true` und schreiben Sie dann auf `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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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:** `aztec-code-reader.json` liegt im Konfigurationsverzeichnis der Anwendung: auf ctrlX OS `/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-aztec-code-reader`; auf einem PC (Windows) `%APP_RESOURCE_DIR%\etc\lumiscan-aztec-code-reader` oder ohne `APP_RESOURCE_DIR` `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-aztec-code\etc\lumiscan-aztec-code-reader`. Auf einem PC schreibt `lumiscan-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.0/troubleshooting.html) beschrieben:

- [Der Reader beendet sich beim Start](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html#faq-app-stops-after-start)
- [Meine SPS oder mein REST-Client findet den Reader nach dem Update auf 1.1.0 nicht mehr](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html#faq-base-path-moved)
- [`output/results` ist ein leeres Array](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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-aztec-code-reader-de/1.2.0/troubleshooting.html#faq-stream-refused)
- [Der Stream läuft, aber es treffen keine Ergebnisse ein, oder `failed-frames` steigt](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html#faq-stream-no-results)
- [Nach einem Neustart streamt der Reader von selbst wieder](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 [LumiScan-FAQ](https://docs.hdvisionsystems.com/de/faq.html) der gesamten Dokumentation 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 Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html

Diese Seite beschreibt Probleme mit LumiScan Aztec Code Reader und wie Sie sie lösen. Beginnen Sie mit den [allgemeinen Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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 Protokoll der Anwendung.** Das Protokoll der Anwendung ist das Systemprotokoll von ctrlX OS (ctrlX OS) oder die Konsolenausgabe der App (PC). Der Reader schreibt den Grund dorthin, wenn ein Lauf 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-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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 Lauf fehlgeschlagen ist.** Dieser Reader veröffentlicht keinen Knoten `status-code` oder `status-text`. Ein fehlgeschlagener Lauf lässt `output/results` unverändert, mit den Codes des vorherigen Laufs. Lesen Sie `output/results` vor und nach dem Lauf und vergleichen Sie, oder prüfen Sie das Protokoll. Siehe [Woran erkenne ich, ob ein Lauf fehlgeschlagen ist?](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/faq.html#faq-failed-run).

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

   | Plattform | Konfigurationsverzeichnis |
   | --- | --- |
   | ctrlX OS | `/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-aztec-code-reader` |
   | PC (Windows) | `%APP_RESOURCE_DIR%\etc\lumiscan-aztec-code-reader`; ohne `APP_RESOURCE_DIR` `C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-aztec-code\etc\lumiscan-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader` verschwinden aus dem Data Layer.

**Mögliche Ursachen**

- Die ctrlX-Lizenz `SWL-W-XCx-AZTECCRDSxHDVSx-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-AZTECCRDSxHDVSx-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-AZTECCRDAxHDVSx-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-AZTECCRDSxHDVSx-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.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: Meine SPS oder mein REST-Client findet den Reader nach dem Update auf 1.1.0 nicht mehr {#faq-base-path-moved}

**Symptome**

Nach dem Update auf Version 1.1.0 erreicht eine SPS, ein REST-Client oder ein gespeicherter App-Zustand, der vorher funktioniert hat, den Reader nicht mehr: Die Knoten, die er unter `hdvisionsystems/lumiscan-aztec-code` adressiert, werden nicht gefunden.

**Mögliche Ursachen**

- In 1.1.0 hat sich der Basispfad von `hdvisionsystems/lumiscan-aztec-code` zu `hdvisionsystems/lumiscan-aztec-code-reader` geändert, dem Namen, den die anderen Code Reader bereits verwenden. Alles, was den alten Pfad adressiert, muss umgestellt werden.

**Diagnose**

1. Prüfen Sie die Adressen, die Ihre SPS, Ihr REST-Client oder der gespeicherte App-Zustand verwendet - erwartet: Sie beginnen mit `hdvisionsystems/lumiscan-aztec-code-reader/`.
2. Lesen Sie einen Knoten unter dem neuen Basispfad, zum Beispiel `hdvisionsystems/lumiscan-aztec-code-reader/input/image-address` - erwartet: Der Knoten wird gefunden.

**Lösung**

- **Wenn der Client noch den alten Basispfad verwendet:**

  a. Stellen Sie alles um, was `hdvisionsystems/lumiscan-aztec-code` adressiert: eine SPS, einen REST-Client, einen gespeicherten App-Zustand.

  b. Ändern Sie nur das Präfix in `hdvisionsystems/lumiscan-aztec-code-reader`. Die Knotennamen unterhalb der Anwendung sind unverändert.

  c. Lesen oder schreiben Sie erneut einen Knoten unter der neuen Adresse. Erwartet: Der Knoten wird gefunden.

Siehe [Beschreibung](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/description.html), [Release Notes: v1.1.0](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/release-notes/v1-1-0.html) und [Ein Knoten ist „not found"](https://docs.hdvisionsystems.com/de/lumiscan-keryx-de/1.0.0/troubleshooting.html#node-not-found).

**Wenn das Problem weiterhin besteht**

Senden Sie die unter [Informationen für den Support](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit der Adresse, die Ihr Client verwendet, und der Antwort, die er erhält.

## 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 Aztec-Code. Ein leeres `output/results` ist kein Fehler: Es bedeutet, dass das Bild erfolgreich gelesen wurde und keinen Aztec-Code enthielt. Ein Lauf, der nichts gefunden hat, veröffentlicht ein leeres Array und keinen Fehler.
- Der Code ist kein Aztec-Code. Der Reader liest Aztec-Codes, die kompakte 2D-Symbologie mit einem Bullseye-Suchmuster in der Mitte. Data-Matrix-Codes, QR-Codes und lineare Barcodes lesen seine Schwester-Apps.
- `input/image-address` nennt einen Bildknoten, der den Code nicht zeigt. Jeder Lauf liest den gesamten aktuellen Inhalt des dort genannten Bildknotens.
- Der letzte Lauf ist fehlgeschlagen, und das leere Array ist das Ergebnis eines früheren Laufs. Ein fehlgeschlagener Lauf lässt `output/results` unverändert. Ein Lauf 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 Protokoll der Anwendung zum Zeitpunkt des Laufs - erwartet: kein Fehlschlag. Ein fehlgeschlagener Lauf 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 Aztec-Code, mit einem Bullseye-Suchmuster in der Mitte.

**Lösung**

- **Wenn das Bild keinen Aztec-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 Aztec-Code ist:** Verwenden Sie die Schwester-App für seine Symbologie: LumiScan DMC Reader, LumiScan QR 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 Lauf 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html)). Schreiben Sie dann erneut einen leeren Wert in `execute`. Erwartet: Das Protokoll zeigt für diesen Lauf keinen Fehlschlag.

Siehe [Einen Code lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/reading-a-code.html) und [Das Ergebnis](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.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 `aztec-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 Protokoll der Anwendung - 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 `aztec-code-reader.json` im Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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 `aztec-code-reader.json`, sodass die Datei gültiges JSON ist. Auf einem PC schreibt `lumiscan-aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.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 `aztec-code-reader.json`.

## Problem: Der Stream läuft, aber es treffen keine Ergebnisse ein, oder `failed-frames` steigt {#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` steigt.

**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 steigt. 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` steigt 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 steigt. Für jeden verarbeiteten Frame wird ein Ergebnis auf `control/subscribe/output/stream/result` veröffentlicht.
6. Lesen Sie das Protokoll der Anwendung - 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` steigt.

- **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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html)). Erwartet: `failed-frames` steigt nicht mehr.

- **Wenn `processed-frames` steigt, 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-aztec-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 Aztec-Code ergibt ein Ergebnis mit einem leeren Array `results`, siehe [Problem: `output/results` ist ein leeres Array](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html#faq-empty-result). Siehe auch [Die Statistik lesen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.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 Abschnitt `stream` von `aztec-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 `aztec-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 `aztec-code-reader.json` im Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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 `aztec-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-aztec-code-reader-de/1.2.0/lumiscan-aztec-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-aztec-code-reader-de/1.2.0/troubleshooting.html#support-information) aufgeführten Informationen an den Support, zusammen mit `aztec-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 Aztec 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 Protokoll der Anwendung 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:** `aztec-code-reader.json` und die Dateien in `settings-history/` aus dem Konfigurationsverzeichnis (siehe [Allgemeine Prüfungen](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.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.1.0 – LumiScan Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/release-notes/v1-1-0.html

Erstes funktionsfähiges Release von LumiScan Aztec Code Reader. Frühere Versionen registrierten die Data-Layer-Knoten der Anwendung, lasen aber nichts.

## Neu

**Lesen von Aztec-Codes.** `execute` liest das in `input/image-address` genannte Bild und veröffentlicht, was es gefunden hat, auf `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 derselben ctrlX CORE.** `input/image-address` nennt 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 Farbbilder umgewandelt.

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

## Geändert

**Die Anwendung ist von `hdvisionsystems/lumiscan-aztec-code` nach `hdvisionsystems/lumiscan-aztec-code-reader` umgezogen**, dem Namen, den die anderen Code Reader bereits verwenden. Alles, was den alten Pfad adressiert — eine SPS, ein REST-Client, ein gespeicherter App-Zustand —, muss umgestellt werden; die Knotennamen unterhalb der Anwendung sind unverändert.

## Wissenswert

**`input/parameter` hat noch keine Einstellungen.** Der Knoten ist für Erkennungseinstellungen veröffentlicht, aber das Schema enthält keine Felder: Die Erkennung läuft mit festen Einstellungen, und der Knoten ist da, damit Einstellungen hinzugefügt werden können, ohne die Adresse zu ändern.

**Der Ausgang eines Laufs wird im Protokoll der Anwendung gemeldet, nicht auf einem Knoten** — diese Anwendung hat keine Knoten `output/status-code` und `output/status-text`. Ein fehlgeschlagener Lauf lässt in `output/results` die Codes des vorherigen Laufs stehen. Ein leeres Ergebnis ist eindeutig: Das Bild wurde gelesen und enthielt keinen Aztec-Code.

## Frühere Releases

**Version 0.0.1** — Stub. Der Knotenbaum wurde registriert, und `execute` las nichts.

# LumiScan Aztec Code Reader

URL: https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/index.html

|   |   |   |
| --- | --- | --- |
| ![Zwei Etiketten mit Aztec-Codes](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/_images/intro/step-1.svg)<br><br>**Die Codes aufnehmen.** Kompakte Codes mit Bullseye, ohne Ruhezone. | ![Beide Aztec-Codes umrandet, mit gelesenem Inhalt](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/_images/intro/step-2.svg)<br><br>**Jeden Code finden und lesen.** Ohne Template, Training oder Einrichtung. | Beispielergebnis<br><br><br><br><br><br><br>Codes<br>2<br><br><br>Text<br>TKT-0042-7781<br><br><br>Mitte<br>512, 284 px<br><br>**Das Ergebnis an die SPS geben.** Inhalt und Position jedes Codes. |

LumiScan Aztec Code Reader findet jeden Aztec-Code im Kamerabild und meldet Inhalt und Position. Aztec-Codes brauchen keine Ruhezone; deshalb stehen sie auf Bordkarten und Bahntickets und passen auf Etiketten und Kleinteile, auf denen kein Platz übrig ist. 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-aztec-code-reader-de/1.2.0/lumiscan-aztec-code-reader/requirements.html#licence). Fragen? Siehe die [FAQ](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/faq.html). Ein Problem oder eine Fehlermeldung? Siehe [Fehlerbehebung](https://docs.hdvisionsystems.com/de/lumiscan-aztec-code-reader-de/1.2.0/troubleshooting.html).
