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:

Bild per Dateiname triggern 1:

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();
Bild per Dateiname triggern 2:

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.