Leggere i dati dalla SD memory card
Questa istruzione FP legge il numero di dati specificati da n_NumberOfDataToRead da un file specificato da s1_FullFileName sulla SD memory card. La DUT FP_SD_READ_DUT su s2_dutRead specifica i parametri di lettura. Il risultato viene memorizzato nell'area specificata da d_Start. Il codice ASCII richiede 8 bit (1 byte) per esprimere 1 carattere BCD. Dopo la conversione in ASCII, la lunghezza del dato sarà quindi doppia rispetto alla lunghezza del dato source.
Ingresso
Nome del file
Numero di dati da leggere
Valori:
0–65535 (dato a 16 bit)
0–32767 (dato a 32 bit)
0–1999 (stringa di caratteri)
Ingresso/uscita
Formato di lettura, modalità lettura, posizione puntatore, eccetera.
Uscita
Indirizzo iniziale
Se la modalità è stata selezionata in FP_SD_READ_DUT su s2_dutRead (wMode=2 o wMode=3), la lettura viene avviata alla posizione del puntatore. Dopo la lettura, il puntatore si sposta alla posizione in cui è stata completata la lettura. L’operazione di lettura successiva partirà da questo punto.La posizione del puntatore può essere anche specificata dalla udiBytePosition nella DUT. Negli esempi sottostanti le frecce indicano posizioni valide del puntatore:
Dati INT a 16 bit (formato file BIN): |
Dati ASCII (file formato CSV): |
---|---|
Nei file CSV il puntatore si sposta sempre alla posizione vicina ad uno spazio, una virgola o una nuova riga. Gli spazi, le virgole e le nuove righe alla fine dei dati vengono ignorati.
Fare riferimento anche alle precauzioni per l’accesso alla SD card.
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.
Due virgolette doppie in successione ("") in una stringa di caratteri vengono lette come un carattere singolo ("). Un solo simbolo di virgolette doppie viene ignorato.
Nei file CSV i campi nulli (p.es. parti con virgole successive) vengono conteggiati come parti del numero di dati da leggere, ma i dati non vengono memorizzati.
FALSE: quando l’istruzione è stata completata senza errori
TRUE: quando l’istruzione è stata completata 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;
(*activates the instruction*)
sFile_Test_Csv: STRING[32]:='\Test.csv';
dutFpReadTest_csv: FP_SD_READ_DUT;
sStringRead: STRING[32]:='';
iStringLengthRead: INT:=0;
END_VAR
Quando la variabile bStart passa da FALSE a TRUE e la variabile di sistema sys_bIsSDMemoryAccessActive non è TRUE, la funzione viene svolta.
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;