FB_VN_FileSourceControl

This FB provides access to the images send by a File Source instance.

Do not call the main FB directly. Only use the available methods.

FB_VN_FileSourceControl 1: Methods

Name

Description

GetCurrentImage

Gets the current available image (if any).

GetCurrentImageAndFileName

Gets the current available image (if any) and the corresponding file name.

StartAcquisition

Activates the File Source. If not in trigger mode, it will start sending images.

StopAcquisition

Deactivates the File Source. It will stop sending images.

Reset

Reset the controller to initial state (might require multiple calls depending on current state, until S_OK is returned)

GetState

Gets the current state of the internal camera control state machine.

TriggerImage

If in trigger mode, this function triggers the next image in the list.

TriggerImageExp

If in trigger mode, this function triggers a specific image in the list.

TriggerImageByName

If in trigger mode, this function triggers a specific image in the list by name.

Weiterführende Informationen

Der Funktionsblock FB_VN_FileSourceControl kann File Source Instanzen mit vollem Funktionsumfang in der SPS ansteuern. Alternativ ist dies mit beschränkter Funktionalität auch mit dem Funktionsbaustein FB_VN_SimpleCameraControl möglich.

Zustandsautomat

Die nachfolgende Grafik zeigt den Zustandsautomaten. Die Hauptzustände sind dabei blau gekennzeichnet, die Übergangszustände grau und der Error-Zustand rot.

FB_VN_FileSourceControl 2:

Zur Steuerung des Zustandsautomats können folgende Methoden genutzt werden:

Wenn eine Methode in einem Zustand aufgerufen wird, für den sie nicht gedacht ist, wird der Fehlercode INVALIDSTATE (16#712) zurückgegeben.

Anwendung mit kontinuierlichem Bildeinzug

Ein Zustandsautomat, der kontinuierlich empfangene Bilder abruft, sieht z.B. so aus:

VAR
    fbFileSource    :   FB_VN_FileSourceControl;
    eState          :   ETcVnCameraState;
    ipImageIn       :   ITcVnImage;
    ipImageInDisp   :   ITcVnDisplayableImage;
    hr              :   HRESULT;
    nNewImageCounter:   UINT;
END_VAR

eState := fbFileSource.GetState();

CASE eState OF

TCVN_CS_INITIAL, TCVN_CS_OPENING, TCVN_CS_OPENED, TCVN_CS_STARTACQUISITION:
    hr := fbFileSource.StartAcquisition();

TCVN_CS_ACQUIRING:
    hr := fbFileSource.GetCurrentImage(ipImageIn);

    // Check if new Image was received
    IF SUCCEEDED(hr) AND ipImageIn <> 0 THEN
        nNewImageCounter := nNewImageCounter + 1;

        // Place to call vision algorithms
        hr := F_VN_TransformIntoDisplayableImage(ipImageIn, ipImageInDisp, hr);
    END_IF

TCVN_CS_ERROR:
    hr := fbFileSource.Reset();

END_CASE

Anwendung mit Trigger

Ein Zustandsautomat, der kontinuierlich ein Bild mit einem speziellen Dateinamen triggert, sieht z.B. so aus:

VAR
    fbFileSource    :   FB_VN_FileSourceControl;
    eState          :   ETcVnCameraState;
    ipImageIn       :   ITcVnImage;
    ipImageInDisp   :   ITcVnDisplayableImage;
    bTrigger        :   BOOL := TRUE;
    sFileName       :   STRING := 'FileName.bmp';
    hr              :   HRESULT;
    nNewImageCounter:   UINT;
END_VAR

eState := fbFileSource.GetState();

CASE eState OF

TCVN_CS_INITIAL, TCVN_CS_OPENING, TCVN_CS_OPENED, TCVN_CS_STARTACQUISITION:
    hr := fbFileSource.StartAcquisition();
    
TCVN_CS_TRIGGERING:
    hr := fbFileSource.TriggerImage();
    
TCVN_CS_ACQUIRING:

    IF bTrigger THEN
        hr := fbFileSource.TriggerImageByName(sFileName);
        IF SUCCEEDED(hr) THEN
            bTrigger := FALSE;
        END_IF
    ELSE
        hr := fbFileSource.GetCurrentImage(ipImageIn);

        // Check if new Image was received
        IF SUCCEEDED(hr) AND ipImageIn <> 0 THEN
            nNewImageCounter := nNewImageCounter + 1;

            // Trigger next image
            bTrigger := TRUE;

            // Place to call vision algorithms
            hr := F_VN_TransformIntoDisplayableImage(ipImageIn, ipImageInDisp, hr);
        END_IF
    END_IF

TCVN_CS_ERROR:
    hr := fbFileSource.Reset();

END_CASE

Alternativ zu der Methode TriggerImageByName(sFileName) kann die TriggerImage() verwendet werden, um immer das nächste Bild aus der Liste des File Source Controls zu erhalten.

Beispiele

Verwandte Funktionsblöcke

Required License

TC3 Vision Base

System Requirements

Development environment

Target platform

PLC libraries to include

TwinCAT V3.1. 4024.44 or later

PC or CX (x64) with PL50, e.g. Intel 4-core Atom CPU

Tc3_Vision