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_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
- 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 PL50, e.g. Intel 4-core Atom CPU | Tc3_Vision |