Vai al contenuto
PLC Forum


sequenza partenza motori


alessandropa

Messaggi consigliati

Buongiornoa tutti vi espongo il mio problema.

Tramite un plc 1200 alla pressione di un pulsante di start devo far partire determinati motori da 1 a 20 in base a quello che viene selezionato sul touch.

Il problema nasce in quanto il cliente,giustamente, chiede la partenza scadenzata dei motori tipo uno ogni 10 sec.

Ho pensato quindi che si poteva far partire m1 poi timer m2 timer e cosi via ma se anziche essere m1 il primo richiamato è m3 il tutto non mi parte.

Ho visto che per applicazioni simili esiste una libreria detta FIFO la quale vede il primo ingresso e la manda come prima uscita quindi tradotto il primo motore che io richimamo sarà il primo che vado a temporizzare il secondo il secondo e cosi via a prescindere dal loro numero reale.

Sono sulla strada giusta?

Non so ancora bene come associare i motori al fifo

Grazie a tutti

Link al commento
Condividi su altri siti


Ciao, scusa non ho capito:

- l'operatore stabilisce la sequenza e poi dà uno start e i vari motori selezionati partono temporizzati uno dopo l'altro ogni 10 sec?

- oppure  la sequenza è sempre la stessa da 1 a 20 ma escludendone uno o più?

 

A soldoni direi che se la sequenza è sempre la stessa, ma alcuni non vengono abilitati potresti tenere a 0 i timer di quelli disabilitati così da saltare al successivo, ovviamente allo scadere del timer (a zero) di quelli disabilitati non fai partire il relativo motore...

E se un motore non parte o va in protezione che fai? feedback dai motori? O non ti importa?

 

 

Modificato: da drn5
Link al commento
Condividi su altri siti

Ogni motore da touch viene abilitato o meno e alla pressione del tasto start solo quelli abilitati partono.

Facciamo un esempio sul tuo suggerimento m2 parte e fa partire il timer per m3 il quale partira e fa partire il timer per m4 ma essendo m4 escluso dalla logica passo a m5 e cosi via cioe se un motore non è incluso passo al successivo.

Se interviene la termica lo considero come escluso e passo al sucessivo.

E se un motore viene abilitato a impianto in marcia?

Macchinoso un po il sistema ma potrebbe funzionare

 

Link al commento
Condividi su altri siti

Quote

Ogni motore da touch viene abilitato o meno e alla pressione del tasto start solo quelli abilitati partono.

Facciamo un esempio sul tuo suggerimento m2 parte e fa partire il timer per m3 il quale partira e fa partire il timer per m4 ma essendo m4 escluso dalla logica passo a m5 e cosi via cioe se un motore non è incluso passo al successivo.

Quindi l'ordine di partenza è sempre lo stesso, ma devi solo saltare i motori non pronti (disabilitati, intervento protezioni, ecc.), giusto?
Lascia perdere il FIFO, e non ti serve nemmeno un timer per motore. Ti basta un solo timer che genera un clock ogni 10 secondi.
Ad ogni clock avvii un motore. Per avviare un solo motore, ti basta resettare il bit di clock quando viene eseguito il comando di avviamento del motore.
Se il comando non viene eseguito (perché il motore è già avviato oppure perché non può essere avviato), il clock rimane attivo per avviare il motore successivo.
 

Link al commento
Condividi su altri siti

Sta mattina mentre mi scervellavo per seguire il ragionamento di yiogo mi e venuta in mente una soluzione tipo quella proposta da batta ossia genero un clock che a ogni suo richiamo mi verifica se il bit richiesta motore è a 0 o a 1 se a 0 resetta l uscita se a 1 la setta cosi anche se un motore viene richiesto o escluso a impianto avviato il sistema lo esegue.

 

Ma tornando al messaggio di yiogo sono proprio.curioso di capirci qualcosa  cosa intendi per ritardo di base e ritardo di time out?

Link al commento
Condividi su altri siti

Quote

come sei diventato minimalista !

una volta ti piacevano le cose che ho scritto 

non fare finta di non averle capite

???

Link al commento
Condividi su altri siti

sono daccordo con irrigo, crea un programma a blocchi,  usa degli fc dove ci sono i blocchi singoli per ogni motore, partono e si fermano con la stessa procedura, ma in ogni blocco hai la possibilità di inserire il tempo ognuno diverso per i 20 motori.

qui c è un esempio anche se non è lo stesso puoi capire cio che intendo  min 26 circa

 

 

Link al commento
Condividi su altri siti

Diego Irrigatore

Essendo sistema deve partire un motore alla volta ti crei 20 blocchi fc .li colleghi 

Un in serie altro e poi bypassi quelli non usi 

 

Link al commento
Condividi su altri siti

  • 2 weeks later...

Buonasera a tutti.

Volevo aggiornarvi sul progetto e come ho risolto.

 

Ho creato un clock il quale ogni 10 secondi mi incrementa di 1 una variabile.

Ogni motore corrisponde ad un numero della variabile nel momento in cui questo numero viene richiamato, e ho il consenso alla partenza dato dal touch, il motore parte.

 

Tutto sembra funzionare alla grande ed effetivamente fa cio che voglio.

Volevo solo aggiungere una chicca con il vostro aiuto in quanto ci ato pensado da molto ma non arrivo.

 

In pratica se io un motore non ce l ho abilitato da touch devo aspettare comunque che il conti i suoi 10 secondi prima di passare al motore sucessivo ad esempio se chiedo la partenza di m1 e m3 devo aspettare anche il.conteggio di m2.

Ho provato a far in modo che se un motore non è richiamato quando è il.momento del suo clock incrementi il clock di 1 per passare al successivo ma questo fa si che due motori consecutivi si accendono contemporaneamente senza aspettare i 10 secondi.

 

Un altra soluzione che ho pensato è che avendo dato io un numero ad ogni motore basterebbe far si che se un motore non è incluso i suoi sucessivi scalano di uno ad esempio m4 partira al 5 del clock m5 al 4 e cosi via ma questo non saprei come ricrealr

Link al commento
Condividi su altri siti

Se la condizione di partire non c'è, deve incrementare il numero del passo e quindi parte il motore successivo.

Se non riesci a risolvere, prova a postaretquello che ha fatto si può vedere cosa si deve modificare.

Link al commento
Condividi su altri siti

Quando un motore non è disponibile alla partenza e incrementi il numero di motore da far partire e trovi quello disponibile all'avviamento, quando questo parte abiliti una memoria che ti inibisce o ti fa da interblocco affinchè non avvenga l'incremento di motore da avviare e quindi non ti parte il successivo motore disponibile. Disabilti tale memoria al successivo fronte di salita della successiva richiesta di avvio data dal clock

Link al commento
Condividi su altri siti

Nicola Carlotto forse non hai capito cosa chiede, richiede una partenza in sequenza di N utenze in maniera temporizzata l'uno dall'altra, se una di queste non è abilitata o è in blocco non la considera e passa a quella successiva disponibile senza fare una temporizzazione ulteriore per quella in blocco, il tutto generato con un clock della sequenza, esempio parte un'utenza ogni 10 secondi

Link al commento
Condividi su altri siti

Quote

Ho creato un clock il quale ogni 10 secondi mi incrementa di 1 una variabile.

Ogni motore corrisponde ad un numero della variabile nel momento in cui questo numero viene richiamato, e ho il consenso alla partenza dato dal touch, il motore parte.

Mi pare che tu abbia tanta voglia di complicare inutilmente le cose.

 

Ti riporto nuovamente quanto avevo scritto in un precedente post:
Ad ogni clock avvii un motore. Per avviare un solo motore, ti basta resettare il bit di clock quando viene eseguito il comando di avviamento del motore.
Se il comando non viene eseguito (perché il motore è già avviato oppure perché non può essere avviato), il clock rimane attivo per avviare il motore successivo.

 

Poi, se la parte riguardante il motore la vuoi gestire scrivendo le istruzioni motore per motore, oppure se preferisci fare qualcosa di più razionale e creare una funzione da richiamare per ogni motore, questa è una tua scelta. Ma nulla cambia come concetto di come gestire i motori da avviare e quelli esclusi.

Link al commento
Condividi su altri siti

58 minuti fa, batta scrisse:

Ad ogni clock avvii un motore. Per avviare un solo motore, ti basta resettare il bit di clock quando viene eseguito il comando di avviamento del motore.
 

Devo creare sempre una variabile che mi si incrementa se no come faccio a far partire prima uno e poi un altro e poi un altro?

Link al commento
Condividi su altri siti

12 minuti fa, alessandropa scrisse:

Devo creare sempre una variabile che mi si incrementa se no come faccio a far partire prima uno e poi un altro e poi un altro?

Si è giusto quello che dici che crei una variabile che ad ogni clock incrementa di un'unità, è che se quando incrementa di un'unità e trovi un motore non pronto all'avvio esegui la medesima istruzione per il motore successivo,

ti spiego meglio, in pratica tramite l'impulsivo del clock esegui in sequenza l'icremento della variabile numerica che all'inizio della fase di avvio hai preventivamente messo a zero, se per esempio la variabile è zero tramite l'impulsivo clock incrementi di 1 la variabile se il motore m1 è pronto con la medesima condizione abiliti una memoria a bool che ti fa capire che hai eseguito un avvio, al clock successivo in prima istanza fai reset della memoria bool, l'istruzione precedente la ignori perchè la variabile numerica non è a zero e ne esegui una successiva che sempre con l'impulsivo del clock controlla che la variabile sia a 1 e che il motore m2 sia disponibile, esegui l'incremento variabile ma se il motore non è pronto non esegue il Set della variabile a bool e ti permette poi di eseguire l'istruzione successiva per il motore m3 che è analoga a quella precedente ma che però controlla che la variabile numerica sia a 2 e fa comunque l'incremento, se trova il motore pronto fai anche il Set della variabile a bool, altrimenti passi alla successiva.... finchè non trovi un motore pronto all'avvio e che ti permette di fare il Set. In pratica ti ritroverai la variabile numerica al valore del prmo motore disponibile all'avvio poi tramite una comparazione numerica >= abiliterai alla marcia i motori da avviare, esempio: >=1 avvia m1, >=2 avvia m2, >=3 avvia m3 e così via. Non mi sembra complesso, l'ho già fatto con Mitsubishi ma è abbastanza semplice anche con Siemens, ho cercato di spiegartelo a parole ma dovresti arrivarci anche in KOP o FD

Link al commento
Condividi su altri siti

Quote

Devo creare sempre una variabile che mi si incrementa se no come faccio a far partire prima uno e poi un altro e poi un altro?

Perché vuoi a tutti i costi usare una variabile da incrementare?

 

Ti metto qui sotto un banale esempio di come potresti fare:

image.png.e8a7a764ef1e97d207a815c1c255ba9e.png

 

Nell'esempio si sono solo due motori, ma ne puoi aggiungere quanti ne vuoi.
Il principio di funzionamento è il seguente:
- Genero il clock (non presente nell'esempio)

- Se il motore M1 è pronto (Rdy_M1 = True), il motore M1 viene avviato ed il flag "ClockStart" viene resettato.

  In questo modo, devo attendere una nuova attivazione del flag "ClockStart" per avviare un altro motore.

- Se il motore M1 non è pronto (Rdy_M1 = False), il motore M1 non viene avviato, il flag "ClockStart" non viene resettato,

  e rimane quindi attivo per l'avviamento del motore successivo.

 

Come vedi, è estremamente semplice e funziona.
Poi, non ti dico di fare così. Questo è solo un esempio.
Per la gestione dei motori conviene creare una funzione alla quale passi i comandi, lo stato delle protezioni, eventuali consensi (e tutto quello che ti può servire), e la funzione gestisce, oltre alla marcia del motore, anche la diagnostica, consensi in uscita, ed altro.
Per esempio, passando alla funzione il flag "ClockStart" come parametro IN/OUT, la funzione gestisce anche il reset del flag.
Oppure, anziché gestire il clock esternamente, potrebbe essere la funzione stessa che gestisce ritardi di avvio, o il comando di start per il motore successivo, potendo impostare tempi diversi per ogni motore.
Potresti gestire anche una sequenza per l'arresto.

Link al commento
Condividi su altri siti

Ottimo e semplice esempio batta, io mi sono scervellato per seguire quello che voleva fare ma in effetti il tuo esempio è molto più semplice, io gli ho segnalato come fare sulla strada che aveva intrapreso ma mi sa che è meglio se segue le tue indicazioni

Link al commento
Condividi su altri siti

  • 2 weeks later...

Batta scusa, una conferma: Nell'esempio da te riportato la sequenza di partenza dei motori è data dalla sequenza in cui i motori vengono inseriti all'interno del rung giusto? Voglio dire, nel tuo esempio si avvia prima M1 , poi M2 perche il rung di M1 viene prima di quello di M2 giusto?

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...