Ray85 Inserito: 13 gennaio 2016 Segnala Share Inserito: 13 gennaio 2016 Innanzitutto buongiorno,sto cercando di elaborare un programma che possa leggere ciclicamente un valore di temperatura da una temocoppia pt100 installata in una stanza e riuscire a visualizzare su pannello touch la media delle letture fatte nell'arco delle 12/24 ore. Potreste aiutarmi?grazie infinite, Marco Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 Quante letture devi fare all'ora?Una ogni 1' è sufficientemente rapida?In questo caso sono 720 letture ogni 12 oreSe si ti basta leggere e sommare il valore letto alla somma dei velori precedentemente letti e decrementare il numero di letture, poi la somma la dividi per 720 quando il contatore è arrivato a 0, ed avrai il valore medio con media aritmentica sulle 12 ore. Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 Crei un array con le temperature di cui vuoi fare la media, ad ogni ciclo di acquisizione con l'FC90 che trovi nella biblioteca, shifti l'arrey di un elemento e carichi nel primo elemento l'ultima temperatura.a questo punto non ti resta che fare la media degli elementi dell'array. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 E' un UCAS rispetto alla somma ad ogni lettura.Acquisisci sommi e decrementi il contatore Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 Cosi hai una media ogni 12 ore, come dico io, hai sempre la media delle ultime 12 ore. Link al commento Condividi su altri siti More sharing options...
Ray85 Inserita: 13 gennaio 2016 Autore Segnala Share Inserita: 13 gennaio 2016 Grazie infinite, proverò come dite! ✌️ Link al commento Condividi su altri siti More sharing options...
epoch_ita Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 Tieni presente che se non hai tutti i dati delle ultime 12 ore (in questo caso 720), potresti incominciare a presentare una media basandoti sui dati che realmente conosci.Facendo la media su 2,3...10....500...719 ed in fine 720 dati buoni. Sempre se l'operatore si aspetta subito di avere un dato medio. Link al commento Condividi su altri siti More sharing options...
Giuseppe Signorella Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 (modificato) Con l'uso degli array, come suggerito da acquaman, lavorando con l'indice, dopo le 12/24 ore, puoi scartare la prima lettura fatta (La più vecchia) e sovrascriverla. in questo modo avrai dopo le prime 12/24 ore sempre un dato aggiornato con la media delle ultime 12 o 24 ore in qualunque momento. Ciao Modificato: 13 gennaio 2016 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 Cosi hai una media ogni 12 ore, come dico io, hai sempre la media delle ultime 12 ore.Dipende cosa devi fare.Se devi fare una media ogni 12 ore è un conto, differente se devi fare una finestra scorrevole su 12 ore. Son 2 concetti differenti.Ray85 ha scritto esplicitamente: "... la media delle letture fatte nell'arco delle 12/24 ore."Se invece vuoi fare una "sliding window" di larghezza pari a 12 ore, conviene creare un FIFO e sommare ad ogni elemento aggiunto; quando il FIFO è pieno, ad ogni nuovo elemento sottrai dal totale l'elemento che scartato e sommi il nuovo entrato, poi dividi per il numero degli elementi.Questa è la via più semplice di ottenere una media scorrevole. Link al commento Condividi su altri siti More sharing options...
epoch_ita Inserita: 13 gennaio 2016 Segnala Share Inserita: 13 gennaio 2016 https://it.wikipedia.org/wiki/Media_mobile Link al commento Condividi su altri siti More sharing options...
Ray85 Inserita: 16 gennaio 2016 Autore Segnala Share Inserita: 16 gennaio 2016 Buona sera,ho atteso così tanto a scrivere il responso perché credo sia doveroso prima di chiedere aver provato, il più possibile, a risolvere i problemi con le mie forze (anche perché sennò cosa avrei potuto chiedere?).Ho creato una struct di 5 elementi : tutti di tipo INT aventi come indirizzo 0.0....2.0....4.0....6.0....8.0....10.0....finendo con end_stract 12.0Ho costruito in un FC la funzione di shift utilizzando il blocco FC90 , dopo avere impostato il puntatore che indicava l'inizio della tabella e aver messo come LENGHT 5 ho visto, con enorme gioia, che il valore della periferica PEW512 veniva copiato nelle 5 MW che avevo "impostato".Tutto "fiero" mi son detto allora se creo un fc90 che copia in una sola MW e ripeto per tutte le volte che avrò bisogno del dato (10 volte) alla fine avrò 10 MW col valore letto in quell'istante, non resterà che dividere la somma per dieci ed ecco pronta la mia media...MAGARI.Ho scoperto ahimè che non posso assegnare una singola MW dove copiare il "valore"..minimo deve essere W#16#2...POTRESTE SPIEGARMI DOVE SBAGLIO E AIUTARMI A RISOLVERE IL PROBLEMA?GRAZIE DI CUORE E BUON FINE SETTIMANA.Ray85 Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 16 gennaio 2016 Segnala Share Inserita: 16 gennaio 2016 No non ci siamo capiti, es se vuoi campionare la temperatura una volata al minuto per 12 ore, crei un array di 720 elementi, ed fai eseguire l'FC90 una sola volta al minuto, in questo modo dopo 12 ore avrai nell'array 720 misure di temperatura dell'ultime 12 ore.A questo punto devi sommare tutte e 720 misure e dividerle per 720 cosi trovi la media della temperatura delle ultime 12 ore.Quando fai la somma ricordati usare il doppio intero, se usi l'intero probabilmente vai fuori scala.Per evitare la noia di fare una somma di 720 variabili, puoi creare una variabile DINT, ad ogni minuto, prima di eseguire l'FC90 sommi alla tua variabile la temperatura letta e sottrai quella l'ultimo elemento dell'array, cosi ottieni (dopo 12 ore e resta aggiornata) nella tua variabile DINT la somma di tutte e 720 temperature, e ti basta dividerla per 720 per ottenere la media. Link al commento Condividi su altri siti More sharing options...
Ray85 Inserita: 17 gennaio 2016 Autore Segnala Share Inserita: 17 gennaio 2016 Alberto, Ciao.Perdonami ho provato ma non riesco proprio a far funzionare il sistema. Ho creato 10 istanze per semplificare da fa cicale una volta ogni ora per avere una media su 10 ore.Purtroppo devo aver sbagliato programmazione tanto che la cpu in PLCSIM va in SF. Puoi farmi un esempio veloce (da due o tre variabili) così che io possa vedere con mano e capire una volta per tutte?Saresti gentilissimo.Buona notte, Marco (Ray85) Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 17 gennaio 2016 Segnala Share Inserita: 17 gennaio 2016 Avevo scritto:"Se si ti basta leggere e sommare il valore letto alla somma dei valori precedentemente letti e decrementare il numero di letture, poi la somma la dividi per 720 quando il contatore è arrivato a 0, ed avrai il valore medio con media aritmentica sulle 12 ore."E' estremamente banale, si tratta di eseguira A = A +B dove B è il valore letto, avendo cura di definire a A come intero doppio; poi fare C = C-1 e se C = 0 eseguire A / 720. Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 17 gennaio 2016 Segnala Share Inserita: 17 gennaio 2016 Questo è un esempio per una media di 10 misure campionate ogni minuto. U T 10 SPBN M1 L "Media".Sommatoria L PEW 512 +D L "Media".Misure[10] -D T "Media".Sommatoria L L#10 /D T "Media".Media CALL "WSR" RESET :=M0.0 S_DATA:=PEW512 START :="Media".Misure LEN :=W#16#A E_TYPE:=B#16#5 Q :=M0.1M1: UN T 10 L S5T#1M SE T 10 Link al commento Condividi su altri siti More sharing options...
Ray85 Inserita: 18 gennaio 2016 Autore Segnala Share Inserita: 18 gennaio 2016 Grazie Acquaman!! La metto su e mi studio tutte le cose così potrò adattarlo al mio sistema!! Grazie ancora, a tutti ovviamente! Saluti! Link al commento Condividi su altri siti More sharing options...
Ray85 Inserita: 20 gennaio 2016 Autore Segnala Share Inserita: 20 gennaio 2016 Ciao acquaman, ho provato, studiato e devo dire che ho capito il senso e sono riuscito a metterlo in pratica sul mio sistema.Solo alcuni chiarimenti : con il "termine" W#16#A si definisce una word di che tipo?Come mai, nella variabile LEN del blocco fc90 non posso mettere w#16#1? Infine, mi aspettavo di veder "scorrere" le letture lungo le mie variabili nell'array, invece il valore della PEW 512 viene copiato in tutti gli indirizzi. potresti spiegarmi il motivo? Grazie, Marco. Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 20 gennaio 2016 Segnala Share Inserita: 20 gennaio 2016 W#16#A è una costante in esadecimale, A si intende 10 nella LEN devi mettere il numero di elementi che vuoi shiftare in esadecimale, se sono 720 minuti devi mettere 2D0.Ogni minuti l'array deve shiftare di una posizione e il valore della PEW512 viene caricato solo nel primo elemento dell'array. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 23 gennaio 2016 Segnala Share Inserita: 23 gennaio 2016 Quote Infine, mi aspettavo di veder "scorrere" le letture lungo le mie variabili nell'array, invece il valore della PEW 512 viene copiato in tutti gli indirizzi. potresti spiegarmi il motivo? E' probabile che il tuo CALL "WSR" venga elaborato ciclicamente, devi eleborarlo solo per un ciclo ogni minuto, forse non hai seguito alla lettera l'esempio di Acquaman. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora