SPS-Programm schreiben

Zu einem einfachen SPS-Programm zur kontinuierlichen Bild-Akquise von einer Kamera oder einem File Source gehört Folgendes:

Variablen

PROGRAM MAIN
VAR
    hr                :    HRESULT;
    fbCamera          :    FB_VN_SimpleCameraControl;
    eState            :    ETcVnCameraState;
    ipImageIn         :    ITcVnImage;
    ipImageInDisp     :    ITcVnDisplayableImage;
    nNewImageCounter  :    UINT;
END_VAR

Name

Typ

Beschreibung

hr

HRESULT

Alle Funktionen und viele Methoden der Tc3_Vision Bibliothek geben zur Fehlerbehandlung einen Ergebniscode vom Type HRESULT zurück. Mehr zu dem Konzept dahinter und der Bedeutung einzelner Codes in HRESULT.

fbCamera

FB_VN_SimpleCameraControl

Kameras und File Source Controls werden jeweils durch eine Funktionsbausteininstanz repräsentiert. Im einfachsten Fall ist dies eine Instanz vom FB_VN_SimpleCameraControl die die gemeinsamen Eigenschaften von Kamera und File Source Control abdeckt und daher mit beiden Gerätetypen verknüpft werden kann. Alternativ gibt es noch den FB_VN_GevCameraControl für Kameras und den FB_VN_FileSourceControl für File Source Controls.

eState

ETcVnCameraState

Jedes Vision-Gerät hat einen Zustand vom Typ ETcVnCameraState.

ipImageIn

ITcVnImage

Bilder zur Verarbeitung werden über Variablen vom Typ ITcVnImage verwaltet. In diesem Beispiel erhält man über ipImageIn Zugriff auf das Eingangsbild der Kamera.

ipImageInDisp

ITcVnDisplayableImage

Bilder, die dargestellt werden sollen, werden über ITcVnDisplayableImages verwaltet.

Programmcode mit Zustandsautomat

Jedes Vision-Gerät hat einen internen Zustand, wobei TCVN_CS_INITIAL der Anfangszustand ist. Von diesem kann das Gerät mit der Methode StartAcquisition in den TCVN_CS_ACQUIRING Zustand gebracht werden. In diesem können Bilder aufgenommen und übertragen werden. Liegt ein Bild vollständig im Speicher vor, kann es über fbCamera.GetCurrentImage(ipImageIn) abgerufen werden.

Zur Überprüfung, ob ein Bild vollständig empfangen wurde und abgerufen werden konnte, wird in der IF-Abfrage das HRESULT der Methode und der Pointer auf den Speicherbereich des Bildes auf ungleich 0 abgefragt. Danach kann mit der Analyse des Bildes begonnen werden. Zur Überprüfung und Anzeige dass ein Bild abgerufen werden konnte, wird beispielhaft die Zählervariable nNewImageCounter inkrementiert.

F_VN_TransformIntoDisplayableImage verschiebt den Bild-Pointer anschließend in ipImageInDisp, um das Bild anzuzeigen. Das Bild kann danach nicht mehr über ipImageIn abgerufen werden, alternativ kann mit F_VN_CopyIntoDisplayableImage auch eine Kopie erzeugt werden, um das Bild sowohl anzeigen als auch weiterbearbeiten zu können.

eState := fbCamera.GetState();

IF eState = TCVN_CS_ERROR THEN
    hr := fbCamera.Reset();

ELSIF eState < TCVN_CS_ACQUIRING THEN
    hr := fbCamera.StartAcquisition();

ELSIF eState = TCVN_CS_ACQUIRING THEN
    hr := fbCamera.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

Weitere Infos zum Zustandsautomat finden Sie imAPI-Kapitel Image Acquisition.

Weiterführende Informationen

Nächster Schritt

Funktionsbaustein initialisieren