Paolo-G Inserito: 29 ottobre 2009 Segnala Inserito: 29 ottobre 2009 Salve a tutti, da qualche giorno seguo questo forum e ho iniziato anche a dare un occhiata allo Step7.Sto cercando di realizzare la prima applicazione, con molte difficoltà non avendo nozioni per questo tipo di programmazione, ma pian pino sto risolvendo i vari problemi che riscontro.Vengo all’inghippo, sto cercando di realizzare lo schema del semaforo, di seguito il progetto prefissato:Accensione impianto (RUN)---> Nessun AzioneRUN su E0.0 ---> Tutte le lanterne gialle lampeggiano con intermittenza di un secondo.RUN su E0.1 ---> Reset di E0.0 e delle funzioni annesse + Avvio Automatismo1 Passo ---> Tutte le lanterne rosse si accendono per x tempo2 Passo ---> In una direzione si accendono le lanterne verdi l’altra rimane il rosso.3 Passo ---> Accensione giallo su verde dopo x tempo dall’accensione del verde.4 Passo ---> MI SONO INCEPPATO.Nel 4° passo dovrei accendere il Rosso sul Giallo/Verde che spengo e far partire il Verde nell’altra direzione.SEGMENTO 8: U T 3 L S5T#5S SE T 4 NOP 0 NOP 0 NOP 0 U T 4 R A 0.1 R A 0.2 R A 0.6 R A 1.1 R A 1.2 R A 1.6 = A 0.3 ???????????????? Lanterna Rossa 1 da accendere. = A 0.4 = A 1.3 ???????????????? Lanterna Rossa 2 da accendere. = A 1.4 Quando inserisco l’accensione delle lanterne nel segmento 8 mi va in tilt il 1° Passo, cioè all’avvio le lanterne A0.3 e A1.3 non si accendono più per il tempo x. Premetto le due A0.3 e A1.3 vengono resettate nel SEGMENTO 6: U E 0.1 L S5T#5S SE T 2 NOP 0 NOP 0 NOP 0 U T 2 R A 0.3 R A 1.3 = A 0.1 = A 1.1 Essendo ai primissimi passi, l’unica spiegazione che riesco a darmi è che non è possibile usare due uscite da due punti diversi del programma?Dove sbaglio?Ringrazio anticipatamente per l’aiuto.P.S. ripeto è il primo approccio, non sono neanche riuscito ad utilizzare il merker di clock per il lampeggiamento , però sono riuscito ad impostarne il valore .
Savino Inserita: 29 ottobre 2009 Segnala Inserita: 29 ottobre 2009 l’unica spiegazione che riesco a darmi è che non è possibile usare due uscite da due punti diversi del programma?Infatti, non va bene.Senza entrare nello specifico del codice da te implementato, se vorresti comandare la stessa uscita da diversi segmenti o punti del programma , appoggiati piuttosto su delle merker e poi efettua una assegnazione logica sulla uscita.Esempio :U E 2.0 = M 0.0 U E 1.0 = M 0.1 O M 0.0 O M 0.1 = A 0.0
Paolo-G Inserita: 29 ottobre 2009 Autore Segnala Inserita: 29 ottobre 2009 Grazie della tempestiva risposta Savino.Proverò a risolvere diversamente, usando altre uscite, poichè ritengo sia più semplice (per me), per il momento voglio solo iniziare a comprendere il funzionamento, senza addentrarmi troppo in tutte le potenzialità di questo linguaggio, questo per non scoraggiarmi prima di aver iniziato.
batta Inserita: 30 ottobre 2009 Segnala Inserita: 30 ottobre 2009 Proverò a risolvere diversamente, usando altre usciteNon devi usare altre uscite (e poi che faresti, le cableresti in parallelo?).Segui il consiglio di Savino.Non si tratta di fare cose complicate ma, anzi, di semplificarle.L'utilizzo di merker di appoggio è essenziale, è alla base della programmazione di un plc. Di qualsiasi plc.
Paolo-G Inserita: 30 ottobre 2009 Autore Segnala Inserita: 30 ottobre 2009 Grazie batta della risposta.Ho seguito il vostro consiglio, ho cercato di utilizzare i merker ma continua a non funzionare, ecco riassumendo cosa ho fatto:Segmento 1: ---> E1.0 ON, E0.2 OFF U E 1.0 // Valore 0000_0001 = M 5.1 // Valore 0000_0010 U M 5.1 // Valore 0000_0010 = A 0.3 // Valore 0000_0000 --->??? = A 0.6 // Valore 0000_0000 --->??? Segmento 2: ---> E1.0 OFF, E0.2 ON U E 2.0 // Valore 0000_0001 = M 5.2 // Valore 0000_0100 U M 5.2 // Valore 0000_0100 = A 0.3 // Valore 0100_1000 = A 0.6 // Valore 0100_1000 Il problema persiste quando inserisco A0.3 e A0.6 nel E0.2 ON il primo non funziona più.A0.3 e A0.6 sono le lampade gialle, nei segmenti della E0.1, con due timer si accendono e si spengono ad intervalli regolari, nei segmenti della E0.2 che riguarda l’automatismo si accendono una volta A0.3 sul verde e l’altra è spenta e viceversa.I merker sono diversi su due diverse uscite.Dove sbaglio?L’esempio proposto da Savino funziona alla perfezione.
ken Inserita: 30 ottobre 2009 Segnala Inserita: 30 ottobre 2009 è sempre un'uscita doppia a0.3 e a0.6 sono nei due segmenti
Paolo-G Inserita: 30 ottobre 2009 Autore Segnala Inserita: 30 ottobre 2009 Ciao ken, grazie dell’intervento, segmenti sono più di due, in diversi punti richiamo A0.3 e A0.6 usando i merker, ma funziona solo all’ultimo richiamo, i precedenti vengono annullati dall’ultimo anche se si trova in OFF.
batta Inserita: 30 ottobre 2009 Segnala Inserita: 30 ottobre 2009 (modificato) I merker di appoggio ti servono proprio per evitare di richiamare più volte la stessa uscita.Se tu ad una uscita dici dieci volte di accendersi, e poi, come ultimo comando, le dici di spegnersi, tu la vedrai sempre spenta.O meglio, se interroghi l'immagine delle uscite nel programma, la vedi accesa.Ma l'aggiornamento fisico dello stato dell'uscita viene fatto una sola volta a fine elaborazione programma.Quindi, l'uscita sarà sempre spenta.E questo non vale solo per Siemens, ma per tutti i plc.Del resto, prova a chiederti: come farebbe il plc a sapere quale istruzione tu vorresti eseguire e quale invece vorresti ignorare?Il plc (se non si effettuano salti) esegue tutte le istruzioni che tu scrivi e, se nell'ultimo segmento hai detto alle uscite che devono spegnersi, si spegneranno, indipendentemente da quante volte tu, prima abbia comandato l'accensione.Tieni presente che il fatto che nell'ultimo segmento lo stato dell'ingresso sia OFF, non significa che le istruzioni in esso contenute debbano essere ignorate, ma significa che stai comandando lo spegnimento delle uscite.Se così non fosse, come faresti a spegnerle?Il tuo codice dovrebbe diventare come segue:Segmento 1: ---> E1.0 ON, E0.2 OFF U E 1.0 = M 5.1 Segmento 2: ---> E1.0 OFF, E0.2 ON U E 2.0 = M 5.2 Segmento 3: O M 5.1 O M 5.2 = A 0.3 = A 0.6 Anzi, nel caso specifico di questo esempio, sarebbe sufficiente: Segmento 1: O E 1.0 O E 2.0 = A 0.3 = A 0.6Chiaro, ora? Modificato: 30 ottobre 2009 da batta
Paolo-G Inserita: 30 ottobre 2009 Autore Segnala Inserita: 30 ottobre 2009 Ne deve passare acqua sotto i ponti ( = codice per le mie mani).Era proprio questo che mi portava in errore.|| E0.0| ---| |----------------------( )||---||---| E0.1|---| / |----------------------( )||Credevo proprio che il programma partisse dal primo ON che riceveva, escludendo il codice non "Alimentato", non tenendo conto delle uscite che incontrava nei segmenti di E0.0.Grazie batta, tutto chiaro e applicando il tuo esempio funziona correttamente.
Paolo-G Inserita: 31 ottobre 2009 Autore Segnala Inserita: 31 ottobre 2009 Finalmente ho terminato questo piccolo progetto, tutto sembra funzionare alla perfezione, le lanterne rispettano i tempi.L’ultimo problema che risulta è la creazione del ciclo continuo.L’automazione avviene abilitando la E0.1 e si svolge dal Segmento 4 al 10.Giustamente all’ultimo segmento il programma termina, è possibile creare un ciclo dal segmento 4 al segmento 10 che si ripeta fin quando la E0.1 resta abilitata?
busanela Inserita: 31 ottobre 2009 Segnala Inserita: 31 ottobre 2009 E' sufficiente un salto condizionato all'etichetta in segmento 4, se l'RLC di E0.1 è 1.
Paolo-G Inserita: 31 ottobre 2009 Autore Segnala Inserita: 31 ottobre 2009 Grazie busanela, dopo un paio d’ore di manuale sono giunto alla seguente conclusione U M 1.1SPB PNO1Ora tutto funziona, anche il ciclo e perfetto.Noto solo un piccolo particolare, i merker che ho usato, durante il ciclo del programma di tanto in tanto vengono attivati per un istante e poi si disattivano, non provocando nessun azione sulle uscite.Praticamente i merker che comandano le uscite in quel momento restano fissi mentre qualche altro che non è utilizzato in quel momento è come se ricevesse un impulso per un tempo brevissimo.È una cosa normale?Sul manuale ho letto (ma non ancora approfondito l’argomento) che i bit di merker da MB0 a MB16 sono detti ritentivi per alcune CPU, potrebbe essere questo il problema?
Paolo-G Inserita: 31 ottobre 2009 Autore Segnala Inserita: 31 ottobre 2009 Sul manuale ho letto (ma non ancora approfondito l’argomento) che i bit di merker da MB0 a MB16 sono detti ritentivi per alcune CPU, potrebbe essere questo il problema?Ho cambiato il valore dei merker utilizzando un numero superiore al 16, il problema non si presenta più.Ringrazio tutti per i preziosi consigli.
triodegecio Inserita: 1 novembre 2009 Segnala Inserita: 1 novembre 2009 Sul manuale ho letto (ma non ancora approfondito l’argomento) che i bit di merker da MB0 a MB16 sono detti ritentivi per alcune CPU, potrebbe essere questo il problema?Ho cambiato il valore dei merker utilizzando un numero superiore al 16, il problema non si presenta più.il MB0 se non lo ai modificato nella config hw e quello dedicato ai clockbasta non usarlo come merker nel sw
Paolo-G Inserita: 4 novembre 2009 Autore Segnala Inserita: 4 novembre 2009 Volendo creare una sorta di pannello operatore per il programma del PLC (simulato senza PLC),ho creato una maschera in visual basic e collegata al simulatore, se interessa, al seguente link vi è un video dimostrativo: niente di speciale, un incrocio con semafori.
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