Troubleshooting
This page describes problems with LumiScan Aztec Code Reader and how you solve them. Start with the general checks, then find your symptom below: each problem lists its symptoms, the possible causes, a diagnostic procedure and the resolution. Problems of the Data Layer itself are described in Data Layer troubleshooting, licence problems in Licensing troubleshooting.
General checks
-
Read the application log. The application log is the ctrlX OS system log (ctrlX OS) or the console output of the app (PC). The reader writes the reason there when a run fails, when
control/subscribe/executeorcontrol/unsubscribe/executeis refused, when the source of the image stream cannot be subscribed to (the first failure), when frames cannot be read (at most one line every 5 seconds), and when a value in its settings file cannot be used. -
Check the addresses. All nodes are directly under
hdvisionsystems/lumiscan-aztec-code-reader/; the reader has no modules. Addresses are lower case. Expected: your PLC or client uses exactly these addresses, as listed in the Data Layer Reference. -
Check the image source. The application that publishes the image node, normally LumiScan Cam Driver, must run on the same ctrlX CORE or ctrlX IPC (ctrlX OS) or be connected to the same LumiScan Keryx broker as the reader (PC, see LumiScan Keryx on a PC). Expected: the node named in
input/image-addressprovidesdata,width,heightandpixel-type. -
Check whether a run failed. This reader publishes no
status-codeorstatus-textnode. A failed run leavesoutput/resultsuntouched, holding the previous run’s codes. Readoutput/resultsbefore and after the run and compare, or check the log. See How do I know whether a run failed?. -
Check the settings file of the image stream. The reader keeps its stream settings in
aztec-code-reader.jsonin the application’s configuration directory:Platform Configuration directory ctrlX OS
/var/snap/rexroth-solutions/common/solutions/activeConfiguration/lumiscan-aztec-code-readerPC (Windows)
%APP_RESOURCE_DIR%\etc\lumiscan-aztec-code-reader; withoutAPP_RESOURCE_DIR,C:\ProgramData\HD Vision Systems GmbH\LumiScan Vision Suite\lumiscan-aztec-code\etc\lumiscan-aztec-code-readerThe file is read once, at the start of the application: changes made to it by hand take effect at the next start. A value that cannot be used is ignored, and logged; a file that is not valid JSON is ignored, and logged. See Kept in the settings file.
Problem: The reader shuts down during start-up
On ctrlX OS, the reader stops shortly after it starts. Its nodes under hdvisionsystems/lumiscan-aztec-code-reader disappear from the Data Layer.
-
The ctrlX licence
SWL-W-XCx-AZTECCRDSxHDVSx-V1NNis not available on the ctrlX OS device on which the reader runs. The licence is checked for up to ten seconds during start-up; if none becomes available, the reader shuts down.
-
Open the ctrlX OS system log - expected: the reason for the shutdown. The system log names the missing licence.
-
Check the licences in the License Manager of ctrlX OS - expected: the ctrlX licence
SWL-W-XCx-AZTECCRDSxHDVSx-V1NNis available on the device on which the reader runs. One licence seat covers the reader. The Advanced licenceSWL-W-XCx-AZTECCRDAxHDVSx-V1NNis not needed to start: without it, the reader runs with Standard functions.
-
If the ctrlX licence is missing:
-
Buy the licence
SWL-W-XCx-AZTECCRDSxHDVSx-V1NNin the ctrlX Store. -
Activate it in the License Manager of ctrlX OS on the device on which the reader runs. Follow the Bosch Rexroth documentation for ctrlX OS.
-
Start the reader again. Expected: it keeps running, and its nodes are on the Data Layer.
-
Send the information listed under Information for support to support, together with the lines of the ctrlX OS system log that name the licence. For licences, contact licenses@hdvisionsystems.com.
Problem: My PLC or REST client no longer finds the reader after updating to 1.1.0
After the update to version 1.1.0, a PLC, a REST client or a saved app state that worked before no longer reaches the reader: the nodes it addresses under hdvisionsystems/lumiscan-aztec-code are not found.
-
In 1.1.0 the base path changed from
hdvisionsystems/lumiscan-aztec-codetohdvisionsystems/lumiscan-aztec-code-reader, the name the other code readers already use. Anything addressing the old path must be repointed.
-
Check the addresses that your PLC, your REST client or the saved app state uses - expected: they start with
hdvisionsystems/lumiscan-aztec-code-reader/. -
Read a node at the new base path, for example
hdvisionsystems/lumiscan-aztec-code-reader/input/image-address- expected: the node is found.
-
If the client still uses the old base path:
-
Repoint everything that addresses
hdvisionsystems/lumiscan-aztec-code: a PLC, a REST client, a saved app state. -
Change only the prefix to
hdvisionsystems/lumiscan-aztec-code-reader. The node names below the application are unchanged. -
Read or write a node at the new address again. Expected: the node is found.
-
Send the information listed under Information for support to support, together with the address your client uses and the answer it gets.
Problem: output/results is an empty array
After execute returns, output/results holds an empty array: CodeDetectResultArray.results has no entry. In the image stream, a result on control/subscribe/output/stream/result has an empty results array.
-
The image holds no Aztec code. An empty
output/resultsis not an error: it means the image was read successfully and contained no Aztec code. A run that found nothing publishes an empty array rather than an error. -
The code is not an Aztec code. The reader reads Aztec codes, the compact 2D symbology with a bullseye finder pattern at its centre. Data Matrix codes, QR codes and linear barcodes are read by its sibling applications.
-
input/image-addressnames an image node that does not show the code. Each run reads the entire current contents of the image node named there. -
The last run failed, and the empty array is the result of an earlier run. A failed run leaves
output/resultsuntouched. A run fails if the image cannot be read: no address set, an address that does not resolve, a missing or shortdatabuffer, or an unsupported pixel format.
-
Read the application log for the time of the run - expected: no failure. A failed run writes its reason there: the ctrlX OS system log (ctrlX OS) or the console output of the app (PC).
-
Read
input/image-address- expected: the address of the image node of the camera that sees the code, for examplehdvisionsystems/lumiscan-cam-driver/camera1/output/image. -
Check the type of the code - expected: an Aztec code, with a bullseye finder pattern at its centre.
-
If the image holds no Aztec code: nothing is wrong with the reader. Call
executeagain when the image node holds a picture with the code. -
If the code is not an Aztec code: use the sibling application for its symbology: LumiScan DMC Reader, LumiScan QR Code Reader or LumiScan Barcode Reader. They work the same way.
-
If
input/image-addressnames another image node:-
Write the address of the right image node to
input/image-address. It is the address of the image node itself, not of itsdatachild. The address is remembered. -
Write an empty value to
execute. Expected:output/resultsholds an entry per code.
-
-
If the last run failed: remove the reason the log names: set
input/image-address, correct an address that does not resolve, or make the image source deliver completedatain a supported pixel format (see Requirements). Then write an empty value toexecuteagain. Expected: the log shows no failure for this run.
See Reading a Code and The Result.
Send the information listed under Information for support to support, together with the value of input/image-address, the width, height and pixel-type of that image node, and the symbology of the code.
Problem: control/subscribe/execute answers Rejected (ctrlX DL_INVALID_VALUE) or CreationFailed (ctrlX DL_CREATION_FAILED)
A write to control/subscribe/execute (or to control/unsubscribe/execute) answers Rejected (ctrlX DL_INVALID_VALUE) or CreationFailed (ctrlX DL_CREATION_FAILED) instead of Ok (ctrlX DL_OK). Nothing changed: setting/stream/ still shows the values applied before.
-
Rejected/DL_INVALID_VALUEfromcontrol/subscribe/execute: stream mode without an address, or a queue size outside1to64. -
Rejected/DL_INVALID_VALUEfromcontrol/unsubscribe/execute: the address is not the source, or there is no source. -
CreationFailed/DL_CREATION_FAILED: the settings fileaztec-code-reader.jsoncould not be written, for example because it is not valid JSON.
-
Read the answer of the method call - expected:
OkorDL_OK.RejectedorDL_INVALID_VALUEpoints to an input,CreationFailedorDL_CREATION_FAILEDto the settings file. -
Read the application log - expected: the reason for the refusal. On the ctrlX Data Layer a refused call carries no reason; the reader writes it to its log.
-
After a refused
control/subscribe/execute, readcontrol/subscribe/input/enable,control/subscribe/input/addressandcontrol/subscribe/input/queue-size- expected: an address wheneverenableistrue, and a queue size from1to64. -
After a refused
control/unsubscribe/execute, comparecontrol/unsubscribe/input/addresswithsetting/stream/address- expected: the same address. A/at either end does not count. -
After
CreationFailedorDL_CREATION_FAILED, openaztec-code-reader.jsonin the configuration directory (see General checks) - expected: a valid JSON file.
-
If stream mode has no address: write the camera’s stream folder, for example
hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream, tocontrol/subscribe/input/address, then write tocontrol/subscribe/executeagain. Expected:OkorDL_OK. -
If the queue size is outside
1to64: write a value from1to64tocontrol/subscribe/input/queue-size, then write tocontrol/subscribe/executeagain. Expected:OkorDL_OK. -
If the address to drop is not the source: write the address that
setting/stream/addressshows tocontrol/unsubscribe/input/address, then write tocontrol/unsubscribe/executeagain. Ifsetting/stream/addressis empty, there is no source to drop. -
If the settings file could not be written:
-
Correct
aztec-code-reader.jsonso that it is valid JSON. On a PC,lumiscan-aztec-code --generate-settings <folder>writes an example to start from. -
Write to
control/subscribe/executeagain. Expected:OkorDL_OK, andsetting/stream/shows the new values.Changes made to the file by hand take effect at the next start of the application.
-
Send the information listed under Information for support to support, together with the answer of the method call, the values of the inputs of control/subscribe (or control/unsubscribe/input/address) and aztec-code-reader.json.
Problem: The stream runs, but no results arrive, or failed-frames grows
After control/subscribe/execute, no result arrives on control/subscribe/output/stream/result, or the counter control/subscribe/output/stream/statistics/failed-frames grows.
-
The reader’s stream does not run: the inputs of
control/subscribewere written, butcontrol/subscribe/executewas not called. Writing an input alone changes nothing. -
No frames arrive from the source: the Cam Driver’s stream does not run, or
control/subscribe/input/addressis not the camera’s stream folder. The Cam Driver’s stream is not kept across a restart of the Cam Driver. -
The source cannot be subscribed to. The reader then tries it again every 5 seconds while the stream runs.
-
Frames arrive but cannot be read, for example frames in a pixel format the reader does not support, or frames whose pixels do not fill the size they give.
-
Results are published, but your client does not subscribe to
control/subscribe/output/stream/result. A read of the node returns only the latest result.
-
Read
control/subscribe/output/stream/active- expected:true. If it isfalse, readsetting/stream/enableandsetting/stream/address- expected:trueand the camera’s stream folder. -
Read
hdvisionsystems/lumiscan-cam-driver/<camera name>/control/publish/output/stream/active- expected:true. -
Read
control/subscribe/output/stream/statistics/received-framestwice, a few seconds apart - expected: the value grows. The counters are updated about four times a second while the stream runs. -
Read
statistics/failed-framesandcontrol/subscribe/output/stream/last-failure- expected:failed-framesdoes not grow, andlast-failureis empty.last-failuresays why the last frame that could not be read failed; it is emptied when the stream starts. -
Read
statistics/processed-frames- expected: the value grows. Each processed frame has a result published oncontrol/subscribe/output/stream/result. -
Read the application log - expected: no failure to subscribe to the source, and no failed frames.
-
If the reader’s stream does not run:
-
Write the camera’s stream folder to
control/subscribe/input/address. -
Set
control/subscribe/input/enabletotrue. -
Write to
control/subscribe/execute. Expected:OkorDL_OK, thencontrol/subscribe/output/stream/activeistrue.
-
-
If the Cam Driver’s stream does not run: start it, see the Cam Driver manual, Streaming Images. Its stream is not kept across a restart: after every start of the Cam Driver, connect the camera and call its
control/publish/executewithenable=true. The reader’s stream can be started before the Cam Driver’s stream; results arrive once frames do. -
If the address is not the camera’s stream folder: write the folder, for example
hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream, tocontrol/subscribe/input/addressand write tocontrol/subscribe/execute. The reader reads the folder’sframenode. Expected:received-framesgrows. -
If the source cannot be subscribed to: make sure the Cam Driver runs and publishes the stream folder named in
control/subscribe/input/address. While the stream runs, the reader tries the source again every 5 seconds; for the same address you do not need to execute again. -
If frames cannot be read: read
control/subscribe/output/stream/last-failurefor the reason. Make sure the frames use a supported pixel format:Mono8,Mono12,RGB8,RGB12,BGR8,BGR12,Bayer_GR8,Bayer_RG8,Bayer_GR12orBayer_RG12(see Requirements). Expected:failed-framesstops growing. -
If
processed-framesgrows but your client receives nothing: subscribe tocontrol/subscribe/output/stream/resultto receive each result. Or setcontrol/subscribe/input/keep-latest-outputtotrueand write tocontrol/subscribe/execute: the reader then also writes each stream result tooutput/results.krxclient subscribe hdvisionsystems/lumiscan-aztec-code-reader/control/subscribe/output/stream/result --count 5shows that results arrive; it shows a flatbuffer by its size only.
A frame with no Aztec code gives a result with an empty results array, see Problem: output/results is an empty array. See also Reading the statistics and A stream delivers nothing.
The image stream is experimental. On ctrlX OS, it has not been verified on Linux, on the ctrlX Data Layer, or with a real camera. On a PC, it has been tested on Windows with LumiScan Keryx and simulated images only; it has not been verified with a real camera. Send the information listed under Information for support to support, together with the values of control/subscribe/output/stream/active, control/subscribe/output/stream/last-failure, the counters under control/subscribe/output/stream/statistics/ and setting/stream/, and the value of the Cam Driver’s control/publish/output/stream/active.
Problem: After a restart the reader streams again by itself
After a restart of the application, control/subscribe/output/stream/active is true and results arrive on control/subscribe/output/stream/result, although your program has not executed anything.
-
The reader starts as it was. This is intended:
control/subscribe/executeandcontrol/unsubscribe/executesave what they apply in thestreammember ofaztec-code-reader.json. After a restart the reader subscribes to the same source and, whenstream.enableistrue, starts its stream at once. -
stream.enablewas set totrueinaztec-code-reader.jsonby hand.truestarts the stream at the start of the application.
-
Read
setting/stream/enableandsetting/stream/address- they show what was applied last, as the settings file keeps it. Expected, if the reader should not stream after a start:setting/stream/enableisfalse. -
Open
aztec-code-reader.jsonin the configuration directory (see General checks) - expected, if the reader should not stream after a start:stream.enableisfalseor left out.
-
If the reader should not stream after a start: set
control/subscribe/input/enabletofalse, then write tocontrol/subscribe/execute. This stops the stream now and is saved inaztec-code-reader.json, so the reader starts out of stream mode next time. The frame being read is finished first. Expected:control/subscribe/output/stream/activeisfalse, andsetting/stream/enableisfalse. -
If the reader should not keep the source either: write the address that
setting/stream/addressshows tocontrol/unsubscribe/input/address, then write tocontrol/unsubscribe/execute. Stream mode ends with it. Expected:setting/stream/addressis empty.
Send the information listed under Information for support to support, together with aztec-code-reader.json and the values of setting/stream/.
Information for support
If a problem persists, send this information to support:
-
Software version: the version of LumiScan Aztec Code Reader you run. The files the image stream keeps in
settings-history/in the configuration directory record it assoftware.version. -
Platform: ctrlX OS (ctrlX CORE or ctrlX IPC) and its ctrlX OS version, or a PC with Windows 11 or Ubuntu 24.04.
-
Data Layer: the ctrlX Data Layer (ctrlX OS) or LumiScan Keryx (PC). On a PC, also the broker address the reader uses; each app names it in its log at start.
-
Log: the application log from the time of the error: the ctrlX OS system log (ctrlX OS) or the console output of the app (PC).
-
Time: the date and time of the error.
-
Communication status: the answer of a refused method call (for example
RejectedorDL_INVALID_VALUE), and the node values that the problem entry asks for. -
Configuration files:
aztec-code-reader.jsonand the files insettings-history/from the configuration directory (see General checks).
Contact HD Vision Systems customer success at customer.success@hdvisionsystems.com or +49 6221 6721905; for licences, licenses@hdvisionsystems.com.