Camera Register Access
Diese Gruppe enthält Funktionsblöcke zum Lesen und Schreiben von Kamera-Registern oder Speicherbereichen.
Funktionsblöcke
UDINT-Register (4 Byte)
ULINT-Register (8 Byte)
REAL-Register (4 Byte)
Größere Speicherbereiche
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 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.
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 (!fbReadOrWrite.bBusy)
{
// Function block execution is complete or error occurred.
// Next write-command can be issued.
}
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 (0x71E)
, wenn der Funktionsblock beschäftigt ist (bBusy == true
).
Der Hexadezimalwert des Fehlercodes kann wie folgt extrahiert werden:
if (fbReadOrWrite.bError)
{
// Show relevant error code for debugging purposes:
nErrorCode = fbReadOrWrite.nErrorId & 0xFFF;
}