luiginodorigo Inserito: 14 aprile 2007 Segnala Inserito: 14 aprile 2007 Buongiorno, avrei un problema da sottoporvi per la regolazione di un impianto di un mio cliente, avrei la necessità di regolare un uscita analogica in tensione (0 – 10V), in maniera crescente e decrescente, a secondo della presenza o meno di due ingressi digitali, in maniera lineare nel tempo.Esempio incremento: Ingresso presente E0.0, la PAW256 aumenta il suo valore, da quello esistente in precedenza, fino al valore massimo di 10V.Esempio decremento: Ingresso presente E0.1, la PAW256 diminuisce il suo valore, da quello esistente in precedenza, fino al valore minimo di 0V.Ovviamente alla mancanza degli ingressi E0.0 in fase di incremento ed E0.1 in fase di decremento, il valore analogico della PAW256 deve rimanere sul valore fino a lì raggiunto.Ringraziando anticipatamente chiunque mi possa dare dei consigli a riguardo.
cisio Inserita: 14 aprile 2007 Segnala Inserita: 14 aprile 2007 Suppongo che stai parlando di s7-3000V = 010V = 27648come gestire la cosa dipende dalla precisione richiesta in termini di tempo e dalla velocità di inc/decpuoi usare un semplice timer e ogni volta che va on incrementi di tot il valore analogicooppure, meglio ancora, usi l'OB 35 che è un interrupt a tempo preciso la cui scansione è parametrizzabile dalla config hardwaree ogni volta che viene eseguito incrementa o decrementa o non fa nulla se gli ingressi sono a zerociao
RickyM Inserita: 15 aprile 2007 Segnala Inserita: 15 aprile 2007 Più semplicemente poi usare FC105 o FC106 non ricordo quale dei due per scalare l'uscita per esempio 0-100 e incrementarla o decremantarla con l'ingresso e il fronte di salita di un clock della cpu (sotto hardware, cpu, merker di clock).Ciao
luiginodorigo Inserita: 16 aprile 2007 Autore Segnala Inserita: 16 aprile 2007 Grazie, cisio e RickyM, farò delle prove in merito.ObbligatoLuigino
salvo-fede Inserita: 17 aprile 2007 Segnala Inserita: 17 aprile 2007 prova ad usare l'fc 105 scale e l'fc106 unscale, sono degli fc di sistema che ti fatto fare un pò di giochi con le analogiche!!
batta Inserita: 27 aprile 2007 Segnala Inserita: 27 aprile 2007 Tirare in ballo scalature e virgola mobile per il semplice incremento/decremento del valore di una uscita analogica mi pare un pò eccessivo.Se non hai bisogno di lavorare con valori ingegneristici abbandonerei quindi le scalature e farei semplici operazioni con interi.Un primo esempio di come potresti fare l'incremento/decremento di un valore intero compreso tra 0 e 27648 è il seguente: L MW 100 U E 0.0 SPB INC U E 0.1 SPB DEC SPA VAL INC: L 5 +I SPA VAL DEC: L 5 -I VAL: T #AuxVal L 0 >=I SPB OK_1 T #AuxVal OK_1: L #AuxVal L 27648 <=I SPB OK_2 T #AuxVal OK_2: L #AuxVal T MW 100 T PAW 256 Un altro metodo è invece questo: L 5 U E 0.0 SPB STEP U E 0.1 L -5 SPB STEP L 0 STEP: L MW 100 +I T #AuxVal L 0 >=I SPB ok_1 T #AuxVal ok_1: L #AuxVal L 27648 <=I SPB ok_2 T #AuxVal ok_2: L #AuxVal T MW 100 T PAW 256In entrambi gli esempi si controlla anche che il valore non esca dai limiti imposti.La variabile #AuxVal è una variabile locale di tipo INT.MW100 è, ovviamente, usata come esempio. Se preferisci (io di solito preferisco) puoi usare la variabile di un DB. Una variabile di appoggio è comunque indispensabile, perché non è possibile leggere il valore attuale di una uscita analogica, ma solo scriverlo. Una istruzione tipo "L PAW256" non è valida.Anche gli incrementi a step di +/- 5 sono ovviamente solo di esempio.Richiamando queste istruzioni in OB35 ottieni incrementi/decrementi ad intervalli di tempo molto precisi.
Andrea_S Inserita: 27 aprile 2007 Segnala Inserita: 27 aprile 2007 ciao a tutto il Forumscopo: variare l'uscita analogica da 0 a 100% e viceversa in un tempo definito (es. 30s) a fronte di n° due ingressi destinati rispettivamente all'incremento e al decremento dell'uscitasuggerirei di utilizzare un generatore di impulsi e un contatore avanti-indietro Il conteggio esteso tra 0-100 identifica lo 0-100% dell'uscita analogica- Con il generatore si realizza il trigger per il counter (la lunghezza del l'impulso e quindi il tempo di trigger saranno regolabili in virtù del parametro passato in ingresso al generatore stesso)- il counter dovrà contare tra 0-100 e viceversa- un confronto in Integer per limitare il conteggio tra lo 0-100 del counter assicura il corretto comportamento dello stesso inibendo i segnali di incrementa/decrementa.- una scalatura per passare da 0-100 (%) a 0-27648 - gli ingressi digitali passati al counter faranno incrementare o decremantare il counter come da richiesta dell'operatoreCiao e buon lavoro:
batta Inserita: 27 aprile 2007 Segnala Inserita: 27 aprile 2007 suggerirei di utilizzare un generatore di impulsi e un contatore avanti-indietroIl conteggio esteso tra 0-100 identifica lo 0-100% dell'uscita analogicaSicuramente funziona anche così, ma perché ci si deve per forza complicare la vita?Perché dovrei tirare in ballo un generetore di impulsi quando ho a disposizione l'OB35?Perché devo fare gradini dell'1% quando è invece possibile ottenere una variazione più regolare?Perché devo scrivere più righe di codice e far quindi fare più lavoro alla cpu, utilizzando generatori di impulsi, contatori UP/DOWN e scalature per ottenere, oltretutto, un risultato inferiore?Certo, le soluzioni da me proposte vanno bene solo per chi mastica almeno un pò di AWL, mentre se si è abituati a lavorare solo in KOP sono difficilmente comprensibili.Credo però di non venire smentito se affermo che fare quanto richiesto in maniere ancora più sintetica sia difficile.Siamo abituati ormai a cpu con memoria e prestazioni notevoli, e ci curiamo molto poco di quanto diventa grande un programma. Questo porta spesso a programmi inutilmente mastodontici.Solo per curiosità ho creato una FC con le istruzioni del mio secondo esempio, ed una con conteggio /UP/DOWN e scalatura, trascurando la generazione dell'impulso (che sicuramente serve anche per altre cose e quindi non la considero), e senza effettuare controlli sul superamento dei limiti (cosa questa che andrebbe sicuramente fatta).La prima FC occupa 112 byte, la seconda 144. La differenza non è molta, ma la seconda contiene anche la funzione UNSCALE da 324 byte, che esegue calcoli in virgola mobile.Non esagero se affermo che con il metodo del contatore e della scalatura l'impegno della cpu per eseguire la stessa funzione è almeno triplo.
Andrea_S Inserita: 28 aprile 2007 Segnala Inserita: 28 aprile 2007 ciao Batta,ho provato a eliminare qualche istruzione e qualche salto e sembra funzionare tuttavia il metodo con il generatore di impulsi da me sostenuto mi lascia maggiore elesticità di utilizzo. in genere lo impiego per posizionare degli attuatori governati da regolatore PID in manuale definendo tempo e percentuale di apertura impostabili da HMI.saluti L #APP_PAW U #UP SPB INC UN #DOWN BEB SPA DECINC: L 27648 >=I BEB TAK L 3 +I T #APP_PAW BE DEC: L 0 <=I BEB TAK L 3 -I T #APP_PAW BEA
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