FP_SD_READ

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.

Parameter

Eingang

s1_FullFileName (STRING)

Dateiname

n_NumberOfDataToRead (WORD, INT, UINT)

Anzahl der zu lesenden Werte

Werte:

  • 0–65535 (16-Bit-Daten)

  • 0–32767 (32-Bit-Daten)

  • 0–1999 (Zeichenfolge)

Ein-/Ausgang

s2_dutRead (FP_SD_READ_DUT)

Leseformat, Lesemodus, Zeigerposition usw.

Ausgang

d_Start (ANY)

Anfangsadresse

Zeigermodus

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.

Anmerkungen

  • 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.

Fehleralarmmerker

sys_bIsSDMemoryAccessError (wird auf TRUE gesetzt und bleibt TRUE)
  • 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.

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

Beispiel:

POE-Kopf

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

POE-Rumpf

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.

KOP-Rumpf

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

ST-Rumpf

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;

Letzte Änderung: 2024-03-07Feedback zu dieser SeitePanasonic Hotline