Vai al contenuto
PLC Forum


Creazione Tabella Dati Archivio Ultimi Valori


lscarpetta85

Messaggi consigliati

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


sul fronte di salita di un bit di clock 15 min esegui:

%mw10:=%mw9

%mw9:=%mw8

%mw8:=%mw7

%mw7:=%mw6

%mw6:=%iw3.0

altrimenti 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

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 1

Salvi il secondo dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 2

Salvi il terzo dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 3

Salvi il quarto dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 4

Salvi il quinto dato cioè copi il valore letto dalla sonda in una parola : diciamo la numero 5

Per 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 avrai

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 6

se la parola 6 è =2 allora copia dato nella parola 2 e incrementa la parola 6

se la parola 6 è =3 allora copia dato nella parola 3 e incrementa la parola 6

se la parola 6 è =4 allora copia dato nella parola 4 e incrementa la parola 6

se la parola 6 è =5 allora copia dato nella parola 5 e incrementa la parola 6

se la parola 6 è >5 allora imposta la parola 6 = 1

Dopo 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 avrai

parola 7 è uguale a : (parola 1 + p.2 +p.3+p.4+p.5) / 5

Io 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.8

Alla 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 6

se la parola 6 è =2 allora copia dato nella parola 2 e incrementa la parola 6

se la parola 6 è =3 allora copia dato nella parola 3 e incrementa la parola 6

se la parola 6 è =4 allora copia dato nella parola 4 e incrementa la parola 6

se la parola 6 è =5 allora copia dato nella parola 5 e incrementa la parola 6

se la parola 6 è >5 allora imposta la parola 6 = 1

parola 7 è uguale a : (parola 1 + p.2 +p.3+p.4+p.5) / 5

Se parola 7 - parola 8 è maggiore di 5 allora attiva uscita 1 (apri valvola)

Copia p.7 in p.8

Guarda 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

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...