Bild per Dateiname triggern
In diesem Beispiel wird ein Bild gezielt anhand des Dateinamens im Funktionsblock FB_VN_FileSourceControl angetriggert.
Anwendung
Das Beispiel zeigt abwechselnd zwei Bilder mit den Dateinamen Image1.bmp und Image2.bmp aus dem File Source im ADS Image Watch an. Die Bilder mit entsprechenden Dateinamen liegen dem Beispiel bei. Sie können die Beispielbilder durch eigene Bilder ersetzen oder diese zusätzlich hinzufügen. Ändern oder ergänzen Sie dazu die Dateinamen in sFileName
und passen Sie ggf. die Anzahl der Elemente an. Achten Sie darauf, dass zuerst alle anzuzeigenden Bilder im File Source Control hinzufügt werden müssen. Durch Setzen von bLoop
auf false
stoppen Sie den automatischen Wechsel der Bilder und können dann durch Setzen von nImageIndex
das Bild auswählen, welches getriggert werden soll.
Programm
hr : HRESULT;
sFileName : ARRAY [0..1] OF STRING := ['Image1.bmp', 'Image2.bmp'];
fbFileSource : FB_VN_FileSourceControl;
eState : ETcVnCameraState;
ipImageIn : ITcVnImage;
ipImageInDisp : ITcVnDisplayableImage;
bTrigger : BOOL := TRUE;
bLoop : BOOL := TRUE;
nImageIndex : UINT := 0;
fbFileSource | Funktionsblock zur Steuerung des File Source vom Typ FB_VN_FileSourceControl. |
eState | Zustand des File Source |
ipImageIn | Eingangsbild |
ipImageInDisp | Anzeigbares Eingangsbild |
bTrigger | Trigger-Flag |
sFileName | Dateiname - ändern Sie diese Variable, um ein anderes Bild einzuladen. Dieses Bild muss allerdings im File Source Control hinzugefügt werden. |
hr | Statusvariable vom Typ HRESULT. |
Grundsätzlich wird der übliche Zustandsautomat genutzt, um das File Source zu bedienen:
eState := fbFileSource.GetState();
CASE eState OF
<...>
END_CASE
Das Zurücksetzen bei Fehlern und das Starten der Bildaufnahme geschieht ganz normal in den entsprechenden Zuständen:
TCVN_CS_INITIAL, TCVN_CS_INITIALIZING, TCVN_CS_INITIALIZED, TCVN_CS_OPENING, TCVN_CS_OPENED, TCVN_CS_STARTACQUISITION:
fbFileSource.StartAcquisition();
TCVN_CS_ERROR:
fbFileSource.Reset();
Damit der File Source allerdings nicht sofort Bilder einlädt, wenn die Bildaufnahme gestartet wird, muss der Trigger Mode im File Source Control aktiviert werden:
Im ACQUIRING
Zustand wird nun abwechselnd das Bild mit entsprechendem Dateinamen getriggert und daraufhin empfangen. Zum Triggern des Bildes wird hier explizit die Methode TriggerImageByName verwendet. Diese Methode existiert nur im Funktionsblock FB_VN_FileSourceControl und nicht in FB_VN_SimpleCameraControl.
TCVN_CS_ACQUIRING:
IF bTrigger THEN
hr := fbFileSource.TriggerImageByName(sFileName[nImageIndex]);
IF SUCCEEDED(hr) THEN
bTrigger := FALSE;
IF bLoop THEN
nImageIndex := nImageIndex + 1;
IF nImageIndex >= 2 THEN
nImageIndex := 0;
END_IF
END_IF
END_IF
ELSE
hr := fbFileSource.GetCurrentImage(ipImageIn);
IF SUCCEEDED(hr) AND ipImageIn <> 0 THEN
bTrigger := TRUE;
hr := F_VN_TransformIntoDisplayableImage(ipImageIn, ipImageInDisp, hr);
END_IF
END_IF
Da der File Source beim Triggern des Bildes zwischenzeitlich in den TRIGGERING
Zustand geht, muss in diesem Zustand weiterhin getriggert werden. Dies geschieht so lange, bis der File Source das Bild vollständig eingeladen hat und sein Zustand somit wieder auf ACQUIRING
wechselt. Beim weiteren Triggern muss nicht erneut der Dateiname des Bildes übergeben werden; es reicht ein Aufruf der Methode TriggerImage.
TCVN_CS_TRIGGERING:
fbFileSource.TriggerImage();
Die Variable bTrigger
wird in diesem Beispiel aus Demonstrationszwecken automatisch auf TRUE
gesetzt, sobald ein Bild erfolgreich geladen wurde. In einer echten Applikation würde der Trigger an einer ablauf-technisch sinnvollen Stelle gesetzt werden.