Vai al contenuto
PLC Forum


Creare Routine Tia Portal V12


_Chri_

Messaggi consigliati

Salve,

non ho mai usato Siemens e mi ritrovo a fare una domanda probabilmente banale.

Come si creano delle routine che poi saranno richiamate in un OB per farle agire parallelamente?

In Twincat o comunque in Codesys si possono creare routine che poi possono agire parallelamente attraverso il comando "Add action". Volevo poter fare una cosa analoga.

Grazie!

Link al commento
Condividi su altri siti


Parallelamente non è possibile: anche utilizzando routine ad interrupt, si interrompe l'esecuzione ed esegue l'interrupt.

I blocchi sono sempre eseguiti in modo sequenziale, a seconda di come li inserisci nell'OB1.

Link al commento
Condividi su altri siti

Grazie della risposta!

Quindi se volessi eseguire l'home di 5 gruppi meccanici autonomi facendoli partire tutti autonomamente come potrei fare?

Stesso discorso se vado in ciclo automatico magari facendo "dialogare" i gruppi, nel caso avessero bisogno di consensi per andare avanti nella loro sequenza, attraverso dei flag. Sempre però attraverso una gestione separata dei gruppi.

Spero di essermi spiegato, comunque per altri chiarimenti sono a disposizione! :D

Ciao

Modificato: da _Chri_
Link al commento
Condividi su altri siti

Penso che a questo punto dovresti spiegarci più in dettaglio come si svilppa la tua automazione,cosi potrai ricevere risposte piu mirate ;) .

Se ho capito cosa vuoi fare,si tratta di suddividere il tuo programma in base alle varie stazioni di lavoro,ogni stazione avrà il suo compito ma dovrà 'comunicare' attraverso merker o variabili alle altre stazioni il proprio stato.

Ad esempio,la stazione 1 terminato il proprio lavoro alza un merker,la stazione 2 lo stesso,in modo che quando tutti i merker sono alti,la macchina possa avanzare il pezzo successivo).

Puoi realizzare questo suddividendo il programma in FC oppure FB , probabilmente più vicine come concetto alle routine che nominavi tu.

Se per parallelamente intendi un richiamo delle FC contemporaneo come ti diceva Drugo non si può fare,in quanto vengono richiamate una dopo l'altra a seconda della sequenza con la quale le hai inserite in OB1,nel caso di OB di interrupt vengono appunto interrotte e riprese dal punto in cui erano state lasciate prima del verificarsi dell evento di interrupt.

Prova a spiegarci più nel dettaglio,vedremo di aiutarti meglio ;)

Link al commento
Condividi su altri siti

Ok grazie!

Spiego in sintesi cosa dovrà fare questa macchina ma è un principio che applico generalmente a tutte le macchine, cioè suddivido in gruppi la macchina o linea. Tali gruppi possono, ad esempio nell'home, partire in contemporanea (cioè non dopo aver aspettato che l'altro gruppo finisca l'home). Questo perchè meccanicamente non hanno bisogno l'una dell'altra. Come ha detto Step-80 è come se si avessero due o più stazioni idealmente lontane tra loro che possono agire indipentemente.

Questo in linea generale.

Nel mio caso specifico la macchina deve assemblare un prodotto e c'è uno scara che prende i materiali per comporlo. In linea teorica ho 4 gruppi (che svolgono un'azione specifica, ad esempio mettere a disposizione una parte del prodotto finale) + lo scara in mezzo. In questo caso idealmente farei fare l'home allo Scara, in modo da togliero fuori da qualsiasi ingombro, poi facevo partire l'home dei 4 gruppi tanto meccanicamente non si interferiscono. Poi nel funzionamento automatico lo scara e i 4 gruppi comunicano attraverso variabili per avere il corretto ciclo :D.

Spero di aver reso l'idea :D.

Sono un novello di Siemens e di solito gli FB li utilizzo in un altro modo, cioè quando creo un qualcosa che penso potrà essermi utile anche in altre applicazioni.

A breve posterò la mia soluzione ma non so se è logicamente corretta per questo chiedevo una mano ed un consiglio a voi :D

Grazie per l'attenzione

Link al commento
Condividi su altri siti

La divisione in gruppi la faccio anch'io: se hai bisogno che un gruppo arrivi in una situazione particolare per avviare il successivo, basta che prevedi un consenso nel primo che userai nel secondo, altrimenti li fai partire in sequenza come se fossero in parallelo, anche se non lo saranno mai.

Per lo scara la soluzione è simile: crei dei consensi nei gruppi che poi utilizzerai nel blocco dello scara.

Per gli FB direi che è corretto, anche se, oltre che per blocchi riutilizzabili, gli FB ti conviene crearli anche se prevedi di richiamarli più volte con dati diversi; poi, per carità, se uno li preferisci, si possono anche utilizzare sempre: non è che la sintassi lo vieta.

Purtroppo il 1200 non prevede l'utilizzo di processi separati (so che ad esempio un Rockwell di fascia medio alta ce l'ha).

Link al commento
Condividi su altri siti

Ma il codice del/dei "gruppo/i" dove lo implementi?(Quello che poi sarà richiamato nel codice madre)

Bisogna per forza creare un FB?

Link al commento
Condividi su altri siti

Assolutamente no, sei tu che scegli cosa hai bisogno; gli OB sono blocchi organizzativi, ad esempio l'OB1 è il ciclico, richiamato in loop dal firmware; poi ci sono altri OB, ad esempio per gli interrupt, per l'esecuzione a tempo, per gli allarmi e così via; gli FB normalmente si usano se devi abbinare dei dati statici al blocco stesso; l'esempio che mi sovviene (è anche quello che fa Siemens, se non sbaglio) è quello di comandare più motori con caratteristiche diverse; scrivi un solo FB e gli abbini diversi DB con i dati dei motori diversi; il blocco FB deve avere un blocco DB di istanza sempre, anche se usato una volta sola; i DB sono i blocchi dati, come dice il nome, contengono dei dati (dai bool agli int, dai byte alle dword, dagli array ai dati definiti dall'utente), e possono essere globali o di istanza; dal TIA è stato aggiunta la possibilità (è di default) di avere il blocco dati ottimizzato, quindi non hai più l'accesso all'indirizzo (quindi DB1.DBW0), ma direttamente con il simbolico (esempio Valore_1); se hai la necessità di avere l'indirizzo, devi togliere la proprietà "ottimizzato" al blocco (lo trovi nelle proprietà del blocco), ma dovrai stare attento a cosa aggiungi in mezzo (dopo la compilazione, ti cambiano tutti gli indirizzi); infine ci sono gli FC, che non hanno nessun DB di istanza, quindi nessun dato statico, ma solo locale, se serve, oppure possono, ovviamente, avere accesso ai dati dei DB globali.

Normalmente, io divido la macchina in gruppi, come fai tu, od anche in sottogruppi (marcia/arresto, ciclo, allarmi), se dovessero risultare troppo grandi; poi uso gli FC e lì ci metto il mio codice; suddivido anche i DB globali (allarmi, valori da modificare nell'HMI, variabili di ciclo, etc), a cui avrò, comunque, accesso da tutti gli FC; gli FB, come dicevo, gli uso solo se il codice può essere riutilizzabile e se neccesita di variabili statiche (anche un FC accetta parametri); se posso (e normalmente si può), suddivido anche la memoria restante (merkers) tra i vari gruppi (esempio MB0-MB9 generali, MB10 gruppo 1 e così via); con il 200/300 suddividevo anche i timer, ma con il 1200 devi appoggiarli ad un DB, quindi creo un DB per timer e counter, creo delle struct che dl nome richiamano i gruppi, al loro interno creo i timer ed i counter che mi servono; lasciando il blocco ottimizzato, non mi devo preoccupare di cosa aggiungo e tolgo, perchè il timer (o counter) sarà sempre richiamato dal nome e non dall'indirizzo; infine, tutti i blocchi gli richiamo nell'OB1.

Spero di essere stato chiaro e di non averti creato ancora più confusione.

Scaricati anche il manuale del software che usi (presumo il TIA) dal Siemens support: ti assicuro che è fatto bene, ben suddiviso, anche se è enorme; infine c'è sempre la guida in linea del TIA.

Buon lavoro

Link al commento
Condividi su altri siti

Caro Drugo sei stato iper-chiaro!!!! Comunque uso il TIA-PORTAL V12

Adesso mi leggerò il manuale ma in linea di massima ho capito! Devo solo capire bene la differenza tra DB e Merkers :D !

Grazie dell'attenzione!!!!!!!!!!

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