Ron the bon Inserito: 21 settembre 2006 Segnala Share Inserito: 21 settembre 2006 Ciao a tutti,ho una domanda. Sto scrivendo un programma dove uso dei FB con delle In e Out. In italiano cred osi chiamino FB di istanza.Ora in questi FB ho dei Timer. Il FB viene chiamato molte volte lungo tutto il programma e quindi ogni volta i Timer avranno un loro valore.Esempio: ho FB100 per una funzione. All'interno ho il Timer T100. Questo FB viene chiamato 5 volte nel programma.Ora la domanda: dove vengono memorizzati i valori dei Timer?RonTheBon Link al commento Condividi su altri siti More sharing options...
varlux Inserita: 21 settembre 2006 Segnala Share Inserita: 21 settembre 2006 In italiano cred osi chiamino FB di istanzaGli FB sono blocchi funzionali con memoria, e la memoria è rappresentata dai DB che associ agli FB.Pur sfruttando lo stesso FB, dovrai associare ad esso un DB diverso ad ogni istanza: per questo motivo vengono chiamati DB di istanzadove vengono memorizzati i valori dei Timer?Se ti serve un valore diverso per ogni istanza, puoi sfruttare i parametri d'ingresso.Se il valore è identico ad ogni istanza, puoi memorizzarlo come parametro STAT.In entrambi i casi, i valori verranno memorizzati nel DB di istanza. Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 21 settembre 2006 Autore Segnala Share Inserita: 21 settembre 2006 Accidenti come e' difficile spiegare il problema.Ci riprovo.Il valore iniziale di ogni Timer nel FB di istanza viene immesso tramite i parametri d'ingresso (IN).Se per esempio un bit mi serve dentro la FB lo mettero' come parametro STAT, cosi' che posso riutilizzarlo piu' tardi senza perdere il valore.Con i Timer come si fa? Se ad esempio ho un Timer T100 che dura 10minuti, devo metterlo come parametro STAT? Se si, con quale Data Type?RonTheBon Link al commento Condividi su altri siti More sharing options...
varlux Inserita: 21 settembre 2006 Segnala Share Inserita: 21 settembre 2006 ...nel FB di istanza...Accidenti com'è difficile spiegarti che gli FB non sono d'istanza.......ma non ci riprovo. Semmai rileggi il post precedente. Se ad esempio ho un Timer T100 che dura 10minuti, devo metterlo come parametro STAT?Ripeto: se il valore è costante, memorizzalo su STAT, altrimenti su IN Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 21 settembre 2006 Autore Segnala Share Inserita: 21 settembre 2006 Si scusa, i DB sono di istanza.Ora credo di aver capito, almeno spero. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 24 settembre 2006 Segnala Share Inserita: 24 settembre 2006 (modificato) ho FB100 per una funzione. All'interno ho il Timer T100. Questo FB viene chiamato 5 volte nel programmaPremetto di non essere un super esperto, ma ho una domanda da farti, "Ron the bon" il tuo timer è quello che hai scritto?? Mi spiego T100 è un timer come T90-T1-T50-ecc non è un SBF4 "TON" ovvero un timer costruito apposta per lavorare all'interno di FB con DB di istanza? Xchè se fosse come ho inteso quello che stai cercando di fare equivale a scrivere 5 segmenti in oguno di essi richiami il T100, non sono mica convito che funzioni la cosa?? Modificato: 24 settembre 2006 da TravelMen Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 25 settembre 2006 Autore Segnala Share Inserita: 25 settembre 2006 Si Travelman,hai ragione. Siccome non sapevo mi sono espresso male.Ho trovato la soluzione:NON devo usare un timer T100 ma un timer definito nel FB, del tipo SFB4 TON.In questo modo posso avere quanti timer voglio che verranno attribuiti ogni volta che l'FB viene chiamato.Il Timer del tipo SFB4 e' un timer locale e viene usato solo nel FB in questione.Ma attenzione, all'inizio ho provato a far funzionare il tutto con il programma SIMPLC, la simulazione del plc su pc, ma c'e' un bug (io ho la versione V5.3 + SP3). Una volta scaricato il programma anti-bug il tutto ha funzionato.Grazie a tutti Link al commento Condividi su altri siti More sharing options...
Cesare Nicola Inserita: 25 settembre 2006 Segnala Share Inserita: 25 settembre 2006 Mi inserisco nella discussione, perchè non ho mai utilizzato SFB4 e non capisco bene una cosa: lo posso dichiarare come una variabile STAT di un DB di istanza e fin qui va bene. Comunque, al richiamo di SFB4 all'interno del blocco, dovrò assegnarli un suo DB di istanza, che non c'entra nulla col DB di istanza nel quale il timer è dichiarato, o no? Qual'è quindi l'utilità di TON? TravelMen dice che èun timer costruito apposta per lavorare all'interno di FB con DB di istanza: ma perchè deve esistere un timer specifico per FB con DB di istanza?Grazie Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 25 settembre 2006 Autore Segnala Share Inserita: 25 settembre 2006 No, quando chiami l' SFB4 all'interno del FB non devi assegnare nessun DB di istanza, solo 2 parametri d'entrata e 2 di uscita. Quindi puoi chiamare il SFB4 ogni volta che hai bisogno di un timer, ogni volta devi solo aggiungere i suoi parametri. Link al commento Condividi su altri siti More sharing options...
Cesare Nicola Inserita: 25 settembre 2006 Segnala Share Inserita: 25 settembre 2006 Avevo già provato, ma mi chiede sempre il DB di istanza. Faccio così:-dichiaro SFB4 come variabile STAT e lui mi inserisce automaticamente il nome "ton"-nel codice scrivo "call ton" o "call sfb4"- premo enter e me lo segna in rosso e mi dice che l'FB necessita di un Db di istanzaCosa sbaglio? Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 25 settembre 2006 Segnala Share Inserita: 25 settembre 2006 esempio di codice AWL Siemens (copialo nella cartella sorgenti e compila):FUNCTION_BLOCK FB 1 TITLE = VERSION : 0.1 VAR_INPUT start_timer_1 : BOOL; start_timer_2 : BOOL; start_timer_3 : BOOL; Time_1 : TIME; Time_2 : TIME; Time_3 : TIME; END_VAR VAR_OUTPUT out_timer_1 : BOOL; out_timer_2 : BOOL; out_timer_3 : BOOL; END_VAR VAR Instanz1 : SFB 3; Instanz2 : SFB 3; Instanz3 : SFB 3; END_VAR BEGIN NETWORK TITLE = U #start_timer_1; = L 0.0; BLD 103; CALL #Instanz1 ( IN := L 0.0, PT := #Time_1, Q := #out_timer_1); NOP 0; NETWORK TITLE = U #start_timer_2; = L 0.0; BLD 103; CALL #Instanz2 ( IN := L 0.0, PT := #Time_2, Q := #out_timer_2); NOP 0; NETWORK TITLE = U #start_timer_3; = L 0.0; BLD 103; CALL #Instanz3 ( IN := L 0.0, PT := #Time_3, Q := #out_timer_3); NOP 0; END_FUNCTION_BLOCK Link al commento Condividi su altri siti More sharing options...
Cesare Nicola Inserita: 27 settembre 2006 Segnala Share Inserita: 27 settembre 2006 OK, funziona grazie. Non so dire cosa sbagliavo, l'altro giorno.GrazieCiao Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 28 settembre 2006 Segnala Share Inserita: 28 settembre 2006 In questo modo posso avere quanti timer voglio che verranno attribuiti ogni volta che l'FB viene chiamato.Attenzione che c'è un limite al richiamo di timer all'interno di FB, trovi tutto su i dati utente della CPU, se non ricordo male in una 315-2DP il limite è 11dichiaro SFB4 come variabile STAT e lui mi inserisce automaticamente il nome "ton"Attribuendoli un nome es. "pippo"nel codice scrivo "call ton" o "call sfb4"no lo devi richiamare come call pippoNella finestra delle librerie, troverai il tuo SFB4 sotto la voce "blocchi con multi istanza" se non ricordo male Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 Scusate,ma voglio capire bene anche io.... neanche io sono espertissimo...suppongo di voler creare un FB o FC che mi faccia lampeggiare una gemma. utilizzo le mie procedure per fare la stessa cosa con più gemme richiamando di volta in volta la mia FB con DB istanza diversa (lampada 1, lampada 2, lampada 3, etc.). Nella FB supponiamo di utilizzare due temporizzatori... cosa succede alle istanze? il programma potrebbe non funzionare correttamente o solo un problema di velocità? Cioè i temporizzatori non vengono istanziati? se uso T101 e T102 e istanzio 3 volte la mia FB è come scrivere un programma dove per tre volte si richiamano gli stessi temporizzatori? se sì a cosa servono i temporizzatori Scusate anticipatamente le domande forse un pò banali Link al commento Condividi su altri siti More sharing options...
Ron the bon Inserita: 2 ottobre 2006 Autore Segnala Share Inserita: 2 ottobre 2006 I timer T101 o T102 (nel tuo esempio) sono timer globali, cioe' che si usano e sono visibili per tutto il programma. Quindi non puoi (anzi, non devi) usarequesti timer se usi delle FB con istanze: ogni volta il timer avra' valore diverso e il programma non funziona.Usando degli FB con DB di istanza, praticamente crei dei temporizzatori locali che valgono solo per il tuo DB. Nel tuo esempio devi definire 2 timer locali nel FB (STAT), ad esempio T_01 e T_02 del tipo SFB4. In questo modo avrai 2 timer ogni volta che chiami la tua FB con il tuo DB di istanza (lampada1, lampada2, lampadax).Il timer deve essere un parametro di tipo STAT. Link al commento Condividi su altri siti More sharing options...
Cesare Nicola Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 cosa succede alle istanze? il programma potrebbe non funzionare correttamente o solo un problema di velocità? Cioè i temporizzatori non vengono istanziati? se uso T101 e T102 e istanzio 3 volte la mia FB è come scrivere un programma dove per tre volte si richiamano gli stessi temporizzatoriNon devi usare T101 o Txxx, ma dichiarare nella tabella delle variabile, una variabile (ad esempio MioTimer), di tipo SFB4. Poi, nel codice, richiami "MioTimer" (CALL MioTimer). Così, hai creato un timer che "risiede" nel DB di istanza associato a quell'FB e non c'entra nulla con i timer tradizionali, come T101, ecc. Se richiami più volte lo stesso FB, con diversi DB di istanza, non succede nulla, anzi è proprio quello il vantaggio: puoi avere n timer che possono coesistere, perchè risiedono in differenti DB. Almeno credo di aver capito così. fai una prova col sorgente postato da KEOSMM e vedrai subito cosa succede.Ciao Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 ca..o allora devo modificarmi tutti i Temporizzatori S_EVERZ usati come ritardo all'inserzione nella FB!!! o sbaglio? Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 ...aggiungo... con la SFB 4!?La SFB3, usata in precedenza, mi sembra di capire dalla guida on-line che serve per generare degli impulsi...spero di aver capito... Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 ca..o allora devo modificarmi tutti i Temporizzatori S_EVERZ usati come ritardo all'inserzione nella FB!!! o sbaglio?dipende da quello che vuoi fare....aggiungo... con la SFB 4!?La SFB3, usata in precedenza, mi sembra di capire dalla guida on-line che serve per generare degli impulsi...nell'esempio è utilizzato SFB3 ma puoi utilizzare qualsiasi altro blocco, non solo SFB ma anche FB... Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 Ho realizzato dei ritardi all'inserzione per comandare motori e valvole di un compressore. Ad esempio apro la EV olio e attendo 1 secondo poi inizio parzializzazione... cose di questo genere. Tutte nella stessa FB.cosa vuoi dire con nell'esempio è utilizzato SFB3 ma puoi utilizzare qualsiasi altro blocco, non solo SFB ma anche FB...grazie. Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 2 ottobre 2006 Segnala Share Inserita: 2 ottobre 2006 dove dichiari:VAR Instanz1 : SFB 3; Instanz2 : SFB 3; Instanz3 : SFB 3; END_VAR puoi dichiarare quello che vuoi (SFB, FB, FC) a seconda di quello che devi realizzare... chiaramente quando lo richiami: CALL #Instanz1 ( IN := L 0.0, PT := #Time_1, Q := #out_timer_1);avrai risultati e dati diversi.------ritornando al tuo "problema"puoi sostituire tutti i timer "normali" utilizzando SFB3, o SFB4 o altro, a tuo piacimento.il mio consiglio è quello di prendere il codice, copiarlo, compilarlo ed effettuare delle prove, in questo modo capisci il funzionamento e di conseguenza puoi modificare il blocco per renderlo adatto alle tue esigenze. Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 3 ottobre 2006 Segnala Share Inserita: 3 ottobre 2006 come pensavo ...scusa se insisto ma allora i temporazzitaori e i generatori di impulsi standard dove è opprtuno utilizzarli? solo nei blocchi organizzativi che non vengono istanziati?Grazie Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 3 ottobre 2006 Segnala Share Inserita: 3 ottobre 2006 ma allora i temporazzitaori e i generatori di impulsi standard dove è opprtuno utilizzarli?nella cpu hai a disposizone 128 (o 256) timer, questi timer devono avere una sola "bobina" di comando.utilizzare una funzione con timer di sistema (SFC per interderci) non sei limitato dal numero di timer.chiarmante puoi sfruttare l'uno o altro sistema.il tutto dipende da cosa devi realizzare, e quanto semplice (o complesso) lo vuoi rendere. Link al commento Condividi su altri siti More sharing options...
pixel Inserita: 5 aprile 2007 Segnala Share Inserita: 5 aprile 2007 Ciao a tutti,riapro la discussione perchè mi sto cimentando con le teorie esposte nei post precedenti e, nello sviluppo del software, mi stanno sorgendo altre domande. Parto con una breve descrizione...Sto costruendo una FB per pilotare un compressore, qs. viene parzializzato con degli impulsi. La FB deve essere replicata tante volte quanti sono i compressori x cui ho eliminato tutti i TON globali e ho realizzato una FB a parte per la generazione di impulsi che utilizza la SFB3 e SFB4. La FB chiamata Pulse_GEN viene richiamata nella FB Compressore. Ecco le domande:1) Devo istanziare all'interno della FB compressore più volte la FB Pulse_GEN, quindi ho dichiarato la Pulse_GEN come variabile STAT e la utilizzo spudoratamente (sena appoggiarmi a DB di istanza) nella FB Compressore.... E' giusto operare così, oppure devo dichiarare tante varibili STAT, basate sulla FB Pulse_GEN, quante sono le istanze da utilizzare all'interno della FB Compressore.??? 2) Nella FB Compressore devo generare dei ritardi all'inserzione e quindi, non volendo utilizzare temporizzatori globali, uso la SFB4 come variabile STAT rinominata Ritardo. Ritardo viene richiamata più volte con valori sempre diversi di Tempo per l'ingresso PT. Ad es. 3 sec. per la Pompa_olio, 5 sec. per la EV_olio etc. E' giusto operare così o bisogna dichiarare più variabili STAT per es. Ritardo_EV_Olio, Ritardo_Pompa_Olio, etc.??? 3) Il discorso Vale anche x i contatori? mi spiego meglio... se nella FB Compressore devo utilizzare un contatore cosa sucederà alle istanze? Grazie anticipatamente a tutti Link al commento Condividi su altri siti More sharing options...
Matteo Montanari Inserita: 6 aprile 2007 Segnala Share Inserita: 6 aprile 2007 (modificato) io creerei (anzi creo) un "blocchetto" di dati per ogni temporizzatore, in questo modo non "confondi" le idee ed i tempi, diventerà solamente più lunga la DB di istanza ma al finale sono solamente 3 dati ogni timer. stessa cosa per i contatori Modificato: 6 aprile 2007 da Matteo Montanari 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