FP_SD_READ_LINE

Eine Zeile aus einer Datei auf der SD-Karte lesen

Dieser FP-Befehl liest die Datei s_FullFileName ab der durch d2_dutReadLine festgelegten Zeigerposition bis zu einer festgelegten maximalen Anzahl an Bytes oder bis eines der Steuerzeichen CR, LF, CR+LF erkannt wird. Das Ergebnis wird in den Speicherbereich d1_Out geschrieben.

Parameter

Eingang

s_FullFileName (STRING)

Dateiname

Ein-/Ausgang

d2_dutReadLine (FP_SD_READ_LINE_DUT)

Zeigerposition und maximale zu lesende Zeichenanzahl

Ausgang

d1_Out (STRING)

Ausgangsbereich

Anmerkungen

  • Beachten Sie auch die Einführung in SD-Kartenbefehle.

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

  • Stellen Sie sicher, dass die Anzahl der gelesenen Bytes (festgelegt durch uiMaxCharsToRead von FP_SD_READ_LINE_DUT,) nicht die maximale Zeichenkettenlänge der Ausgabevariable an d1_Out überschreitet. Andernfalls werden nachfolgende Variablen überschrieben und es kann zu Operationsfehlern kommen.

Fehleralarmmerker

sys_bIsSDMemoryAccessError
  • 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;
		dutReadLine: FP_SD_READ_LINE_DUT;
		sLineRead: STRING[32]:='';
	END_VAR

POE-Rumpf

Wenn die Variable bStart von FALSE auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,4,2,6,4,R);
B(B_F,E_MOVE!,,26,1,32,5,,?DEN?D?AENO?C);
B(B_VARIN,,sLineRead,12,3,14,5,);
B(B_F,MAX_LEN!,,14,3,20,5,,?D?C);
B(B_F,TO_UINT!,,20,3,26,5,,?D?C);
B(B_VAROUT,,dutReadLine.uiMaxCharsToRead,32,3,34,5,);
L(1,0,1,5);
L(1,3,4,3);
L(6,3,26,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,4,1,6,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,12,1,14,3,N);
B(B_F,FP_SD_READ_LINE!,,26,0,41,5,,?DEN?Ds_FullFileName?Dd2_dutReadLine?Ad2_dutReadLine?AENO?Cd1_Out);
B(B_VARIN,,'\TestLine.csv',24,2,26,4,);
B(B_VAROUT,,sLineRead,41,2,43,4,);
B(B_VARIN,,dutReadLine,24,3,26,5,);
L(1,0,1,5);
L(1,2,4,2);
L(6,2,12,2);
L(14,2,26,2);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF DF(bStart) AND NOT sys_bIsSDMemoryAccessActive then

		dutSDReadString.uiMaxCharsToRead := TO_UINT(MAX_LEN(sStringRead1));
		FP_SD_READ_LINE(s_FullFileName := '\TestLine.csv',
						d2_dutReadLine := dutSDReadString,
						d1_Out => sStringRead1);

END_IF;

Letzte Änderung: 2024-12-18Feedback zu dieser SeitePanasonic Hotline