Scrivere i dati sulla SD memory card
Questa istruzione FP legge il numero dei dati specificati da n_NumberOfDataToWrite memorizzati all’indirizzo che inizia con s_Start, e scrive i dati sul file specificato da d1_FullFileName sulla scheda SD. La DUT FP_SD_WRITE_DUT su d2_dutWrite specifica i parametri di scrittura.
Ingresso
Indirizzo iniziale
Numero di dati da scrivere, specificato dal membro DUT udiNumberOfDataWritten
Per wFormat=1–8: Numero di dati a 16 bit/32 bit separati da virgola
Per wFormat=10: Numero di caratteri a 8 bit
Per wFormat=11: Numero di dati a 16 bit
Nome del file con estensione p.es. '\Test.csv'
Ingresso/uscita
Formato di scrittura, modalità scrittura, posizione puntatore, eccetera.
Se la modalità puntatore è stata selezionata in FP_SD_WRITE_DUT su s2_dutWrite (wMode=2 or wMode=3), la scrittura viene avviata alla posizione del puntatore. Dopo la scrittura, il puntatore si sposta alla posizione in cui è stata completata la scrittura. L’operazione di scrittura successiva partirà da questo punto. La posizione del puntatore può essere anche specificata dalla udiBytePosition nella DUT. Nell’esempio sottostante, le posizioni del puntatore file vengono indicate per diversi formati di dati.
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.
Quando l’attributo del file è in sola lettura, non è possibile scrivere dati.
Al momento di salvare i dati ASCII, le stringhe di caratteri scritte vengono racchiuse tra virgolette doppie.
Le virgolette doppie (") nelle stringhe di caratteri vengono convertite in due virgolette doppie ("").
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;
(*activates the instruction*)
sStringWrite1: STRING[32]:='Test String1';
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,,ø^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;