lscarpetta85 Inserito: 27 ottobre 2009 Segnala Share Inserito: 27 ottobre 2009 Salve,spero possiate aiutarmi a risolvere un problema su un impianto.dovrei memorizzare i dati provenienti da una sonda di livello (segnale 4-20mA) con campionamento ogni 15 minuti.considerare i dati dell'ultima ora (quindi ultimi 5 dati memorizzati) e studiare l'andamento del livello per attivare un ciclo.mi chiedevo come posso memorizzare solo gli ultimi 5 dati e confrontarli tra loro cancellando ogni 15 minuti l'ultimo dato memorizzato ed aggiungendo uno nuovo?grazie a tutti Link al commento Condividi su altri siti More sharing options...
prog_jlaw Inserita: 28 ottobre 2009 Segnala Share Inserita: 28 ottobre 2009 sul fronte di salita di un bit di clock 15 min esegui:%mw10:=%mw9%mw9:=%mw8%mw8:=%mw7%mw7:=%mw6%mw6:=%iw3.0altrimenti usa un fifo ... o uno shift register di un pacchetto di 5 word .... il principio e' sempre lo stesso bye Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 28 ottobre 2009 Segnala Share Inserita: 28 ottobre 2009 scusa eh, ma hai già dato tu la soluzione... salvi gli ultimi cinque valori, li confronti come ti serve, poi il succeessivo valore lo sostituisci al primo e così via. Tu vuoi scrivere il programma e non conosci le istruzioni? oppure hai scritto qualcosa e non funziona?Ad ogni modo analizza ciò che vuoi fare ed eseguilo esattamente nella sequenza che serve.Di base ti serve un "clock" cioè un segnale che dia il tempo, che dica quando fare la copia del dato. (questo segnale deve durare una sola scansione)Salvi il primo dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 1Salvi il secondo dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 2Salvi il terzo dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 3Salvi il quarto dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 4Salvi il quinto dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 5Per sapere in quale parola copiare il dato, ad ogni clock incrementa per esempio una parola diciamo la numero 6, ponendo come condizioni che se maggiore di 5 allora sia impostata a 1.A questo punto la parola n.6 sarà la condizione che indica in quale parola copiare il dato Ora avraise il clock è presente allora esegui le istruzioni sotto altrimenti salta tutto se la parola 6 è =1 allora copia dato nella parola 1 e incrementa la parola 6se la parola 6 è =2 allora copia dato nella parola 2 e incrementa la parola 6se la parola 6 è =3 allora copia dato nella parola 3 e incrementa la parola 6se la parola 6 è =4 allora copia dato nella parola 4 e incrementa la parola 6se la parola 6 è =5 allora copia dato nella parola 5 e incrementa la parola 6se la parola 6 è >5 allora imposta la parola 6 = 1Dopo aver salvato i valori fai il confronto (diciamo che vuoi fare la media) e salvi il risultato in una parola diciamo la numero 7 quindi avraiparola 7 è uguale a : (parola 1 + p.2 +p.3+p.4+p.5) / 5Io immagino che tu voglia fare il confronto tra questa media e quella del precedente clock (precedente quarto d'ora). Per fare ciò devi salvare la parola 7 (media attuale) in una parola 8 che diventerà la media di confronto per il successivo quarto d'ora. Naturalmente prima esegui il confronto e solo alla fine salvi la media attuale nella media successiva (che in realtà è uguale all'attuale e dopo rappresenterà la media precedente.. eheheh)Quindi avrai (per esempio eh, perchè non so cosa devi fare...)Se parola 7 - parola 8 è maggiore di 5 allora apri valvola (non lo so... esegui il confronto e le reazioni che credi)Copia p.7 in p.8Alla fine il tuo programmino sarà come segue:se il clock è presente allora esegui le istruzioni sotto altrimenti salta tutto se la parola 6 è =1 allora copia dato nella parola 1 e incrementa la parola 6se la parola 6 è =2 allora copia dato nella parola 2 e incrementa la parola 6se la parola 6 è =3 allora copia dato nella parola 3 e incrementa la parola 6se la parola 6 è =4 allora copia dato nella parola 4 e incrementa la parola 6se la parola 6 è =5 allora copia dato nella parola 5 e incrementa la parola 6se la parola 6 è >5 allora imposta la parola 6 = 1parola 7 è uguale a : (parola 1 + p.2 +p.3+p.4+p.5) / 5Se parola 7 - parola 8 è maggiore di 5 allora attiva uscita 1 (apri valvola)Copia p.7 in p.8Guarda che ti ho scritto apposta in questa maniera proprio perchè è molto vicino al linguaggio ST e quindi non puoi sbagliare, salvo che non abbia sbagliato io...Manca solo una condizione di sicurezza esterna alla routine e da eseguire sempre e cioè che la parola 6 se minore o uguale a 0 sia impostata uguale a 1. Questa condizione puoi inserirla dove vuoi nel programma basta che sia fuori dalla condizione del clock e cioè eseguita in ogni momento. (questo perchè non è sempre detto che le varie memorie all'accensione del PLC siano tutte a zero, difatti è un'opzione di configurazione della CPU)Secondo me se ragioni sempre in questa maniera, riuscirai facilmente a fare tutto quello che vuoi.Ah, ovviamente la routine va messa a punto nel senso che ovviamente la primissima ora di dati non funzionerà proprio come deve poichè la media è calcolata con una costante =5. La prima ora quel 5 potrebbe essere sostituito dall parola 6. Sta a te vedere come spiegare al PLC che è la prima ora....... Link al commento Condividi su altri siti More sharing options...
lscarpetta85 Inserita: 29 ottobre 2009 Autore Segnala Share Inserita: 29 ottobre 2009 grazie per la Vs. disponibilità 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