Vai al contenuto
PLC Forum


Misurare Tempo Tra 2 Impulsi E Dividere Il Valore


magagna

Messaggi consigliati

Ciao ragazzi.

Sono alle prime armi sia con PLC seri che con Tia portal V12.

Dato che derivo dal LOGO!, scrivo in KOP.

Ecco la mia situazione:

Ho un contatore energia che eroga 100 impulsi per KW/h

Ogni impulso dura circa 100mS...

Tramite gli impulsi che eroga per conteggiare i kW/h, vorrei riuscire ad estrarre la potenza istantanea in watt anche se il valore è solo indicativo.

Per fare ciò, dovrei misurare il tempo tra un impulso e il successivo, e una volta estratto il valore in secondi o come numero intero, con una operazione matematica, ottenere il valore del Watt istantaneo.

La formula fatta su carta è la seguente:

(3600:X)*10

Ho provato varie soluzioni senza ottenere risultati.

cercavo qualche dritta da qualcuno di voi per continuare a non rimanere bloccato...

Sono riuscito a scrivere in una variabile il tempo in secondi tra i 2 impulsi, ma non so se è possibile o come fare a convertire il tempo espresso in TIME come numero intero.

Grazie dell'attenzione.

Link al commento
Condividi su altri siti


Gianmario Pedrani

Io utilizzerei invece una una variabile che da i secondi che sono trascorsi, come numero intero puoi creare un contatore che si incrementa ogni 100 MS magari utilizzando ob35 poi al primo impulso salvi il valore di partenza al secondo impulso salvi il valore di arrivo fai la differenza e trovi i MS trascorsi. Questi li moltiplichi per 10 e trovi i secondi a quel punto usi la tua formula

Ciao

Link al commento
Condividi su altri siti

Personalmente farei cosi: ad ogni impulso leggo l'orologio di sistema con l'istruzione RD_SYS_T ed eseguo la differenza con il valore precedente.Per fare questo userei l'istruzione T_DIFF che effettua appunto una differenza tra due letture in formato DTL e ti restituisce un risultato di tipo TIME. A questo punto hai la durata tra un impulso e l'altro in formato TIME; la converti con l'istruzione T_CONV e a questo punto hai un dato di tipo DINT ( dovrebbero essere millisecondi..) . Fai la divisione (3600000 / x)* 10 e dovresti avere il tuo risultato...

Ciao

Matteo

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao ragazzi.

Oggi ho del tempo libero e fuori è nuvolo...quindi divano, coperta e notebook....ora provo a vedere se riesco a concretizzare qualcosa dalle vostre risposte, speriamo bene!

Grazie mille, anche se in ritardo!

Modificato: da magagna
Link al commento
Condividi su altri siti

Ciao Magagna,

potresti inserire un contatore che conta quanti secondi passano tra un fronte di salita del segnale ed un altro utilizzandlo il merker di clock ad un secondo (o utilizzando quello a mezzo secondo per avere una precisione maggiore).

Al fronte di discesa del segnale fai la tua operazione matematica e la sposti in una mw per la lettura.

Io lo utilizzo per calcolare la portata istantane dei contatori di acqua lancia impulsi....non e' il massimo ma risulta essere economico ed abbastanza preciso.

Ciao

Link al commento
Condividi su altri siti

Ciao ragazzi.

Grazie dell'aiuto!

Lo sviluppo delle vostre logiche devo dire che sono tutte 100% funzionali, ma ho incontrato il problema di salvare il secondo impulso ritardato di un passo rispetto al primo.

La soluzione che mi è venuta in mente è stata la più semplice: metto un contatore con set fisso a 2, e quando questo arriva al set point, attiva un contatto no sulla seconda lettura ed inizio a leggere il secondo impulso. Su carta tutto va, ma nel Plc sia che legga l'ora del sistema oppure il conteggio dato dai clock, una volta che Il contatore del salto del primo passo si attiva, la seconda lettura si blocca, difatti nella modalità di controllo in online, nel secondo contatore/blocco lettura ora sistema, spariscono i valori di lettura.

La mia soluzione comunque non è affidabile, visto che per saltare un ciclo devo fare ripartire il Plc dallo stato di stop in

Più tardi vi invio uno screen shot così co date un occhio.

Grazie mille!

Link al commento
Condividi su altri siti

Ciao

sei incappato nel problema prima che io potessi avvisarti che avresti potuto incapparvi :smile:

Ti allego uno screenshot di quello che a suo tempo avevo fatto per calcolare la produzione istantanea di una macchina; noterai che nei due rami è presente lo stesso contatto(%M4.1) negato e non. Questo merker deriva da un 'flip flop' che ho creato nelle righe precedenti e cioè ad ogni fronte del finecorsa premuto ad ogni ciclo la variabile M4.1 cambiava di stato. In questo modo a seconda dello stato di quella variabile veniva eseguito un ramo o l'altro evitando di incappare nel problema che anch'io a suo tempo avevo riscontrato.

">http://f989b3318eec286ad23f2e386f283e20.jpg

Chiedo scusa agli esperti se è presente qualche castroneria,ma al tempo ero ancora più ignorante di adesso :P

Modificato: da step-80
Link al commento
Condividi su altri siti

Sei hai la possibilita' mettilo lo screen shot!

Se ho capito bene hai lo stesso problema che avevo anche io...che ho risolto mettendo il secondo contatore in un segmento prima del primo contatore (scusa il gioco di parole), in modo tale che il PLC facesse un ciclo completo prima di aggiornare il contatto NO sulla seconda lettura.

Link al commento
Condividi su altri siti

Ecco lo screenshot.

Come è strutturato, rimane il problema che bisogna riavviare il PLC per far partire il gioco della differenza...

Ma anche riavviandolo, il tempo di entrambi i blocchi RD_SYS TIME sono uguali, dunque su TDIFF ho sempre 0.

Le variabili le gestisco in maniera temporale, dato che non ho necessita di rendere disponibile i valori intermedi...

per l'utente STEP-80:

Innanzitutto grazie: ma ti chiedo un favore... puoi rimettere lo screenshot dello schema a una qualità leggermente migliore?Mi interessava capire come sono strutturate le variabili DTL che hai usato tu, le quali non riesco a leggere...

Secondo me se leggo le variabili correttamente, riesco a capire dove è l'inghippo nel mio blocco...

Comunque anche se non riesco a capire le variabili intento ora provo a ripetere il tuo blocco per prepararlo,

Il tuo blocco comunque è ideale alla mia funzione, dato che sia contatore acqua che energia lavorano allo stesso modo.

A me non mi interessa la precisione,ho solo bisogno di un valore indicativo per discriminare certe utenze...

A bassi consumi, la lettura è lenta e affidabile, ma a consumo di circa 4 Kw Watt, abbiamo un impulso ogni 5 secondi circa....

Tutto questo sistema serve per risparmiare un prezioso TA con uscita 4-20mA, dato che un contatore energia costa veramente poco...

Grazie a tutti per il supporto!

post-125752-0-84874900-1425058505_thumb.

Modificato: da magagna
Link al commento
Condividi su altri siti

Inserita: (modificato)

Niente da fare ragazzi, non riesco ad ottenere un valore stabile tra un impulso ed un altro.

Ora provo a fare in un altra maniera.... al posto di misurare il tempo tra il fronte in salita di un impulso e il suo successivo, provo ad utilizzare un contatore e lo resetto a un tempo conosciuto, che a cinti fatti per un cosumo di 125 watt è sufficiente una finestra di 300 secondi, dato che a 125 watt/h circa dovrebbe essere 1 impulso ogni 288 secondi....

Quindi, avendo una finestra di 300 secondi, allo scadere del tempo resetto il contatore e mi estraggo quanti impulsi ho ogni 300s..

Poi, con qualche formula dovrei estrarre i watt....

Mi sono accorto che il segnale che mi entra è molto veloce, circa 100-120 mS. penso che sia troppo veloce...

Le vostre logiche sono perfette su carta, ma non riesco a capire dove è l'errore mio (o di logica o di hardware) per il funzionamento...

Vi tengo aggiornati.

Modificato: da magagna
Link al commento
Condividi su altri siti

Livio Orsini

L'impulso lo fai leggere da un ingresso veloce che genera un interrupt di processo. Ad ogni interrupt leggi il valore dell'orologio di sistema del PLC.

Detrai gli impulsi da una variabile che hai inizializzato a 100; azzerata la variabile sottrai il tempo intercorso tra l'utima lettura e la prima, ricarichi la variabile con 100..

Avrai così la misura del tempo necessario a consumare 1 kW ed hai il consumo istantaneo di potenza.

Puoi sommare i Kw ed avere il consumo totale registando anche il tempo trascorso.

Misurando, per sottrazione il tempo tra un impulso e l'altro avrai anche il tempo necesario per consumare 10 W che puoi usare sia come indicatore istantaneo che come analisi della derivata dei consumi. (intervallo di tempo più corto consumi che si incrementano).

Feci qaulche cosa di simile, per mio diletto, con un PIC ed un lettore ottico attivato dal lampeggio del LED del GEM ENEL

Link al commento
Condividi su altri siti

Devi fare le operazioni sul fronte di salita dell'impulso, non con lo stato alto.

Se l'impulso è lungo 100-120 ms, in quel tempo la CPU ha fatto le operazioni almeno 20 volte.

Devi usare, come detto, il fronte di salita del segnale, e tirare via quell'inutile contatore.

Le operazioni da fare quando rilevi il fronte di salita, nell'ordine, sono:

RD_SYS_T che scrive l'ora di sistema nella variabile "OraAttuale"

T_DIFF che calcola la differenza tra "OraAttuale" e "OraPrecedente"

MOVE per copiare "OraAttuale" in "OraPrecedente".

In altre parole: quando arriva l'impulso leggi l'ora attuale, fai la differenza con l'ora del precedente controllo, salvi l'ora attuale per il prossimo controllo.

Modificato: da batta
Link al commento
Condividi su altri siti

  • 2 years later...

salve ragazzi mi sto imbattendo n un problema simile, avrei bisogno di conteggiare con la maggior precisione possibile il tempo che intercorre fra due impulsi sullo stesso ingresso digitale , la frequenza massima da leggere sarebbe 16hz, mi serve per poter determinare gli rpm di una turbina idroelettrica, siccome il convertitore gefran che c'è i impianto è cotto pensavo di poter collegare in ingresso al plc s7200 che direttamente il sensore induttivo. Inutile dire che a differenza di un conteggio energetico avrei bisogno di una buna precisione ,altrimenti rischierei nella chiusura dell'interruttore di parallelo. grazie in anticipo

 

cerco di  uppare la mia idea per sottoporvela

Link al commento
Condividi su altri siti

Nicola Carlotto

Quello che dice Livio e' la via piu giusta per ottenere un confronto stabile non relativo al tempo di scansione del PLC .

Facciamo cosi' anche noi.

Ciao

Link al commento
Condividi su altri siti

Ti consiglio di usare il metodo di Batta per calcolare il tempo andando a leggere l'ora di sistema, e per aumentare la precisione puoi usare un interrupt come consigliato da Livio.

Ciao

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