Leggere una linea da un file specificato da SD memory card
Questa istruzione FP legge il file specificato da s_FullFileName dalla posizione del puntatore specificata da d2_dutReadLine fino a un numero massimo specificato di byte o fino a quando viene rilevato un carattere di controllo (CR, LF, CR+LF). Il risultato viene memorizzato nell'area specificata da d1_Out.
Ingresso
Nome del file
Ingresso/uscita
Posizione del puntatore e numero massimo di caratteri da leggere
Uscita
Area di uscita
Fare riferimento anche alle Presentazione delle istruzioni di accesso alla memoria SD.
Il flag accesso memoria SD attivo (sys_bIsSDMemoryAccessActive) passa a TRUE dopo che il trigger EN dell’istruzione di accesso alla memoria SD è passata a TRUE e resta TRUE fino al completamento dell’esecuzione. Durante questo periodo non è possibile eseguire altre istruzioni di accesso alla memoria SD.
Il flag accesso memoria SD eseguito (sys_blsSDMemoryAccessDone) è FALSE quando l’istruzione viene eseguita e passa a TRUE e resta TRUE quando l’istruzione è stata completata.
Non leggere i dati dall’area di uscita fino a che l’esecuzione dell’istruzione non è stata completata.
Assicurarsi che il numero di byte letti (specificato da uiMaxCharsToRead di FP_SD_READ_LINE_DUT,) non superi la lunghezza massima per la stringa della variabile di uscita su d1_Out. Altrimenti le variabili successive verranno sovrascritte e possono verificarsi errori di calcolo non correlati.
FALSE: quando l'istruzione si è conclusa senza errori
TRUE: quando l'istruzione si è conclusa con un errore
Utilizzare sys_iSDMemoryAccessErrorCode per valutare il codice di errore.
se l'area specificata utilizzando il registro indice eccede il limite.
se l'area specificata utilizzando il registro indice eccede il limite.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
bStart: BOOL:=FALSE;
dutReadLine: FP_SD_READ_LINE_DUT;
sLineRead: STRING[32]:='';
END_VAR
Quando la variabile bStart passa da FALSE a TRUE, la funzione viene eseguita.
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
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;