FP_SD_READ

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.

Parametri

Ingresso

s1_FullFileName (STRING)

Nome del file

n_NumberOfDataToRead (WORD, INT, UINT)

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

s2_dutRead (FP_SD_READ_DUT)

Formato di lettura, modalità lettura, posizione puntatore, eccetera.

Uscita

d_Start (ANY)

Indirizzo iniziale

Modalità puntatore

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.

Note

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

Flag di errore

sys_bIsSDMemoryAccessError (passa a TRUE e resta TRUE)
  • 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.

sys_bIsOperationErrorHold (passa a TRUE e resta TRUE)
  • se l'area specificata utilizzando il registro indice eccede il limite.

sys_bIsOperationErrorNonHold (passa a TRUE per una scansione)
  • se l'area specificata utilizzando il registro indice eccede il limite.

Esempio

Intestazione del POU

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

Corpo del POU

Quando la variabile bStart passa da FALSE a TRUE e la variabile di sistema sys_bIsSDMemoryAccessActive non è TRUE, la funzione viene svolta.

Corpo LD

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

Corpo ST

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;

L'ultima revisione: 2024-03-07Feedback su questa paginaPanasonic hotline