Come utilizzare la SDCard per il salvataggio di file di log

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Controllori SlimLine e Netsyst (LogicLab) Come utilizzare la SDCard per il salvataggio di file di log

Questo argomento contiene 17 risposte, ha 8 partecipanti, ed √® stato aggiornato da  Sergio Bertana 2 anni, 2 mesi fa.

Stai vedendo 15 articoli - dal 1 a 15 (di 18 totali)
  • Autore
    Articoli
  • #35074

    Anonimo

    Ho appena eseguito l’upgrade del firmware sul modulo CPU SlimLine con la nuova versione che supporta il file system. Stò cercando di realizzare un semplice programma che salva su di un file di log su SDCard dei dati, ma non riesco a farlo funzionare. Potete darmi qualche informazione ?

    #36879

    Sergio Bertana
    Amministratore del forum

    Il sistema operativo dello SlimLine dalla versione SFW167C100 (Per l’upgrade vedi FAQ), supporta il file system. Sono gestite due directories Storage (Da 100 Kb) situata sulla memoria EEPROM presente sul modulo CPU, SDCard (Max 512 Mb) presente sulla scheda SD Card che deve essere inserita nel modulo CPU.

    Per poter accedere alle directories occorre eseguire la formattazione, comando Format da Telnet. Per l’elenco completo dei comandi Telnet riferirsi al manuale di riferimento, le credenziali di accesso di default sia Telnet che Ftp per l’amministratore sono Username: Admin, Password Admin.

    In linea al comando Format occorre definire il numero di files accettati per ogni directory, fino ad un massimo di 12 files totali. Il primo parametro è riferito ai files in Storage, il secondo ai files in SDCard (Se non presente inserire 0). Esempio, per avere 2 files su storage e 4 su SDCard daremo il comando Format 2, 4, se il comando viene eseguito correttamente ritornerà il messaggio Format Ok, Storage:2 files, SDCard:4 files.

    Collegandosi allo SlimLine con un client Ftp (Esempio FileZilla), sarà possibile visualizzare il tree delle directories ed accedere in lettura e scrittura, creando, cancellando, editando i files all’interno di esse (Vedi screenshot).

    #36880

    Sergio Bertana
    Amministratore del forum

    Per quanto riguarda la tua esigenza di scrivere su SDCard un file di log, ho realizzato un semplice programma LogicLab (Download) che salva un file denominato CLog.txt, con all’interno 50 records di log del valore di tensione acquisita da un ingresso analogico.

    Il file contiene records salvati in formato CSV in modo da essere facilmente importabili in Excel, ogni record contiene 5 campi separati da “;” (Esempio: 01;12;12;03;01.8;). Il 1° campo è un progressivo di record da 0 a 49. Nel 2°, 3°, 4° campo è riportata l’ora, minuti, secondi di record. Nel 5° campo è riportato il valore di tensione acquisito in volt.

    La scrittura del record di log è eseguita da questo programma in ST (Listato), che “riempie” l’array LogRecord con stringa la ascii di log (5 campi separati da “;”). La funzione SysVarsnprintf scrive il valore seguito dal codice terminatore “0”, quindi occorre iniziare la scrittura del valore successivo alla posizione dell’array dove la scrittura precedente ha posto il codice terminatore.

    Terminato il record di log, con la funzione Sysfseek, viene eseguito il posizionamento sul file nella posizione di scrittura, e con la funzione Sysfwrite ne viene eseguita la scrittura.

    #37297

    Michele
    Partecipante

    Uo uno SlimLine e vorrei utilizzare la SDCARD come data logger, ho visto su questo Topic che si parla di SD Card max 512MB. Questo limite è dovuto all’utilizzo della SD Card come SPI Flash oppure posso utilizzare anche SD Card di taglio maggiore di 512 ?

    Grazie come sempre del prezioso supporto di questo forum e complimenti per la efficiente gestione dello stesso.

    #37298

    Sergio Bertana
    Amministratore del forum

    La gestione del file system sul modulo CPU SlimLine ARM7 è limitata, quindi è stato imposto un limite sulla dimensione massima della memoria SD Card gestibile. Si possono utilizzare SD Card di dimensione massima 2Gb ma comunque la dimensione massima dell’area di memoria gestita dal file system è 512Mb.

    #38407

    Oscar
    Partecipante

    Grazie per il suggerimento, ho provato a seguire questi passi ma ho riscontrato i seguenti problemi. Ho eseguito il comando Format 4, 0 come riportato in questo post ma ho ricevuto un messaggio di errore, allora ho eseguito il comando Format Storage, 4 come da Manuale comandi Telnet mediante Toolly. Leggo al comando Dir Storage:

    Directory of “Storage”
    Space for 4 file(s) of 67254 byte each

    Ho provato poi a connettermi con FileZilla, configurato secondo le parametrizzazioni che suggerite, la connessione è correttamente stabilita col server, ma in risposta ottengo il messaggio che il PLC non ha folder da mettere a disposizione. Con esplora risorse l’ftp rimane “appeso” senza risposte. Ho inviato il programma proposto, modificando

      IF (SysClock1000 = Pulse) THEN RETURN; END_IF;
        Pulse:=SysClock1000; (* Time base pulse *)
        Fp:=Sysfopen(‘Storage/CLog.txt’, ‘a’); (* Open the file in “append” mode. *)

    In

      Tempo:=SysTime;
      WHILE SysTime – Tempo < 60000 DO END_WHILE; (* per scrivere una riga sul log ogni minuto *)
      Fp:=Sysfopen(‘Storage/CLog.txt’, ‘a’); (* File pointer *)

    Il resto rimane invariato. La scritta ‘Storage/CLog.txt’, ‘a’ mi compare in rosso nell’editor ST. Eseguo il programma nel task Back, nel Task Slow ho altri Programs correttamente funzionanti.

    A questo punto il PLC si blocca, lo stato va in NOT RUN, ho provato ad inviare un programma precedentemente funzionante ma la connessione USB si è persa. Ho spento e rialimentato il PLC, il LED di RUN comincia a lampeggiare con una sequenza fissa. Dopo una serie di tentativi di riaccensione e invio programmi sono riuscito a farlo ripartire con un vecchio programma. Mi sono fermato qua.

    Può essere che lo spazio in cui depositare il file non sia correttamente disponibile ? Sapete dirmi in cosa posso aver sbagliato ?

    #38408

    Sergio Bertana
    Amministratore del forum

    Vediamo di rispondere con ordine ai tuoi problemi. Il comando Format da una certa versione del sistema operativo è stato modificato, ora occorre indicare quale directory si vuole formattare e a quanti files si vuole lasciare lo spazio. Quindi il tuo comando Format Storage, 4 formatta la directory Storage per contenere 4 files che si divideranno lo spazio disponibile (Come riporta il comando Dir).

    Non capisco perché il client FTP non si connetta, non mi dici che sistema operativo stai utilizzando, con Total Commander e con l’esplora risorse di Windows 7 che uso abitualmente non ho mai avuto problemi (Topic) eventualmente controlla se hai l’ultima versione del sistema operativo (Vedi nota).

    L’errore che hai commesso è gravissimo… non puoi mai fermare un programma PLC in un loop chiuso.

    WHILE (SysTime-Tempo) < 60000 DO END_WHILE;

    Questo fa intervenire il watch dog del sistema che reinizializza l’esecuzione che si richiude nuovamente nel loop infinito e viene nuovamente reinizializzata. Questo blocca tutte le risorse del sistema comprese le comunicazioni (Topic). Come se ne esce… il sistema dopo un certo numero di riavvii si arresta in stop e così è nuovamente possibile riprendere la connessione e caricare un nuovo programma.

    #38409

    Sergio Bertana
    Amministratore del forum

    Come risolvere nel modo corretto la temporizzazione, nel forum troverai infiniti esempi di utilizzo del tempo di sistema, ecco come si può fare.

      IF ((SysGetSysTime(TRUE)-Time) > 60000000) THEN
        Time:=SysGetSysTime(TRUE); (* Time buffer (uS) *)
        Fp:=Sysfopen(‘Storage/CLog.txt’, ‘a’); (* Open the file in “append” mode. *)

        … Altri statements di programma
     END_IF;

    Nota: La variabile Time deve essere di tipo UDINT.

    #38452

    Luis
    Partecipante

    Buon giorno, volevo fare un datalogger con un PLC SlimLine per registrare i valori di 4 ingresi analogici ogni 10 secondi in formato CSV con la data (anno,mese,giorno,ora,minuti,secondi) e fare un file per ogni giorno. Mi servirebbe un piccolo aiuto.

    #38453

    Sergio Bertana
    Amministratore del forum

    Se esegui il download  del programma che trovi in uno dei posts di questo topic hai già una buona base di partenza. Comunque partendo dal programma del post precedente ho preparato un programma che realizza quello che necessiti, ecco la stampa del programma WriteLog.

    Come vedi ho definito un array di stringhe per la definizione dei giorni setimanali, così è possibile scrivere un file CSV per ogni giorno (Il file avrà il nome del giorno). Al cambio di giorno viene cancellato il file dello stesso giorno (Si tratta del file della settimana prima) e viene creato un nuovo file del giorno con i nuovi dati. In questo modo hai una settimana di tempo per eseguire il download in FTP dei file di log memorizzati.

    Il record di log l’ho creato nel formato 2014-10-08 09:25:58;02.8;02.8;02.8;02.8, come vedi il campo data/ora è seguito dai 4 valori analogici. Nel mio esempio eseguo una sola acquisizione analogica per tutti e 4 i canali ma lascio a te il compito di effettuare le 4 acquisizioni e riportarle nel record.

    Credo che  con questo esempio insiene all’esempio precedente hai tutte le indicazioni per realizzare il tuo DataLogger. Ecco il programma sorgente.

    #38476

    Giuseppe
    Partecipante

    L’esempio riportato nel post precedente è molto calzante con la problematica che devo affrontare, l’unica obiezione è che vorrei memorizzare dati per un periodo maggiore di una settimana. In uno dei post precedenti leggo che SlimLine riesce a gestire massimo 512MB di memoria su SDCard con un massimo di 64 files.

    Dovendo memorizzare un file di log composto da 7 valori REAL (5 segnali 4-20mA e 2 valori letti da protocollo Modbus)  più il campo data in formato CSV, quanto spazio in termini di memoria occupa ogni record da storicizzare ?

    Ipotizzando di memorizzare un record ogni 10 secondi, sarebbe possibile fare dei file che con i valori di un’intera settimana (o addirittira di un mese) e non solo per singolo giorno come nell’esempio ?

    Un’altra possibilità visto che SlimLine è accessibile tramite client FTP, sarebbe possibile schedulare su di un PC un programma che và a leggere in automatico i files di log dallo SlimLine ed eseguirne il backup su di un server aumentando quindi a dismisura la possibilità di log ?

    #38477

    Sergio Bertana
    Amministratore del forum

    Ho ipotizzato un record di log con i dati che ti necessitano (Data/ora; 7 valori REAL), il record è del tipo:

    25/10/2014 00:00:00;120.5;75.8;1200.0;145.76;1560.6;456.8;985.75

    Come vedi sono 64 bytes che arrotondiamo per eccesso a 70. Considerando un log ogni 10 secondi avremo 360 Record/Ora (Pari a 25Kb Ora). Anche ipotizzando un log continuo 24 ore su 24 e 31 giorni mese avremo ogni mese 267840 records con una quantità di dati pari a 18Mb. Formattando la SDCard per contenere i 12 mesi avremo per ogni file disponibili 44Mb di dati come si vede dal comando:

    Format SDCard 12
    Are you sure ? (Y,n)
    Format Ok, Files:12, FSize:44738688, Time:54.290 (mS)

    In merito alla soluzione da te proposta di leggere da un PC tramite una connessione FTP i files dallo SlimLine, direi che è una ottima soluzione per garantire un efficace backup dei dati nello storage aziendale. Se opti per questa soluzione terrei i files sullo SlimLine più piccoli (Quindi farei una memorizzazione giornaliera) ed il server centrale può ogni giorno scaricare il file del giorno precedente avendo nello SlimLine un polmone di 7 giorni.

    #39475

    Alberto
    Partecipante

    Inserita la SDCard nel PLC l’ho formattata direttamente sul PLC con le procedure illustrate e l’ho utilizzata per scrivere dei file dati, tutto ok.

    Adesso però vorrei copiare i file su un PC ma inserita nell’appostito lettore risulta vuota, in pratica il PC non vede i file memorizzati. Cosa ho tralasciato? I file sicuramente sono presenti nella SDCard.

    #39476

    Sergio Bertana
    Amministratore del forum

    Hai fatto tutto correttamente, lo SlimLine per garantire la non corruttibilità dei dati allo spegnimento improvviso del sistema utilizza un file system proprietario che non è riconosciuto dal PC.

    Quindi per trasferire i dati dalla SDCard al PC e/o viceversa devi utilizzare un client FTP (Topic) puoi anche usare l’esplora risorse di Windows (Screenshot).

    #39633

    Antonio
    Partecipante

    Avendo aggiornato una vecchia CPU slimline modello A all’ultima versione del Firmware (167) disponibile ho perso completamente la cartella System che non riesco ad aggiungere in alcun modo (in FTP con filezilla con gestione risorse ecc.) mi da sempre accessso negato o operazione non permessa.

    Inoltre collegadomi con Toolly e provando a formattare (anche le sole due cartelle presenti Storage e SDCard) mi da wrong parametrer (chiaramente il comando non è errato).

    Vi è un modo per ripristinare tutto il FileSystem ?

Stai vedendo 15 articoli - dal 1 a 15 (di 18 totali)

Devi essere loggato per rispondere a questa discussione.