Vai al contenuto
PLC Forum


Problemi Con I Cicli!


Enrico Ghisla

Messaggi consigliati

Salve a tutti sono un ragazzo che frequenta luna scuola professionale...nel tempo libero sto cercando di imparare ad usare il Plc.

volevo chiedere,se io voglio creare un programma kop con una sequenza e alla fine della sequenza si deve ripetere come faccio? Grazie mille.

Link al commento
Condividi su altri siti


Dovresti semplicemente condizionare il riavvio del ciclo con un merker utilizzato nell'ultima fase del ciclo da ripetere; se si deve ripetere una volta sola non ti serve utilizzare il controllo del fronte di salita/discesa, cosa che è invece importante se la cadenza deve essere continua.

Link al commento
Condividi su altri siti

Ci sono diverse maniere per implementare quello che chiedi: quello che ti volevo suggerire io è di inserire all'inizio del ciclo da ripetere, il contatto di un merker che si attiva quando il ciclo stesso è arrivato alla fine. In questo modo è come se tu, per esempio, schiacciassi nuovamente il pulsante che ti avvia il ciclo la prima volta; l'utilizzo del fronte, rispetto ad un set del merker in questione, ti permette ogni volta che il ciclo termina di ripartire, reimpostando lo start, cosa che invece non ti è possibile se hai effettuato un'operazione di set, che richiede invece un reset del merker di ripetizione.

Più chiaro sarebbe con un esempio, ma vorrei che lo facessi tu: visto che vuoi imparare, il ragionare su questo tipo di algoritmo è un ottimo inizio.

Link al commento
Condividi su altri siti

eh ma non ho nessuna opportunità di provare se quello che faccio funziona non potresti allegarmi un esempio? se possibile ti ringrazio molto

Link al commento
Condividi su altri siti

No, anche se SM0.0 si riferisce ad un merker ad elaborazione in ogni ciclo, non è inerente a quanto a te necessario.

Credo dovremmo partire dal programma che tu vuoi rendere ciclico; supponiamo che, inizialmente, esista un pulsante per far partire questo ciclo. Pigiando il pulsante (che corrisponderà ovviamente ad un ingresso del plc) le sequenze logiche del programma inizieranno a susseguirsi fino alla fine del programma stesso; se quando questo è terminato premi nuovamente il pulsante di start, i comandi verranno nuovamente eseguiti, dall'inizio sino la fine, giusto? Ecco, questo è quello che il merker (che definisci tu, per es. M10.0) ha il compito di fare alla fine del programma: in un punto idoneo attribuisci lo stato logico alto alla "bobina" di M10.0, che influenzerà il "contatto" di M10.0 posto, supponiamo, in parallelo al pulsante di start.

Volutamente non ti posto nessun tipo di esempio perchè è talmente banale che farti un esempio equivarrebbe a fare il ragionamento al posto tuo. Ragiona su quanto scritto e leggi il manuale del 200, vedrai che otterrai le soddisfazioni del caso.

Link al commento
Condividi su altri siti

Ma hai letto e compreso quello che ho scritto nel post #7???

Qualcosa mi dice che l'autore del post vuole che gli si scriva il codice.

Il mio consiglio è quello di provare a buttar giù qualcosa (anche su carta) sulla base di quanto Busanela ha suggerito(e mi sembra che di aiuto e pazienza ne abbia avuta sin troppa)

e poi al limite si discute insieme. Continuar a chiedere la pappa pronta senza per giunta prestare attenzione a quello che si è già ottenuto mi sembra solo una inutile perdita di tempo. :thumbdown:

Link al commento
Condividi su altri siti

non voglio la pappa pronta anche perchè lo sto chiedendo per imparare è che voi la fate facile perchè lo sapete usare ma io che non lo so usare non mi viene facile

Link al commento
Condividi su altri siti

non voglio la pappa pronta anche perchè lo sto chiedendo per imparare è che voi la fate facile perchè lo sapete usare ma io che non lo so usare non mi viene facile

Guarda che tutti hanno dovuto imparare e per imparare c'è solo un mezzo: studiare e provare.

Se vuoi imparare fai, poi avrai l'aiuto necessario per correggere gli eventuali errori con le relative spiegazioni.

Link al commento
Condividi su altri siti

Imparare a programmare, dal mio punto di vista, non significa imparare a memoria le istruzioni, siano esse in linguaggio strutturato, a contatti o lista d'istruzioni, di un determinato ambiente di programmazione (Siemens, Omron, etc.): qualsiasi aiuto in linea o manuale può darti l'aiuto del caso al momento giusto. La programmazione si basa sulla smaliziazione nel risolvere le problematiche per arrivare ad un determinato fine: è questo che bisogna capire.

Con ciò intendo giustificare il mio modo di operare all'interno del Forum: dare i suggerimenti atti a far innescare il ragionamento per arrivare alla conclusione è sicuramente più utile che fornire un esempio applicativo, questo ovviamente in termini didattici.

Tutti quelli che si occupano di processori programmabili sono passati per il tuo stesso problema: nessuno o pochissimi hanno il privilegio di esserne stati esentati, premiati dalla loro genialità; la vera bravura sta nella modestia e nell'umiltà di capire che la pazienza, lo studio e l'impegno sono le doti che premiano chi ha la volontà di imparare.

Il mio consiglio, quindi, è quello di rileggere bene le nostre discussioni, estrapolare quanto di utile possa far capire in che direzione muoversi, fare delle prove e magari postare qualche riga di programma per confrontarla con chi sa già come muoversi.

Sono sicuro che la soddisfazione di essere riuscito da solo, anche se con l'aiuto del Forum o di altri, sarà sicuramente più appagante della mera copiatura di alcune istruzioni, oltre che rimanere in maniera più indelebile nella memoria.

Link al commento
Condividi su altri siti

I metodi più usati per fare dei cicli sono tre.

1) Quando si verifica un evento, si resetta il bit della fase attiva e si setta il bit della fase successiva.

2) Quando si verifica un evento, si setta il bit della fase successiva. I bit delle precedenti fasi rimangono ON.

3) Quando si verifica un evento, si cambia il valore di una variabile. Ogni valore di questa variabile può corrispondere ad una fase del ciclo.

Supponiamo di avere due cilindri pneumatici comandati da elettrovalvole monostabili e di voler fare questo semplice ciclo:

- Pulsante Start

- Pistone 1 avanti

- Pistone 2 avanti

- Pistone 2 indietro

- Pistone 1 indietro

Facciamo un esempio per il metodo 1

Merker usati:

M 20.0 Ciclo ON

M 20.1 fase 1: avanti pistone 1

M 20.2 fase 2: avanti pistone 2

M 20.3 fase 3: indietro pistone 2

M 20.4 fase 4: indietro pistone 1

M 20.5 fine ciclo

Avanzamento Fasi Ciclo

- Se M20.0 è OFF e premo il pulsante di start setto M20.0 e M20.0=M20.1 (M20.0, usato in questo modo, oltre ad impedire la ripartenza della fase 1, potrebbe servire, per esempio, per segnalazione Ciclo ON)

- Quando il pistone 1 arriva a finecorsa avanti, resetto M220.1=M20.1 (fase 1) e setto M20.2 (fase 2)

- Quando il pistone 2 arriva a finecorsa avanti, resetto M20.2 (fase 2) e setto M20.3 (fase 3)

- Quando il pistone 2 arriva a finecorsa indietro, resetto M20.3 (fase 3) e setto M20.4 (fase 4)

- Quando il pistone 1 arriva a finecorsa indietro, resetto M20.4 (fase 4) e comando M20.5 (fine ciclo)

Comando Elettrovalvole

- EV pistone 1 comandata con fase 1, fase 2 e fase 3

- EV pistone 2 comandata con fase 3

Arresto o ripetizione ciclo

Con il bit di fine ciclo puoi ora decidere se arrestare il ciclo (facendo un reset di M20.0), oppure ripetere il ciclo settando di nuovo M20.1.

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

L'esempio del ciclo "L" fatto da Flavio è il migliore compendio a quanto da me descritto nel messaggio #7, tralasciando gli errori di battitura inerenti le descrizioni delle memorie utilizzate nell'esempio. ;)

Link al commento
Condividi su altri siti

Eh già, i soliti maledetti errori di battitura. Il pranzo era pronto, la moglie chiamava, e non ho riletto ;)

Ma penso che l'amico Enrico possa capire ugualmente.

Siamo passati da una descrizione più generica come quella del tuo post #7 a una che descrive passo per passo una semplice sequenza.

A questo punto, mancherebbe solo di scrivere il codice.

Ma ora aspettiamo un po' di farina del suo sacco.

Link al commento
Condividi su altri siti

Tanti auguri anche a voi... Sentite questa che mi sono appena inventato:

Sapete qual' è l'aperitivo piu bevuto dagli amici di PLC Forum??

Il san BITter!!! Modificato: da step-80

Link al commento
Condividi su altri siti

Volevo approfittare di questa discussione per ringraziare per primo Batta ( ma anche altri utenti) perchè con il suo post riguardante i cicli mi ha aperto un nuovo mondo...

Puó sembrare stupido ma fino ad ora per risolvere automazioni in sequenza ricorrevo a tecniche fra le più disparate, delle quali poi non ero mai convinto del tutto. Grazie al suo post ho cominciato a macinare e dopo qualche prova sono arrivato alla soluzione, che per me non era cosi scontata. Grazie Batta, grazie di cuore a te e a tutti gli altri!

Approfitto per chiedere una cosa: sarebbe sbagliato come ragionamento invece di settare/resettare un bit o scrivere in una variabile, scrivere in una variabile di tipo 'string' ?

Per esempio,riprendendo quello di Batta sui cilindri, se la variabile string "fase" è 'in attesa' e premo start la variabile "fase" diventa 'uscita cilindro 1'; al finecorsa cilindro 1 la variabile "fase" diventa ' rientro cilindro 1' e cosi via.

È sbagliato come ragionamento?

Ringrazio ancora

Matteo

Link al commento
Condividi su altri siti

Per esempio,riprendendo quello di Batta sui cilindri, se la variabile string "fase" è 'in attesa' e premo start la variabile "fase" diventa 'uscita cilindro 1'; al finecorsa cilindro 1 la variabile "fase" diventa ' rientro cilindro 1' e cosi via.

È sbagliato come ragionamento?

L'utilizzo di una variabile è uno dei tre metodi da me citati, con la differenza che si usa, di solito, una variabile di tipo BYTE o INT.

Per passare da una fase all'altra si cambia il valore della variabile, solitamente lasciando numeri liberi per poter aggiungere altre fasi intermedie.

Per esempio, il ciclo con i due pistoni potrebbe diventare:

- Con pressione del pulsante start, se Step = 0, caricare Step = 5

- Se Step = 5, con arrivo a finecorsa avanti pistone 1 caricare Step = 10

- Se Step = 10, con arrivo a finecorsa avanti pistone 2 caricare Step = 15

- ecc.

Poi, per l'attivazione dei comandi, si possono fare delle semplici comparazioni.

Se utilizzi una variabile stringa, devi fare i confronti tra stringhe invece che tra semplici interi, complicandoti inutilmente la vita.

Unico vantaggio sarebbe un valore della stringa che è già indicativo della fase in corso.

Per risolvere usando una variabie INT, basta farsi una tebellina con la corrispondenza valore variabile = nome fase.

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...