Werte auf SD-Karte schreiben
Dieser FP-Befehl liest die durch n_NumberOfDataToWrite festgelegte Anzahl an Werten, die bei der Anfangsadresse s_Start gespeichert sind. Die Werte werden dann in die Datei d1_FullFileName auf der SD-Karte geschrieben. Der strukturierte Datentyp FP_SD_WRITE_DUT in d2_dutWrite legt die Schreibparameter fest.
Eingang
Anfangsadresse
Anzahl der zu schreibenden Daten, angegeben vom DUT-Element udiNumberOfDataWritten###
Für wFormat=1–8: Anzahl der kommagetrennten 16-Bit-/32-Bit-Daten
Für wFormat=10: Anzahl der 8-Bit-Zeichen
Für wFormat=11: Anzahl der 16-Bit-Zeichen
Dateiname mit Erweiterung, z.B. '\Test.csv'
Ein-/Ausgang
Schreibformat, Schreibmodus, Zeigerposition usw.
Wenn in FP_SD_WRITE_DUT am Eingang s2_dutWrite ein Zeigermodus ausgewählt wurde (wMode=2 oder wMode=3), wird mit dem Schreiben an der Zeigerposition begonnen. Nach dem Schreiben zeigt der Zeiger auf die Position, an der der Schreibvorgang beendet wurde. Der nächste Schreibvorgang beginnt an dieser Stelle. Die Zeigerposition kann auch durch udiBytePosition im strukturierten Datentyp festgelegt werden. Im Beispiel unten werden die Dateizeigerpositionen für verschiedene Datenformate angegeben.
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.
Wenn das Dateiattribut schreibgeschützt ist, können keine Werte geschrieben werden.
Beim Speichern von ASCII-Werten werden geschriebene Zeichenfolgen durch doppelte Anführungszeichen begrenzt.
Ein doppeltes Anführungszeichen (") in Zeichenfolgen wird in zwei doppelte Anführungszeichen ("") umgewandelt.
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*)
sStringWrite1: STRING[32]:='Test String1';
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,,ø^Write string ASCII data into 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!,,18,0,24,4,,?DEN?D?AENO?C);
B(B_VARIN,,10,16,2,18,4,);
B(B_VAROUT,,dutFpWriteTest_csv.wFormat,24,2,26,4,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,18,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,,sStringWrite,16,2,18,4,);
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_VARIN,,sFile_Test_Csv,16,4,18,6,);
B(B_VARIN,,dutFpWriteTest_csv,16,5,18,7,);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,FP_SD_WRITE!,,18,0,31,7,,?DEN?Ds_Start?Dn_NumberOfDataToWrite?Dd1_FullFileName?Dd2_dutWrite?Ad2_dutWrite?AENO);
B(B_VARIN,,iStringLength,16,3,18,5,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,18,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF DF(bStart)AND not sys_bIsSDMemoryAccessActive then
dutFpWriteTest_csv.wFormat:=10;
FP_SD_WRITE(s_Start := sStringWrite,
n_NumberOfDataToWrite := iStringLength,
d1_FullFileName := sFile_Test_Csv,
d2_dutWrite := dutFpWriteTest_csv);
END_IF;