batta Inserito: 8 gennaio 2008 Segnala Share Inserito: 8 gennaio 2008 Capita spesso di dover filtrare un segnale digitale, ritardando il cambio di stato. Un esempio classico potrebbe essere quello del livello di un liquido, dove lo stato dell'ingresso digitale quando si è vicini al punto di commutazione cambia continuamente. Quasi sempre in una simile condizione ci si accontenta di ritardare il segnale usando un timer. Se a qualcuno può interessare, ho generato una funzione in linguaggio AWL per S7-300/400, dove è possibile impostare un ritardo per la commutazione da OFF a ON ed un ritardo diverso per la commutazione inversa. Il codice è molto leggero e non si fa uso di timer, che in S7 non abbondano mai. Descrizione dei parametri della funzione: Parametri IN IN_Liv: Segnale da filtrare. Si chiama così perché la funzione è nata per filtrare il segnale di un livello. Inverti: Se FALSE, OUT_Liv assumerà, trascorso il tempo, lo stesso stato di IN_Liv. Se TRUE OUT_Liv sarà invertito. Insomma, come collegare il contatto N.C. al posto del contatto N.O. Clock: Il tempo di ritardo viene incrementato solo quando Clock = TRUE. Se la funzione viene richiamata in un OB a tempo, può essere impostato su TRUE. Se la funzione viene richiamata in modo continuo, Clock deve rimanere attivo per una sola scansione ad intervalli fissi. In linea di massima direi che utilizzando per Clock un merker alto una scansione ogni 100ms, si coprono tutte le esigenze. Essendo il tempo appoggiato a una variabile INT, si arriva a contare fino a 3276,7 secondi. T_ON: Impostazione ritardo per la commutazione da OFF a ON, secondo base tempi usata per Clock T_OFF: Impostazione ritardo per la commutazione da ON a OFF, secondo base tempi usata per Clock Parametri IN_OUT ResVal: Variabile di appoggio per conteggio tempo trascorso (formato INT) OUT_Liv: Segnale di uscita filtrato. ATTENZIONE!!! Compilando il sorgente viene generata la funzione FC111. Se nel vostro progetto avete già una FC111, questa verrà sovrascritta. Potete compilare in un progetto vuoto e poi cambiare numero alla funzione, oppure modificare il numero della funzione nella prima riga del file sorgente prima della compilazione. Clicca qui per scaricare il file Come per altri miei piccoli lavori, potete farne l'uso che meglio credete. Unico piacere che chiedo, non cambiare il nome dell'autore. Grazie. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 gennaio 2008 Autore Segnala Share Inserita: 15 gennaio 2008 Nessuno mi dice se l'ha trovato utile o meno? Se lo considera fatto decentemente o se fa schifo? Se pensa di utilizzarlo o se l'ha già buttato nel cestino subito dopo il download? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 15 gennaio 2008 Segnala Share Inserita: 15 gennaio 2008 Flavio è solo una settimana che lo hai messo on line. Aspetta con fiducia. tra qualche mese, quandom sarai occupatissimo, ci sarà qualcuno che ti chiederà consigli sull'utilizzo o ti segnalerà il classico "bug" che era impossibile da scoprire..... Link al commento Condividi su altri siti More sharing options...
amorri Inserita: 15 gennaio 2008 Segnala Share Inserita: 15 gennaio 2008 Mea culpa caro Batta,l'ho scaricato e poi mi sono scordato di provarlo.Ho rimediato adesso. Mi sembra che funzioni bene, se avrò occasione lo userò nei miei programmi.Intanto grazie. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 15 gennaio 2008 Autore Segnala Share Inserita: 15 gennaio 2008 Mea culpa caro BattaNon si tratta di colpe, ci mancherebbe!E non pretendo certo che ognuno che fa il download mi risponda. Neanche io lo faccio.Era solo curiosità. Tutto qui. Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 16 gennaio 2008 Segnala Share Inserita: 16 gennaio 2008 Ciao Batta, premett oche non l'ho scaricato e non lo faro' perche' non uso Siemens.Lo trovo interessante, pero' io ci farei qualche piccola modifica:1. avere 2 segnali di uscita, normale e invertito2.al posto dell'entrata Clock avere un'ingresso dove di specifica il tempo base (10ms, 100ms o 1s per esempio) e internamente usare i merker ti tempo (non so ben ecome si chiamino ...)Io avevo fatto una cosa simile per il set e reset di allarmi.Buona giornata Link al commento Condividi su altri siti More sharing options...
batta Inserita: 16 gennaio 2008 Autore Segnala Share Inserita: 16 gennaio 2008 Bene, finalmente arrivano i consigli Quello che dici potrebbe risultare comodo, ma la mia intenzione era quella di creare una funzione il più leggera possibile, in modo da poterla richiamare anche molte volte nel programma senza preoccuparsi dei tempi di scansione.La doppia uscita, con segnale normale ed invertito, non mi sembra però sia così indispensabile. Se ti serve, ti crei subito dopo il richiamo della funzione un flag da gestire come meglio credi. Se non ti serve, è solo un parametro in più che rimarrebbe inutilizzato. Tieni presente che è già disponibile la possibilità di invertire il segnale in ingresso.Per il discorso base tempi sarebbe più elegante, ma appesantirebbe la funzione. Per lo scopo per cui questa funzione è nata un clock fisso di 100ms va sempre bene. Al limite si potrebbe eliminare il parametro in ingresso e gestirlo solo all'interno della funzione, alleggerendola ancora un po'.Poi, essendo la funzione libera, ognuno può personalizzarla secondo i propri gusti. Io ho costruito solo la base. Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 16 gennaio 2008 Segnala Share Inserita: 16 gennaio 2008 Il fatto delle 2 uscite e' perche' a me risulta piu' facile leggere il programma Con un clock fisso a 100ms credo si possa utilizzare quasi dappertutto per qualsiasi tipo di segnale. Link al commento Condividi su altri siti More sharing options...
Fritz Inserita: 1 luglio 2008 Segnala Share Inserita: 1 luglio 2008 Ciao, anche io programmo da qualche anno e ho sempre utilizzato l'AWL, perche lo trovo + pratico del KOP.Qualche cliente per motivi di semplicità mi chiede di utilizzare il KOP, allora io lo imbroglio gestendo il blocco delle uscite in KOP e tutto il resto in AWL.Nella azienda dove lavoro facciamo macchine x imballaggio e sviluppo programmi abbastanza semplici, mediamente 100 in e 100 out. Mi piacerebbe,, per avere un confronto, sapere come imposti un programma di una macchina; ovvero se programmi utilizzando i merker con FC oppure utilizzi degli FB di istanza.Vorrei avere un confronto anche perchè nella vita non si è mai finito di imparare. Mi piacerebbe utilizzare gli FB di istanza ma poi ho qualche problema con i riferimenti incrociati, ovvero se utilizzo delle STAT poi non sono visibili quando faccio i riferimenti.Spero di essermi fatto capire Salutoni FRITZ Link al commento Condividi su altri siti More sharing options...
batta Inserita: 2 luglio 2008 Autore Segnala Share Inserita: 2 luglio 2008 Io preferisco usare FB con DB di istanza solo quando sono indispensabili.Nella mia esperienza personale direi che questa necessità ricopre circa un 5% dei casi, forse anche meno. Molto però dipende dalla tipologia di impianti da gestire.Per tutti i casi invece in cui non reputo indispensabile l'utilizzo di FB, preferisco usare delle più leggere FC.Se guardi nei manuali vedi che la lettura/scrittura di un merker richiede molto meno tempo dell'analoga operazione su dati in DB di istanza. Ora, io non sono un maniaco dei tempi di scansione, ma non mi piace neanche sprecare inutilmente risorse.Ritengo inoltre che una caratteristica importante dei programmi sia la leggibilità. Spesso mi diverto spingendomi nella ricerca dell'ottimizzazione del codice, che risulta quindi meno comprensible. In questi casi però cerco di ovviare con abbondanti commenti.Ecco, una caratteristica che reputo indispensabile per poter considerare un programma "ben fatto", ritengo siano proprio i commenti.Io sono abituato, quando ci sono delle istruzioni che non sono proprio banali, a decsrivere non solo le operazioni eseguite ma anche il motivo per cui ho scelto di fare in un determinato modo. A molti sembra uno spreco di tempo. Io sostengo invece che descrivere le funzioni serve anche a fissare meglio in testa le idee. Questo permette (sempre mio parere personale) di scrivere un codice migliore e di risparmiare tempo. Senza contare poi al grande aiuto che ciò comporta nel caso in cui, dopo un certo tempo, ci si ritrovi a rimettere le mani su un programma. 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