Binärdaten von SD-Karte lesen
Dieser FP-Befehl liest die durch n_Words festgelegte Anzahl an Worten aus der durch die Dateinummer s_FileNumber festgelegten Binärdatei auf der SD-Karte. Der Verzeichnisname lautet \data und der Dateiname lautet dtxxx.bin, wobei "xxx" für die Dateinummer steht. Das Ergebnis wird in den Speicherbereich d_Start geschrieben. Im ASCII-Code werden für die Darstellung eines BCD-Zeichens 8 Bit (1 Byte) benötigt. Nach der ASCII-Umwandlung ist der Zieldatenbereich daher doppelt so groß wie der Quelldatenbereich.
Eingang
Dateinummer (0–999)
Anzahl der Worte (0–65535)
Ausgang
Anfangsadresse
Beachten Sie auch die Vorsichtsmaßnahmen für den SD-Kartenzugriff.
Der Merker "SD-Kartenzugriff aktiv" (sys_bIsSDMemoryAccessActive) wird auf TRUE gesetzt, nachdem der Trigger EN des SD-Kartenbefehls auf TRUE gesetzt wurde, und bleibt TRUE, bis die Ausführung beendet wurde. In dieser Zeit lassen sich keine anderen SD-Kartenbefehle ausführen.
Der Merker "SD-Kartenzugriff beendet" (sys_blsSDMemoryAccessDone) ist auf FALSE gesetzt, während der Befehl ausgeführt wird. Er wird auf TRUE gesetzt und bleibt TRUE, sobald die Ausführung beendet wurde.
Lesen Sie die Werte aus dem Ausgangsbereich erst, wenn die Befehlsausführung beendet wurde.
Wenn kein Verzeichnis \data oder keine Datei mit der angegebenen Dateinummer im Verzeichnis vorhanden ist, tritt ein Fehler auf.
Wenn die Anzahl der Werte in der Datei geringer ist als die Anzahl der zu lesenden Werte, wird die Anzahl der Werte in der Datei gelesen.
FALSE: Der Befehl wurde fehlerfrei ausgeführt.
TRUE: Bei der Ausführung des Befehls ist ein Fehler aufgetreten.
Werten Sie den Fehlercode mit sys_iSDMemoryAccessErrorCode aus.
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
Mit einem strukturierten Datentyp (SDT) können zusammengesetzte Datentypen definiert werden. Ein SDT wird zunächst im SDT-Pool angelegt und dann wie die Standardtypen (BOOL, INT usw.) in der globalen Variablenliste oder im POE-Kopf verarbeitet.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bStart: BOOL:=FALSE;
(*activates the instruction*)
dutValuesRead: DUT_VALUES;
iFileNumberDut: INT:=2;
END_VAR
Wenn die Variable bStart von FALSE auf TRUE gesetzt wird und die Systemvariable sys_bIsSDMemoryAccessActive nicht auf TRUE gesetzt ist, wird die Funktion ausgeführt.
eneral">BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,2,12,4,N);
B(B_CONTACT,,bStart,2,2,4,4,R);
B(B_VARIN,,iFileNumberDut,14,5,16,7,);
B(B_F,FP_SD_READ_BIN!,,16,3,27,8,,?DEN?Ds_FileNumber?Dn_Words?AENO?Cd_Start);
B(B_F,Size_Of_Var!,,9,6,16,8,,?D?C);
B(B_VARIN,,dutValuesRead,7,6,9,8,);
B(B_F,Adr_Of_Var_O!,,27,5,35,7,,?D?C);
B(B_VAROUT,,dutValuesRead,35,5,37,7,);
L(1,3,2,3);
L(4,3,10,3);
L(12,3,12,5);
L(12,5,16,5);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bStart)AND not sys_bIsSDMemoryAccessActive then
FP_SD_READ_BIN(s_FileNumber := iFileNumberDut,
n_Words := Size_Of_Var(dutValuesRead),
d_Start => Adr_Of_Var(dutValuesRead));
END_IF;