Sei sulla pagina 1di 21

LINGUAGGIO PDL2

Caratteristiche del linguaggio PDL2

Struttura del programma

Rappresentazione dei dati

Istruzioni

Gestori di condizione

Ambiente di programmazione
CARATTERISTICHE DEL LINGUAGGIO PDL2

Orientato al robot


interpretato

Linguaggio di programmazione strutturata (simile al PASCAL)




tipi di dato aggiuntivi per la rappresentazione di


informazioni relative al robot e la descrizione del compito


identificatori predefiniti di variabili, costanti e procedure


specifici per applicazioni robotiche


operazioni su vettori e matrici




insieme di istruzioni allargato per l’esecuzione di movimenti


e per il comando dell’utensile (pinza)


monitoraggio di eventi in parallelo con l’esecuzione del


programma


sincronizzazione con altri dispositivi




programmazione concorrente


funzioni di controllore logico programmabile (PLC)


STRUTTURA DEL PROGRAMMA

Intestazione

Sezione dichiarativa


dichiarazione di costanti, tipi, variabili




dichiarazione di procedure e funzioni

Sezione esecutiva


clausola CYCLE

Esempio:
PROGRAM sposta
VAR approccio, nastro, tavola: POSITION
BEGIN CYCLE
MOVE TO approccio
OPEN HAND 1
MOVE TO nastro
CLOSE HAND 1
MOVE TO approccio
MOVE TO tavola
OPEN HAND 1
END sposta
RAPPRESENTAZIONE DEI DATI

Tipi di dato standard

Semplici


INTEGER, REAL, BOOLEAN

Strutturati


STRING, ARRAY, RECORD

Tipi di dato aggiuntivi

VECTOR

POSITION

JOINTPOS

XTNDPOS

NODE

PATH

N.B. le lunghezze sono espresse in millimetri, gli angoli in gradi, i


tempi in millisecondi
Tipo VECTOR

Tre componenti di tipo REAL (X, Y, Z)

Accesso alle componenti:


 
var vet.X 

Operazioni


aritmetiche (+,-), relazionali (=,<>), prodotto vettoriale (


),
prodotto scalare (@)


aritmetiche (*,/) con scalari (INTEGER, REAL)




funzione interna VEC:


   
var vet  VEC



Tipo POSITION

Tre componenti di posizione (X,Y,Z), tre angoli di Eulero


ZYZ per l’orientamento (E1,E2,E3) di tipo REAL ed una
componente di tipo STRING


posizione ed orientamento di un terna rispetto ad una terna


di riferimento

Accesso alle componenti X, Y e Z come per il tipo VECTOR

Operazioni


composizione (:) POSITION–POSITION e POSITION–


VECTOR


funzione interna POS:


     
var pos  POS( ’ ’)
  

Variabili POSITION predefinite $BASE (terna base) e $TOOL


(terna utensile)


Tipo JOINTPOS

 componenti di tipo REAL per un braccio con gradi di


mobilità


vettore delle variabili di giunto

Accesso alle componenti:



var jointpos[4] 


Tipo XTNDPOS

Configurazione di un braccio con più di sei gradi di mobilità

Un campo predefinito POS (di tipo POSITION) ed un campo


predefinito AUX (di tipo ARRAY di REAL)


il campo POS contiene posizione e orientamento della terna


utensile definiti dalla struttura base a sei gradi di mobilità


il campo AUX contiene il valore delle variabili di giunto


relative ai gradi di mobilità considerati aggiuntivi


Tipo NODE

Simile al tipo RECORD

Contiene un insieme di campi predefiniti (contrassegnati dal


simbolo $) noti al sistema e un insieme di campi definiti
dall’utente

Dichiarazione di tipo:
TYPE
node 1 = NODEDEF
$SEG TERM TYPE, $MOVE TYPE
next pos: POSITION
salda on: BOOLEAN
ENDNODEDEF


i campi predefiniti descrivono le caratteristiche del


movimento


i campi definiti dall’utente contengono la destinazione del


movimento

Tipo PATH

Array di tipo NODE




rappresenta una sequenza di nodi che devono essere


interpretati per l’esecuzione di un singolo movimento (punti
di percorso o punti di via)
DICHIARAZIONI

Dichiarazione di costanti
CONST
numpart = 4
maxangolo = 180.0
test = TRUE
errore = ’Manca aria’


le costanti possono essere di tipo INTEGER, REAL,


BOOLEAN (TRUE, FALSE, ON, OFF) e STRING


le costanti predefinite sono precedute dal simbolo $

Dichiarazione di tipo
TYPE
nometipo = RECORD
campo1 : ARRAY[16] OF REAL
campo2 : STRING[10]
ENDRECORD


solo per la definizione di tipi RECORD e NODE


Dichiarazione di variabili
VAR
indice = INTEGER
angolo = REAL
flag = BOOLEAN
errore = STRING[10]
matrice = ARRAY[2,10] OF INTEGER
offset = VECTOR


le variabili predefinite sono precedute dal simbolo $

Dichiarazione di ROUTINE (funzione e procedura)


ROUTINE positivo(x: INTEGER): BOOLEAN
BEGIN
  

END positivo
ROUTINE prendi(pick: POSITION)
BEGIN
  

END prendi


ISTRUZIONI

Istruzioni standard

Ingresso/uscita


OPEN FILE, CLOSE FILE, READ, WRITE

Controllo dell’esecuzione


IF, SELECT, FOR, WHILE, REPEAT, GOTO

Sottoprogrammi


Procedure e funzioni

Istruzioni aggiuntive

Controllo del movimento

Gestori di condizione
Istruzioni di controllo del movimento

MOVE TO destinazione


comanda il movimento del braccio dalla posizione corrente


a quella specificata nella variabile destinazione


la variabile destinazione può essere di tipo POSITION,


JOINTPOS, XTNDPOS o un elenco di variabili di giunto:
MOVE TO POS(x, y, z, e1, e2, e3, ’ ’)
MOVE TO q1, q2, q3, q4, q5, q6 

Tipo di percorso


percorso nello spazio dei giunti:


MOVE JOINT TO destinazione


segmento nello spazio operativo:


MOVE LINEAR TO destinazione


arco di circonferenza:
MOVE CIRCULAR TO pos finale VIA pos intermedia


se nell’istruzione non è specificato il tipo di percorso,


viene utilizzato il valore della variabile predefinita
$MOVE TYPE (JOINT per default)


Legge oraria


Profilo di accelerazione a doppio trapezio




velocità costante nel tratto intermedio con raccordi


parabolico–lineari


variabili predefinite per la scalatura della velocità (dei giunti


e cartesiana) e dei valori di accelerazione e decelerazione

Movimento continuo


MOVEFLY + clausola ADVANCE:


MOVEFLY TO punto di via ADVANCE
MOVE TO destinazione


la clausola ADVANCE fa in modo che l’interprete continui


l’esecuzione del programma appena terminati i calcoli
relativi alla traiettoria (pochi millisecondi dopo l’inizio del
moto)


l’istruzione MOVEFLY fa in modo che il movimento


specificato nella istruzione MOVE successiva venga avviato
prima della fine del movimento corrente


il braccio passa in prossimità di punto di via senza arrestarsi

Terna di riferimento


MOVE + clausola WITH:


MOVE LINEAR TO pos 1 WITH $TOOL  utensile


la clausola WITH può essere usata per specificare anche


altre caratteristiche del moto (velocità, condizione di
arresto, etc.) e può includere gestori di condizione
MOVE NEAR p1 BY d1


p1 è una variabile o una costante di tipo POSITION e d1 è


una distanza


comanda un movimento verso la posizione posta alla


distanza d1 dalla destinazione p1, misurata lungo il versore
negativo di approccio della terna utensile

MOVE RELATIVE vet IN terna rif




vet è una variabile o una costante di tipo VECTOR, terna rif


può essere TOOL o BASE


comanda un movimento verso la destinazione specificata


dal vettore vet in terna terna rif a partire dalla posizione
corrente della terna utensile

MOVE ABOUT vet BY teta IN terna rif




vet è una variabile o una costante di tipo VECTOR, terna rif


può essere TOOL o BASE e teta è un angolo


comanda un movimento di rotazione della terna utensile


di un angolo teta intorno al vettore vet espresso in terna
terna rif a partire dalla posizione corrente
MOVE AWAY d1


comanda un movimento verso la posizione posta alla


distanza d1 dalla posizione corrente, misurata lungo il
versore negativo di approccio della terna utensile

MOVE BY q1, q2, , q4, , q6 

comanda un movimento incrementale per i singoli giunti


secondo gli angoli q1, ..., q6

MOVE FOR d1 TO p1


comanda un movimento parziale nello spazio operativo


verso la destinazione p1 che si arresta dopo la distanza
percorsa d1

MOVE ALONG path 1




comanda un movimento lungo il percorso specificato nella


variabile path 1 di tipo PATH


GESTORI DI CONDIZIONE

Consentono di monitorare condizioni in parallelo con la


normale esecuzione del programma e di eseguire le azioni
associate nel caso in cui tali condizioni si verifichino

Condizioni di attivazione


stati o eventi associati al funzionamento di dispositivi esterni




eventi di sistema ed eventi di errore




eventi di movimento

Esempio:
CONDITION[1]: - - definisce il gestore di condizione
WHEN $FDIN[5]=ON DO
$DOUT[21]:=OFF
ENDCONDITION
ENABLE CONDITION[1] - - abilita il gestore di condizione


quando il segnale di sistema $FDIN[5] diventa ON (in


corrispondenza della pressione del tasto LED U1 sul
pannello di controllo), il segnale associato alla porta di
uscita digitale $DOUT[21] viene posto a OFF

L’utilizzo di un gestore di condizione avviene in due fasi




definizione


abiltazione


Un gestore di condizione deve essere definito nella sezione
eseguibile del programma:
CONDITION[5]
WHEN esp cond DO
lista azioni
END CONDITION[5]


viene identificato da un numero




le condizioni da monitorare sono combinate nell’espressione


booleana esp cond


le azioni da eseguire sono specificate in lista azioni

L’espressione di condizione viene monitorata solo quando il


gestore è abilitato


abilitazione in un punto del programma:


ENABLE CONDITION[5]


abilitazione temporanea durante una istruzione MOVE:


MOVE TO p1 WITH CONDITION[1]


I gestori di condizione vengono automaticamente disabilitati
quando la condizione viene attivata, tranne quando viene
utilizzata la clausola NODISABLE (non utilizzabile per
condizioni di evento)
CONDITION[1] NODISABLE:
  

  

disabilitazione in un punto del programma:


DISABLE CONDITION[1]

Una condizione abilitata (stato o evento) viene monitorata a


intervalli fissi mediante un processo di scansione

Una condizione di stato è soddisfatta fintanto che esiste (viene


rilevata ad ogni scansione)
WHEN esp bool DO


le condizioni di stato possono essere espressioni di


relazione, variabili booleane, variabili di I/O digitale

Una condizione di evento è soddisfatta solo nell’istante in cui si


verifica. Il valore iniziale è quello assunto nell’istante in cui il
gestore viene abilitato; la condizione è soddisfatta nell’istante
in cui la scansione verifica la modifica specificata
WHEN $DIN[1]+ DO
WHEN $DIN[5]- DO


le condizioni di evento sono associate a I/O digitali, eventi


di sistema, eventi di errore, eventi di programma o eventi di
movimento


le condizioni di evento non possono essere collegate


dall’operatore AND
Gli stati e gli eventi relativi a dispositivi esterni sono associati
a valori di variabili predefinite


variabili predefinite di tipo ARRAY associate a porte fisiche


di ingresso e di uscita ($DIN, $DOUT, $GIN, $GOUT,
$AIN, $AUT) configurabili dall’utente per l’accesso a
dispositivi esterni (utensili, dispositivi di cella)


variabili predefinite di tipo ARRAY ($SDIN, $SDOUT,


$FDIN, $FOUT, $TIMER) definite dal sistema. Le variabili
$FDIN, $FOUT (ARRAY di BOOLEAN) sono associate ai
tasti funzione e ai tasti LED sul pannello di controllo e sul
terminale di programmazione

Eventi di movimento


TIME t1 AFTER START




TIME t1 BEFORE END




DISTANCE d1 AFTER START (VIA)




DISTANCE d1 BEFORE END (VIA)




PERCENT per AFTER START




PERCENT per BEFORE END




AT START, AT VIA, AT END




la condizione è soddisatta quando l’evento di movimento si


verifica mentre il gestore di condizione è abilitato (clausola
WITH dell’istruzione MOVE)
AMBIENTE DI PROGRAMMAZIONE

Scrittura del programma




con un normale editor di testi




con l’editor del sistema operativo

Editor del sistema operativo




controllo della sintassi e della semantica




apprendimento delle posizioni




verifica passo–passo delle istruzioni del programma

File di programma


file (.COD) con le istruzioni




file (.VAR) con i dati

 
Modalità operative dell’editor


modo CODE


modo DATA

Modo CODE


modifica della parte dichiarativa e della parte esecutiva del


file .COD


il file .VAR non viene modificato

Modo DATA


modifica della sola parte esecutiva del file .COD




apprendimento delle posizioni




esecuzione delle istruzioni

Apprendimento delle posizioni in modo DATA con il terminale


di programmazione


tasto REC: aggiunge automaticamente una istruzione di


MOVE TO p1 e memorizza in p1 la posizione corrente
del braccio


tasto MOD: modifica il valore di una variabile utilizzata in


una istruzione di MOVE


la parte dichiarativa ed il file .VAR vengono aggiornati


automaticamente