Werte von SD-Karte lesen
Dieser FP-Befehl liest die durch n_NumberOfDataToRead festgelegte Anzahl an Werten aus einer durch s1_FullFileName festgelegten Datei auf der SD-Karte. Der strukturierte Datentyp FP_SD_READ_DUT am Eingang s2_dutRead legt die Leseparameter fest. 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
Dateiname
Anzahl der zu lesenden Werte
Werte:
0–65535 (16-Bit-Daten)
0–32767 (32-Bit-Daten)
0–1999 (Zeichenfolge)
Ein-/Ausgang
Leseformat, Lesemodus, Zeigerposition usw.
Ausgang
Anfangsadresse
Wenn in FP_SD_READ_DUT am Eingang s2_dutRead ein Zeigermodus ausgewählt wurde (wMode=2 oder wMode=3), wird mit dem Lesen an der Zeigerposition begonnen. Nach dem Lesen zeigt der Zeiger auf die Position, an der der Lesevorgang beendet wurde. Der nächste Lesevorgang beginnt an dieser Stelle.Die Zeigerposition kann auch durch udiBytePosition im strukturierten Datentyp festgelegt werden. In den unten stehenden Beispielen geben die Pfeile gültige Zeigerpositionen an:
16-Bit-INT-Werte (Datei im BIN-Format): |
ASCII-Werte (Datei im CSV-Format): |
---|---|
In CSV-Dateien zeigt der Zeiger stets auf die Position neben einem Leerzeichen, einem Komma oder einer neuen Zeile. Leerzeichen, Kommas und neue Zeilen am Ende der Werte werden übersprungen.
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.
Zwei aufeinanderfolgende doppelte Anführungszeichen ("") in Zeichenfolgen werden als ein Zeichen (") gelesen. Ein alleinstehendes doppeltes Anführungszeichen wird ignoriert.
In CSV-Dateien werden Leerfelder (z.B. Abschnitte mit aufeinanderfolgenden Kommas) als Teil der zu lesenden Werte gezählt, die Werte werden jedoch nicht gespeichert.
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
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*)
sFile_Test_Csv: STRING[32]:='\Test.csv';
dutFpReadTest_csv: FP_SD_READ_DUT;
sStringRead: STRING[32]:='';
iStringLengthRead: INT:=0;
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.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_COMMENT,,ø^Read string ASCII data from SD card memory - ASCII value,3,0,58,3,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,10,15,2,17,4,);
B(B_VAROUT,,dutFpReadTest_csv.wFormat,23,2,25,4,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,17,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VARIN,,sFile_Test_Csv,15,3,17,5,);
B(B_VAROUT,,sStringRead,30,3,32,5,);
B(B_VARIN,,dutFpReadTest_csv,15,5,17,7,);
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,FP_SD_READ!,,17,1,30,7,,?DEN?Ds1_FullFileName?Dn_NumberOfDataToRead?Ds2_dutRead?As2_dutRead?AENO?Cd_Start);
B(B_VARIN,,iStringLengthRead,15,4,17,6,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,12,3);
L(12,3,17,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
eneral">(* Read string ASCII data from SD card memory - ASCII value *)
IF DF(bStart)And not sys_bIsSDMemoryAccessActive then
dutFpReadTest_csv.wFormat:=10;
FP_SD_READ(s1_FullFileName := sFile_Test_Csv,
n_NumberOfDataToRead := iStringLengthRead,
s2_dutRead := dutFpReadTest_csv,
d_Start => sStringRead);
END_IF;