Piro Inserito: 25 settembre 2009 Segnala Share Inserito: 25 settembre 2009 Vediamo se riesco ad essere chiaro.Cpu 215 2 Profibus DP 4 schede EMM 223 DI 16xDC24V DO 16xRELAYPannello Esa VT50 (Solo visualizzazione messaggi)Questo è l'hardware in dotazione di una macchina oggetto della modifica.Si decide di cambiare totalmente il software.La macchina compie azioni a step, quindi riempie il serbatoio, se tutto è ok, procede con gli step sucessivi fino alla fine del ciclo di lavoro. Quindi decido di affrontare il problema con la tecnica bath, dal programma main richiamo il primo sottoprogramma che esegue le sue istruzioni e si chiude, se tutto va a buon fine, con il reset del merker che abilita il sottoprogramma in esecuzione ed il set del merker che abilita il sottoprogramma sucessivo, altrimenti riprende, dall'inizio, con la pressione del pulsante di marcia il sottoprogramma che stava eseguendo. Nessun problema e tutto fila liscio, siamo in fase di prova e mi chiedono di invertire alcuni step, quindi devo modificare tutti i merker dei sottoprogramma che intendo spostare nell'esecuzione della ricetta. Mi chiedevo se esiste un metodo più semplice ed automatico.Non chiedo la soluzione al problema, ma la possibilità di avere uno scambio di idee con persone probabilmente più preparate che mi indirizzino verso altre soluzioni magari da sfuttare per progetti futuri.Grazie Link al commento Condividi su altri siti More sharing options...
lucios Inserita: 25 settembre 2009 Segnala Share Inserita: 25 settembre 2009 Se ho capito quello che vuoi fare penso che potresti utilizzare una merker word che in base ad un determinato valore salta all'esecuzione di un sottoprogramma specifico, facendo un contatore di fasi.Se devi cambiare l'ordine di esecuzione ti basta settare il walore che ogni sottoprogramma restituisce nella word suddetta.Esternamente alle fasi puoi prevedere una routine che gira sempre da utilizzare come master.Ciao Link al commento Condividi su altri siti More sharing options...
Piro Inserita: 25 settembre 2009 Autore Segnala Share Inserita: 25 settembre 2009 Bravo, bella idea. Mi ero fissato con la sequenza fatta con i merker ma questa è decisamente migliore.Il tutto si può poi integrare con il pannello.Grazie. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 25 settembre 2009 Segnala Share Inserita: 25 settembre 2009 (modificato) Comunque, tanto per la cronaca, il 200 è il PLC con cui mi trovo meglio a "ricablare" i merker eccetera.Per cambiare un operando assoluto:Vai nell'editor blocchi fai in modo di vedere gli operandi simbolici (premi ctrl-Y )Vai nell'editor simboli e cambi tutti gli indirizzi che vuoiQuando compili tutto filerà liscio senza errori (saranno assegnati i nuovi indirizzi)Per modificare uno o più simboli:Vai nell'editor blocchi fai in modo di vedere gli operandi assoluti (premi ctrl-Y )Vai nell'editor simboli e cambi tutti i simboli che vuoiQuando compili tutto filerà liscio senza errori (saranno modificati i simboli) Modificato: 25 settembre 2009 da JumpMan Link al commento Condividi su altri siti More sharing options...
Piro Inserita: 28 settembre 2009 Autore Segnala Share Inserita: 28 settembre 2009 Grazie JumpMan, prezioso consiglio, avevo cercato invano una funzione ricabla. Grazie mille Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 30 settembre 2009 Segnala Share Inserita: 30 settembre 2009 (modificato) la tecnica si chiama "Macchina a stati finiti" , utilizzata in vari campi per automatizzare processi , elettroniche , applicazioni pc ect Crei un DB con all'interno strutture STEPS , RESET , AZIONI Ad ogni bit della struttura assegni un nome 1 Start step2 Attesa pulsante 3 VErifica dati 4 Chiusura porte 5 Avviamento motore 1 ectect La logica la implementi considerando che quando l'and delle word che compongono le strutture sono tutte uguali a zero vuol dire che sei pronto a partire dal passo iniziale .L'azzermento puo avvenire da codice oppure premendo un pulsante in modalita manuale , azzeri tutti i passi e le azioni o i relativi passi di reset macchina - impianto .Con dei controlli verifichi se eseguire reset piuttosto che steps .Al passo iniziale verifichi la condizione che serve per resettare se stesso e settare il passo successivo .Non c'e' bisogno che la sequenza segue l'ordine dei bit , l'importante e' che sai quello che devi fare con commenti e simbolo ben documentati .In ogni passo avrai delle condizioni , tempi , finecorsa , cumulativi di sottocicli , che ti permetteranno di finire il passo attuale ed iniziarne uno successivo , ma puoi anche lanciare vari passi in parallelo che si sincronizzano in un passo particolare per azzersi o morire senza lanciare altri passi Il cumulativo dei passi che ti fanno eseguire un movimento li metti in or e crei la relaztiva azione che userai poi nel ramo automatico della tua richiesta di comando , in parallelo ai comandi manuali nella modalita manuale Se per allarme o stop ciclo o emergenza fermi tutto , alla ripartenza del ciclo , essendo i bit o il bit dei passi ancora settato , questo sistema ti permette di ripartire dal ultimo passo che era in esecuzione senza perdere la sequenza .Puoi fare dei controlli per rilanciare da dove eri rimasto , o da dove vuoi in base alle condizioni che hai .Se invece vuoi ripartire da zero , prima di mettere in automatico il tuo selettore e premere start , premi un pulsante che resetta tutti i passi e tutte le azioni .Le azioni le puoi assegnare settando con S , oppure assegnando direttamente la bobina , oppure temporizzando i passi che vuoi con timer , ect ect ect HO scritto dei documenti presso l'azienda dove lavoro per stabilire protocolli e strutture dei sw che facciamo per le nostre macchine Questo sistema lo uso anche in informatica , in elettronica embedded, in video game con xna ect .E' una tecnica molto valida , efficace e controllabile La uso anche in protocolli di comunicazione per sincronizzare ricezioni , preparazione dati e buffer , trasmissioni , controlli ect Poi per ogni macchina o parte di essa che hai nell'impianto crei un FC con relativo DB dei dati All'interno di ognuno di essi descrivi le copie degli ingressi , generi allarmi , stati vari , logiche di richiesta comando , ect Dimenticavo , i commenti dei passi , copiati ed incollati dal db al pannello operatore nelle relativa finestra ti visualizzano cosa sta facendo l'impianto o cosa farebbe in caso di restart .L'istruzione TAW ti permette di swappare i byte all'interno delle word in modo tale che non dovrai romperti le palle invertendo i bit delle segnalazioni coe qualcuno ancora fa con siemens , ma di copiarli ed incollarli cosi belli belli come sono .Questo mi ha tolto molti problemi con clienti in tutto il mondo Quando , e se , chiamano per problemi chiedo di leggere cosa sta facendo la tal macchina da pannello e in poco tempo so dare risposte senza collegarmi al plc Leggi bene e studia questo sistema , non mi chiedere sorgenti ne documenti .Pensa e vedrai che ti troverai bene ciao walter Modificato: 30 settembre 2009 da walterword Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 30 settembre 2009 Segnala Share Inserita: 30 settembre 2009 (modificato) ...prima utilizzavo un intero che cambiava valore ma questo vuol dire non avere simbolo diretto e non poter ramificare diversi passi contemporaneamente .Prima usavo dei switch per verificare il valore della variabile di stato , adesso utilizzo if -then con i passi a bit anche in ambiente informatico .Con i passi SET - RESET - SET mi trovo da dio Modificato: 30 settembre 2009 da walterword Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 30 settembre 2009 Segnala Share Inserita: 30 settembre 2009 Bravo walterword, hai spiegato molto bene.Anch'io uso quel metodo, non ho mai usato la word proprio per questo motivo:...vuol dire non avere simbolo diretto e non poter ramificare diversi passi contemporaneamenteSolo non uso SET-RESET ma preferisco la ritenuta, ma penso sia questione di abitudine. Link al commento Condividi su altri siti More sharing options...
Piro Inserita: 30 settembre 2009 Autore Segnala Share Inserita: 30 settembre 2009 Grazie Walter per la tua risposta, ho dato una rapida letta ad alcune dispense presenti nella rete e momentaneamente ho colto il senso generale della "tecnica", ho molti dubbi e molte domande.Ho bisogno di un pò di tempo per leggere e provare.Mi piacerebbe avere altre informazioni su "tecniche" di programmazione da potere approfondire anche se non sono propriamente attinenti al caso esposto, che ho deciso di terminare con la stessa tecnica con la quale è nato. (Senza nulla togliere ai preziosi consigli avuti, ma il lavoro deve essere consegnato e posso provare in seguito altre varianti).Grazie a tutti. Link al commento Condividi su altri siti More sharing options...
Piro Inserita: 12 gennaio 2010 Autore Segnala Share Inserita: 12 gennaio 2010 (modificato) (In una precedente discussione, http://www.plcforum.it/forums/index.php?sh...c=61759&hl=,) ***************** Nota del moderatore *************************Questa messaggio è stato unito alla discussione precedente perchè ne è una logica prosecuzione.Aprire una nuova discussione è solo causa di cattiva comprensibilità del problema; meglio proseguire con l'originale, in questo modo si ahnno sott'occhio tute le informazioni.********************************************************************************avevo chiesto consigli sul mio approccio alla stesura di un programma, che per mancanza di tempo e conoscenza ho consegnato seguendo il metodo iniziale, nel tempo ho provato a modificarlo con i suggerimenti ricevuti, senza grandi risultati e con una profonda delusione personale nel non avere capito quanto mi era stato detto. Riassumiamo brevemente: dal Main , con la pressione del pulsante di inizio ciclo, richiamo il primo sottoprogramma che compie le operazioni e termina, in assenza di allarmi con il reset del merker che lo ha abilitato ed il set del merker che abilita il sottoprogramma sucessivo, in presenza di allarmi resetta il merker che lo ha abilitato e abilita un terzo merker che lascia il programma in attesa di una nuova pressione del pulsante per riprendere l'esecuzione del ciclo; inoltre esistono alcuni sottoprogramma, sempre attivi, che gestiscono il corretto funzionamento del ciclo. Il programma è composto da 40 sottoprogrammi, quindi una infinità di merker, una scarsa leggibilità ed un pericolo costante di superare la memoria a disposizione. Quindi seguo come prima cosa l'idea di Lucios, ogni sottoprogramma con un'operazione di Mov assegna ad una variabile un valore, che richiama altri sottoprogramma, verifica allarmi e tempi, ottima leggibilità ho a che fare con una sola variabile ma ricompilo il tutto e supero di gran lunga la memoria a disposizione e persino quella del mio programma precedente. Sconfortato ho riscritto nella speranza di nuovi spunti o delucidazioni.Ringrazio Tutti Modificato: 12 gennaio 2010 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 14 gennaio 2010 Segnala Share Inserita: 14 gennaio 2010 (modificato) E' così complicata questa macchina? 40 sotto programmi ?Non è che magari hai fatto un sotto-programma per ogni variante del ciclo?Riesci a dividere il ciclo in "macro-fasi" (parola inventata al momento) anzichè in "fasi"?Provo chiarire meglio: se in una sbr ci metti tutto ciò che serve per lo svolgimento del ciclo, se vuoi con le word, oppure con i bit, definendo per ogni step (o passo o fase) non la singola azione ma un gruppo di azioni... Esempio astratto (non so se calza): immagina che il plc sia una fabbrica dove le uscite sono gli operai, ognuno di essi compie una determinata azione, ma qualcuno (il caporeparto) deve dire a loro quando è il momento di farla, ma ci deve essere anche un direttore che coordina il tutto e interagisce con i capi-reparto, insomma una struttura ad albero.Esempio concreto:Oggetti: Nastro, Manipolatore, morsa, Foratrice, Filettatrice- Il manipolatore preleva 1 pezzo dal nastro e lo posiziona in morsa- La morsa si chiude- La foratrice fa il foro- La filettatrice fa il filetto- Il manipolatore preleva il pezzo dalla morsa e lo rimette sul nastroLasciando perdere per il momento i particolari, io questo programma lo strutturerei così:In una SBR ci metto tutte le "fasi" (io mi trovo molto meglio con 1 bit per fase, non con i contatori):- Controlla arrivo pezzo- (Pezzo in posizione di prelievo)- Preleva pezzo grezzo- (Pezzo grezzo prelevato)- Posiziona pezzo su morsa- (Pezzo posizionato)- Esegue foratura- (Foratura eseguita)- Esegue filettatura- (Filettatura eseguita)- Preleva pezzo lavorato- (Pezzo lavorato prelevato)- Scarica pezzo lavorato sul nastro- (Pezzo scaricato sul nastro)- (fine ciclo) Come vedi per effettuare questa lavorazione ho usato solo 15 flags!Se vuoi inserire una variante (p.es. "scarica pezzo difettoso su scivolo") basta che lo aggiungi prima del terzultimo qui sopra (interbloccando chiaramente il terzultimo).Questi flags vanno a interagire nel resto del programma combinandosi con i consensi dei finecorsa ecc.ecc.Per esempio:"Pezzo in posizione di prelievo" "Manipolatore alto" "ciclo" "Nastro" --------|/|-------------------------+----------| |----------------------| |-----------------( ) | "Pezzo scaricato sul nastro" | --------| |-------------------------+Spero di averti fatto capire cosa intendo... Modificato: 14 gennaio 2010 da JumpMan 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