Vai al contenuto
PLC Forum


Contatore Di Impulsi Al Secondo Con Rslogix 500


lince1972

Messaggi consigliati

Salve a tutti.

:unsure: Sto usando un micrologix 1100 con modulo di espansione IQ16 DC, devo creare un programma per gestire la chiusura di una tenda da sole (6m x 3m) in caso di vento forte.

Ho collegato l'anemometro ad un ingresso digitale, l'unica cosa che sò è che 4 impulsi al secondo equivalgono a 10 Kmh.

Pensavo che se riuscivo a detterminare la veloccità del vento, poi inserendo un comparatore potevo attivare l'uscita per la chiusura della tenda a 15-20 Kmh.

Ho già provato inserendo un contatore che veniva resettato ogni secondo, e due comparatori uno di alta velocità e uno di bassa velocità ma ottengo sempre una lettura instabile. :senzasperanza:

Mi affido alla vostra esperienza di programmatori per creare questa parte di programma. :thumb_yello:

Salutoni

Link al commento
Condividi su altri siti


Ciao,

non conosco molto bene il funzionamento degli anemometri, penso però che sarebbe interessante capire quale intervallo di tempo intercorre tra un impulso e l'altro per non rischiare che magari una velocità troppo elevata ti porti a perdere degli impulsi. Io a questo punto per non correre rischi e visto che non ti comporta nessun costo aggiuntivo perchè è integrato, utilizzerei un ingresso veloce e la function file hsc del MLX 1100. Poi mi costruirei una routine di interupt da 1 sec e andrei ad ogni esecuzione a memorizzare il valore attuale degli impulsi per andarlo poi a sottrarre all'accumulatore dell'hsc. In questo modo il risultato della differenza ti darà sempre la velocità aggiornata in un periodo di tempo preciso.

Buon lavoro

Luca

Link al commento
Condividi su altri siti

Salve,

ma ottengo sempre una lettura instabile. :senzasperanza:

se si potesse avere un'idea con degli esempi numerici di questa lettura instabile, sarebbe buona cosa.

I test eseguiti son stati fatti con un flusso di aria sufficientemente costante?? Per esempio con utilizzo di ventilatore o phon per capelli o altro sistema con flusso d'aria costante.

Anche questa informazione sarebbe utile per comprendere se l'instabilità della lettura è dovuta agli impulsi dati dall'anemometro, oppure a qualcosa di errato sul programma dell MLX1100.

Poi mi costruirei una routine di interupt da 1 sec e andrei ad ogni esecuzione a memorizzare il valore attuale degli impulsi per andarlo poi a sottrarre all'accumulatore dell'hsc. In questo modo il risultato della differenza ti darà sempre la velocità aggiornata in un periodo di tempo preciso.

quanto suggeritoti da LUCAP86 è corretto, mi permetto di aggiungere però e rimane solo una mia considerazione non essendo un conoscitore di MLX1100, che confrontanto il valore attuale del contatore hsc con il valore del medesimo alla precedente scansione nella task a tempo ad 1s, potresti arrivare ad un momento in cui il contatore raggiunge la sua massima capacità di conteggio (questo ovviamente dipende da quanto lavora il sistema in un giorno oppure dalla velocità del vento), per cui arriveresti ad avere un valore di impulsi contati che non sarebbe veritiero e quindi anche la velocità del vento misurata non sarebbe reale.

Esempio considerando una velocità costante del vento.....

Sempre se ho ben capito si tratterebbe di prendere il valore di conteggio dell' hsc e confrontarlo con il valore che aveva alla precedente chiamata della task a tempo per cui:

task a tempo n: valore hsc=4-0=4

task a tempo n+1: valore hsc=8-4=4

task a tempo n+2: valore hsc=12-8=4

e così via..............

task a tempo n+X: valore hsc=32767-32763=4

e così via fino alla task in cui il contatore (e questo dipende dalla sua capacità di conteggio) raggiungerà supponiamo il valore max di 32768 per ripartire da 0 oppure da -32767 in questo caso avremmo

task a tempo n+y: =2-32763=dato errato.

Ribadisco che il principio suggerito da LUCAP86 è valido ,sollevo solo il dubbio che probabilmente non conoscendo MLX1100, dovrà essere inserito un controllo che eviti di alterare il contenuto del risultato restituito dalla differenza dei conteggi, quando il contatore supera la sua capacità di conteggio.

A meno che ad ogni task a tempo, salvi il registro del contatore su di una variabile ed immediatamente dopo sè il software lo permette effettui il reset del contatore hsc, quindi dal dato salvato nella variabile effettui la sclatura o linearizzazione del dato impulsi=Velocità vento.

Alla sucessiva task, il contatore avrà un valore di conteggio basso, essendo ripartito da zero per effetto del reset dato nella precedente scansione e così via.

Modificato: da cagliostro
Link al commento
Condividi su altri siti

Ciao LUCAP86

Come ho scritto prima ti confermo che il parametro di riferimento è 4 impulsi al secondo quando la velocità del vento è di 10 km/h, il che significa che ad ogni impulso al secondo corrisponde la velocità di 2.5 km/h.

La tua ipotesi della interrupt subroutine è molto interessante, ti chiedo se possibile di farmi uno schemino di esempio, oppure su un file RSS per testare il funzionamento.

Grazie Saluti

Link al commento
Condividi su altri siti

Ciao Lince1972,

la considerazione fatta da Cagliostro in merito al controllo dell'overflow dell'accumulatore dell'HSC è corretta io ho dato per scontato l'utilizzo di tale controllo.

Tuttavia tieni presente che la variabile HSC:0.ACC è una variabile a 32 bit non a 16 come nell'esempio di Cagliostro, ma questo non significa che il controllo possa essere omesso l'unica differenza è che il problema si prenterebbe (molto) più avanti.

Detto questo è giusto anche considerare l'applicazione qui non si parla della gestione di posizionamenti, ma di un semplice controllo di velocità tramite un contatore veloce unidirezionale, pertanto non c'è nessun problema ad individuare un momento adatto per azzerare l'accumulatore dell'HSC. Potresti farlo all'avvio del PLC sfruttando il "First pass", potresti farlo ad una determinata ora del giorno o della notte visto che sul MLX 1100 hai l'RTC integrato........insomma secondo me questo non rappresenta un problema.

Veniamo all'esempio, io ti consiglio di realizzare una STI con un intervallo di 1sec. (quello che serve a te). Poi è sufficente configurare il contatore veloce HSC:0 in modalità unidirezionale ed abilitarlo. A questo punto sulla routine di interupt realizzi un segmento con:

Istruzione SUB "Valore 1": HSC:0.ACC "Valore 2": L9:0 "Dest" L9:1

in parallelo poi è sufficente inserire:

Istruzione MOV "Source": HSC:0.ACC "Dest": L9:0

A questo punto il valore che a te interessa guardare è quello della varibile L9:1 che poi provvederai a riscalare per trovarti la velocità.

E' sufficente poi una volta individuato il momento secondo te più adatto, azzerare l'ACC del counter tramite l'struzione RAC.

Tale funzione ti permette di forzare un valore (nel ns. caso zero) sull'ACC del counter. Naturalmente quando lo azzeri dovrai fare

altrettanto con L9:0.

Spero di esserti stato utile.

Buon lavoro

Luca

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