Vai al contenuto
PLC Forum


Filtro On-off Per S7-300/400


batta

Messaggi consigliati

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


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

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..... :lol:

Link al commento
Condividi su altri siti

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

Mea culpa caro Batta

Non 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

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 invertito

2.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

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

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

  • 5 months later...

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 :rolleyes:

Link al commento
Condividi su altri siti

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

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...