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.
Der Speichervorgang erfolgt asynchron über mehrere Zyklen. |
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