bepin Inserito: 7 gennaio 2016 Segnala Share Inserito: 7 gennaio 2016 ciao a tutti! e buon annonel vecchio S7 c'era, in OB1, la variabile "OB1_PREV_CYCLE" da trasferire in un dato e molto utile per generare timers molto precisiadesso sto cercando di tradurre i miei vecchi blocchi S7 ma nel tia portal non riesco a trovare qualcosa di simile,-- mi potete aiutare?graziegiuseppe Link al commento Condividi su altri siti More sharing options...
FabioS.PLC Inserita: 8 gennaio 2016 Segnala Share Inserita: 8 gennaio 2016 Per avere l’informazione contenuta in quel tag io sceglierei tra questi due modi:1)leggere il tempo del sistema in OB1 (in questo caso effettuo tutte le operazioni in una FB che richiamo in OB1) e sottrarlo al valore letto nel ciclo precedente.2)Utilizzare un Timer e sottrarre al valore attuale del “elapsed time” il valore precedente.Io preferirei usare il secondo metodo in quanto richiede un tempo di esecuzione minore.Per il primo caso creo la seguente FB1: dove come si può notare posso avere il tempo anche in nanosecondi; mentre nel secondo caso creo la seguente FB2 (nel timer sotto ho impostato solo 10secondi che è un tempo troppo basso, meglio mettere t#24d).Creo poi una FB con un ciclo while all’interno creato appositamente per aumentare il cycle time (per testare il tutto), ovvero:FUNCTION_BLOCK "Ciclo_WHILE" { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR intero1 : DInt; END_VAR BEGIN #intero1 := 0; WHILE #intero1<99999 DO #intero1 := #intero1 + 1; END_WHILE; END_FUNCTION_BLOCKQuindi chiamo nel Main tutte e tre le FB:Ho testato tutto nel simulatore e dovrebbe funzionare: Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 gennaio 2016 Segnala Share Inserita: 9 gennaio 2016 Nel 1500 puoi utilizzare le istruzioni RUNTIME oppure TIME_TCK. Il 1200 non supporta solo RUNTIME.L'istruzione RUNTIME, almeno nel 1200, presenta un piccolo inconveniente: per la misura del tempo utilizza un contatore interno che, massimo una volta al minuto, può andare in overflow. In questo caso viene restituito un tempo di scansione negativo. Si deve quindi fare un controllo sulla validità del valore restituito prima i prenderlo in considerazione. Oppure, se imposti OB1 come "non ottimizzato", trovi ancora la variabile locale OB1_PREV_CYCLE. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 9 gennaio 2016 Segnala Share Inserita: 9 gennaio 2016 sono comunque e sempre timer asincroni anche se calcoli la variazione di scansione tra un ciclo e l'altro , tipo derivata.Il tempo di ciclo dipende dall'esecuzione del programma e dai task che il plc esegue inbackground come la comuncazione etc Puoi anche usare il fronte di salita di un merker di clock ed incrementare dei contatori e di conseguenza ricavarne il timer software.Il mio consiglio e' quello di utilizzare prima quelli di sistema ciao Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 gennaio 2016 Segnala Share Inserita: 9 gennaio 2016 (modificato) L'istruzione RUNTIME, almeno nel 1200, presenta un piccolo inconveniente: per la misura del tempo utilizza un contatore interno che, massimo una volta al minuto, può andare in overflow.Anche i metodi descritti da FabioS.PLC ogni tanto presentano lo stesso problema e l'utilizzo di quella variabile può dare risultati imprevisti... Bisogna inserire una gestione del "rollover". Una domanda per Batta, visto che per il momento non utilizzo il TIA:Oppure, se imposti OB1 come "non ottimizzato", trovi ancora la variabile locale OB1_PREV_CYCLE.Che significa "ottimizzato", che vantaggi ha ? Modificato: 9 gennaio 2016 da JumpMan Link al commento Condividi su altri siti More sharing options...
batta Inserita: 9 gennaio 2016 Segnala Share Inserita: 9 gennaio 2016 La dicitura "blocco ottimizzato" indica un blocco (OB, FC, FB o DB) nel quale l'indirizzamento delle variabili è gestito dal sistema. L'accesso alle variabili può avvenire solo utilizzando il simbolico, perché l'indirizzo non è noto.Per esempio, in un DB "non ottimizzato" dopo la compilazione appaiono gli indirizzi delle variabili, esattamente come in Step7 classico. In un DB "ottimizzato" la colonna con gli indirizzi non c'è. Io non ho mai fatto prove, ma Siemens afferma che la gestione dei blocchi "ottimizzati" è più veloce. Non è però possibile utilizzare sempre blocchi ottimizzati. Per esempio, ci sono istruzioni (BLK_MOVE, FILL e molte altre) che utilizzano gli indirizzi assoluti. Le variabili collegate a queste istruzioni devono quindi tassativamente fare parte di un blocco non ottimizzato. Nel caso poi si utilizzino pannelli operatore di terze parti (e, se non vado errato, anche con WinCC), siamo ancora nella situazione in cui si fa riferimento agli indirizzi. I DB con variabili di scambio con questi HMI/SCADA devono quindi essere "non ottimizzati". Nessun problema invece, anche con DB "ottimizzati", utilizzando i pannelli operatore Siemens programmati con TIA Portal. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 9 gennaio 2016 Segnala Share Inserita: 9 gennaio 2016 Grazie Batta.Quindi, da come la vedo io, non c'è nessun pro ad averlo ottimizzato se non quello di una stesura (forse) più rapida del programma. non si devono fare xref e non ci si deve preoccupare dell'indirizzamento, ci pensa lui ma "lo tiene nascosto solo per l'uso con i suoi HMI"...Nel caso del topic mi sembra che la soluzione migliore sia avere OB1 non ottimizzato.ciao Link al commento Condividi su altri siti More sharing options...
bepin Inserita: 23 febbraio 2016 Autore Segnala Share Inserita: 23 febbraio 2016 grazie -in ritardo- per le risposte i timer che generavo sono principalmente per fare gli allarmi di movimento ( es. il cilindro che non esegue la manovra in un certo tempo ..) e volevo un'area separata tanto per distinguerli; quindi penso che mi appoggerò ai merker clock di sistema ..tanto non mi serve gran precisione un timer così mi era utile con i pannelli non Siemens e che non accettano il dato #s5t.... ma mi bastava una word qualsiasi magari in int. comunque grazie mille per le risposte e, con un po' di tempo proverò anche le due FB Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 4 maggio 2016 Segnala Share Inserita: 4 maggio 2016 Salve riprendo un attimo la conversazione per approfondire la questione tempo di ciclo. Se avessi la necessità di eseguire diversi calcoli in un tempo di ciclo prestabilito, cercando di ottenere così un'esecuzione Real time, è possibile utilizzare i blocchi di sistema già disponibili dal plc per esempio: OB 32 - 33 - 34 - 35 avendo la certezza di eseguirli in maniera deterministica ? Se questo fosse possibile, eventualmente, dovrei prendere i valori di due pt100, fare la differenza e moltiplicarla per il valore dato da un flussimetro e successivamente fare l'integrale del prodotto risultante in un intervallo di tempo predefinito. Secondo voi è una cosa fattibile? grazie mille Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 4 maggio 2016 Segnala Share Inserita: 4 maggio 2016 Gli OB a tempo sono fatti apposta. 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