marcopez Inserito: 19 novembre 2021 Segnala Inserito: 19 novembre 2021 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
Ctec Inserita: 19 novembre 2021 Segnala Inserita: 19 novembre 2021 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.
marcopez Inserita: 26 novembre 2021 Autore Segnala Inserita: 26 novembre 2021 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.
batta Inserita: 26 novembre 2021 Segnala Inserita: 26 novembre 2021 (modificato) 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: 26 novembre 2021 da batta
marcopez Inserita: 1 dicembre 2021 Autore Segnala Inserita: 1 dicembre 2021 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora