batta Inserito: 13 luglio 2006 Segnala Share Inserito: 13 luglio 2006 In un'altra discussione viene chiesto come creare altri timer da utilizzare in S7. Penso che questo sia il posto giusto dove proporre la mia soluzione, sperando di fare cosa gradita. Io consiglio di utilizzare la mia funzione "Timer" non in sostituzione ai timer S7 (richiede più risorse), ma quando servono le seguenti potenzialità aggiuntive: - Valore di Preset da 0 a 32767 - Possibilità di congelamento valore corrente La funzione Timer ha bisogno di una variabile INT dove appoggiare il valore corrente. Io di solito creo un DB con un array di INT da utilizzare esclusivamente per la funzione. Come per i precedenti lavori fornisco i sorgenti ampiamente commentati. Le funzioni possono essere utilizzate, modificate, ridistribuite liberamente. Non sono ovviamente responsabile dell'uso che ne verrà fatto. Chiedo sempre la stessa cosa: non modificate il nome dell'autore. Grazie. Clicca qui per scaricare il file Link al commento Condividi su altri siti More sharing options...
GALVANI Inserita: 5 marzo 2008 Segnala Share Inserita: 5 marzo 2008 (modificato) ciao batta sono uno studente dell'itis galvani che si trova a Napoli. ti ringrazio in partenza per la tua disponibiltà, ma quando scarico i tuoi "progetti" non riesco a visualizzarli....mi compaiono numeri e lettere strane...non potresti inviarmi quello riguardante il serbatoio? ti ringrazio nuovamente... ***[at]***.it Modificato: 5 marzo 2008 da NULL Indirizzo email rimosso in quanto non conforme al regolamento Link al commento Condividi su altri siti More sharing options...
batta Inserita: 5 marzo 2008 Autore Segnala Share Inserita: 5 marzo 2008 Quello che segue è il link per scaricare un piccolo progetto con due funzioni, una per il calcolo del volume di un serbatoio cilindrico orizzontale, l'altra per il calcolo del volume di un serbatoi sferico.Per aprirlo hai bisogno, ovviamente, di Step7. Ti basta usare la funzione "Disarchivia" e poi aprire il progetto.Link per download progetto Step7 calcolo volume serbatoio cilindrico orizzontale e serbatoi sfericoHo appena fatto il download per verificare la presenza di eventuali problemi nel file, ma mi risulta essere tutto a posto.Altri progetti sono invece archiviati come sorgenti .awl.Per questi, una volta scaricati e scompattati, devi importarli nella cartella "Sorgenti" del tuo progetto Step7 e compilarli.Se hai ancora problemi, spiega meglio cosa non funziona.P.S. hai postato nella discussione sbagliata e hai scritto la tua e-mail personale, che è vietato da regolamento. Link al commento Condividi su altri siti More sharing options...
Rikisoft Inserita: 1 ottobre 2008 Segnala Share Inserita: 1 ottobre 2008 Il lavoro fatto bene, serve sempre a qualcuno anche dopo anni, ho ripreso a lavorare con Siemens e utilizzo i timer aggiuntivi dell'esempio.Grazie BattaRiccardo Link al commento Condividi su altri siti More sharing options...
batta Inserita: 2 ottobre 2008 Autore Segnala Share Inserita: 2 ottobre 2008 Link al commento Condividi su altri siti More sharing options...
barbato giuseppe Inserita: 26 gennaio 2009 Segnala Share Inserita: 26 gennaio 2009 ciao Batta ,ho visto per caso che ti sei costruito dei timer con la possibilita di congelamento del tempo trascorso li ho scaricati ma non riesco a visualizzarli ne' con disarchivia e ne' come sorgentisicuro di un tuo chiarimento ti ringrazio Link al commento Condividi su altri siti More sharing options...
fullenzo Inserita: 9 maggio 2009 Segnala Share Inserita: 9 maggio 2009 io di solito quando ho bisogno di timer aggiuntivi utilizzo l'SFB4 Timer TON che " consuma meno memoria " comunque è interessante il congelamento del tempo, grazie comunque per lo spirito di mettere a disposizione il know howfullenzo Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 maggio 2009 Autore Segnala Share Inserita: 9 maggio 2009 Dipende dai casi. Io uso entrambe le soluzioni.Tieni presente che l'SFB4 occupa meno memoria, ma per ogni timer devi creare un DB.Se i timer da usare con questo sistema sono pochi, non c'è nessun problema. Se il numero diventa consistente, dipende dalla cpu che stai utilizzando. Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 9 maggio 2009 Segnala Share Inserita: 9 maggio 2009 Tieni presente che l'SFB4 occupa meno memoria, ma per ogni timer devi creare un DB.non è del tutto corretto. puoi utilizzare una Db unica indicizzando i valori necessari ai timer.la cosa è spiegata in un esempio fornito da Siemens.se devo creare un blocco "standard" inserico anche i timer nella definizione dei dati, in questo modo anche un programma scritto in AWL (o IL - Instruction List che dir si voglia) diventa simile al SFC. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 maggio 2009 Autore Segnala Share Inserita: 9 maggio 2009 non è del tutto corretto. puoi utilizzare una Db unica indicizzando i valori necessari ai timer.la cosa è spiegata in un esempio fornito da Siemens.Non riesco a capire come, ma potrebbe essere interessante.Perché non posti il link?se devo creare un blocco "standard" inserico anche i timer nella definizione dei dati, in questo modo anche un programma scritto in AWL (o IL - Instruction List che dir si voglia) diventa simile al SFC.Non capisco cosa vuoi dire. Non potresti essere più chiaro, magari con degli esempi? Link al commento Condividi su altri siti More sharing options...
batta Inserita: 13 maggio 2009 Autore Segnala Share Inserita: 13 maggio 2009 ciao Batta ,ho visto per caso che ti sei costruito dei timer con la possibilita di congelamento del tempo trascorsoli ho scaricati ma non riesco a visualizzarli ne' con disarchivia e ne' come sorgentisicuro di un tuo chiarimento ti ringrazioScusa se non ti ho risposto prima, ma la tua richiesta mi era sfuggita.Spero tu abbia risolto il problema.In ogni caso, ho appena scaricato il file, scompattato ed aperto con Step7 senza problemi. Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 14 maggio 2009 Segnala Share Inserita: 14 maggio 2009 CITAZIONEnon è del tutto corretto. puoi utilizzare una Db unica indicizzando i valori necessari ai timer.la cosa è spiegata in un esempio fornito da Siemens.Non riesco a capire come, ma potrebbe essere interessante.Perché non posti il link?Il link non riesco più a trovarlo sul sito Siemens, magari è stato rimosso o magari ora l'esempio risulta essere a pagamento...( :ph34r: )CITAZIONEse devo creare un blocco "standard" inserico anche i timer nella definizione dei dati, in questo modo anche un programma scritto in AWL (o IL - Instruction List che dir si voglia) diventa simile al SFC.Non capisco cosa vuoi dire. Non potresti essere più chiaro, magari con degli esempi?ecco qui un esempio molto semplice semplice, comunque è il principio di funzionamento quello che importa...FUNCTION_BLOCK FB 20 TITLE = VERSION : 0.1 VAR TimerP01 : SFB 5; TimerP02 : SFB 5; END_VAR BEGIN NETWORK TITLE =Posizione P1 //; CALL #TimerP01 (// Generazione Tempo Comando in Corso IN := E 0.0,// Comando in Corso Posizione PT := T#5S); //; // Segnalazione Luminosa //; U #TimerP01.Q; // Generazione Tempo Comando in Corso U E 0.0; = A 0.0; NETWORK TITLE =Posizione P2 //; CALL #TimerP02 (// Generazione Tempo Comando in Corso IN := E 0.1,// Comando in Corso Posizione PT := T#5S); //; // Segnalazione Luminosa //; U #TimerP02.Q; // Generazione Tempo Comando in Corso U E 0.1; = A 0.1; END_FUNCTION_BLOCKCITAZIONEciao Batta ,ho visto per caso che ti sei costruito dei timer con la possibilita di congelamento del tempo trascorsoli ho scaricati ma non riesco a visualizzarli ne' con disarchivia e ne' come sorgentisicuro di un tuo chiarimento ti ringrazioScusa se non ti ho risposto prima, ma la tua richiesta mi era sfuggita.Spero tu abbia risolto il problema.In ogni caso, ho appena scaricato il file, scompattato ed aperto con Step7 senza problemi.a dire la verità ho avuto problemi anche io a scaricare gli esempi proposti...personalmente preferisco inserire il codice nei messaggi, più pratico e veloce...(non viene indicato il nome dell'autore del programma, e quindi tutti possono dire che è farina del loro sacco...) Link al commento Condividi su altri siti More sharing options...
batta Inserita: 14 maggio 2009 Autore Segnala Share Inserita: 14 maggio 2009 (modificato) L'esempio è decisamente interessante.Non sono però tanto convinto che sia così parsimonioso in termini di risorse.Per 2 timer, il DB di istanza è di 40 byte, mentre per 2 dei miei timer ne bastano 4.Al più presto farò delle prove per capire quanto incide sui tempi di scansione.Non ho ancora capito invece dov'è che il programma in awl diventa simile al linguaggio strutturato.Questo comunque non rappresenta, per me, un problema, dato che non amo particolarmente il linguaggio strutturato.E' comodo per alcune cose, ma non per tutto. Inoltre genera un codice piuttosto pesante.In awl fai le stesse cose con un codice molto più leggero.a dire la verità ho avuto problemi anche io a scaricare gli esempi proposti...Ma il problema è nel download, nella scompattazione o nell'apertura con Step7?A volte scrivo anch'io direttamente il codice. Dipende però anche dalla lunghezza.In ogni caso, non ci trovo nulla di male se si deve fare almeno la fatica di scaricarlo per poterlo visionare.Non nego poi che per me è un piccolo piacere personale vedere il numero dei download che aumenta.Questo dei timer poi è un esercizio banale, ma che con poche risorse permette di gestire timer "alternativi".Chi è interessato all'esempio dei timer e non riesce a scaricarlo, mi può contattare all'indirizzo e-mail che si vede nella firma e provvederò ad inviarlo. Modificato: 14 maggio 2009 da batta Link al commento Condividi su altri siti More sharing options...
ginin Inserita: 29 luglio 2009 Segnala Share Inserita: 29 luglio 2009 Salve a tutti, ho scaricato il file esempio timer, premetto che sono inesperto con S7_300.Al termine disarchivia, compare il messaggio: i dati disarchiviati sono stati depositati nella directory'C:\Programmi\Siemens|s7Proj\S7TMP000'.Non è stato possibile, tuttavia, interpretare il contenutodell'archivio come progetto.Non so come fare per vedere il suddetto esempioringrazio chiunque per l'aiuto. Link al commento Condividi su altri siti More sharing options...
floppydisco Inserita: 29 luglio 2009 Segnala Share Inserita: 29 luglio 2009 Grazie Batta,esempio scaricato e disarchiviato ok. Link al commento Condividi su altri siti More sharing options...
alan_ford444 Inserita: 1 ottobre 2009 Segnala Share Inserita: 1 ottobre 2009 Esempio scaricato e disarchiviato: tutto OK!Grazie per la condivisione! Link al commento Condividi su altri siti More sharing options...
alan_ford444 Inserita: 1 ottobre 2009 Segnala Share Inserita: 1 ottobre 2009 Ciao Batta,ho scaricato e testato il timer che hai creato, ma cosi' com'e' scritto nel tuo progetto non mi funziona: il tempo residuo viene riportato continuamente al valore inizialeModificando il segmento 2 dell'FC120 come segue tutto funziona correttamente:M000: ON #Run ON #Clock SPB M002 L #ResVal L 1 -I SPPZ M001 L 0 M001: T #ResVal M002: L #ResVal L 0 <=I U #Enable = #OutCiao! Link al commento Condividi su altri siti More sharing options...
batta Inserita: 3 ottobre 2009 Autore Segnala Share Inserita: 3 ottobre 2009 Io l'ho provato in varie occasioni e funziona, anche con richiamo multiplo della funzione e/o di altre FC o FB, con sovrascrittura quindi delle aree di memoria delle variabili dell'interfaccia della funzione.La tua modifica è comunque corretta.Nel mio codice infatti, quando si effettua il salto, si scrive direttamente in #ResVal il contenuto dell'accumulatore, senza aver prima caricato con un'istruzione tale valore in modo evidente.Però deve funzionare ugualmente, perché l'accumulatore viene caricato con il valore di #ResVal nel momento in cui #ResVal viene passato alla funzione come parametro.Ti ringrazio per la segnalazione, e devo dire che sono rimasto sorpreso, negativamente, di me stesso.Di solito infatti non ricorro ad espedienti come quello sopra descritto solo per risparmiare una riga di codice, ma preferisco un codice concettualmente corretto e chiaro, come quello da te scritto. Un'altra soluzione per rendere la funzione corretta, è modificare il segmento 2 come segue:M000: ON #Run ON #Clock L #ResVal SPB M001 L 1 -I SPPZ M001 L 0 M001: T #ResVal L 0 <=I U #Enable = #Out Senza aggiungere righe di codice, basta spostare l'istruzione "L #ResVal" prima dell'eventuale salto. In questo modo il valore iniziale di #ResVal viene caricato in modo evidente nell'accumulatore, e non in maniera "occulta". Volendo, si può anche far risparmiare di eseguire l'operazione "T #ResVal" alla CPU quando la funzione viene eseguita con i flgas #Run o #Clock bassi, modificando il segmento 2 come segue: M000: ON #Run ON #Clock L #ResVal SPB M002 L 1 -I SPPZ M001 L 0 M001: T #ResVal M002: L 0 <=I U #Enable = #OutRingrazio ancora alan_ford444 per la segnalazione, ed invito tutti quelli che utilizzano questa funzione ad apportare la correzione. Link al commento Condividi su altri siti More sharing options...
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