Il video mostra il manipolatore che svolge la funzione di carico scarico su una linea. Il programma è quello sviluppato nel 2013 quando sono stati acquistati i due trainer Fischertechnik per PLC.
Il manipolatore è dotato di una scheda di interfaccia per poterlo collegare al PLC (qui sono indicati ingressi e uscite). La scheda può essere alimentata direttamente dal PLC (con i 24V DC disponibili ai morsetti ''L+'' e ''M'') e ha ingressi e le uscite a 24V.
Sulla scheda 8 relè SPDT (singolo polo doppio contatto, come i deviatori) comandano i quattro motori nei due versi di rotazione. Lo schema di principio per ognuno dei motori è il seguente:
Comandando opportunamente i due relè si riesce ad azionare il motore nelle due direzioni.
L'unità 2 del modulo 17 del libro di testo, sulla robotica industriale, fornisce un'utile base teorica per il campo di applicazione del manipolatore.
La robotica industriale si inquadra nel contesto più generale dell'automazione e si prefigge gli stessi scopi:
La differenza sostanziale tra una semplice macchina automatica e un robot è la maggiore flessibilità operativa.
Dal punto di vista meccanico un robot manipolatore è fatto di:
La parte elettrica/elettronica comprende:
I campi di impiego tipici dei robot sono:
I giunti di un robot (vedi fig. 2 e 3) possono essere:
Il numero di giunti presenti definisce il gradi di libertà di un robot; questi sono al massimo 6: rotazione intorno a tre assi e spostamento lungo gli assi stessi (la fig. 7 mostra due robot con quattro e tre gradi di libertà). Lo spazio di lavoro è invece l'insieme dei punti raggiungibili dalla mano del robot (figura 8b).
I robot possono essere classificati in base al tipo di giunti che adottano (vedi figure da 8 a 15). Secondo questa classificazione il manipolatore che utilizzeremo è un robot cilindrico (RTT) con 4 gradi di libertà (un giunto di rotazione, due di traslazione più la pinza).
I robot possono vantare una grande flessibilità operativa ma presentano dei difetti; il principale è il costo elevato, dovuto all'uso di materiali pregiati e componenti sofisticati e oltre alle difficoltà di progettazione sia di natura elettronica (programmazione, gestione e azionamento) che meccanica (sollecitazioni statiche e dinamiche in una struttura a sbalzo).
Gli attuatori usati nei robot sono i servomotori, motori con prestazioni elevate accoppiati a sistemi di controllo elettronico (si parla di azionamenti, in questo caso), che permettono il controllo preciso di posizione, velocità e accelerazione.
La trasmissione del movimento tra gli organi meccanici può essere:
Quando è necessario convertire un moto rotatorio in uno lineare si sfruttano:
La trasmissione del movimento rotatorio da un asse ad un altro si ottiene con:
Gli organi meccanici dedicati alla riduzione della velocità di rotazione sono detti riduttori. Il loro impiego è molto diffuso perché i motori elettrici tipicamente hanno velocità nominali piuttosto elevate mentre alcune applicazioni richiedono movimenti lenti e precisi. I riduttori sfruttano accoppiamenti con ruote dentate o rute e viti senza fine per ottenere velocità ridotte e coppie elevate.
L'immagine seguente mostra gli accoppiamenti con coppia conica e ruota-vite senza fine tra braccio e motore per il movimento di rotazione.
Lo studio analitico dei robot è piuttosto complicato e non sarà trattato in questa sede. Le discipline coinvolte sono:
Il manipolatore monta due motori DC semplici e due motori DC con encoder a 24V (datasheet motore con encoder).
Nei due motori senza encoder il sensore di posizione è esterno e piuttosto primitivo: una ruota con quattro sporgenze azionata dal motore preme un contatto mentre ruota generando degli impulsi (qui il datasheet dei contatti di scambio usati nella scheda anche per i finecorsa).
L'immagine seguente mostra motore e riduttore (neri) e la ruota (a sinistra) che preme il contatto generando gli impulsi.
Il segnale prodotto non permette di stabilire il verso di rotazione ma può essere utilizzato per calcolare la velocità di rotazione e il movimento (relativo) del motore. Nel programma il segnale dal sensore ad impulsi fa incrementare un contatore dopo averlo azzerato con un finecorsa che indica il raggiungimento di una posizione ben precisa. In questo caso il valore del contatore indica la posizione assoluta mentre il movimento procede in un verso prestabilito, con il valore zero che corrisponde alla posizione iniziale.
Gli altri due motori hanno a bordo un encoder in quadratura (vedi pagina 41 del paragrafo 5 modulo 14 nel libro di testo). Ai morsetti di questi motori, oltre ai due terminali per l'alimentazione, troviamo un connettore a quattro fili per l'encoder, due per l'alimentazione del sensore e due per i segnali impulsivi prodotti dal sensore. I due segnali permettono di stabilire direzione, velocità e movimento relativo del motore. Se si accoppia all'encoder un finecorsa che segnali la posizione iniziale è possibile stabilire anche la posizione assoluta del motore.
I segnali generati dall'encoder sono impulsivi e in quadratura (sfasati di un quarto di periodo); la loro frequenza dipende dalla velocità di rotazione ma può essere anche piuttosto elevata (fino a 1kHz). Nella figura seguente i due segnali, solitamente detti fase A e fase B:
Da questi segnali si ricava:
I segnali generati dall'encoder non possono essere gestiti utilizzando semplicemente due ingressi del PLC e un contatore CTUD perché potrebbero alternarsi con una velocità troppo elevata rispetto al tempo di esecuzione del PLC (il tempo di ciclo può arrivare a decine di millisecondi). Per usare un encoder è necessario utilizzare i contatori veloci (HSC high speed counter) del PLC configurando l'hardware della CPU e caricando la nuova configurazione. I contatori veloci HSC () si abilitano dalle Proprietà
della CPU.
Per una CPU serie 30 la configurazione hardware è la seguente:
DI 14/DQ 10
)L'indirizzamento dei contatori è predefinito:
Dint
(32bit) con il conteggio di HSC1 e HSC3Il manipolatore è controllato da una scheda a relè per il controllo dei quattro motori e la gestione dei sensori di posizione (due encoder e due generatori di impulsi). La scheda è collegata agli ingressi e alle uscite (digitali del PLC) con dei cavi. I cavi sono marcati con dei numeri che corrispondono all'indirizzo degli ingressi e delle uscite (per gli ingressi la numerazione non è a byte (I0.1 … I0.7 poi I1.1 …) ma progressiva fino a 11. All'ingresso I1.3 del PLC è collegato il pulsante di avvio.
Morsettiera della scheda di controllo del manipolatore:
Uscite del PLC:
Ingressi del PLC (alla scheda manipolatore e al pulsante di start I1.3):
NB Per testare il programma con una CPU diversa conviene estrarre le morsettiere dal PLC in uso e inserirle nella seconda CPU.
E' stato complicato Non ho capito come farlo in maniera semplice:
Per portarlo su TIA 13 ho copiato il main, rcreato i contatori con i loro blocchi dati, ricreato la tabella delle variabili e la configurazione hardware (facile per i merker di stato, di tentativo per i contatori veloci per gli encoder)Più semplice come indicato sotto.
Si può scaricare il programma da PLC a Tia Portal:
Caricamento del dispositivo (software)
Particolarità:
MOVE
) → non è possibile realizzare il parallelismo secondo SFCDifetti:
Main
)L'indirizzamento di ingressi e uscite - pur usando nomi diversi - segue lo stesso schema del programma creato nel 2013 per poter utilizzare entrambi i programmi con lo stesso PLC senza modificare i collegamenti nelle morsettiere.
indirizzo | nome variabile | commento |
---|---|---|
I0.2 | SFopen | finecorsa pinza aperta |
I0.3 | SFup | finecorsa salita |
I0.6 | BQclose | impulsi chiusura pinza |
I0.7 | SFcw | finecorsa rotazione oraria |
I1.0 | SFback | finecorsa indietro |
I1.1 | BQforward | impulsi avanti |
I1.3 | SBstart | pulsante avvio |
ID1000 | HSCvert | conteggio encoder verticale (discesa) |
ID1008 | HSCrot | conteggio encoder rotazione (antioraria) |
Q0.0 | Mopen | apertura pinza |
Q0.1 | Mclose | chiusura pinza |
Q0.2 | Mforward | avanti |
Q0.3 | Mback | indietro |
Q0.4 | Mdown | discesa |
Q0.5 | Mup | salita |
Q0.6 | Mcw | rotazione oraria |
Q0.7 | Mccw | rotazione antioraria |
M2.0 | P0 | homing: avvio parallelismo |
M2.1 | P1 | homing: rotazione oraria |
M2.2 | P2 | homing: attesa rotazione |
M2.3 | P3 | homing: salita |
M2.4 | P4 | homing: attesa salita |
M2.5 | P5 | homing: indietro |
M2.6 | P6 | homing: attesa indietro |
M2.7 | P7 | homing: apertura pinza |
M3.0 | P8 | homing: attesa pinza |
M3.1 | P9 | attesa pulsante |
M3.2 | P10 | parallelismo: rotazione antioraria |
M3.3 | P11 | parallelismo: attesa rotazione |
M3.4 | P12 | parallelismo: avanti |
M3.5 | P13 | parallelismo: attesa avanti |
M3.6 | P14 | carico: discesa |
M3.7 | P15 | carico: chiusura pinza |
M4.0 | P16 | carico: salita |
M4.1 | P17 | scarico: rotazione antioraria |
M4.2 | P18 | scarico: discesa |
M4.3 | P19 | scarico: apertura pinza |
M4.4 | P20 | scarico: salita |
Osservando il manipolatore in azione comandato dal programma sviluppato nel 2013 si può tracciare il seguente diagramma temporale:
Il diagramma SFC che replica il diagramma temporale esistente è il seguente:
Osservazioni:
Con la tecnica batch è facile tradurre il diagramma SFC in un programma KOP (ladder) che ne implementa la logica. Il procedimento prevede di:
firstscan
e always true
Dint
per i contatori veloci e int
per i contatori CUP
) ==
ma >=
e <=
negli operatori di confronto, specialmente con i contatori velociCUP
per i sensori a impulsi 2):Cforward
e Cclose
)PV
(ad esempio 32767, il valorepiù alto possibile per il tipo di dati int
)Q
(che passerebbe a 1 raggiunto il valore PV
) ma il valore CV
(current value) che memorizza il conteggio raggiunto in quel momentoCforward.CV
) sono disponibili nei menu a tendina degli operatori di confronto