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.
          
 Methods
| 
                   Name  | 
                   Description  | 
|---|---|
| 
                   Get the current available image (if any).  | |
| 
                   Get the current state of the internal camera control state machine.  | |
| 
                   Reset the camera to initial state (might require multiple calls depending on current state, until S_OK is returned)  | |
| 
                   Start the image acquisition.  | |
| 
                   Stop the image acquisition.  | |
| 
                   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.

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_IFIn 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_IFIn 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
- FB_VN_SimpleCameraControl für Kameras und File Sources
 - FB_VN_GevCameraControl für GigE Vision Kameras
 - FB_VN_FileSourceControl für File Sources
 
Required License
TC3 Vision Base
System Requirements
Development environment  | Target platform  | PLC libraries to include  | 
|---|---|---|
TwinCAT V3.1.4024.59 or later  | PC or CX (x64) with min. PL50, e.g. Intel 4-core Atom CPU  | Tc3_Vision  |