Università Degli Studi di Napoli “ Federico II” Tesi di Laurea In Ingegneria e Tecnologia dei Sistemi di Controllo CONTROLLO “PC-BASED” DI UNA CELLA ROBOTIZZATA Relatore: Ch.mo Prof. Pasquale Chiacchio Candidato: Pasquale Di Lorenzo Mat. 41/2253 Giugno 2004 PC-Based Control Personal Computer + Real-Time Operative System Platform for User Interface PC-Based Control Working Place PC Developing Environment Platform for Real-Time-Tasks La Cella Robotizzata Nastro Trasportatore Pinza 0 Robot Smart 3S 6 assi C3G-9000 Apparecchiature : • Robot Smart 3S/C3G-9000 • Pinze Pneumatiche • Nastro Trasportatore • PC-Linux-RTAI • Schede di Comunicazione Pinza 1 Robot Smart 3S 7 assi ISA Bit3 C3G-9000 Smartlab I/O PC-Control Linux-RTAI Comunicazione Robot REPLICS • gestire e/o simulare contemporaneamente ed indipendentemente i robot industriali COMAU Smart-3S e le unità di controllo aperte C3G-9000; • monitorare, salvare su disco e graficare in tempo reale le posizioni, le correnti e le forze; • eseguire moduli e file di script RPL per la comunicazione con i Robot; • avere una vista 3D dei robot in tempo reale; • trasmettere dati attraverso le porte seriali e parallele; • controllare il tutto da una postazione remota; Comunicazione Nastro/Pinze Smartlab I/O Features : 16 relay output channels 16 input channels Response time for relay: 1 ms minimum Port address selectable Linux-RTAI RTHAL SOPLICS – Architettura (SOftware Plc under LInux Control System) Parte NON REAL-TIME SUPERVISIONE Pannello di Comando (Start-Stop Resume-Suspend) FIFO 0 Quadro Sinottico Monitor Gestione Modulo Utente FIFO 2 FIFO 1 Parte REAL-TIME Device Driver RTF Handler Robot Smart 3S MAILBOX PLC-Manager MAILBOX (Replics) thre ad 0 MAILBOX thre ad 1 Modulo Utente Smartlab I/O (nastro e pinze) MAILBOX MEMORIA CONDIVISA Modulo Principale P a r t e D ic h ia r a t iv a TASK-Real-Time Puntatori a funzioni e variabili condivise MailBox - FIFO .... F u n z io n i d i s u p p o r t o addr_mbx splc_print suspend_system errore_handler init_driver event_handler resume_system rtf_in_handler read_input_sml write_output_sml read_input_rpl write_output_rpl plc_manager read_input_rpl l e g g e g l i i n g r e s s i read_input_sml r ic h ia m a la f u n z io n e d i c o n t r o llo c h e c k e v e n t i a s i n c r o n i event_handler a g g io r n a le u s c it e init_module Alloca la memoria necessaria inizializza il timer write_output_sml write_output_rpl cleanup_module Dealloca la memoria e rimuove i task Modulo Robot P a r t e D ic h ia r a t iv a Puntatori a funzioni e variabili condivise MBX .... t h r e a d 0 - robot6assi t h r e a d 1 - robot7assi attesa sulla mailbox SI attesa sulla mailbox messaggio ricevuto messaggio ricevuto esecuzione dell'azione corrispondente al comando esecuzione dell'azione corrispondente al comando comando eseguito con successo comando eseguito con successo NO ERRORE! arresto del sistema init_module Alloca la memoria necessaria e collega i puntatori alle funzioni SI NO ERRORE! arresto del sistema cleanup_module Dealloca la memoria Modulo Smartlab P a r t e D ic h ia r a t iv a Puntatori a funzioni e variabili condivise MBX .... m b x _ h a n d le r attesa sulla mailbox messaggio ricevuto vengono scritte o lette le porte di I/O SI Operazione di I/O eseguita con successo NO ERRORE! arresto del sistema init_module cleanup_module Alloca la memoria necessaria e collega i puntatori alle funzioni Dealloca la memoria Modulo Utente #define TIMER_ON #define ROBOT_ON #define EVENT1_ON #define EVENT2_ON #define EVENT3_ON #include <splc_ctrlmod.h> int scan_loop() { ... } static void event1_fun(int e) { .... } static void event2_fun(int e) { .... } static void event3_fun(int e) { .... } Macro e Funzioni Fasi e Transizioni : X(1)=1; if (X(1)) { … azione … } CLEAR_TR; TR(1)=1; Funzioni Temporali: reset_timer(1): load_timer(1,5*SECs); If (!timer(1)) { … azione …} Input Smartlab: Output Smartlab : if (FD3) { …azione …} if (SMA_1) { …azione …} ……… Input Robot: if(IS_DRIVE_ON(1)) { …azione … } if(IS_POS_OK(i)) { …azione … } …… Supervisione : NEUTRO ‘N’ ; VERDE ‘V’ GRIGIO ‘G’ ; BIANCO ‘B’ NO_PEZ ‘X’ ; IN_MOV ; P1 ; P2 ; SUL_NASTRO START ; STOP ..…. AVA=1; OPEN_PINCER_0=1; ……. Output Robot : DRIVE_ON(0); set_pos(rob_pos,0); MOVE_TO(0); ….. Interfaccia Grafica 1/2 Configurazione Interfaccia Grafica 2/2 Quadro Sinottico Esempio Modulo Utente 0 Tr0 START 1 resetta il contatore viti; setta il colore neutro per il pezzo; FD1 Tr1 2 Tr2 motore nastro in avanti KMA 3 FD4 Tr3 ferma il nastro; setta colore pezzo; 4 Tr4 FD4 #define EVENT1_ON #include <splc_ctrlmod.h> static int c=0; // contatore numero viti static int fronte_di_salita(unsigned int in) { static int just1=0; if(in) { if(!(just1)) { just1=1; return 1; } else return 0; } else { just1=0; return 0; } } int scan_loop() { static int init=0; if(init) goto start; X(0)=1; init=1; // ----- AZIONI ------ // start: if(X(1)) { c=0; COL_PEZ=NEUTRO;} if(X(2)) { AVA=1; } if(X(4)) { AVA=0; switch(c) { case 1: COL_PEZ=VERDE; break; case 2: COL_PEZ=GRIGIO; break; case 3: COL_PEZ=BIANCO; break; default : COL_PEZ=NEUTRO; break; } } CLEAR_TR // - VALUTAZIONE DELLE // TRANSIZIONI SUPERABILI--- // if(X(0) && START) TR(0)=1; if(X(1) && FD1) TR(1)=1; if(X(2) && KMA) TR(2)=1; if(X(3) && FD4) TR(3)=1; if(X(4) && !FD4) TR(4)=1; //---- AGGIORNAMENTO // DELLA CONDIZIONE -------// if(TR(0)) { X(0)=0; X(1)=1; } if(TR(1)) { X(1)=0; X(2)=1; } if(TR(2)) { X(2)=0; X(3)=1; } if(TR(3)) { X(3)=0; X(4)=1; } if(TR(4)) { X(4)=0; X(1)=1; } EVENT1=fronte_di_salita(S1); return 0; } static void event1_fun(int e) { c++; } Algoritmi di Controllo della Cella 1/4 Specifiche funzionali del Compito • Realizzazione di un ciclo di Pallettizzazione/Depallettizzazione • Gestione Allarmi 1. 2. 3. 4. Allarmi di time-out Allarmi relativi a consensi elettrici Allarmi conseguenti a malfunzionamenti del programma Allarmi conseguenti a stati di emergenza Algoritmi di Controllo della Cella 2/4 Decomposizione in SFC nome descrizione liv. gerarchico GR1 Generale 1 GR2 Nastro 2 GR3 Robot6A 2 GR4 Robot7A 2 M3.1 Pallet-Robot6A 2 - macrofase M3.2 Depallet-Robot6A 2 - macrofase M4.1 Pallet-Robot7A 2 - macrofase M4.2 Depallet-Robot7A 2 - macrofase GRA1 Malfunzionamento fotocellule 1 GRA2 Allarme Pinza 0 1 GRA3 Allarme Pinza 1 1 GRA4 Allarme Sovraccarico Termico e EMERG 1 GRA5 Allarme Compressore 1 GRA6 Allarme Riconoscimento Pezzo 1 GRA7 Allarme Robot_6A 1 GRA8 Allarme Robot_7A 1 Algoritmi di Controllo della Cella 3/4 Esempio SFC : GR1 Generale SFC Operativo SFC Funzionale 0 0 Tr0 Tr0 START and STOP START and STOP 1 1 Tr1 Tr1 Nastro OK 2 Tr2 Tr3 Rilassa pinza 0; Rilassa pinza 1; Tr4 5 Apri Pinza 0; Apri Pinza 1; 2 Tr2 Tr3 Fine Depalettizzazione Tr4 SYS_ST AT US=PALLET ; X(44) & X(84) 5 Tr5 reset_timer(0); DRIVE_ON(0); DRIVE_ON(1); IS_DRIVE_ON(0) & IS_DRIVE_ON(1) 4 Fase di Depallettizzazione if(PRESS_OK) { load_timer(0,1*SECs); if(!timer(0)) { OPEN_PINCER_0=1; OPEN_PINCER_1=1; } else { RELAX_PINCER_0; RELAX_PINCER_1; } } PRESS_OK & SMA_0 & SMC_0 & SMA_1 & SMC_1 3 Fase di Pallettizzazione Fine Palettizzazione nastro_ok PRESS_OK and timer(0)/X(2)/1sec Accensione Motori Robot; Motori Accesi 4 Tr5 Controllo Pressione; PRESS_OK and timer(0)/X(2)/1sec Pressione OK e pinze aperte 3 if(KT & !QM & !EMERG & !FD1 & !FD2 & !FD3 & !FD4 & !S1) nastro_ok=1; Controllo Nastro; SYS_ST AT US=DEPALLET ; X(58) & X(98) Algoritmi di Controllo della Cella 4/4 Esempio SFC Allarme : GRA1 Malfunzionamento Fotocellule SFC Funzionale 120 SFC Operativo Inizializza il timer; 120 Tr120 il motore del nastro è acceso Tr120 121 KMA or KMI Carica il timer a 30 secondi 121 Tr121 reset_timer(10); Il motore si è spento load_timer(10,30*SECs); Il motore è ancora acceso ed è scaduto il timer Tr122 Pone il sistema in stato di allarme; Segnala il malfunzionamento delle Fotocellule; Resetta il timer; 122 Tr121 KMA & KMI ( KMA or KMI ) & t10/X121/20s Tr122 SYS_ST AT US=PLC_ALLARM; if(KMA) ALLARM_T YPE=T IME_OUT _AVA; else ALLARM_T YPE=T IME_OUT _IND; reset_timer(10); 122 1 Tr123 123 Rilassa le pinze; Spegni il motore del nastro; Disabilitita tutte le fasi; Blocca i robot se in movimento; Spegni i motori dei robot; 1 Tr123 123 Motore del nastro spento e Motori dei robot Spenti Tr124 RELAX_PINCER_0; RELAX_PINCER_1; AVA=0; IND=0; ST ART =0; ST OP=1; int i; for(i=0;i<110;i++) X(i)=0; MOVET O_EXIT (0)=1; MOVET O_EXIT (1)=1; DRIVE_OFF(0); DRIVE_OFF(1); 124 KMA & KMI) & IS_DRIVE_ON(0) & IS_DRIVE_ON(1) Tr124 124 Conclusioni e Sviluppi Futuri Obiettivi Raggiunti: SOPLICS : Ambiente PC-Based per il controllo e supervisione della cella robotizzata Modulo di controllo indipendente e programmabile dall’utente Sviluppi Futuri: Aggiunta di moduli device-driver per il controllo di nuove apparecchiature Controllo Remoto Lan/Wan