aacciavatti Inserito: 27 marzo 2009 Segnala Share Inserito: 27 marzo 2009 Ciao ragazzi, io faccio il programmatore di macchine per assemblaggio e avvitatura, mi trovo a dover inserire dei contatori per i pezzi buoni e scarti (azzerati all'accensione oppure permanenti per indicare intervalli di manutenzione).Il problema si ha quando capita di avere macchine molto veloci (tipo 2 ciclo al secondo) che lavorano su 3 turni di 8 ore pertanto sono più di 170000 cicli al giorno. Volevo fare un contatore fino al milione che poi al raggiungimento del milione di cicli mettesse “1” in un’altra variabile e resettasse le unità:VD10: 0 milioni di cicliVD14: 999999 cicli attuali +1 VD10: 1 milioni di cicli VD14: 0 cicli attuali Visto che la cosa si ripete in ogni applicazione ho deciso di creare una SBR da inserire come libreria.Fatto tutto, è funzionante, ma se inserisco 2 o più blocchi mi conta uguale su tutti…Non so se mi spiego… se ho:I0.1 che mi conta +1 sul primo contatore e il valore è VD 10 per i milioni e VD 14 per le unità eI0.2 che mi conta +1 sul secondo contatore e il valore è VD 18 per i milioni e VD 12 per le unitàIn entrambe le Dword VD 14 e 12 a ogni impulso di I0.1 e/o I0.2 mi conta +1…Quindi se volessi usare un contatore per i pezzo OK e l’altro per i NOK mi troverei gli stessi valori…Premetto che è la prima volta uso le librerie e ho usato le Variabili Local impostabili nella tabellina alta in MicroWin… Sicuramente è una **** la soluzione ma mia affido a voi in quanto più esperti. Gazie Alessandro Link al commento Condividi su altri siti More sharing options...
Gianmario Pedrani Inserita: 27 marzo 2009 Segnala Share Inserita: 27 marzo 2009 E normale, nel senso che tu hai utilizzato delle variabili temporanee, questo comporta che se hai 2 richiami, le variabili si sovrappongono, per fare quello che vuoi fare tu devi usare nell'interfaccia dei blocchi variabili di tipo input-output in questo modo a ogni richiamo passi zone di memoria differenti, e risolvi il tuo problemaciao. Link al commento Condividi su altri siti More sharing options...
zanellatofabio Inserita: 27 marzo 2009 Segnala Share Inserita: 27 marzo 2009 (modificato) Ciao , non ci ho capito molto , maVD 18 per i milioni e VD 12 per le unitàforse volevi scrivere VD22 .Se dici che il problema è richiamando 2 o + volte la stessa SBR la mia domanda è :la scrittura di vd10 e vd14 e' come e' fatta ?Ci sono variabili in/out passate alla SBR ?IN generale se fai una SBR richiamabile + volte che deve esegue un qualcosa su una VD qualsiasi : dichiari In/out la variabile VD pippopoi nel codice sciverai l' operazione su pippo , del tipo se ho il bit tal dei tali carica pippo sommaci 1 e trasferisci il risultato su pippo stessa .nel richiamo della SBR dichiarerai pippo come VD1000 nel primo richiamo , VD1004 nel secondo richiamo ecc ecc .Cosi avrai che VD1000 conta i pezzi nel primo richiamo della SBR , VD1004 sara' invece il secondo contatore ecc ecc .Questo era solo un esempio per chiarire , nel tuo caso avrai 2 variabili locali una per i clcli attuali e una per i milioni di cicli ...Ops ho risposto assieme a Gianmario , ..... pardon Modificato: 27 marzo 2009 da zanellatofabio Link al commento Condividi su altri siti More sharing options...
Rwhite Inserita: 27 marzo 2009 Segnala Share Inserita: 27 marzo 2009 Ciao a tutti, mi sembra ci sia anche un errore, VD12 e VD14 si sovrappongonociao rwhite Link al commento Condividi su altri siti More sharing options...
batta Inserita: 27 marzo 2009 Segnala Share Inserita: 27 marzo 2009 E' come dice Gianmario. Le variabili che passi alla subroutine devi dichiararle IN_OUT.Non sono sicuro però che questa subroutine ti serva a molto. Hai considerato che con una DINT arrivi a contare fino a +2147483647 cicli?A due cicli al secondo, 24 ore su 24, 7 giorni su 7, fanno quasi 35 anni di lavoro, senza bisogno di complicarsi la vita con doppi conteggi. Link al commento Condividi su altri siti More sharing options...
aacciavatti Inserita: 31 marzo 2009 Autore Segnala Share Inserita: 31 marzo 2009 Ciao! Grazie a tutti per le risposte!VD12 in realtà è un errore, intendevo VD22Per quanto riguarda si, ci ho pensato dopo al fatto che una DWord permette di contare un bel po' di cicli, ma visto che c'ero e che l'info mi torna utile in altri case ho postato lo stesso il problema!Comunque l'AWL è questo:Network 1LD L0.0EU+D 1, LD5Network 2LDD= LD5, 1000000+D 1, LD1AENOMOVD 0, LD5Network 3 LD L0.1EUMOVD 0, LD1AENOMOVD 0, LD5Grazie ancora a tutti!Ale Link al commento Condividi su altri siti More sharing options...
emarcol Inserita: 31 marzo 2009 Segnala Share Inserita: 31 marzo 2009 C'è qualcosa che non mi torna. Facciamo un esempio:1) Creo SBR_0 che contiene anche la variabile PIPPO di tipo TEMP 2) La richiamo una prima volta3) La richiamo una seconda voltaIn questo programma la variabile PIPPO ha sempre lo stesso valore?Io credo di no, come per CX-Programmer di Omron troverei sensato che ogni TEMP fosse legata alla sua istanza di richiamo.Altrimenti a che cosa servono le TEMP?Purtroppo non ho un S7-200 qui per fare una prova...Sbaglio qualcosa?Ciao a tutti. 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