misterasso Inserito: 5 marzo 2010 Segnala Inserito: 5 marzo 2010 Ciao a tutti,voglio chiedere, gentilmente, un'indicazione: ho scritto un programma di gestione per un PLC VIPA (che comunque è "come" un S7-300) in cui ci sono dei timers a cui ho legato delle costanti di tempo.Ora avrei bisogno che tali costanti non siano legate al timer cioè non siano fisse per ogni timer ma che esse risiedano in memoria (magari impostate secondo il valore di certi ingressi) e che vengano lette dai timer dalla memoria e non, ripeto, come un valore fisso associato al singolo timer. Ciò che non conosco è come, in AWL, posso fare queste operazioni:- Memorizzare la costante di tempo, ad esempio S5T#1S in una locazione di memoria- Leggere la locazione di memoria dove si trova la costante ed assegnarla ad un timer.Qualcuno mi può indicare il codice da adoperare?Grazie mille!
TravelMen Inserita: 5 marzo 2010 Segnala Inserita: 5 marzo 2010 Ti basta usare l'. dello step 7 per vedere che un S5T#10s o similari è una variabile formata da 16bit (word), da qua a creare una struttura con n° dati ed in base a scelte uno di questi dati viene passato al tuo timer.Solo una considerazione, stai attento che se tu cambi il tempo di un timer prima che quest'ultimo abbia finito di fare il suo lavoro, il tempo di conteggio non cambia, rimane quello di quando hai avviato il timer.AREA con i tuoi dati L #Valore di tuo interesse T #TempoConteggio L #TempoConteggio SD #T1
misterasso Inserita: 5 marzo 2010 Autore Segnala Inserita: 5 marzo 2010 Ciao Gianluca, anzitutto grazie per la risposta.Con "L" carico un valore "costante", numerico, nel timer e va bene. Nel timer vorrei, però, caricare il valore conservato in una locazione, di 16 bit, di memoria piuttosto che un valore costante: cioè mi servirebbe fare una cosa del genere, espressa in un linguaggio a piu alto livello:if (stato_di_un_certo_ingresso=1) thenM1=S5T#1SelseM1=S5T#2Send ifpoi, per il contatore fare qualcosa tipo:SET Valore_di_conteggio=M1In sostanza mi manca il come fare una cosa tipo:1. Carica_valore_S5T#1S_in_una_locazione_di_memoria2. Assegna_al_timer_il_valore_della_locazione_di_memoriaGrazie ancora!
TravelMen Inserita: 5 marzo 2010 Segnala Inserita: 5 marzo 2010 Appunto è come te l'ho indicato a grandi lineeAREA con i tuoi dati A #Input Jcn 2time L #Valore di tuo interesse T #TempoConteggio ju Timer 2time: L #2Valore di tuo interesse T #TempoConteggio :Timer L #TempoConteggio SD #T1
misterasso Inserita: 6 marzo 2010 Autore Segnala Inserita: 6 marzo 2010 Ciao Gianluca, sei stato chiarissimo e ti ringrazio: implementerò la gestione delle costanti di tempo come mi hai indicato.Buon fine settimana!Luca.
TravelMen Inserita: 6 marzo 2010 Segnala Inserita: 6 marzo 2010 (modificato) Una soluzione più "elegante" potrebbe essere questaL #Valore di tuo interesse T #TempoConteggio A #Input Jcn Timer L #2Valore di tuo interesse T #TempoConteggio A #2-Input Jcn Timer L #3Valore di tuo interesse T #TempoConteggio :Timer L #TempoConteggio SD #T1Così eviti un pò di salti. Buon lavoro e buon fine settimana anche a te Modificato: 6 marzo 2010 da TravelMen
misterasso Inserita: 7 marzo 2010 Autore Segnala Inserita: 7 marzo 2010 Ho impostato il flusso delle istruzioni come mi hai indicato e va tutto bene.Vorrei profittare della tua gentilezza, e competenza, per chiederti un'altra informazione: avrei bisogno di leggere il valore di un timer per poterlo comparare con una costante: cioè utilizzando ad esempio il timer T0, dove trovo la "variabile di conteggio" che mi indichi ad ogni ciclo di scansione il valore raggiunto?Mi occorre fare una cosa tipo:if (T0.timeInMillis()< K1) thenfai_qualcosaend ifGrazie ancora...Luca.
TravelMen Inserita: 8 marzo 2010 Segnala Inserita: 8 marzo 2010 Be molto semplice al posto del classico temporizzatore SD (TON) devi usare il temporizzatore S_ODT (sempre TON) che ti fornisce il tempo trascorso in formato BCD.Tramite . in linea del simatic Step7 trovi la descrizione del temporizzatore in questione.
misterasso Inserita: 8 marzo 2010 Autore Segnala Inserita: 8 marzo 2010 Grazie Gianluca, guarderò la documentazione del temporizzatore che mi hai indicato.Il valore BCD che emette tale timer devo provvedere a convertirlo per ottenere un INT da mettere in input ad un comparatore o è già "pronto" per tale scopo?In WinPLC, te lo scrivo nel caso in cui tu non abbia avuto modo di lavorarci, c'è una comoda funzionalità la quale permette di leggere il valore di un timer facendo riferimento al nome stesso del temporizzatore; cioè è possibile scrivere un codice AWL del genere: A ( L T 101 L 30 <I ) che consente di valutare un ingresso "composto" dal comparatore che ha in input una costante ed il valore del timer. Con S7 però pare che questo codice non funzioni.Grazie ancora e buon lavoro a te!Luca.
TravelMen Inserita: 9 marzo 2010 Segnala Inserita: 9 marzo 2010 Attraverso l'. dello step7 trovi il formato S5TIME che come dice . è formato da 16 bit o due byte per esempio byte-n e byte-n+1, dove nel byte-n+1 trovi i primi due numeri del tuo tempo in formato bcd, ovvero, 4bit per ogni valore (0-9) e nei primi 4bit del byte-n trovi la terza cifra, per tanto il valore massimo che ci puoi scrivere è 999.Dopo di che nei 4bit successivi del byte-n, trovi la costante di tempo, che sempre tramite . vedi come vengono interpretati.per tanto, nello stesso S5TIME scrivi 333 che possono essere con base 0.01s per tanto il tuo time vale 3.33s oppure base 1s allora vale 333s, e come vedi il valore 333 rimane sempre lo stesso, per tanto con un operazione di AND a parola (con una parola formatata in modo opportuno) ottieni come risultato il tuo 333 o 30 che ti serve.Per tanto dai un occhio al . dello step7
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