Manuale operativo Introduzione a RAPID IRC5 RobotWare 5.0 Manuale operativo Introduzione a RAPID RobotWare 5.0 ID documento: 3HAC029364-007 © Copyright 2007 ABB. Tutti i diritti riservati. Revisione: - Le informazioni contenute nel presente manuale sono soggette a modifiche senza preavviso e non devono essere considerate vincolanti per ABB. ABB non si assume alcuna responsabilità per eventuali errori nel presente manuale. Salvo quanto espressamente indicato nel presente manuale, ABB non concede alcuna altra garanzia in relazione al Prodotto in merito a eventuali perdite, danni a persone o beni, idoneità per uno scopo specifico o altro. In nessun caso ABB potrà essere ritenuta responsabile per eventuali danni accidentali o consequenziali dovuti all'utilizzo del presente manuale e dei prodotti in esso descritti. Il presente manuale non può essere riprodotto o copiato, interamente o parzialmente, senza autorizzazione scritta da parte di ABB, e il relativo contenuto non può essere divulgato a terzi o utilizzato per scopi non autorizzati. I contravventori saranno perseguiti a norma di legge. © Copyright 2007 ABB - All right reserved – Tutti i diritti riservati ABB AB Robotics Products SE-721 68 Västerås Svezia © Copyright 2007 ABB. Tutti i diritti riservati. È possibile richiedere ulteriori copie del presente manuale ad ABB al prezzo corrente. Sommario Panoramica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Documentazione del prodotto, M2004 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Sicurezza. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1 Basi di RAPID 11 1.1 A proposito di RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2 Dati RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.2.1 Variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.2.2 Varaibili persistenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.2.3 Costanti. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.2.4 Operatori. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.3 Controllo del flusso del programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.1 IF THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.2 Esempi con condizioni logiche e IF dichiarazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.3.3 FOR ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3.4 WHILE ciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.4 Regole e consigli per la sintassi RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.4.1 Regole generali di sintassi RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.4.2 Consigli per la codifica RAPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2 Funzionalità robotica RAPID 25 2.1 Istruzioni di movimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1.1 MoveL intruzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1.2 Sistemi di coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.1.3 Esempi con MoveL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.4 Altre istruzioni di spostamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.5 Comportamento dell’esecuzione in zone d’angolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2 Segnali di I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.2.1 segnali d’I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3 Interazione con l’utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3.1 Comunicare con la FlexPendant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 © Copyright 2007 ABB. Tutti i diritti riservati. 3 Struttura 39 3.1 RAPID procedura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.2 Moduli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.3 Proeggto strutturato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4 Dati con valori multipli 47 4.1 Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.2 Tipi di dati compositi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5 RAPID: istruzioni e funzioni 51 5.1 Istruzioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.2 Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6 Che cosa leggere in seguito 53 6.1 Dove trovare ulteriori informazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Index 3HAC029364-007 Revisione: - 55 3 © Copyright 2007 ABB. Tutti i diritti riservati. Sommario 4 3HAC029364-007 Revisione: - Panoramica Panoramica A proposito di questo Manuale Questo Manuale è previsto per una prima introduzione a RAPID. Un gran quantità delle funzionalità di RAPID è omessa, ma le parti più essenziali sono descritte in modo da poter facilmente essere comprese da tutti. Questo Manuale non farà di voi programmatori esperti di RAPID, ma vi aiuterà a capire i concetti di programmazione in ambiente RAPID. Si potranno trovare i dettagli nei manuali di riferimento. Utilizzo Questo Manuale dev’essere letto prima di iniziare la programmazione. Non contiene tutto quello che sarebbe necessario conoscere, ma si deve essere familiari con la maggior parte degli argomenti esposti in questo Manuale, prima di iniziare la redazione di un programma RAPID. Questo Manuale non è destinato a sostituire i corsi di formazione in RAPID, ma può costituirne un complemento. Chi dovrebbe leggere questo Manuale? Questo Manuale è previsto per coloro che non dispongono di una precedente esperienza di programmazione, come ad esempio per un operatore che desideri apprendere la programmazione di un robot. Prerequisiti Non vi sono prerequisiti per questo Manuale. Organizzazione dei capitoli Il manuale ਠcomposto dai seguenti capitoli: © Copyright 2007 ABB. Tutti i diritti riservati. Capitolo Contenuti 1. Caratteristiche di base RAPID I fondamenti della programmazione Questa funzionalità è simile nella maggior parte dei linguaggi di programmazione di alto livello. 2. Funzionalità del robot RAPID Descrive la funzionalità che rende esclusivo RAPID, ad esempio, istruzioni di spostamento, segnali di I/O e comunicazione con una FlexPendant. 3. Struttura Descrive il modo di creare procedure Contiene pure una breve introduzione sulla maniera di applicare un progetto strutturato di un programma. 4. Dati con valori multipli Descrive array e tipi di dati complessi 5. Istruzioni e funzioni RAPID Una breve spiegazione di quello che sono le istruzioni e funzioni RAPID. 6. Che cosa leggere in seguito Dove trovare ulteriori informazioni se si desidera continuare lo studio di RAPID. Continua nella pagina successiva 3HAC029364-007 Revisione: - 5 Panoramica Continua Riferimenti Sistema di identificazione dei documenti Manuale tecnico di riferimento – RAPID Panoramica 3HAC16580-7 Manuale tecnico di riferimento - RAPID Istruzioni, funzioni e tipi di dati 3HAC16581-7 Technical reference manual - RAPID kernel 3HAC16585-1 Manuale operativo - IRC5 con FlexPendant 3HAC16590-7 Revisioni Descrizione - Prima edizione © Copyright 2007 ABB. Tutti i diritti riservati. Revisione 6 3HAC029364-007 Revisione: - Documentazione del prodotto, M2004 Documentazione del prodotto, M2004 Informazioni generali La documentazione del robot è suddivisa in un certo numero di categorie. Questo listato si basa sul tipo d’informazioni contenute nell’ambito dei documenti, indipendentemente dal fatto che i prodotti siano di serie o opzionali. Questo significa che una data consegna di prodotti robotici non conterrà tutti i documenti elencati, ma soltanto quelli che si riferiscono all’attrezzatura della consegna. In ogni caso, tutti i documenti elencati possono essere ordinati presso ABB. I documenti elencati sono validi per tutti i sistemi robotizzati M2004. Manuali dei prodotti © Copyright 2007 ABB. Tutti i diritti riservati. Tutto il vario materiale, robot e controller, sarà consegnato assieme ad un Manuale del prodotto che contiene: • Informazioni di sicurezza • Installazione e commissioning (descrizioni di installazioni meccaniche, collegamenti elettrici) • Manutenzione (descrizioni di tutte le procedure di manutenzione preventiva richieste, compresi gli intervalli d’intervento). • Riparazione (descrizioni di tutte le procedure di riparazione consigliate, inclusi i pezzi di ricambio) • Procedure supplementari, se pertinenti (calibrazione, decommissioning) • Informazioni di riferimento (numeri di articolo per la documentazione a cui ci si riferisce nel Manuale del prodotto, procedure, elenchi di strumenti, normative di sicurezza) • Elenco dei ricambi • Tavole pieghevoli o viste esplose • Schemi elettrici Manuali tecnici di riferimento I seguenti Manuali descrivono il software robotico in generale, e contengono importanti informazioni di riferimento: • Panoramica RAPID: Una panoramica del linguaggio di programmazione RAPID. • RAPID: Istruzioni, funzioni e tipi di dati: Descrizione e sintassi per tutte le istruzioni, funzioni e tipi di dati RAPID. • Parametri di sistema: Descrizione dei parametri di sistema e configurazione dei flussi operativi. Continua nella pagina successiva 3HAC029364-007 Revisione: - 7 Documentazione del prodotto, M2004 Continua Manuali applicativi Applicazioni specifiche (ad esempio, opzioni di programmi e materiale) vengono descritte in Manuali applicativi. Un manuale applicativo può descrivere una o più applicazioni. Un manuale applicativo contiene in genere informazioni a proposito di: • Lo scopo dell’applicazione (che cosa fa e quando è utile) • Quello che è incluso (ad esempio: cavi, schede di I/O, istruzioni RAPID, parametri di sistema, CD-ROM con software per PC) • Come impiegare l’applicazione • Esempi di come utilizzare l’applicazione Manuali operativi Questo insieme di manuali è indirizzato a coloro che hanno il loro primo contatto operativo con il robot, vale a dire operatori di cella, programmatori e rilevatori di problemi. Il gruppo di manuali include: Informazioni di sicurezza in caso di emergenza • Guida introduttiva - IRC5 e RobotStudio • Manuale operativo - IRC5 con FlexPendant • Manuale operativo – RobotStudio • Manuale per la risoluzione dei problemi - IRC5 per controller e robot © Copyright 2007 ABB. Tutti i diritti riservati. • 8 3HAC029364-007 Revisione: - Sicurezza Sicurezza Sicurezza del personale Un robot è un dispositivo pesante ed estremamente potente, indipendetemente dalla sua velocità. Una pausa, o un arresto prolungato del suo movimento possono essere seguiti da un movimento rapido e imprevedibile. Anche se si prevede un certo percorso di movimento, un cambiamento dell’operazione potrebbe essere causato da un segnale esterno, dando come risultato un movimento inatteso. È quindi importante che tutte le regolamentazioni di sicurezza vengano osservate alla lettera, allorché si penetra nello spazio salvaguardato. Regolamentazioni di sicurezza © Copyright 2007 ABB. Tutti i diritti riservati. Prima di iniziare il lavoro con il robot, assicurarsi di essere familiari con le regolamentazioni di sicurezza descritte in Manuale operativo - IRC5 con FlexPendant. 3HAC029364-007 Revisione: - 9 Terminologia Terminologia Riguardo i termini Questo Manuale è in genere preparato per principianti, sia nel campo della programmazione, sia in quello dei robot. In esso vengono comunque utilizzati alcuni termini che possono essere conosciuti soltanto a coloro che hanno una qualche dimestichezza con la programmazione e/ o la robotica industriale. Tali termini vengono descritti in questa terminologia. Termini Descrizione FlexPendant Un terminale palmare per il controllo di un sistema di robot. Controller del robot Il controller del robot è in genere un computer che controlla il robot. Sintassi Regole su come dev’essere codificato un programma. La sintassi si può considerare come la grammatica del linguaggio di programmazione. La sintassi di un linguaggio di programmazione è molto più rigida di quella di una comune lingua umana. Gli esseri umani sono intelligenti, e capirebbero in ogni caso se si dicesse “Io veloce corro” invece di "Io corro veloce". I computer invece sono dispositivi stupidi e non capiscono nessuna frase, a meno che la sua sintassi non sia assolutamente corretta. © Copyright 2007 ABB. Tutti i diritti riservati. Termine 10 3HAC029364-007 Revisione: - 1 Basi di RAPID 1.1. A proposito di RAPID 1 Basi di RAPID 1.1. A proposito di RAPID Che cos’è il RAPID Se si vuole che un computer esegua una certa azione, è richiesto un programma. Il RAPID è un linguaggio di programmazione per la stesura di un tale programma. Il linguaggio nativo dei computer consiste soltanto in zeri ed uni. Un linguaggio che è dunque praticamente impossibile da capire da parte degli esseri umani. È per questo motivo che i computer vengono addestrati a capire un linguaggio che sia relativamente facile da capire – un linguaggio di programmazione di alto livello. Il RAPID è un linguaggio di programmazione di alto livello che impiega alcune parole inglesi (quali IF e FOR) per farsi capire dagli esseri umani. Un esempio di un semplice programma RAPID Diamo ora un’occhiata ad un semplice esempio, per vedere come può apparire un programma RAPID: MODULE MainModule VAR num length; VAR num width; VAR num area; PROC main() length := 10; width := 5; area := length * width; TPWrite "The area of the rectangle is " \Num:=area; END PROC © Copyright 2007 ABB. Tutti i diritti riservati. ENDMODULE Questo programma calcolerà l’area di un rettangolo, e ne visualizzerà il valore sulla FlexPendant: The area of the rectangle is 50 3HAC029364-007 Revisione: - 11 1 Basi di RAPID 1.2.1. Variabili 1.2 Dati RAPID 1.2.1. Variabili Tipi di dati Vi sono molti e diversi tipi di dati in RAPID. Per il momento, porremo la nostra attenzione su tre tipi generali di dati: Tipo di dati Descrizione num I dati numerici possono essere rappresentati da numeri interi e decimali (con punto decimale). Esempio: 10 oppure 3.14159. stringa Una stringa di testo. Ad esempio: “Questa è una stringa”. 80 caratteri al massimo. bool Una variabile booleana (logica). Essa può avere solo i valori TRUE o FALSE. Tutti gli altri tipi di dati sono basati su questi tre. Se si riesce a capirli, a comprendere come eseguire operazioni su di essi, e come possano essere combinati in tipi di dati più complessi, si possono facilmente capire tutti i tipi di dati. Caratteristiche delle variabili Una variabile contiene un valore di un dato. Se si arresta e si riavvia il programma, la variabile conserva il suo valore, ma se il puntatore del programma viene spostato al Main, il valore del dato della variabile andrà perso. Dichiarazione di una variabile La dichiarazione di una variabile rappresenta il modo di definire un nome di variabile ed il tipo di dato che essa deve contenere. Si dichiara una variabile utilizzando la keyword VAR, secondo la sintassi: VAR datatype identifier; VAR num length; VAR string name; VAR bool finished; Attribuzione dei valori Si attribuisce un valore ad una variabile utilizzando l’istruzione := length := 10; name := "John" finished := TRUE; Da notare che := non rappresenta un simbolo di ’uguale’. Significa che l’espressione che si trova a destra viene trasferita alla variabile a sinistra. Ci potrà essere soltanto una varaibile a sinistra del simbolo := Ad esempio, la codifica RAPID che segue è corretta, e produrrà come risultato che reg1 conterrà il valore 3: reg1 := 2; reg1 := reg1 + 1; Continua nella pagina successiva 12 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. Esempio 1 Basi di RAPID 1.2.1. Variabili Continua L’assegnazione potrà essere fatta contemporaneamente alla dichiarazione della variabile: VAR num length := 10; VAR string name := "John"; © Copyright 2007 ABB. Tutti i diritti riservati. VAR bool finished := TRUE; 3HAC029364-007 Revisione: - 13 1 Basi di RAPID 1.2.2. Varaibili persistenti 1.2.2. Varaibili persistenti Che cosa significa ‘variabile persistente’ Una variabile persistente è praticamente come una variabile ordinaria, ma con una notevole differenza. Una variabile persistente ricorda l’ultimo valore che le è stato attribuito, anche se il programma subisce un arresto e un riavvio dall’inizio. Dichiarazione di una variabile persistente Una variabile persistente viene dichiarata mediante la keyword PERS. Al momento della dichiarazione dev’essere assegnato un valore iniziale. PERS num nbr := 1; PERS string string1 := "Hello"; Esempio Si consideri l’esempio seguente: PERS num nbr := 1; PROC main() nbr := 2; ENDPROC Se si esegue questo programma, il valore iniziale viene cambiato a 2. Nell’esecuzione successiva, la codifica del programma apparirà così: PERS num nbr := 2; PROC main() nbr := 2; © Copyright 2007 ABB. Tutti i diritti riservati. ENDPROC 14 3HAC029364-007 Revisione: - 1 Basi di RAPID 1.2.3. Costanti 1.2.3. Costanti Che cos’è una costante? Una costante contiene un valore, proprio come una variabile, ma tale valore viene sempre assegnato al momento della dichiarazione, dopo di che il valore in questione non potrà mai essere cambiato. La costante può essere utilizzata nel programma nello stesso modo di una variabile, ad eccezione del fatto che non è consentito assegnarle un nuovo valore. Dichiarazione di costanti La costante viene dichiarata utilizzando la keyword CONST seguita dal tipo di dato, identificatore e attribuzione di un valore. CONST num gravity := 9.81; CONST string greating := "Hello" Perché impiegare costanti? Impiegando una costante invece di una variabile, si può essere sicuri che il valore non ne verrà cambiato, in nessuna parte del programma in questione. © Copyright 2007 ABB. Tutti i diritti riservati. Utilizzando una costante, invece di codificare direttamente il valore in questione nel programma, si potrà più agevolmente aggiornare il programma, attribuendo se necessario un altro valore alla costante. Si apporterà quindi una sola modifica, e si potrà essere sicuri di non aver dimenticato alcuna altra presenza del valore nel programma stesso. 3HAC029364-007 Revisione: - 15 1 Basi di RAPID 1.2.4. Operatori 1.2.4. Operatori Operatori numerici Questi operatori agiscono sul tipo di dati num e restituiscono il tipo di dati num. Negli esempi sottostanti, le variabili reg1, reg2 e reg3 sono del tipo di dati num. Operatore Descrizione Esempio + Addizione reg1 := reg2 + reg3; - Sottrazione Meno ‘unario’ reg1 := reg2 - reg3; reg1 := -reg2; * Moltiplicazione reg1 := reg2 * reg3; / Divisione reg1 := reg2 / reg3; Operatori relazionali Questi operatori restituiscono il tipo di dati bool. Operatore Descrizione Esempio = uguale a flag1 := reg1 = reg2; flag1 è TRUE se reg1 è uguale a reg2 < minore di flag1 := reg1 < reg2; flag1 è TRUE se reg1 è inferiore a reg2 > maggiore di flag1 := reg1 > reg2; flag1 è TRUE se reg1 è maggiore direg2 <= minore di o uguale a flag1 := reg1 <= reg2; flag1 è TRUE se reg1 è inferiore o uguale a reg2 >= maggiore di o uguale a flag1 := reg1 >= reg2; flag1 è TRUE se reg1 è maggiore o uguale a reg2 <> diverso da flag1 := reg1 <> reg2; flag1 è TRUE se reg1 non è uguale a reg2 Gli operatori logici sono spesso impiegati assieme all’istruzione IF. Per degli esempi di codifica, vedere Esempi con condizioni logiche e IF dichiarazioni a pagina 19. Operatore di stringhe Operatore Descrizione + 16 Esempio Concatenazione di stringhe VAR string firstname := "John"; VAR string lastname := "Smith"; VAR string fullname; fullname := firstname + " " + lastname; La variabile fullname conterrà la stringa "John Smith". 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. In questi esempi, reg1 e reg2 sono di tipo di dati num, mentre flag1 è bool. 1 Basi di RAPID 1.3.1. IF THEN 1.3 Controllo del flusso del programma 1.3.1. IF THEN A proposito del flusso del programma Gli esempi di programmi esaminati finora vengono eseguiti sequenzialmente, da cima a fondo. In programmi più complessi, si potrebbe desiderare il controllo della parte di codifica da eseguire, il suo ordine ed il numero di volte dell’esecuzione. Per prima cosa daremo un’occhiata al modo di definire le condizioni per l’esecuzione o no di una data sequenza di programma. IF L’istruzione IF si può utilizzare quando un dato insieme di dichiarazioni dev’essere eseguito nel caso sia soddisfatta una condizione specificata. Se la condizione logica nella dichiarazione IF si rivela vera, la parte di codifica tra le keyword THEN ed ENDIF viene eseguita. Se la condizione è falsa, tale codifica non viene eseguita, e l’esecuzione continua dopo ENDIF. Esempio In questo esempio, la stringa string1 viene trascritta sulla FlexPendant, sempre che non sia vuota. Se la string1 è una stringa vuota, ovvero se non contiene alcun carattere, non viene intrapresa alcuna azione. VAR string string1 := "Hello"; IF string1 <> "" THEN TPWrite string1; ENDIF ELSE © Copyright 2007 ABB. Tutti i diritti riservati. Una dichiarazione IF può pure contenere una codifica di programma da eseguire se la condizione fosse falsa. Se la condizione logica nella dichiarazione IF si rivela vera, la parte di codifica tra le keyword THEN ed ELSE viene eseguita. Se la condizione è falsa, la parte di codifica tra le keyword ELSE ed ENDIF verrà eseguita. Esempio In questo esempio, la stringa string1 viene trascritta sulla FlexPendant, sempre che non sia vuota. Se la string1 è una stringa vuota, allora viene scritto il testo "The string is empty". VAR string string1 := "Hello"; IF string1 <> "" THEN TPWrite string1; ELSE TPWrite "The string is empty"; ENDIF Continua nella pagina successiva 3HAC029364-007 Revisione: - 17 1 Basi di RAPID 1.3.1. IF THEN Continua ELSEIF Talvolta possono sussistere più di due sequenze alternative, nel programma. Si può allora impiegare la dichiarazione ELSEIF per predisporre varie alternative. Esempio In questo esempio, vengono scritti testi differenti, a seconda del valore della variabile time. VAR num time := 38.7; IF time < 40 THEN TPWrite "Part produced at fast rate"; ELSEIF time < 60 THEN TPWrite "Part produced at average rate"; ELSE TPWrite "Part produced at slow rate"; ENDIF © Copyright 2007 ABB. Tutti i diritti riservati. Da notare che, dato che è la prima condizione ad essere vera, sarà il primo testo che verrà scritto. I due altri testi non verranno scritti (anche se è parimenti vero che time è inferiore a 60). 18 3HAC029364-007 Revisione: - 1 Basi di RAPID 1.3.2. Esempi con condizioni logiche e IF dichiarazioni 1.3.2. Esempi con condizioni logiche e IF dichiarazioni Esempio Utilizzare la dichiarazione IF per determinare il testo da trascrivere sulla FlexPendant. Trascrivere sulla FlexPendant qual è il pezzo più rapido da produrre. VAR string part1 := "Shaft"; VAR num time1; VAR string part1 := "Pipe"; VAR num time2; PROC main() time1 := 41.8; time2 := 38.7; IF time1 < time2 THEN TPWrite part1 + " is fastest to produce"; ELSEIF time1 > time2 THEN TPWrite part2 + " is fastest to produce"; ELSE TPWrite part1 + " and " + part2 + " are equally fast to produce"; ENDIF ENDPROC Esempio Nel caso siano necessari più di 60 secondi per la produzione di un dato pezzo, trascrivere un messaggio sulla FlexPendant. Se la variabile booleana full_speed è FALSE, il messaggio indicherà all’operatore di incrementare la velocità del robot. Se full_speed è TRUE, il messaggio richiederà all’operatore di esaminare il motivo della lentezza della produzione. VAR num time := 62,3; © Copyright 2007 ABB. Tutti i diritti riservati. VAR bool full_speed := TRUE; PROC main() IF time > 60 THEN IF full_speed THEN TPWrite "Examine why the production is slow"; ELSE TPWrite "Increase robot speed for faster production"; ENDIF ENDIF ENDPROC 3HAC029364-007 Revisione: - 19 1 Basi di RAPID 1.3.3. FOR ciclo 1.3.3. FOR ciclo Ripetizione di una sequenza di codifica Un altro modo di controllare il flusso del programma è quello di ripetere una sequenza di codifica per un certo numero di volte. Come funziona il ciclo FOR La codifica seguente ripeterà per cinque volte la scrittura di “Hello”: FOR i FROM 1 TO 5 DO TPWrite "Hello"; ENDFOR La sintassi della dichiarazione FOR è la seguente: FOR contatore FROM valore iniziale TO valore finale DO sequenza di programma da ripetere ENDFOR Il contatore non deve obbligatoriamente essere dichiarato, ma si comporta come una variabile numerica nell’ambito del ciclo FOR. La prima volta che viene eseguita la codifica, il contatore presenta il valore specificato dal valore iniziale. Il valore del contatore viene quindi incrementato di 1 ogni volta che la codifica viene rieseguita. L’ultima esecuzione della codifica avviene allorquando il contatore è uguale al valore finale. Dopo di che, l’esecuzione continua dalla codifica di programmazione dopo la dichiarazione ENDFOR. Impiego del valore del contatore Il valore del contatore può essere utilizzato nel ciclo FOR. Ad esempio, il calcolo della somma di tutti i numeri da 1 a 50 (1+2+3+...+49+50), può essere programmato in questo modo: VAR num sum := 0; FOR i FROM 1 TO 50 DO ENDFOR Non è consentita l’attribuzione di un valore al contatore nel ciclo FOR. 20 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. sum := sum + i; 1 Basi di RAPID 1.3.4. WHILE ciclo 1.3.4. WHILE ciclo Ripetizione con condizione La ripetizione di una sequenza di codifica può essere combinata con l’esecuzione condizionata della sequenza stessa. Grazie al ciclo WHILE, il programma continuerà a ripetere l’esecuzione della sequenza di codifica fino a quando la condizione permarrà ’vera’. Sintassi di WHILE La sintassi del ciclo WHILE è la seguente: WHILE condizione DO sequenza di programma da ripetere ENDWHILE Se la condizione è ’falsa’ fin dall’inizio, la sequanza di codifica non sarà mai eseguita. Se la condizione è ’vera’, la sequenza di codifica sarà eseguita ripetutamente, fino a che la condizione in questione non sia più ’vera’. Esempio La codifica di programmazione seguente aggiungerà numeri (1+2+3+...), fino a che la loro somma non raggiunga il valore 100. VAR num sum := 0; VAR num i := 0; WHILE sum <= 100 DO i := i + 1; sum := sum + i; ENDWHILE © Copyright 2007 ABB. Tutti i diritti riservati. Non creare cicli eterni o complessi senza l’istruzione ’wait’ Se la condizione non diventa mai ‘falsa’, il ciclo continuerà costantemente, appropriandosi di un’a,pia quantità di potenza di calcolo. La stesura di un ciclo eterno è consentita, ma a condizione che tale ciclo contenga alcune istruzioni ‘wait’, che permettano al computer di eseguire altri compiti nel frattempo. Cicli complessi (con molti calcoli, e con scrittura sulla FlexPendant, senza istruzioni di spostamento ’move’) possono richiedere delle istruzioni di attesa anche nel caso che il numero di cicli sia limitato. WHILE TRUE DO ! Some code ... ! Wait instruction that waits for 1 second WaitTime 1; ENDWHILE Da notare che le istruzioni ‘move’ funzionano come quelle di attesa, dal momento che l’esecuzione non continua fino a che il robot non ha raggiunto il suo obbiettivo. 3HAC029364-007 Revisione: - 21 1 Basi di RAPID 1.4.1. Regole generali di sintassi RAPID 1.4 Regole e consigli per la sintassi RAPID 1.4.1. Regole generali di sintassi RAPID Punto e virgola La regola generale dice che ciascuna dichiarazione deve terminare con un punto e virgola. Esempi Dichiarazione di variabili: VAR num length; Attribuzione dei valori: area := length * width; La maggior parte delle chiamate d’istruzioni: MoveL p10,v1000,fine,tool0; Eccezioni Alcune istruzioni speciali non terminano con un punto e virgola. Sono presenti invece specifiche keyword per indicare il termine. Esempi di istruzioni che non terminano con un punto e virgola: Keyword per istruzione Keyword per termine IF ENDIF FOR ENDFOR WHILE ENDWHILE PROC ENDPROC Queste keyword sono molto importanti per la creazione di una buona struttura di un programma RAPID. Esse sono dettagliate nel prosieguo di questo stesso Manuale. Una linea che inizia con un simbolo ! non sarà interpretata dal controller del robot. Si può dunque utilizzare questo simbolo per indicare righe di commento nella codifica. Esempio ! Calculate the area of the rectangle area := length * width; 22 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. Commenti 1 Basi di RAPID 1.4.2. Consigli per la codifica RAPID 1.4.2. Consigli per la codifica RAPID Keyword con maiuscole RAPID non è sensibile a maiuscole/minuscole, ma si consiglia di codificare tutte le parole riservate (ad esempio VAR, PROC) scrivendole in maiuscole. Per un elenco completo di parole riservate, vedere Manuale di riferimento tecnico – Panoramica RAPID. Indentazioni Per rendere più comprensibile la codifica di programmazione, utilizzare l’indentazione. Tutta la codifica nell’ambito di una PROC (ovvero tra PROC ed ENDPROC) dovrebbe essere indentata. Tutta la codifica nell’ambito di una sequenza IF-, FOR- o WHILE dovrebbe essere ulteriormente indentata. Se si programma tramite la FlexPendant, l’indentazione viene effettuata automaticamente. Esempio VAR bool repeat; VAR num times; PROC main() repeat := TRUE; times := 3; IF repeat THEN FOR i FROM 1 TO times DO TPWrite "Hello"; ENDFOR ENDIF END PROC © Copyright 2007 ABB. Tutti i diritti riservati. Da notare che è facile da vedere dove iniziano e terminano le dichiarazioni IF. Nel caso siano presenti diverse dichiarazioni IF, senza alcuna indentazione, sarebbe praticamente impossibile trovare quale dichiarazione ENDIF corrisponda ad una data dichiarazione IF. 3HAC029364-007 Revisione: - 23 1 Basi di RAPID © Copyright 2007 ABB. Tutti i diritti riservati. 1.4.2. Consigli per la codifica RAPID 24 3HAC029364-007 Revisione: - 2 Funzionalità robotica RAPID 2.1.1. MoveL intruzione 2 Funzionalità robotica RAPID 2.1 Istruzioni di movimento 2.1.1. MoveL intruzione Panoramica Il vantaggio di RAPID è dato dal fatto che, ad eccezione del fatto di presentare la maggior parte di funzionalità che si possono trovare in altri linguaggi di programmazione di alto livello, RAPID è concepito in maniera specifica per il controllo dei robot. È, ancora più importante, dispone di istruzioni per far spostare il robot. MoveL Una semplice istruzione di spostamento può apparire così: MoveL p10, v1000, fine, tool0; laddove: • MoveL è un’istruzione che sposta il robot linearmente (in linea retta) dalla sua posizione corrente a quella specificata. • p10 specifica la posizione verso la quale deve spostarsi il robot. • v1000 specifica che la velocità del robot dovrà essere di 1000 mm/s. • fine specifica che il robot dovrà spostarsi esattamente alla posizione specificata, e non tagliare alcuna curva nel suo percorso verso la posizione successiva. • tool0 specifica che la flangia di montaggio sulla punta del robot deve muoversi verso la posizione specificata. Sintassi di MoveL MoveL ToPoint Speed Zone Tool; © Copyright 2007 ABB. Tutti i diritti riservati. ToPoint Il punto di destinazione definito da una costante di tipo di dati robtarget. Programmando tramite la FlexPendant, si può attribuire un valore di robtarget indicando una posizione tramite il robot. Se si programma fuori linea, può rivelarsi complicato il fatto di calcolare le coordinate per una data posizione. Il robtarget verrà illustrato in seguito, nella sezione Tipi di dati compositi a pagina 48. Per il momento, accettiamo il fatto che la posizione x=600, y=-100, z=800 possa essere dichiarata ed assegnata in questa maniera: CONST robtarget p10 := [ [600, -100, 800], [1, 0, 0, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; Speed La velocità di spostamento definita da una costante di tipo di dati speeddata. Sono disponibili molti valori predefiniti, quali: speeddata predefiniti Valore v5 5 mm/s v100 100 mm/s Continua nella pagina successiva 3HAC029364-007 Revisione: - 25 2 Funzionalità robotica RAPID 2.1.1. MoveL intruzione Continua speeddata predefiniti Valore v1000 1.000 mm/s vmax Velocità massima del robot Un elenco completo di valori di speeddata predefiniti si può trovare in Manuale di riferimento tecnico – RAPID Istruzioni, Funzioni e tipi di dati, sezione Tipi di dati e speeddata. Se si impiega un valore predefinito, quest’ultimo non deve essere dichiarato o assegnato. Zone Specifica una zona di curva definita da una costante di tipo di dati zonedata. Sono disponibili molti valori predefiniti, quali: zonedata predefiniti Valore fine Il robot si sposterà esattamente verso la posizione specificata z10 Il percorso del robot può tagliare curve quando si trova a meno di 10 mm da ToPoint. z50 Il percorso del robot può tagliare curve quando si trova a meno di 50 mm da ToPoint. Un elenco completo di valori di zonedata predefiniti si può trovare in Manuale di riferimento tecnico – RAPID Istruzioni, Funzioni e tipi di dati, sezione Tipi di dati e zonedata. Se si impiega un valore predefinito, quest’ultimo non deve essere dichiarato o assegnato. Le istruzioni RAPID seguenti determineranno il percorso del robot qui sotto indicato: MoveL p10, v1000, z50, tool0; © Copyright 2007 ABB. Tutti i diritti riservati. MoveL p20, v1000, fine, tool0; xx0700000358 Continua nella pagina successiva 26 3HAC029364-007 Revisione: - 2 Funzionalità robotica RAPID 2.1.1. MoveL intruzione Continua Tool Specifica lo strumento utilizzato dal robot, definito da una variabile persistente di tipo di dati tooldata. Se al robot sono connessi un cannello da saldatura, una pistola a colla o una penna, si desidera programmare il ToPoint in relazione alla punta di tale strumento. Questo viene fatto automaticamente se viene dichiarato, assegnato ed impiegato un tooldata nell’istruzione MoveL. © Copyright 2007 ABB. Tutti i diritti riservati. tool0 rappresenta uno strumento predefinito, raffigurante il robot senza alcuno strumento, e non deve essere né dichiarato, né assegnato. Tutti gli altri strumenti devono essere dichiarati ed assegnati prima di poter essere utilizzati. 3HAC029364-007 Revisione: - 27 2 Funzionalità robotica RAPID 2.1.2. Sistemi di coordinate 2.1.2. Sistemi di coordinate Sistema di coordinate di base La posizione verso cui si sposta un’istruzione ‘move’ è specificata in coordinate, in un sistema di coordinate. Se non viene specificato alcun sistema di coordinate, la posizione viene data in relazione al sistema di coordinate di base del robot (chiamato pure quadro di base). Il sistema di coordinate di base prende la sua origine dalla base del robot. xx0700000397 Siszemi di coordinate personalizzati Si può definire ed utilizzare un altro sistema di coordinate, mediante istruzioni ‘move’. Il sistema di coordinate che l’istruzione ’move’ dovrà utilizzare viene specificato mediante l’argomento opzionale \WObj. MoveL p10, v1000, z50, tool0 \WObj:=wobj1; Per ulteriori informazioni sui sistemi di coordinate, vedere Manuale di riferimento tecnico – RAPID Panoramica, sezione Sistemi di coordinate. 28 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. Per informazioni sul modo di definire un sistema di coordinate, vedere Manuale di riferimento tecnico – RAPID Istruzioni, Funzioni e Tipi di dati, sezione Tipi di dati e wobjdata. 2 Funzionalità robotica RAPID 2.1.3. Esempi con MoveL 2.1.3. Esempi con MoveL Disegno di un quadrato Un robot tiene una penna, sopra un foglio di carta posto su un tavolo. Si desidera che il robot abbassi la punta della penna sul foglio di carta, e che tracci un quadrato. xx0700000362 PERS tooldata tPen := [ TRUE, [[200, 0, 30], [1, 0, 0 ,0]], [0.8, [62, 0, 17], [1, 0, 0, 0], 0, 0, 0]]; CONST robtarget p10 := [ [600, -100, 800], [0,707170, 0, 0,707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; CONST robtarget p20 := [ [600, 100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; CONST robtarget p30 := [ [800, 100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; CONST robtarget p40 := [ [800, -100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; © Copyright 2007 ABB. Tutti i diritti riservati. PROC main() MoveL p10, v200, fine, tPen; MoveL p20, v200, fine, tPen; MoveL p30, v200, fine, tPen; MoveL p40, v200, fine, tPen; MoveL p10, v200, fine, tPen; ENDPROC Continua nella pagina successiva 3HAC029364-007 Revisione: - 29 2 Funzionalità robotica RAPID 2.1.3. Esempi con MoveL Continua Disegno con zone d’angoli Disegno della stessa figura dell’esempio precedente, ma con una zona d’angolo di 20 mm al p20 ed una zona d’angolo di 50 mm al p40. xx0700000363 VAR tooldata tPen := ... ... VAR robtarget p40 := ... PROC main() MoveL p10, v200, fine, tPen; MoveL p20, v200, z20, tPen; MoveL p30, v200, fine, tPen; MoveL p40, v200, z50, tPen; MoveL p10, v200, fine, tPen; © Copyright 2007 ABB. Tutti i diritti riservati. ENDPROC 30 3HAC029364-007 Revisione: - 2 Funzionalità robotica RAPID 2.1.4. Altre istruzioni di spostamento 2.1.4. Altre istruzioni di spostamento Svariate istruzioni di spostamento In RAPID sono disponibili svariate istruzioni di spostamento. Le più comuni sono MoveL, MoveJ e MoveC. MoveJ MoveJ viene utilizzata per spostare rapidamente il robot da un punto a un altro quando tale movimento non deve essere eseguito in linea retta. Utilizzare MoveJ per spostare il robot verso un punto della zona prossima a dove il robot dovrà funzionare. Un'istruzione MoveL non sarà operativa se, ad esempio, la base del robot si trova tra la posizione corrente e quella programmata, oppure se il riorientamento dell'utensile è troppo esteso. In questi casi si potrà sempre impiegare MoveJ. La sintassi di MoveJ è analoga a quella di MoveL. Esempio MoveJ p10, v1000, fine, tPen; MoveC MoveC viene impiegata per spostare il robot circolarmente, lungo un arco. Esempio MoveL p10, v500, fine, tPen; MoveC p20, p30, v500, fine, tPen; © Copyright 2007 ABB. Tutti i diritti riservati. MoveL p40, v500, fine, tPen; xx0700000364 3HAC029364-007 Revisione: - 31 2 Funzionalità robotica RAPID 2.1.5. Comportamento dell’esecuzione in zone d’angolo 2.1.5. Comportamento dell’esecuzione in zone d’angolo Qual è il motivo di un’esecuzione speciale nelle zone d’angolo? L’esecuzione di un programma è in genere completata nell’ordine in cui sono redatte le dichiarazioni. Nell’esempio seguente, il robot si sposta per prima cosa a p10, quindi calcola il valore di reg1 e quindi si sposta a p20: MoveL p10, v1000, fine, tool0; reg1 := reg2 + reg3; MoveL p20, v1000, fine, tool0; Ma ora si consideri questo esempio: MoveL p10, v1000, z50, tool0; reg1 := reg2 + reg3; MoveL p20, v1000, fine, tool0; Se il calcolo di reg1 non iniziasse fino a che il robot non si trovasse a p10, il robot dovrebbe arrestarsi in questo punto, per attendere l'istruzione di spostamento successiva. Quello che succede veramente è che la codifica viene eseguita prima dello spostamento del robot. Viene calcolato reg1, ed il percorso del robot nella zona d’angolo è calcolato prima che il robot raggiunga p10. Come questo influisca sul programma In molti casi, il tempo effettivo di esecuzione non influisce sul programma. Vi sono comunque dei casi in cui questo avviene. Se si desidera tracciare una linea con una pistola a spruzzo tra p10 e p20, e si redige il programma in questo modo: MoveL p10, v300, z10, tspray; ! Avvio dell’operazione di spruzzo SetDO do1, 1; MoveL p20, v300, z10, tspray; © Copyright 2007 ABB. Tutti i diritti riservati. ! Arresto dell’operazione di spruzzo SetDO do1, 0; MoveL p30, v300, fine, tspray; Il risultato può apparire così: xx0700000387 Continua nella pagina successiva 32 3HAC029364-007 Revisione: - 2 Funzionalità robotica RAPID 2.1.5. Comportamento dell’esecuzione in zone d’angolo Continua Soluzione Se si desidera predisporre dei segnali nelle zone d’angolo, e non utilizzare fine, sono disponibili istruzioni speciali per risolvere questo caso, come ad esempio MoveLDO, TriggL e DispL. Per maggiori informazioni riguardanti queste istruzioni, vedere Manuale tecnico di riferimento – RAPID Istruzioni, Funzioni e Tipi di dati. Sono da evitare istruzioni d’attesa o calcoli complessi dopo una zona d’angolo. Il controller del robot può calcolare lo spostamento del robot in percorsi d’angolo anche se sono presenti istruzioni tra le istruzioni di spostamento. Se è comunque presente un’istruzione d’attesa dopo una di spostamento con una zona d’angolo, il robot non sarà in grado di eseguire quest’azione. Utilizzare fine nell’istruzione di spostamento, prima di un’istruzione di attesa. © Copyright 2007 ABB. Tutti i diritti riservati. Vi è pure una limitazione riguardante il numero )e la complessità) dei calcoli che il controller del robot può eseguire tra istruzioni di spostamento con zone d’angolo. Si tratta di un problema soprattutto nel caso di procedure di chiamata dopo un’istruzione di spostamento con una zona d’angolo. 3HAC029364-007 Revisione: - 33 2 Funzionalità robotica RAPID 2.2.1. segnali d’I/O 2.2 Segnali di I/O 2.2.1. segnali d’I/O A proposito dei segnali I segnali vengono utilizzati per la comunciazione con dispositivi esterni con cui il robot coopera. I segnali d’ingresso vengono impostati dai dispositivi esterni, e si possono utilizzare nel programma RAPID, per iniziare una certa esecuzione da parte del robot. I segnali d’uscita vengono impostati dal programma RAPID, che segnala ai dispositivi esterni che devono eseguire qualche azione. Impostazione dei segnali I segnali sono configurati nei parametri di sistema per l'insieme robotico. È possibile impostare dei nomi personalizzati per i segnali. Essi non devono essere dichiarati nel programma RAPID. Ingresso digitale Un segnale d’ingreso digitale può avere i valori 0 o 1. Il programma RAPID è in grado di leggere il suo valore, ma non può impostarlo. Esempio Se il segnale digitale d’ingresso di1 ha come valore 1, il robot si sposterà. IF di1 = 1 THEN MoveL p10, v1000, fine, tPen; ENDIF Uscita digitale Esempio Il robot dispone di un utensile a pinza che si può chiudere mediante il segnale digitale d’uscita do_grip. Il robot si sposta alla posizione in cui si trova la penna, e chiude la pinza. Il robot si sposta poi al punto in cui dovrà tracciare la linea, utilizzando allora l’utensile tPen. MoveJ p0, vmax, fine, tGripper; SetDO do_grip, 1; MoveL p10, v1000, fine, tPen; Altri tipi di segnali I segnali digitali sono i più comuni e facili da utilizzare. Se per un dato segnale è necessario avere un valore diverso da 0 o 1, sono disponibili degnali analogici e gruppi di segnali digitali che possono avere altri valori. Questi tipi di segnali non sono trattati in questo Manuale. 34 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. Un segnale d’uscita digitale può comportare i valori 0 o 1. Il programma RAPID può impostare il valore per un segnale d’uscita digitale, e così influire dui dispositivi esterni. Il valore di un segnale digitale d’uscita viene impostato mediante l’istruzione SetDO. 2 Funzionalità robotica RAPID 2.3.1. Comunicare con la FlexPendant 2.3 Interazione con l’utente 2.3.1. Comunicare con la FlexPendant A proposito delle istruzioni di lettura e scrittura In RAPID, sono disponibili parecchie istruzioni per la scrittura di informazioni destinate all’operatore del robot, nonché per la ricezione di input dall’operatore. Negli esempi precedenti avevamo già visto TPWrite. Le sole istruzioni che esamineremo in questa sede sono TPWrite, TPReadFK e TPReadNum. TPWrite La scrittura di un messaggio destinato all’operatore si può effettuare mediante l’istruzione TPWrite. © Copyright 2007 ABB. Tutti i diritti riservati. TPWrite "Now producing exhaust pipes"; xx0700000374 Scrittura di una variabile a stringa La stringa di testo sulla FlexPendant può provenire da una variabile a stringa, oppure il testo scritto può essere una concatenazione di una variabile a stringa e di un'altra stringa. VAR string product := "exhaust pipe"; ! Write only the product on the FlexPendant TPWrite product; ! Write "Producing" and the product on the FlexPendant TPWrite "Producing " + product; Continua nella pagina successiva 3HAC029364-007 Revisione: - 35 2 Funzionalità robotica RAPID 2.3.1. Comunicare con la FlexPendant Continua Scrittura di una variabile numerica Una variabile numerica può essere aggiunta dopo la stringa, utilizzando l’argomento opzionale \Num. VAR num count := 13; TPWrite "The number of produced units is: " \Num:=count; TPReadFK Quando si scrive un programma RAPID che richiede una scelta da parte dell’operatore, TPReadFK è un’istruzione utile. Essa infatti consente la visualizzazione di fino a 5 pulsanti di funzione, e l’operatore può scegliere quello da attivare. I pulsanti corrisponderanno ai valori da 1 a 5. VAR num answer; TPReadFK answer, "Select which figure to draw", "Square", "Triangle", stEmpty, stEmpty, stEmpty; IF answer = 1 THEN ! code to draw square ELSEIF answer = 2 THEN ! code to draw triangle ELSE ! do nothing xx0700000376 Se l’utente seleziona "Square", la variabile numerica answer ottiene il valore 1. Se l’utente seleziona "Triangle", alla variabile numerica answer viene attribuito il valore 2. Si possono specificare cinque pulsanti di funzioni. Se non si utilizza un certo pulsante, scrivere su di esso stEmpty (vuoto) invece del testo. Continua nella pagina successiva 36 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. ENDIF 2 Funzionalità robotica RAPID 2.3.1. Comunicare con la FlexPendant Continua TPReadNum TPReadNum consente all’operatore di scrivere un numero sulla FlexPendant, invece di compiere una scelta. VAR num answer; TPReadNum answer, "How many times shall I draw the figure?"; FOR i FROM 1 TO answer DO ! code to draw figure ENDFOR xx0700000378 © Copyright 2007 ABB. Tutti i diritti riservati. La variabile numerica answer ottiene il valore immesso dall’operatore. 3HAC029364-007 Revisione: - 37 2 Funzionalità robotica RAPID © Copyright 2007 ABB. Tutti i diritti riservati. 2.3.1. Comunicare con la FlexPendant 38 3HAC029364-007 Revisione: - 3 Struttura 3.1. RAPID procedura 3 Struttura 3.1. RAPID procedura Che cos’è una procedura Fino a questo punto, tutti gli esempi di codifica RAPID che abbiamo esaminato eseguivano la codifica presente nella procedura main. L’esecuzione inizia automaticamente nella procedura chiamata main, ma possono essere presenti svariate procedure. Una procedura dev’essere dichiarata mediante la keyword PROC seguita dal nome della procedura, dagli argomenti della procedura e dalla codifica di programmazione che dev’essere eseguita dalla procedura stessa. Una procedura viene chiamata da un’altra procedura (ad eccezione della main, richiamata automaticamente all’inizio del programma). Esempio Se si desidera tracciare quattro quadrati di dimensioni differenti, potremo preparare quasi la stessa codifica di programmazione per quattro volte. Il risultato sarà un'estesa quantità di codifica ed un programma difficile da capire. Una maniera molto più efficiente di scrivere questo programma è rappresentata dalla preparazione di una procedura che tracci il quadrato, e che sarà richiamata dalla procedura ‘main’ per quattro volte. PERS tooldata tPen:= ... CONST robtarget p10:= ... PROC main() ! Call the procedure draw_square draw_square 100; draw_square 200; draw_square 300; draw_square 400; © Copyright 2007 ABB. Tutti i diritti riservati. ENDPROC PROC draw_square(num side_size) VAR robtarget p20; VAR robtarget p30; VAR robtarget p40; ! p20 is set to p10 with an offset on the y value p20 := Offs(p10, 0, side_size, 0); p30 := Offs(p10, side_size, side_size, 0); p40 := Offs(p10, side_size, 0, 0); MoveL p10, v200, fine, tPen; MoveL p20, v200, fine, tPen; MoveL p30, v200, fine, tPen; MoveL p40, v200, fine, tPen; MoveL p10, v200, fine, tPen; ENDPROC Continua nella pagina successiva 3HAC029364-007 Revisione: - 39 3 Struttura 3.1. RAPID procedura Continua Argomenti della procedura Nella dichiarazione di una procedura, tutti gli argomenti vengono dichiarati tra parentesi, dopo il nome della procedura. Questa dichiarazione contiene un tipo di dati ed un nome d’argomento per ciascun argomento. L’argomento ottiene il suo valore dal richiamo alla procedura, e l’argomento agisce come una variabile nell’ambito della procedura (l’argomento non può essere utilizzato esternamente alla procedura). PROC main() my_procedure 14, "Hello", TRUE; ENDPROC PROC my_procedure(num nbr_times, string text, bool flag) ... ENDPROC Nell’ambito della procedura my_procedure qui sopra, nbr_times presenta il valore 14, text comporta il valore "Hello" mentre flag ha come valore TRUE. Per il richiamo della procedura, l’ordine degli argomenti è importante, al fine d’assegnare il valore corretto al giusto argomento. Non viene utilizzata alcuna parentesi nel richiamo alla procedura. Variabili dichiarate nell’ambito della procedura © Copyright 2007 ABB. Tutti i diritti riservati. Le variabili dichiarate nell’ambito di una procedura esistono soltanto in tale procedura. Ad esempio, nel caso succitato, p10 potrà essere utilizzato in tutte le procedure di questo modulo, ma p20, p30 e p40 possono essere utilizzati soltanto nella procedura draw_square. 40 3HAC029364-007 Revisione: - 3 Struttura 3.2. Moduli 3.2. Moduli A proposito dei moduli Un programma RAPID può consistere in uno o svariati moduli. Ciascun modulo può contenere una o svariate procedure. I brevi e semplice programmi illustrati in questo Manuale utilizzano un solo modulo. In un ambiente di programmazione più complesso, alcune procedure standard, utilizzate da molti differenti programmi, possono essere sistemate in un modulo separato. Esempio Il modulo MainModule contiene un a codifica specifica per questo programma, ed indica l’attività del robot in questo programma particolare. Il modulo figures_module contiene una codifica standard che può essere utilizzata da un qualsiasi programma che desideri tracciare un quadrato, un triangolo o un cerchio. MODULE MainModule ... draw_square; ... ENDMODULE MODULE figures_module PROC draw_square() ... ENDPROC PROC draw_triangle() ... ENDPROC PROC draw_circle() ... © Copyright 2007 ABB. Tutti i diritti riservati. ENDPROC ENDMODULE Moduli di programma Un modulo di programma viene memorizzato in un file che comporta l’estensione .mod, come ad esempio figures_module.mod. Per il controller del robot non fa alcuna differenza se il programma è scritto in più moduli. Il motivo di utilizzare più moduli in un programma è soltanto quello di rendere il programma più facile da comprendere, e più agevole da riutilizzare da parte dei programmatori. Vi può essere un solo programma attivo sul controller del robot, vale a dire che soltanto uno dei moduli può contenere una procedura di nome main. Continua nella pagina successiva 3HAC029364-007 Revisione: - 41 3 Struttura 3.2. Moduli Continua Moduli di sistema Un modulo di sistema viene memorizzato in un file che comporta l’estensione .sys, come ad esempio system_data_module.sys. © Copyright 2007 ABB. Tutti i diritti riservati. I dati e le procedure che devono essere mantenuti nel sistema, anche se il programma viene cambiato, devono essere sistemati in un modulo di sistema. Ad esempio, se una variabile persistente, di tipo tooldata viene dichiarata in un modulo di sistema, una ricalibrazione dell’utensile viene preservata, anche se venisse ad essere caricato un nuovo programma. 42 3HAC029364-007 Revisione: - 3 Struttura 3.3. Proeggto strutturato 3.3. Proeggto strutturato A proposito della struttura Quando ci si trova ad essere confrontati con un problema che si desidera risolvere tramite un programma RAPID, ci si metta calmamente ad analizzare il problema ed i suoi elementi. Se si avvia la programmazione senza prima aver concepito il progetto del programma, quest’ultimo sarà irrazionale. Un programma ben concepito è meno prono a contenere errori, ed è più facile ad essere compreso da altre persone. Il tempo trascorso sul progetto verrà ripagato molte volte in termini di collaudo e manutenzione del programma. Suddivisione del programma Seguire questi passi per suddividere il problema in parti gestibili: Azione 1. Individuare un’estesa funzionalità. Tentare di suddividere il problema in parti più ridotte, più facili da maneggiare. 2. Creare una struttura concettuale. Tracciare una mappa delle funzionalità e del modo in cui esse interagiscono tra di loro. 3. Esaminare ciascun blocco della struttura concettuale. Si può suddividere ulteriormente un blocco in parti minori? Che cosa è richiesto, al fine di implementare il blocco? Esempio Descrizione del problema © Copyright 2007 ABB. Tutti i diritti riservati. Creare un programma RAPID che possa tracciare quadrati o triangoli su un pezzo di carta. Lasciare che sia l’operatore a decidere se il grafico successivo debba presentare la forma di un quadrato o di un triangolo. Una volta che il robot ha terminato di tracciare la figura, l’utente deve poter essere in grado di operare la medesima selezione ancora una volta, fino a che l’operatore non selezioni un pulsante Esci. Una volta che il robot ha tracciato 10 figure sullo stesso pezzo di carta, scrivere un messaggio che richieda il cambio della carta, ed aspettare che l’operatore selezioni il pulsante OK. Fra i disegni, verificare se di1 vale 1. Se questo fosse il caso, spostarsi verso un affilamatite, ed impostare do1 ad 1 per avviare l’azione dell’affilamatite, e muovere lentamente la matita nell’affilamatite. In genere, si dovrebbe ridefinire l’utensile, dato che la matita diventa più corta, una volta affilata, ma per questo esempio tralasceremo quest’azione. Continua nella pagina successiva 3HAC029364-007 Revisione: - 43 3 Struttura 3.3. Proeggto strutturato Continua Struttura concettuale en0700000381 Codifica del programma MODULE MainModule PERS tooldata tPen := [ TRUE, [[200, 0, 30], [1, 0, 0 ,0]], [0.8, [62, 0, 17], [1, 0, 0, 0], 0, 0, 0]]; CONST robtarget p10 := [ [600, -100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; CONST robtarget pSharp1 := [ [200, 500, 850], [1, 0, 0, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; PERS num count := 0; PROC main() user_selection; IF count >= 10 THEN change_paper; ! Reset count count := 0; ENDIF sharpen_pencil; ENDIF ENDPROC PROC user_selection() VAR num answer; TPReadFK answer, "Select which figure to draw", "Square", "Triangle", "Quit", stEmpty, stEmpty; IF answer = 1 THEN draw_square; count := count + 1; ELSEIF answer = 2 THEN draw_triangle; count := count + 1; ELSE quit; ENDIF Continua nella pagina successiva 44 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. IF di=1 THEN 3 Struttura 3.3. Proeggto strutturato Continua ENDPROC PROC draw_square() VAR robtarget p20; VAR robtarget p30; VAR robtarget p40; ! Define points that give a square with the side 200 mm p20 := Offs(p10, 0, 200, 0); p30 := Offs(p10, 200, 200, 0); p40 := Offs(p10, 200, 0, 0); MoveL p10, v200, fine, tPen; MoveL p20, v200, fine, tPen; MoveL p30, v200, fine, tPen; MoveL p40, v200, fine, tPen; MoveL p10, v200, fine, tPen; ENDPROC PROC draw_triangle() VAR robtarget p20; VAR robtarget p30; ! Define points for the triangle p20 := Offs(p10, 0, 200, 0); p30 := Offs(p10, 200, 100, 0); MoveL p10, v200, fine, tPen; MoveL p20, v200, fine, tPen; MoveL p30, v200, fine, tPen; MoveL p10, v200, fine, tPen; © Copyright 2007 ABB. Tutti i diritti riservati. ENDPROC PROC quit() TPWrite "Good bye!" ! Terminate the program EXIT; ENDPROC PROC change_paper() VAR num answer; TPReadFK answer, "Change the paper", "OK", stEmpty, stEmpty, stEmpty, stEmpty; ENDPROC Continua nella pagina successiva 3HAC029364-007 Revisione: - 45 3 Struttura 3.3. Proeggto strutturato Continua PROC sharpen_pencil() VAR robtarget pSharp2; VAR robtarget pSharp3; pSharp2 := Offs(pSharp1, 100, 0, 0); pSharp3 := Offs(pSharp1, 120, 0, 0); ! Move quickly to position in front of sharpener MoveJ pSharp1, vmax, z10, tPen; ! Place pencil in sharpener MoveL pSharp2, v500, fine, tPen; ! Start the sharpener SetDO do1, 1; ! Slowly move into the sharpener MoveL pSharp3, v5, fine, tPen; ! Turn off sharpener SetDO do1, 0; ! Move out of sharpener MoveL pSharp1, v500, fine, tPen; ENDPROC ENDMODULE © Copyright 2007 ABB. Tutti i diritti riservati. Da notare che, in fase di produzione, un programma viene in genere eseguito in modalità continua, per cui, quando l’esecuzione raggiunge la fine della procedura main, l’esecuzione riprende dall’inizio. Se non si utilizza questa particolarità, si potrà impiegare un ciclo WHILE per ripetere l’esecuzione di tutto quel che è contenuto nella procedura main. 46 3HAC029364-007 Revisione: - 4 Dati con valori multipli 4.1. Array 4 Dati con valori multipli 4.1. Array Definizione di un array Un array è una variabile che contiene più di un solo valore. Viene utilizzato un indice per indicare uno dei valori. Dichiarazione di un array La dichiarazione di un array assomiglia a quella di una qualsiasi altra variabile, ad eccezione del fatto che la lunghezza dell’array viene specificata al suo interno { }. VAR num my_array{3}; Attribuzione dei valori Ad un array si possono attribuire tutti i suoi valori in una volta sola. Durante l’attribuzione dei valori dell’intero array, i valori sono racchiusi tra parentesi quadre [ ] e sono separati da virgole. my_array := [5, 10, 7]; È anche possibile assegnare un valore ad un solo elemento dell’array. L’elemento a cui attribuire un valore viene specificato all’interno di { }. my_array{3} := 8; Esempio Questo esempio utilizza un ciclo FOR ed array per chiedere all’operatore il tempo di produzione stimato per ciascun pezzo. Si tratta di un modo molto efficiente per scrivere una codifica, se lo si compara a quello di disporre di una sola variabile per ciascun pezzo, e di non essere in grado di impiegare il ciclo FOR. VAR num time{3}; VAR string part{3} := ["Shaft", "Pipe", "Cylinder"]; © Copyright 2007 ABB. Tutti i diritti riservati. VAR num answer; PROC main() FOR i FROM 1 TO 3 DO TPReadNum answer, "Estimated time for " + part{i} + "?"; time{i} := answer; ENDFOR ENDPROC 3HAC029364-007 Revisione: - 47 4 Dati con valori multipli 4.2. Tipi di dati compositi 4.2. Tipi di dati compositi Tipo di dati composito Un tipo di dati composito è un tipo di dati che contiene più di un solo valore. Viene dichiarato come una variabile normale, ma contiene un numero predefinito di valori. pos Un semplice esempio di tipo di dati composito è quello pos. Esso contiene tre valori numerici (x, y e z). La dichiarazione assomiglia a quella di una semplice variabile: VAR pos pos1; L’attribuzione di tutti i valori viene compiuta come nel caso di un array: pos1 := [600, 100, 800]; I diversi elementi presentano nomi, invece di numeri. Gli elementi di pos si chiamano x, y e z. Il valore di un unico elemento viene identificato mediante il nome della variabile, un punto ed il nome dell’elemento: pos1.z := 850; orient Il tipo di dati orient specifica l’orientamento dell'utensile. L’orientamento viene specificato da quattro valori numerici, chiamati q1, q2, q3 e q4. VAR orient orient1 := [1, 0, 0, 0]; TPWrite "The value of q1 is " \Num:=orient1.q1; pose Un tipo di dati può essere composto di altri tipi di dati compositi. Un esempio ne è il tipo di dati pose, che consiste in un solo pos chiamato trans ed un unico orient di nome rot. VAR pose pose1 := [[600, 100, 800], [1, 0, 0, 0]]; VAR pos pos1 := [650, 100, 850]; pose1.pos := pos1; orient1 := pose1.rot; pose1.pos.z := 875; robtarget robtarget è un tipo di dati troppo complesso, per poterlo illustrare dettagliatamente in questa sede, per cui passeremo ad una breve spiegazione. robtarget consiste in quattro parti: Tipo di dati Name Descrizione pos trans coordinate x, y e z orient rot Orientamento confdata robconf Specifica gli angoli degli assi del robot extjoint extax Specifica le posizioni per 6 assi supplementari. Il valore viene impostato a 9E9 se non viene utilizzato alcun asse supplementare. Continua nella pagina successiva 48 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. VAR orient orient1; 4 Dati con valori multipli 4.2. Tipi di dati compositi Continua VAR robtarget p10 := [ [600, -100, 800], [0.707170, 0, 0.707170, 0], [0, 0, 0, 0], [ 9E9, 9E9, 9E9, 9E9, 9E9, 9E9] ]; ! Increase the x coordinate with 50 p10.trans.x := p10.trans.x + 50; Descrizioni dettagliate © Copyright 2007 ABB. Tutti i diritti riservati. Descrizioni dettagliate di questi tipi di dati, e di molti altri ancora, si possono trovare in Manuale tecnico di riferimento – RAPID Istruzioni, Funzioni e Tipi di dati, sezione Tipi di dati. 3HAC029364-007 Revisione: - 49 4 Dati con valori multipli © Copyright 2007 ABB. Tutti i diritti riservati. 4.2. Tipi di dati compositi 50 3HAC029364-007 Revisione: - 5 RAPID: istruzioni e funzioni 5.1. Istruzioni 5 RAPID: istruzioni e funzioni 5.1. Istruzioni Definizione di un'istruzione Un’istruzione RAPID agisce come una procedura prestabilita. Un richiamo ad un’istruzione assomiglia ad una procedura, dove il nome d’istruzione è seguito dai valori dell’argomento. Alcune istruzioni RAPID sono semplici, e avrebbero facilmente potuto essere state scritte come una procedura in RAPID. Ad esempio, l’istruzione Add. Add reg1, 3; ! The same functionality could be written: reg1 := reg1 + 3; Altre istruzioni RAPID eseguono processi complicati, che non avrebbero potuto essere programmati senza queste istruzioni prestabilite. Ad esempio: MoveL, che potrebbe sembrare una semplice istruzione, ma per cui, in secondo piano vi sono calcoli dell'entità di movimento di ciascun asse del robot e della quantità di corrente da fornire a ciascun motore. Dato che la codifica di programmazione per questi calcoli esiste già, non resterà che preparare un semplice richiamo d’istruzione. MoveL p10, v1000, fine, tool0; Descrizioni dettagliate © Copyright 2007 ABB. Tutti i diritti riservati. Descrizioni dettagliate di istruzioni si possono trovare in Manuale tecnico di riferimento – RAPID Istruzioni, Funzioni e Tipi di dati, sezioneIstruzioni. 3HAC029364-007 Revisione: - 51 5 RAPID: istruzioni e funzioni 5.2. Funzioni 5.2. Funzioni Definizione di una funzione Una funzione RAPID assomiglia ad un’istruzione, ma restituisce un valore. ! Calculate the cosine of reg2 reg1 : = Cos(reg2); Dato che la funzione restituisce un valore, il risultato della funzione può essere attribuito ad una variabile. Gli argomenti in un richiamo di funzione sono scritti entro parentesi, e sono separati da virgole. Comprendono un richiamo di funzione in una dichiarazione Dappertutto, dove si può utilizzare un valore, si può utilizzare una funzione che restituisca un valore dello stesso tipo di dati. ! Perform something if reg1 is smaller than -2 or greater than 2 IF Abs(reg1) > 2 THEN ... ! Convert the num time to string and concatenate with other strings string1 := name + "’s time was " + NumToStr(time); Semplificazione di calcoli complicati Un singolo richiamo di funzione può spesso sostituire diverse dichiarazioni complesse. Ad esempio: p20 := Offs(p10, 100, 200, 300); può sostituire la codifica seguente: p20 := p10; p20.trans.x := p20.trans.x + 100; p20.trans.z := p20.trans.z + 300; Descrizioni dettagliate Descrizioni dettagliate di funzioni si possono trovare in Manuale tecnico di riferimento – RAPID Istruzioni, Funzioni e Tipi di dati, sezione Funzioni. 52 3HAC029364-007 Revisione: - © Copyright 2007 ABB. Tutti i diritti riservati. p20.trans.y := p20.trans.y + 200; 6 Che cosa leggere in seguito 6.1. Dove trovare ulteriori informazioni 6 Che cosa leggere in seguito 6.1. Dove trovare ulteriori informazioni Che cosa trovare in qual Manuale Che cosa si desidera conoscere • • • • • • Come scrivere programmi sulla FlexPendant Come caricare programmi sul controller del robot. Come collaudare il programma Dopo poter leggere a questo proposito Manuale operativo - IRC5 con FlexPendant, sezione Programmazione e collaudo Informazioni maggiormente dettagliate sulle fun- Manuale tecnico di riferimento – zionalità menzionate in questo Manuale RAPID Panoramica Istruzioni per una categoria specifica (ad esempio, istruzioni di spostamento o funzionalità dell’orologio) Descrizioni di funzionalità più avanzate (ad esempio, interrupt o trattamento degli errori) Informazioni a proposito di un’istruzione, funzione o tipo di dati specifici Manuale tecnico di riferimento RAPID Istruzioni, funzioni e tipi di dati • Dettagli sul modo in cui il controller del robot tratta differenti parti di RAPID Technical reference manual RAPID kernel © Copyright 2007 ABB. Tutti i diritti riservati. • 3HAC029364-007 Revisione: - 53 6 Che cosa leggere in seguito © Copyright 2007 ABB. Tutti i diritti riservati. 6.1. Dove trovare ulteriori informazioni 54 3HAC029364-007 Revisione: - Index A B prestazioni del computer 21 PROC 39 procedura 39 procedura RAPID 39 progetto 43 punto e virgola 22 bool 12 Q C quadro di base 28 cicli eterni 21 ciclo 20, 21 commenti 22 comunicazione 34, 35 conditional execution 17 condizioni logiche 16, 19 controller del robot 10 costanti 15 R argomenti 40 array 47 attribuzione di valori 12 D dichiarazione di variabile 12 dichiarazione di variabili 12 E ELSE 17 ELSEIF 18 esecuzione condizionale 21 F FlexPendant 10, 35 FOR 20 Funzioni 52 Funzioni RAPID 52 I © Copyright 2007 ABB. Tutti i diritti riservati. IF 17, 19 indentazioni 23 ingresso digitale 34 istruzioni 51 istruzioni di spostamento 25 Istruzioni RAPID 51 ripetizione 20, 21 robtarget 25, 48 S segnale d’ingresso 34 segnale d’uscita 34 segnali 34 segnali d’I/O 34 sicurezza 9 sintassi 10 sistema di coordinate di base 28 sistemi di coordinate 28 speeddata 25 stringa 12 T terminologia 10 tipi di dati 12, 48 tipi di dati complessi 48 tooldata 27 TPReadFK 36 TPReadNum 37 TPWrite 35 U uscita digitale 34 V variabili 12 L W logical conditions 17 WHILE 21 WObj 28 work object 28 M main 39 modulo 41 MoveC 31 MoveJ 31 MoveL 25, 29 Z zone d’angoli 30 zone d’angolo 32 zonedata 26 N num 12 O operatori 16 orient 48 P pos 48 pose 48 prestazioni 21 3HAC029364-007 Revisione: - 55 © Copyright 2007 ABB. Tutti i diritti riservati. Index 56 3HAC029364-007 Revisione: - 3HAC029364-007, Revisione -, it ABB Robotics S-721 68 VÄSTERÅS SWEDEN Telephone: +46 (0) 21 344000 Telefax: +46 (0) 21 132592