Data Matrix Code Reading

In diesem Beispiel werden

Erläuterung

Die Funktion F_VN_ReadDataMatrixCodeExp sucht nach Data Matrix Codes im vorgegebenen Bild und liest diese aus. Dabei kann im Gegensatz zur Funktion F_VN_ReadDataMatrixCode die Anzahl der zu suchenden Codes je Bild vorgegeben werden. In diesem Beispiel ist das ein Code pro Bild. Zudem wird die Kontur des gefundenen Codes zurückgegeben. Als Suchstrategie wird TCVN_CSS_ONLY_NOT_FLIPPED gewählt, da das Bild nicht gespiegelt ist.

Wenn sich im Bild Bereiche befinden, die ähnlich wie Codes aussehen, oder wenn gar kein Code im Bild vorhanden ist, kann sich dies negativ auf die Ausführungszeit auswirken. Um Zykluszeitüberschreitungen zu verhindern, wird die Funktion F_VN_ReadDataMatrixCodeExp in diesem Beispiel mit Hilfe eines Watchdogs überwacht (siehe dazu das Beispiel Blob Detection mit Watchdog Überwachung).

Variablen

hr                  :    HRESULT;

ipImageIn           :    ITcVnImage;
ipImageInDisp       :    ITcVnDisplayableImage;

ipImageRes          :    ITcVnImage;
ipImageResDisp      :    ITcVnDisplayableImage;

// Data Matrix Code
ipCodeDecodedList   :    ITcVnContainer;
ipCodeContourList   :    ITcVnContainer;
sCodeAsString       :    STRING(255);

// Watchdog
hrWD                :    HRESULT;
tStop               :    DINT := 20000;
tRest               :    DINT;

// Output
sText               :    STRING;

// Color
aColorRed           :    TcVnVector4_LREAL := [255, 0, 0];

Code

// Execute the DMC Code Reading Function monitored by the Watchdog function
// ---------------------------------------------------------------
hrWD := F_VN_StartRelWatchdog(tStop, S_OK);
    hr := F_VN_ReadDataMatrixCodeExp(
        ipSrcImage      :=  ipImageIn,
        ipDecodedData   :=  ipCodeDecodedList,
        ipContours      :=  ipCodeContourList,
        nCodeNumber     :=  1,
        eSearchStrategy :=  TCVN_CSS_ONLY_NOT_FLIPPED,
        hrPrev          :=  hr
    );

hrWD := F_VN_StopWatchdog(hrWD, tRest => tRest);

// Check if the function was executed successfully
IF hr = S_OK THEN
    // Export Code into String
    hr := F_VN_ExportSubContainer_String(ipCodeDecodedList, 0, sCodeAsString, 255, hr);

    // Write Code into Result Image
    hr := F_VN_PutText(sCodeAsString, ipImageRes, 25, 50, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 2, aColorRed, hr);

    // Draw Code Contour into Result Image
    hr := F_VN_DrawContours(ipCodeContourList, 0, ipImageRes, aColorRed, 3, hr);
ELSE
    // Write HRESULT into Result Image
    sText := CONCAT('Returncode ', DINT_TO_STRING(hr));
    hr := F_VN_PutLabelExp(sText, ipImageRes, 25, 50, 2, 2, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, aColorRed, aColorWhite, ETcVnLineType.TCVN_LT_8_CONNECTED, hr);
END_IF

// Write Code Reading proceeded time into Result Image
sText := CONCAT(CONCAT('Time: ', DINT_TO_STRING(tStop - tRest)), 'us');
hr := F_VN_PutText(sText, ipImageRes, 25, 80, ETcVnFontType.TCVN_FT_HERSHEY_PLAIN, 2, aColorRed, hr);

Ergebnis

Data Matrix Code Reading 1:

Ähnliche Beispiele