Camera Register Access

Diese Gruppe enthält Funktionsblöcke zum Lesen und Schreiben von Kamera-Registern oder Speicherbereichen.

Parameter

Die folgenden Parameter funktionieren bei allen Funktionsblöcken dieser Gruppe gleich:

Adresse

Die Adresse nAddress gibt das zu lesende oder zu speichernde Register der Kamera an. Der Typ GVCP_REGISTER_ADDRESS ist lediglich ein Alias auf UDINT; sodass die Adresse 4 Byte (bzw. 32 Bit) lang sein muss. Bei größeren Speicherbereichen der Kamera (siehe FB_VN_ReadMemory) zeigt die Adresse auf den Anfang des zu lesenden oder zu speichernden Bereichs.

Funktion ausführen

Die Trigger für Schreib- und Lese-Befehle sind bWrite und bRead. Sie werden durch eine steigende Flanke (Wechsel von FALSE nach TRUE) ausgelöst. Dabei werden die relevanten Eingangsparameter intern gespeichert, sodass eine Änderung der Parameter während der Ausführung keinen Einfluss hat. Ebenso hat eine fallende Flanke der Trigger keine Auswirkung.

Camera Register Access 1:

Funktionsblöcke aufrufen

Beachten Sie, dass das Beschreiben von Parametern bei Funktionsblöcken nur eine Auswirkung hat, wenn dieser auch aufgerufen wird.

Timeout

Um in unbekannten Fehlerfällen nicht ewig auf die Ausführung des Funktionsblocks zu warten, kann mit nTimeout die maximal erlaubte Ausführungszeit festgelegt werden. Wenn diese Zeit ohne erfolgreiches Ergebnis nach Auslösen des Befehlstriggers überschritten wird, wird die Ausführung abgebrochen. Der Timeout-Fehler ist dann über die beiden Ausgänge bError und nErrorId zu erkennen.

Arbeitsstatus

Der Ausgang bBusy gibt an, ob der Funktionsblock beschäftigt ist. Wenn bBusy = TRUE kann kein neuer Befehl ausgelöst werden.

Mittels einer geeigneten IF-Abfrage kann festgestellt werden, ob die Ausführung des Funktionsblocks abgeschlossen ist:

IF NOT fbReadOrWrite.bBusy THEN
    // Function block execution is complete or error occurred.
    // Next write-command can be issued.
END_IF

Fehlerstatus

Der Fehlerstatus wird angegeben, indem bError binär auf einen Fehler hinweist und nErrorId ggfs. den Fehlercode (ADS Return Code) ausgibt. Der Fehlerstatus wird zurückgesetzt, sobald ein neuer Befehl ausgelöst wird. Der Fehlercode ist PENDING (16#71E), wenn der Funktionsblock beschäftigt ist (bBusy = TRUE).

Der Hexadezimalwert des Fehlercodes kann wie folgt extrahiert werden:

IF fbReadOrWrite.bError THEN
    // Show relevant error code for debugging purposes:
    nErrorCode := fbReadOrWrite.nErrorId AND 16#FFF;
END_IF

Beispiele