Speichern von Bildern aus der SPS

In diesem Beispiel werden Bilder aus der SPS auf einem lokalen Laufwerk gespeichert. Dazu wird der Funktionsbaustein FB_VN_WriteImage verwendet.

Speichern von Bildern aus der SPS 1:

Der Speichervorgang erfolgt asynchron über mehrere Zyklen.

Speichern von Bildern aus der SPS 2:

Dauer des Speichervorgangs

Die Dauer des Speichervorgangs hängt von verschiedenen Faktoren ab und kann daher nicht pauschal angegeben werden.

Variablen

hr                   :   HRESULT;

fbCamera             :   FB_VN_SimpleCameraControl;

ipImageIn            :   ITcVnImage;
ipImageInDisp        :   ITcVnDisplayableImage;

// Sample Specific Variables
fbWriteImage         :   FB_VN_WriteImage := (nTimeout := T#500MS);
sFilePath            :   STRING(255) := '';
bWriteImageTrigger   :   BOOL;
bWriteImageWaitResult:   BOOL;
bWriteImageDone      :   BOOL;
nReturnCode          :   UDINT;

In diesem Beispiel kann ein Bild gespeichert werden, indem die Trigger-Variable bWriteImageTrigger auf TRUE gesetzt wird.

Code

Das übergebene ipImage wird bereits beim ersten Aufruf des fbWriteImage mit steigender Flanke an bWrite komplett übernommen und kann daher direkt im Anschluss z. B. mit F_VN_TransformIntoDisplayableImage freigegeben werden. Danach muss der fbWriteImage weiterhin zyklisch aufgerufen werden, bis der bBusy Ausgang wieder FALSE ist. Dies kann bei einem Fehler auch schon beim ersten Aufruf der Fall sein, wenn z. B. gar keine oder eine falsche Dateiendung angegeben wird. Eine Auswertung, ob das Schreiben erfolgreich war oder ob ein Fehler aufgetreten ist, wird im unteren IF-Block durchgeführt. Im Erfolgsfall wird das bWriteImageDone gesetzt und bleibt, bis zum nächsten Setzen von bWriteImageTrigger anstehen.

IF SUCCEEDED(hr) AND ipImageIn <> 0 THEN

    IF NOT fbWriteImage.bBusy AND bWriteImageTrigger THEN
        bWriteImageTrigger := FALSE;
        bWriteImageDone := FALSE;
        bWriteImageWaitResult := TRUE;

        // With setting sFilePath:= '' to an empty string the images are saved under the default path
        // The default path can be set at the service configuration tab of the Vision Node
        // If sFilePath is set, it must contain the full path, image name and type
        // for example: sFilePath := 'C:\WriteImage\ImageName.bmp'
        fbWriteImage(ipImage := ipImageIn, sFilePath := sFilePath, bWrite := TRUE);
    END_IF

    hr := F_VN_TransformIntoDisplayableImage(ipImageIn, ipImageInDisp, hr);
END_IF

fbWriteImage(sFilepath:= '', bWrite := FALSE);

IF bWriteImageWaitResult AND NOT fbWriteImage.bBusy THEN
    bWriteImageWaitResult := FALSE;
    // Check if fbWriteImage was finished successfully or implement error handling
    IF fbWriteImage.bError THEN
        nReturnCode := fbWriteImage.nErrorId AND 16#FFF;
    ELSE
        bWriteImageDone := TRUE;
        nReturnCode := 0;
    END_IF
END_IF