Ergebnisauswertung beim Code Reading
In diesem Beispiel werden
- über die Funktion F_VN_ReadBarcode jeweils ein EAN13-Code pro Bild ausgelesen,
- die Ausführungszeit der Funktion über einen sogenannten Watchdog überwacht
- und unterschiedliche Return-Codes der Funktion behandelt.
Erläuterung
- Die Funktion F_VN_ReadBarcode kann Barcodes verschiedener Typen im Bild suchen und auslesen. Details zur Verwendung der Funktion finden Sie im Beispiel EAN-13 Barcode Reading.
- Die Behandlung des Return-Codes der Funktion wird anhand einer entsprechenden Abfrage erläutert. Dabei wird zwischen den folgenden Fällen unterschieden:
- Erfolgreiche Ausführung der Funktion, Code wurde gefunden und dekodiert.
- Erfolgreiche Ausführung der Funktion, Code ist nicht im Bild vorhanden oder kann nicht gefunden / dekodiert werden.
- Die Funktion hat selbst keinen Fehler und wurde vom Watchdog abgebrochen.
- Funktion hat sonstigen Fehler.
Eine genaue Erläuterung der Return-Codes für Code Reading Funktionen finden Sie im Übersichtskapitel Code Reading.
Variablen
hr : HRESULT;
// Images
ipImageIn : ITcVnImage;
ipImageInDisp : ITcVnDisplayableImage;
ipImageRes : ITcVnImage;
ipImageResDisp : ITcVnDisplayableImage;
// Barcode
ipCodeDecodedList : ITcVnContainer;
ipCodeContourList : ITcVnContainer;
sCodeAsString : STRING(255);
// Watchdog
hrWD : HRESULT;
tStop : DINT := 50000;
tRest : DINT;
// Color
aColorGreen : TcVnVector4_LREAL := [0, 255, 0];
// Return code
nReturnCode : DWORD;
sReturnCode : STRING;
sResultText : STRING;
Code
// Execute the Barcode Reading Function with EAN13 selected monitored by the Watchdog-Function
hrWD := F_VN_StartRelWatchdog(tStop, S_OK);
hr := F_VN_ReadBarcode(
ipSrcImage := ipImageIn,
ipDecodedData := ipCodeDecodedList,
eBarcodeType := ETcVnBarcodeType.TCVN_BT_EAN13,
hrPrev := hr
);
hrWD := F_VN_StopWatchdog(hrWD, tRest => tRest);
// Handle return-code
IF hr = S_OK THEN
// Prepare code result in string
hr := F_VN_ExportSubContainer_String(ipCodeDecodedList, 0, sCodeAsString, 255, hr);
sResultText := CONCAT('Code: ', sCodeAsString);
ELSE
// Check for succeeded return codes or add specific error handling
CASE hr OF
S_FALSE:
sResultText := 'No code found...';
S_WATCHDOG_TIMEOUT:
sResultText := 'Cancelled by watchdog...';
ELSE
// Extract error-code from HRESULT & react accordingly
nReturnCode := DINT_TO_DWORD(hr) AND 16#FFF;
sReturnCode := DWORD_TO_HEXSTR(nReturnCode, 3, FALSE);
sResultText := CONCAT('Returncode ', sReturnCode);
END_CASE
END_IF
// Draw result image
hr := F_VN_PutTextExp(sResultText, ipImageRes, 50, 100, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 4, aColorGreen, 3, TCVN_LT_4_CONNECTED, FALSE, S_OK);
hr := F_VN_TransformIntoDisplayableImage(ipImageRes, ipImageResDisp, hr);
Hinweis | |
hr reservieren Achten Sie darauf, die Variable hr zwischen dem Aufruf der Code Reading Funktion und der Auswertung nicht als Rückgabewert einer anderen Funktion zu benutzen. |
Ergebnisse
Wenn wie erwartet ein Code gefunden wird, ist hr = S_OK
und das Ergebnis kann ausgegeben werden.
Wenn der erwartete Code nicht gefunden werden kann, entspricht der Return-Code S_FALSE
und bei Abbruch durch einen Watchdog ist er 16#256
. Eine entsprechende Meldung kann ausgegeben werden.
Wenn die Funktion nicht korrekt ausgeführt wird, kann der Fehler-Code ausgegeben werden. Dies kommt im gegebenen Beispiel nicht vor und wird bei Code Reading Funktionen nur durch falsche Benutzung hervorgerufen.