File Access
Diese Gruppe enthält Funktionsblöcke zum Lesen und Schreiben von Daten auf dem Dateisystem.
Funktionsblöcke
Bilder
Container
Machine learning Modelle
Kalibrationsmuster
Funktionsinitialisierung
Neural Network
Allgemeines
Diese Funktionsblöcke arbeiten asynchron; die Zeit von der ersten Ausführung bis zum gewünschten Ergebnis erstreckt sich über mehrere Zyklen. Die tatsächliche Dauer jedes Lese-/Schreibvorgangs hängt von verschiedenen Faktoren ab, z.B. von der Größe des Bildes und dem Verhalten des Betriebssystems. Die folgenden Parameter sind bei allen Funktionsblöcken gleich und sind daher einmal hier zentral beschrieben.
Parameter
Dateipfad
Der Dateipfad sFilePath
legt fest, wo eine Datei gespeichert werden soll bzw. welche Datei geladen werden soll. Es können absolute und relative Pfade verwendet werden. Bei relativen Pfaden werden die Standardpfade, die in der Service Configuration festgelegt sind, als Basis verwendet.
Pfadlänge Der Typ des |
Der Dateipfad wird bei einer steigenden Flanke des Schreib-Befehls bWrite
intern gespeichert, sodass Änderungen des Pfads in späteren Zyklen keine Auswirkung haben.
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 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
Die häufigsten Fehlercodes sind:
Hex | Dec | Name | Bedeutung |
---|---|---|---|
|
|
| ADS-Server nicht erreichbar. Tritt im Wesentlichen auf, wenn der TwinCAT Vision Service nicht gestartet ist. Siehe Vision Service startet nicht. |
|
|
| Allgemeiner Fehler, wenn das Speichern oder Laden fehlschlägt. Dieser weist meistens darauf hin, dass das angegebene Dateiformat nicht unterstützt wird oder, dass der Dateipfad nicht erreichbar ist. Dieser Fehler tritt im Regelfall im TwinCAT Vision Service auf. |
|
|
| Invalider Parameter. Dies weist meistens darauf hin, dass der Interface Pointer nicht valide ist. |
|
|
| Timeout. Das Laden oder Speichern hat die maximale Ausführungszeit |
|
|
| Kein wirklicher Fehler, daher ist hierbei auch der Ausgang |