Gestione registro FIFO per log dati
Home › Forum › Programmazione IEC 61131 (LogicLab) › Gestione registro FIFO per log dati
- Questo topic ha 6 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 3 anni, 3 mesi fa da
Rubox.
-
AutorePost
-
Maggio 18, 2015 alle 2:39 pm #35785
Marcelo
PartecipanteMi collego al mio precedente topic aggiungendo una ulteriore necessità, come già espresso dovrei gestire l’acquisizione di dati da linea di produzione, per l’acquisizione utilizzo un modulo CPU master connesso in rete RS485 Modbus con diversi moduli CPU compact. La CPU master a sua volta è interrogata da un PC di supervisione che acquisisce records con tutti i dati della linea ad intervalli regolari per storicizzarli in un database centrale.
Ora il mio problema è gestire un registro FIFO sulla CPU master in modo da memorizzare al suo interno i dati di produzione per passarli poi su richiesta al PC di supervisione. In questo modo potrei garantire il log dei dati anche in assenza della connessione con il PC di supervisione. Al ripristino della connessione, il PC di supervisione potrà interrogare il registro FIFO leggendo tutti i records memorizzati al suo interno.
Per mantenere un elevato numero di records pensavo di utilizzare come registro FIFO un file su SDCard. Chiedevo se avete già affrontato qualcosa di simile e se esiste un qualche esempio da cui trarre ispirazione.
Maggio 19, 2015 alle 6:30 am #38908Sergio Bertana
Amministratore del forumHo aggiunto un FB apposito nella nuova versione della libreria eLogLib_B100, come si vede dalla documentazione (Estratto manuale) il FB FIFOFile, gestisce un registro FIFO su file.
Nel programma di esempio (Vedi stampa) è gestito l’inserimento e lettura dal registro FIFO appoggiato sul file Storage/FIFO.bin di un record dati di tipo RECORDDATASTRUCT. Il record dati si compone di una stringa in cui viene riportata la data e l’ora nel formato “14/05/15 12.24.04” e due campi REAL il cui valore viene simulato nel programma.
Ad ogni attivazione dell’ingresso Di00 sul modulo CPU si ha l’inserimento di un record nel registro FIFO ed il valore di NrOfRecs viene incrementato. Ad ogni attivazione dell’ingresso Di01 sul modulo CPU si ha la lettura di un record dal registro FIFO ed il valore di NrOfRecs viene decrementato.
Ho limitato la dimensione del file FIFO a 50 Kb (Con records da 32 bytes potrà contenere oltre 1500 records). Naturalmente è possibile aumentare la dimensione del file a piacere (Download programma sorgente).
Febbraio 4, 2021 alle 4:59 pm #58948Rubox
PartecipanteRiesumo un vecchio post sull’utilizzo del FIFOFile_v1. Ho aggiornato da XTarget12 a XUnified, creo un progetto nuovo per XUnified, inserisco un blocco FIFOFile_v1 da libreria eLLabLogLib_B400 (l’ultima disponibile) e mi da in compilazione il seguente errore, solo con la dichiarazione della variabile:
FIFOFile_v1(195) - errore S1305: Sysfopen => Funzione sconosciuta
Dove sbaglio?
Febbraio 4, 2021 alle 5:02 pm #58955Sergio Bertana
Amministratore del forumNon sbagli, ci sismo dimenticati di pubblicare sul sito per il download l’ultima versione della libreria eLLabLogLib. Ho provveduto a farlo quindi basterà scaricare la nuova versione di libreria ed importare il FB.
Gennaio 18, 2022 alle 7:58 am #63377Rubox
PartecipanteUso un registro FIFO per salvare una stringa di dati da inviare tramite HTTP al server. Quando la trasmissione è andata a buon fine cancello il record dal FIFO.
Ho definito la dimensione del file su cui appoggiare il FIFO: se ho ben capito quando il file ha raggiunto la dimensione massima, il FIFO tramite gli indici in FIFOIDx ricomincia a scrivere da zero?
Cosa succede quando il file è pieno? I dati vecchi vengono sovrascritti? Oppure il FB smette di inserire i valori nel FIFO?
Perché mi son ritrovato con il file alla dimensione massima, ma senza più dati presenti dentro, e il sistema non s’è riavviato.
Non capisco dove sbaglio come logica di funzionamento.
Gennaio 18, 2022 alle 8:23 am #63389Sergio Bertana
Amministratore del forumSe non vi è più spazio nel file o nella memoria allocata per il registro FIFO il record non viene più inserito.
Su comando In il record viene inserito solo se lo spazio è sufficente FIFOSpace maggiore/uguale a dimensione record.
Sono i due indici a tenere traccia delle posizioni di scrittura e lettura dati non conta la dimensione del file, siccome il file non viene mai cancellato dopo un po che il FIFO lavora ti troverai un file esattamente grande come la dimensione definita in FIFOSize.
I dati nel file continuano ad essere scritti in modo circolare (Raggiunta la fine si riparte dall’inizio). In questo modo si continua ad usare nuovi settori sul disco evitandone lo stress.
Ti ricordo l’utility FIFOViewer che ti permette di visualizzare i dati inseriti nel registro FIFO.
Venendo alla tua domanda non capisco quando dici che il file aveva dimensione massima ma senza dati dentro. Vuoi dire che non era attivo DataOn e che FIFOSpace è uguale a FIFOSize.
Gennaio 19, 2022 alle 5:44 pm #63392Rubox
PartecipanteMi sono ritrovato con DataOn con valore false, FIFOSize a 100.000 come è definito nel programma e FIFOSpace a 252. I record che inserisco nel FIFO sono lunghi 300, quindi non trovando più spazio non sono stati scritti (gli indici FIFOIdx erano differenti). Stavo per scaricare il file del FIFO e controllare altri valori quando chi era in remoto ha tolgo e rimesso alimentazione, impedendomi di vedere i vari valori di debug.
Ho aumentato la dimensione del file FIFO e adesso mi “punto la sveglia”: quando la dimensione del file sarà quasi quella massima mi collego al PLC e controllo i valori di indici e tutto il resto.
Per i valori mancanti li ho caricati con un piccolo script nel DB del server dai file di log presenti sulla SD del PLC.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.