Vai al contenuto
PLC Forum


Uso dei timer in TIA-Portal V14


marcopez

Messaggi consigliati

Timer_example.png.878875164b66292555ebbb8d4976155c.png

Ciao a tutti,
vi allego un programmino in LAD nell'uso dei timer su TIA-Portal V14sp1. L'esempio può girare anche con il simulatore ed è una parte di un programma più complesso.
Come init di partenza #SR1 e #Q1.0 sono a 0.
Quello che osservo è che settando ad 1 #I1, si attiva il processo di temporizzazione da parte di #T1 allo scadere del tempo PT impostato di 15s l'uscita Q di #T1 dovrebbe eccitarsi e settare ad 1 #Q1.0.
Facendo eseguire il codice si osserva che il temporizzatore si resetta ciclicamente per effetto del reset di #SR1, ma #Q1.0 non si setta mai, o meglio se si osserva il fenomeno per dei lunghi tempi, esiste la probabilità che #Q1.0 venga settato ad 1, ma statisticamente è molto raro osservare la transizione di #Q1.0 ad 1.
Il quesito è : ma se la variabile #T1.Q è lo stato dell'uscita di #T1 come fà a presentarsi prima dell'esecuzione di T1 dato che si osserva il reset di #SR1 ogni 15s, questo implica che #T1 viene periodicamente resettato prima di riuscire a settare #Q1.0.
Vi ringrazio anticipatamente per le risposte.
Un caro saluto

Marco Pezzetta

Link al commento
Condividi su altri siti


E' logico, poiché l'esecuzione di SR precede quella del TON.

In una certa scansione, T1 avrà finito il suo conteggio, quindi T1.Q sarà a 1.

A quel punto SR vede il suo ingresso reset attivo, per cui spegne la sua uscita SR.Q

Di conseguenza, T1 si resetta perché non c'è più la condizione di ingresso, quindi T1.Q va a zero.

E in conclusione, essendo T1.Q ora a 0, l'uscita non può eccitarsi.

Perché la cosa funzioni, devi mettere nel rung precedente alla SR una riga con T1.Q e il set dell'uscita.

Link al commento
Condividi su altri siti

Grazie mille per la risposta.

Non sò quanto questo sia logico, ti ricordo che T1.Q è la variabile di uscita del timer presente nella DB di istanza dello stesso.

Se provi a fare la stessa cosa con una FB da te scritta, ad esempio l'uso all'interno del codice della variabile #Q, uscita della tua FB con la designazione FB.Q non si genera un risultato che è l'esecuzione della FB con uscita Q ma verrebbe fornito l'ultimo valore di Q, ottenuto dell'esecuzione della FB all'interno del codice.

Link al commento
Condividi su altri siti

Effettivamente, verrebbe da pensare che se T1.Q è ON, dovrebbe sia resettare SR1, sia settare l'uscita.

Ma con T1.Q vai a leggere lo stato della variabile interna della funzione Timer, e non lo stato dell'uscita della funzione.
Quindi, quando T1.Q passa allo stato ON, causa immediatamente il reset del timer e, di conseguenza, l'uscita del box non viene attivata.

Prova ad usare T1.Q anche per settare l'uscita (puoi semplicemente spostare il set dell'uscita sulla stessa riga, subito dopo il contatto di T1.Q). Oppure metti una variabile sull'uscita del timer da usare per il reset di SR1 al posto di T1.Q, e vedrai che funziona.

Modificato: da batta
Link al commento
Condividi su altri siti

Grazie Batta,

la soluzione è valida.

T1.Q è lo stato dell'uscita della funzione e vive nella DB d'istanza.

La cosa che poco convince è come mai per una funzione FB temporizzatore, l'uso dei delle variabili d'istanza tipo T1.Q nel codice, implichi l'esecuzione della FB associata in questo caso T1, questo perchè l'unico modo per cui T1.Q si aggiorni è che venga eseguita la funzione T1 associata.

Puoi verificare anche tu che questa cosa non vale con una FB scritta e poi eseguita all'interno del codice. In poche parole non puoi riprodurre il comportamento della libreria temporizzatore  scrivendo tu una FB.

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