FB_VN_SimpleCameraControl

This FB provides the basic functionality to control a camera or a FileSource.

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

FB_VN_SimpleCameraControl 1: Methods

Name

Description

GetCurrentImage

Get the current available image (if any).

GetState

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

Reset

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

StartAcquisition

Start the image acquisition.

StopAcquisition

Stop the image acquisition.

TriggerImage

Trigger the next image.

Weiterführende Informationen

Der Funktionsblock FB_VN_SimpleCameraControl vereint die Gemeinsamkeiten von FB_VN_GevCameraControl und FB_VN_FileSourceControl. Dadurch können Instanzen des Bausteins sowohl mit dem Image Provider einer Kamera als auch mit dem Image Provider eines File Source Controls verknüpft werden, wie dies auch in den First Steps erfolgt.

Zustandsautomat

Die nachfolgende Grafik zeigt den Zustandsautomaten. Die Hauptzustände sind dabei blau gekennzeichnet, die Übergangszustände grau und der Error-Zustand rot. Eine Kamera nimmt, im Gegensatz zu einem File Source Control, beim Übergang von TCVN_CS_INITIAL nach TCVN_CS_ACQUIRING immer auch den Übergangszustand TCVN_CS_OPENING an und bei Bedarf auch den Hauptzustand TCVN_CS_OPENED. Wenn Init Commands vorhanden sind und der InitializationAutoMode AUTOINIT_AFTER_SO ausgewählt wurde, wird auch kurzzeitig der State INITIALIZING angenommen, in dem die automatische Initialisierung erfolgt. Wenn ein Übergang sehr schnell erfolgt wird der entsprechende State nicht nach außen gemeldet, da innerhalb eines Zyklus schon der nachfolgende State erreicht wurde. Bei Verknüpfung mit einem File Source Control werden diese drei Zustände nicht angenommen. Die Verwendung der Trigger Image Methode aus dem TCVN_CS_OPENED State ist nur mit einer Kamera möglich.

FB_VN_SimpleCameraControl 2:

Zur Steuerung des Zustandsautomaten 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, um eine Kamera in den Bildaufnahme-Modus zu bringen, Fehlerzustände zu behandeln und kontinuierlich erfolgreich aufgenommene Bilder anzuzeigen, sieht z. B. so aus:

VAR
    hr              :   HRESULT;
    ipImageIn       :   ITcVnImage;
    ipImageInDisp   :   ITcVnDisplayableImage;
    fbCameraControl :   FB_VN_SimpleCameraControl;
    eCameraState    :   ETcVnCameraState;
    nNewImageCounter:   UINT;
END_VAR

eCameraState := fbCameraControl.GetState();

// CameraControl is in error state, so try to reset the camera connection
IF eCameraState = TCVN_CS_ERROR THEN
    hr := fbCameraControl.Reset();

// Camera not yet streaming
ELSIF eCameraState < TCVN_CS_ACQUIRING THEN
    hr := fbCameraControl.StartAcquisition();

// Camera streaming
ELSIF eCameraState = TCVN_CS_ACQUIRING THEN
    hr := fbCameraControl.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

END_IF

In diesem Fall kann die Kamera auf kontinuierliche Bild-Akquise oder auf einen Hardwaretrigger konfiguriert werden.

Anwendung mit Softwaretrigger

Ein Zustandsautomat, um eine Kamera in den Bildaufnahme-Modus zu bringen, Fehlerzustände zu behandeln und per Softwaretrigger eine Bildaufnahme anzutriggern, sieht z. B. so aus:

VAR
    hr              :   HRESULT;
    ipImageIn       :   ITcVnImage;
    ipImageInDisp   :   ITcVnDisplayableImage;
    fbCameraControl :   FB_VN_SimpleCameraControl;
    eCameraState    :   ETcVnCameraState;
    nNewImageCounter:   UINT;
    bTrigger        :   BOOL := TRUE;
END_VAR

eCameraState := fbCameraControl.GetState();

// CameraControl is in error state, so try to reset the camera connection
IF eCameraState = TCVN_CS_ERROR THEN
    hr := fbCameraControl.Reset();

// Camera trigger image
ELSIF eCameraState = TCVN_CS_TRIGGERING THEN
    hr := fbCameraControl.TriggerImage();

// Camera not yet streaming
ELSIF eCameraState < TCVN_CS_ACQUIRING THEN
    hr := fbCameraControl.StartAcquisition();

// Camera streaming
ELSIF eCameraState = TCVN_CS_ACQUIRING THEN

    IF bTrigger THEN
        hr := fbCameraControl.TriggerImage();
        IF SUCCEEDED(hr) THEN
            bTrigger := FALSE;
        END_IF
    ELSE
        hr := fbCameraControl.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

END_IF

In diesem Fall muss die Kamera auf einen Softwaretrigger (TriggerSource = Software) konfiguriert werden.

Beispiele

In vielen Funktionsbeispielen wird ein FB_VN_SimpleCameraControl Funktionsblock genutzt, um Beispielbilder einzuladen.

Verwandte Funktionen

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