Vai al contenuto
PLC Forum


Calcolo Media


tornado

Messaggi consigliati

devo calcolare la media oraria di un segnale analogico 4-20 mA scalato 0-100 Pa, con un micrologix 1200.

qualcuno può darmi qualche dritta.

grazie

Link al commento
Condividi su altri siti


L'azzardo un pò...

Calcolando l'integrale del tuo segnale e poi dividendolo per il tempo in cui l'hai integrato dovresti avere il valore da te desiderato in modo molto preciso...

Forse l'istruzione PI fa a caso tuo ma devi guardare bene l'. per il suo utilizzo....

Modificato: da antstan
Link al commento
Condividi su altri siti

Dipende da quanti campioni devi, o vuoi, fare. Se per, ipotesi, fai un campione al minuto dovrai sommare 60 valori ed il totale varrà, come massimo, 6.000 (tutti al 100%). Se, invece, campioni ogni 30" avrai 120 campioni ed un amssimo di 12.000. Se vuoi avere anche un decimale il limite sale a, rispettivamente, 60.00 120.000.

Ipotizziamo che tu scelga di fare 60 campionamenti per ora e di tenere un decimale.

Poi dipende se la tua media oraria deve essere scorrevole o fissa.

Il caso più complicato è se vuoi una media scorrevole. Devi farti un array con 60 (120) posizioni in cui andrai ad inserire le tue misure. Fino a che l'array non è pieno sommi tutti i valori e dividi per il numero delle misure effettute. Raggiunta la saturazione della pila dividi per 60 (120). Ogni nuova misura andrà a sostituire la più vecchia del buffer, in questo modo hai creato un buffer circolare. Se hai l'avvertenz di memorizzare l'ultima somma, ad ogni nuova misura simmerai il nuovo valore e sottrarrai il valore più vecchio. Quindi ad ogni muìisura te la cavi con un'addizzione, una sottrazzione ed una divissione.

Link al commento
Condividi su altri siti

Ciao livio,

sicuramente non ho molta esperienza, ma se c'è la possibilità di calcolarne l'integrale rispetto al tempo non è un modo + immediato???

in tal caso posso sapere in qualsiasi momento la media della mia variabile anche se essa varia in modo molto veloce, inoltre posso saperne il valore in qualsiasi momento con una semplice divisione.

Che ne pensi???

Link al commento
Condividi su altri siti

ciao Livio, mi pare una buona soluzione, perchè in questo modo è come gestirne l'integrale, credo infatti che un array sia una colonna nella quale scrivo il contenuto delle celle in funzione di un clock, correggetemi se sbaglio, ma non ho molta esperienza con i plc, tanto meno con a-b, come lo costruisco un array?.

ciao

Link al commento
Condividi su altri siti

Primo.

Per realizzare un integrale si esegue una sommatoria dei differenziali. L'integrale di PID lavora esattamente in queto modo; come nel medesimo modo lavora un integrale analogico.

Se si limita il numero dei valori sommati si esegue il classico integrale limitato, limitato nel tempo non nel valore.

L'integrale però non è il valore medio, ma è il totale; per ottenere la media aritmentica è necessario dividere per il numero dei valori sommati.

E' qualche anno che non programmo AB e non ricordo il dettaglio delle istruzioni. Non so se esistono, come per S7, l'istruzioni specifiche per gli array. Qui potrebbe risposndere uno specialista di AB.

Comunque, nel caso non esistano istruzioni specifiche, è abbastanza semplice farlo.

Riserva 60 (120) bytes o word (dipende se fai 100% o 100.0%). Poi ti crei una varabile, un byte è sufficiente, che è l'indice del buffer. Inizialmente è zero. Il primo valore che leggi lo memorizzi nella cella 0, incrementi l'indice a 1, poni nella memoria di somma il valore letto. Il secondo valore verrà memorizzato nella cella 1, incrementi l'indice, sommi il nuovo valore al valore della memoria di somma, lo memorizzi nella medesima memoria, dividi questo valore per l'indice ed avrai la media. Continui così fino a che l'indice è minore di 60 (120).

Quando l'indice ha raggiunto 60(120) lo azzeri, alzi un flag che indicherà che il buffer è pieno. Con questo flag alto ad ogni nuovo valore dovrai agire in questo modo. Sottrai alla somma il valore contenuto nella cella indirizzata dall'indice, sommi il nuovo valore, memorizzi il nuovo valore al posto del vecchio, dividi la somma per 60(120) ed avrai la media.

Ogni volta che l'indice raggiunge 60(120) lo riazzeri . Così vai avanti all'infinito

Link al commento
Condividi su altri siti

Ciao "tornado". Dunque, per la tua richiesta ... si è possibile ma dammi qualche valore in più in termini di tempo di variazione dell'ingresso analogico, precisione richieste cliente ecc...

Come dicevi nel primo post, se la grandezza varia da 0 a 100, rappresentato su intero (che il plc digerisce meglio ripetto ai float) con due cifre dopo la virgola andra dal minimo pari a zero ad un massimo pari a 10000 (100,00 scalato).

Ora, considerando che una table di interi arriva a 256 elementi, potresti campionare ogni 15 secondi (ma qui devi dirlo tu se va bene come refresh) e se moltiplichi 15sec per 240 elementi (del tuo vettore) ottieni 3600secondi che sono proprio la tua ora di campionamento. Per crearti il vettore .... <_<

dunque, prima ti fai un timer con in serie un suo contatto normalmente chiuso (insomma si autoresetta); ogni volta che hai il suo bit di done incrementi il tuo puntatore (un intero) che va da 0 a 239. A questo punto con una funzione di "move" muovi il valore dell'analogica scalata nella table da te usata.

Mi spiego:

table array N7

puntatore area N20:0

dovrai eseguire il MOV di "ingresso analogico scalato" in N7:[N20:0] dove N20:0 lo farai incrementare di 1 ogni 15 secondi. A questo punto devi fare la media ... ricorda che su interi non puoi superare il valore di 32767 (intero positivo); quindi non potrai sommare tutti i 240 elementi e poi dividere per 240 ma dovrai fare medie parziali (somme e divisioni parziali). Insomma ... della matematica :blink::D .

Fammi sapere

ops ... non avevo visto l'ultima risposta di Livio. Segui il suo post e non puoi sbagliare

Ciao

Modificato: da jumpier
Link al commento
Condividi su altri siti

Hallo jumpier, questo quesito mi interessa...

Sicuramente l'idea dell'array è giustissima, ma io sono un testardo!!! :)

In rs logix ci sono l'istruzione PI e PID, non ho capito bene come lavorano ma quello che è certo e che fanno calcoli integrali, poi dividendo tutto per il tempo....

Se è possibile farlo in questo modo potresti esplicitare una tua soluzione???

Modificato: da antstan
Link al commento
Condividi su altri siti

In rs logix ci sono l'istruzione PI e PID.....

Usare la funzione PI per calcolarsi una media oraria è andarsi a complicare la vita inutilmente.

Si devono risolvere numerosi problemi preliminari.

C'è sicuramente un problema di diversa scalatura. Tornado lavora con fs 100%. L'integrale di un algoritmo PI è l'integrale dell'errore, quindi bisognerebbe adattare il tutto in modo che ad una lettura pari a 100 corrisponda un errore pari a 100.

Poi c'è il problema del tempo d'integrale. Bisogna conoscere esattamente l'algoritmo usato. Se viene usato un algoritmo simile a quello che uso io è abbastanza facile da riscalare; se viene usato un algoritmo sul tipo di quello usato da Siemens... meglio lasciar perdere.

Ancora c'è da conoscere esattamente il tempo di campionamento.

Poi con un integrale di un regolatore PI è molto difficile ottenre una media del tipo a "finestra scorrevole" (slide window), che è il tipo di media che presumo dovrà usare Tornado.

Alla fine, se consideri bene il tutto, diventa molto più macchinoso e, sopra a tutto, con risultati non certi l'uso dell'ontegrale di un regolatore PI per ricavare una funzione di media.

Poi il mondo è bello perchè vario, quindi se vuoi provare a sperimentare....facci sapere i risultati.

Link al commento
Condividi su altri siti

Per "antstan": dunque, sul Micrologix 1200 non mi pare esista la funzione PI.

Non e' che ti confondi con il buon vecchio ControlLOGIX??? <_<:o

La funzione PID invece esiste, ma se provi a consultare l'. in linea ti rendi facilmente conto che quanto chiedi non è fattibile. E poi, il "PID file" relativo all'istruzione PID per ML1200 è differente dai plc SLC500. A senso non si può fare quello che tu stai pensando. Per ultimo, insorgono comunque i problemi citati da Livio. Io direi che a questo punto "tornado" (se lo ritiene opportuno) dovrebbe dirci se ha risolto, se ha ancora dubbi e quale soluzione ha adottato ritenendola più azzeccata alla sua applicazione! A volte si rischia di sparare ad un passerotto con un cannone :blink::P

Ciao a tutti B)

Link al commento
Condividi su altri siti

....anzi se il tutto mi riuscirà lo metterò a disposizione del forum

Tornado ci contiamo! Oramai ti sei impegnato... :P

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