Limbaje de Programare a Robotilor Industriali
1
Cuprins
I. CONCEPTUL DE LIMBAJ. 3
A. Noţiuni introductive 3
B. Exemple de comunicatori şi sisteme de comunicaţie. 8
C. Ierarhizarea sistemelor comunicaţionale 15
D. Concluzii 18
II. ELEMENTE SPECIFICE ROBOŢILOR INDUSTRIALI. 20
A. Introducere 20
B. Utilizarea roboţilor industriali în aplicaţii industriale - Robotizarea unor aplicaţii 21
C. Utilizarea informatiilor senzoriale în programarea robotilor industriali 23
D. Sistemele de programare si sistemele de comanda ale roboţilor industriali 26
E. Descrierea sarcinilor pe care trebuie să le realizeze roboţii industriali 28 1. Descrierea la nivelul actionarilor 29 2. Descrierea în spatiul sarcinilor 32 3. Evolutia pozititei si orientarii efectorului 32
III. ELEMENTE DE BAZĂ ALE LIMBAJELOR DE PROGRAMARE A ROBOŢILOR INDUSTRIALI 36
A. Introducere în tematica limbajelor de programare a roboţilor industriali 36
B. Elemente caracteristice limbajelor de programare destinate structurilor de calcul 38 1. Variabilele 38 2. Subrutine 41 3. Proceduri şi funcţii 41 4. Macroinstrucţiunile 42 5. Recursivitatea 42 6. Procese şi corutine 43
C. Conceptele specifice Limbajului Robot 45 1. Sistem de referinţă - Frame 45 2. Controlul mişcării robotului 46
IV. DATE ŞI STRUCTURI DE DATE UTILIZATE ÎN CADRUL LIMBAJELOR DE PROGRAMARE A ROBOŢILOR INDUSTRIALI 52
A. Date utilizate de limbaje de programare a robotilor 52
B. Structuri de date 56
C. Moduri de manipulare a datelor 66 1. Operaţii logice 66 2. Operaţii de comparare 66 3. Operaţii aritmetice 67
Limbaje de Programare a Robotilor Industriali
2
4. Operaţii geometrice 67 5. Funcţii standard 68 6. Expresii complexe cu anumite priorităţi: 69
V. INSTRUCŢIUNI 71
A. Instrucţiuni de descriere a mediului de operare 71
B. Instrucţiuni de mişcare 76 1. Instrucţiunile de mişcare implicite. 76 2. Instrucţiunile de mişcare explicite. 77 3. Precizia poziţionării. 80 4. Tipul controlului mişcării. 81 5. Instrucţiunile de mişcare care integrează şi supravegherea senzorilor. 86
C. Instrucţiuni de mişcare cu specificaţii tehnologice. 89
D. Instrucţiuni de mişcare cu monitorizarea unor evenimente. 90
E. Instrucţiuni de comandă şi control a end-effectorului 92 1. Instrucţiuni de acţionare a terminalelor cu parametrii 95 2. Instrucţiuni de comandă a terminalului cu monitorizarea senzorilor asociaţi 96
F. Instrucţiuni dedicate lucrului cu sistemul exterioceptor 98
G. Instrucţiuni de configurare a sistemului senzorial 99
H. Instrucţiuni de mişcare cu controlul duratei mişcării 101
I. Procese în paralel 102
J. Instrucţiuni destinate lucrului cu sisteme de vedere artificiale 103
K. Delimitarea programului prin intermediul blocurilor 108
L. Instrucţiuni de control al parcurgerii programului 109 1. Instrucţiuni de salt necondiţionat 110 2. Instrucţiuni de execuţie condiţionată 110 3. Instrucţiuni cu execuţii condiţionate 110 4. Instrucţiuni cu salt condiţionat 112
M. Instrucţiuni de sincronizare şi de temporizare condiţionată 115
N. Alte consideraţii privitoare la tratarea situaţiilor excepţionale, atribute şi stare sistemului 116
VI. INTEGRAREA ÎN PROGRAM A PROGRAMĂRII PRIN INSTRUIRE 118
VII. SUBRUTINE, PROCEDURI ŞI FUNCŢII 123
A. Blocuri cu execuţie în paralel şi organizarea programului sub forma unor task-uri 126
B. Task-uri 127
VIII. BIBLIOGRAFIE ŞI REFERINŢE 130
Limbaje de Programare a Robotilor Industriali
3
I. Conceptul de limbaj.
A. Noţiuni introductive
Rolul esenţial pe care îl joacă comunicarea impune o abordare sintetică
care să permită aplicarea formalismului matematic. Astfel comunicarea conţine
în esenţă trei tipuri de elemente fundamentale:
comunicatorul - ca element receptor, transformator şi emiţător de informaţie
sistemul de comunicaţie - ca structură determinată având ca suport clase date
de comunicatori
informaţia ca suport primar material al comunicaţiei
Prin mesaj se defineşte mijlocul general prin care este transmisă
informaţia din lumea reală între comunicatori. Mesajul are în general două
laturi:
latură obiectivă sau semnificaţia mesajului, independentă de comunicatorul
de la care pleacă mesajul, respectiv de comunicatorul la care ajunge mesajul -
latură ce poartă numele de obiectul sau semnificaţia mesajului - notată cu m
o latură reprezentaţională sau simbolică care depinde direct de comunicatorii
care intervin în comunicaţie: receptor, respectiv transmiţător - forma
mesajului - notată fm.
În concluzie mesajele vor fi notate sub forma unei perechi < m, fm >.
Comunicatorul va fi considerat pentru început o entitate informală care există
într-un cadru real dat şi care se caracterizeazăprin faptul că este capabil să
ComunicatrulX
ComunicatorulY
Prelucrareainformatiei
Transmisiainformatiei
Receptiainformatiei
Figure 1
Limbaje de Programare a Robotilor Industriali
4
recepţioneze, să prelucreze şi să transmită informaţie. Spre simplificare vom
reprezenta comunicatorul prin aceste caracteristici ale sale sub forma unui graf
orientat:
Mediul real al comunicatorului Ci ( se va nota sub această forma
comunicatorul) este universul care poate fi afectat de Ci sau poate afecta pe Ci la
nivel informaţional, desigur, motiv pentru care acesta va fi notat cu UN(C) -
Universul Natural al lui C sau mai simplu UN. Obiectele cu care C nu intră în
contact vor fi deci considerate a fi în afara lui UN.
În cadrul universului natural se disting la rândul lor alte două categorii de
clase:
1. clasa obiectelor care au sens pentru comunicatorul C , adică obiectele pe care
C le recunoaşte dupa forma asociată ca reprezentare pentru C - notat cu M -
mesaj pe care C îl poate recepţiona, prelucra sau transmite
M m m UN C , iar m f m, este un mesaj care pote fi recepţionat sau
transmis de C
2. clasa obiectelor care nu au sens pentru C, nefiind recunoscute după forma de
reprezentare simbolică asociată, cel putin în momentul curent.
Ca o observaţie deosebit de importantă este faptul ca prin învăţare prima
clasa poate fi extinsă prin asimilarea unor obiecte aparţinând celei de-a doua
clase. încercând introducerea formalismului matematic vom putea considera ca
fm - sensul, semantica mesajului m, se poate fi privit ca o funcţie parţială f
definită pe UN( C ) cu domeniul în M - clasa obiectelor cu sens pentru C şi
codomeniul în F, unde F este sintaxa sau forma de reprezentare a obiectelor din
M pentru comunicatorul C. Procesul de extindere al funcţiei f, mai precis al
codomeniului F poartă numele de învăţare, funcţie ce se explică prin asocierea
pentru un mesaj m din M inclus în UN( C ) a unui sens pentru C, a unui nume
simbolic care duce la extinderea lui F (nume care va purta, în continuare,
numele de reprezentarea sau semnătura lui m pentru C).
Limbaje de Programare a Robotilor Industriali
5
Astfel pentru comunicatorul C, se va defini drept limbaj natural propriu
comunicatorului C tripletul ordonat L M F f M F , , : unde:
M - este semantica limbajului , F - este sintaxa limbajului, f - functia de
asociere a sintaxei
Limbajul, ca mijloc de comunicaţie, se realizează prin parcurgerea
următoarelor etape:
1) identificarea obiectelor limbajului printr-un proces de învăţare
2) asocierea reprezentărilor simbolice pentru obiectele specificate la 1 sau
specificarea sintaxei limbajului
3) integrarea funcţiei de învăţare prin identificarea obiectelor specificate la 1 cu
reprezentările lor alese la 2.
Prin prisma celor prezentate anterior se poate considera a fi perfect
determinat de universul sau natural şi de limbajul său, mai precis
L M F f M F , , : care are o anumită dinamică.
Comunicaţia impune existenţa a cel puţin 2 comunicatori C1 -
L M F f M F1 1 1 1 1 1 , , : , respectiv C2 - L M F f M F2 2 2 2 2 2 , , : , motiv pentru
care în continuare se vor defini condiţiile ca schimbul de mesaje să aibă loc:
1) comunicatorii trebuie sa aibă sens unul pentru altul: C M C M
f C F f C F1 2 2 1
2 1 2 1 2 1
2) comunicarea să poată să se facă prin mesaje ce pot fi înţelese:
UN C UN C1 2
Detalierea condiţiilor necesare pentru ca schimbul de mesaje să aibă loc se
realizează prin completarea condiţiilor anterioare cu următoarele condiţii de
transformare a mesajelor m:
1) f F f Fm m1
12
2 - semantica primului comunicator sa fie transformată îintr-o
semantică ce poate fi înţeleasă de cel de-al doilea
2) f F m Mm2
2 semantica celui de-al doilea comunicator să poată reface
informaţia percepută iniţial de primul comunicator.
Limbaje de Programare a Robotilor Industriali
6
Aceste ultime două cerinţe impun definirea a două noi funcţii:
funcţia translator Ti a cărui domeniul de definiţie este sintaxa Fi a limbajului
comunicatorului emiţator, iar domeniul valorilor este sintaxa Fj a limbajului
comunicatorului receptor: T F Fi i j:
funcţia de evaluare Ei definita pe sintaxa Fi si domeniul valorilor M:
E F Mi i: .
Relaţional funcţiile definite până în acest moment pot fi descrise prin
următoarea schemă:
M F1
F2
M
E2
E1f1
f2
Figure 2
Limbaje de Programare a Robotilor Industriali
7
Relaţiile dintre funcţiile descrise anterior sunt:
f T E f E f T E f E
f T f f T f
f E id f E idM M
1 1 2 2 2 2 2 1 1 1
1 1 2 2 2 1
2 2 1 1
;
;
;
Concluzionând o pereche de comunicatori C1, C2 formează un sistem de
comunicaţie dacă sunt îndeplinite urmatoarele condiţii:
1) C1 si C2 au acelaşi univers natural : UN(C1)=UN(C2)
2) f1 şi f2 sunt funcţii injective, iar f f11
21 , sunt inversele lor
3) există o pereche de funcţii T F F1 1 2: şi T F F2 2 1: care asigură
comutativitatea diagramei.
Un exemplu edificator în acest sens va fi ilustrat în cele ce urmează:
Fie doi comunicatori C1 şi C2 specificaţi prin următoarele universe
naturale: L N f N1 10 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 , , , , , , , , , , *, : , , , , , , , , , * - acest limbaj
asociază numerelor naturale reprezentarea zecimală
L N f N2 20 1 0 1 , , *, : , * - acest limbaj asociază numerelor naturale
reprezentarea binară.
În aceste condiţii poate fi construită functia inversă
f c c c c c c cpp p
p11
0 1 2 0 1110 10 , , ; c c c cp0 1 2 0 1 2 3 4 5 6 7 8 9, , , , , , , , , , , * ,
respectiv f c c c c c cqq q
q21
0 1 0 112 2 , , unde c c cq0 1 0 1, , , * . Funcţiile
translatoare se obţin rapid, T1 fiind reprezentarea binara a numărului zecimal ( se
va aplica algoritmul de împărţiri repetate pentru schimbarea bazei zecimale în
bază binară), iar T2 fiind de fapt f c c c c c cqq q
q21
0 1 0 112 2 , . Schema
comunicaţiei între cele două limbaje devine:
Limbaje de Programare a Robotilor Industriali
8
B. Exemple de comunicatori şi sisteme de comunicaţie.
Pentru înţelegerea formalismului introdus anterior în continuare vor fi
prezentate câteva exemple de comunicatori si reprezentări schematice ale
sistemelor de comunicaţie:
Comunicatorul uman - universul natural al acestui comunicator îl
constituie universul real uman. Formele de reprezentare a acestui univers depind
de canalele senzoriale care recepţionează realitatea. Odată receptionată
informaţia, mesajul, obiectul din universul natural, aceasta este transformat în
sintaxă specific umană, sintaxă care poate permite prelucrarea după procesul de
învăţare al mesajului. Această operaţie de învăţare va permite ulterior
manipularea informaţiei la nivel abstract, semantic, realizându-se astfel
prelucrări si transformări ale informaţiei, fără ca realul să mai fie prezent efectiv.
Procesul de învăţare poate fi privit ca fiind realizat după următoarele etape:
1. etapa receptoare în care obiectul real este perceput pe o cale senzorială de
către comunicator(i)
2. etapa de transformare semantică în care comunicatorul/comunicatorii
transformă informaţia obţinuta în prima etapă în cunoaştere sau mai exact
atribuie un nume sau mai exact anumite proprietaţi informaţiei obţinute în
etapa 1. Acest nume sau proprietăţi senzoriale permit comunicatorului sa
distingă clar informaţia acumulată de aceast ultim mesaj.
N
{0,1}
N
f-12
f-11
T2 T1f2
f1{0,1,2,3,4,5,6,7,8,9}
Figure 3
Limbaje de Programare a Robotilor Industriali
9
3. etapa de fixare a semanticii şi indirect a informaţiei, când sintaxa generală a
comunicatorului este imbogăţită cu noua informaţie. Această etapă va
permite comunicatorului ca de acum înainte semantica dată informaţiei să fie
suficientă pentru transformări la nivel abstract care vor conţine mesaje de
tipul celei asimilate. Această ultimă etapă poate fi reluată în cazul în care
fixarea nu are loc.
Schematic comunicarea umană poate fi structurată utilizând următoarele funcţii:
Pentru comunicatorul C1 : L M F f M F1 1 1 1 1 1 , , : ; iar pentru comunicatorul C2
L M F f M F2 2 2 2 2 2 , , : caracteristic fiind faptul ca M1 = M2 . Sigur că în
realitate relaţia nu este general valabilă, relaţii de tipul M M1 2 sau
M M1 2 fiind mult mai generale. Din considerente de simetrie va mai fi
introdusă o funcţie parţial inversabilă , funcţie de corespondenţă c M M: 1 2 care
leagă cele două universuri naturale ale comunicatorilor.
Ca o caracteristică interesantă referitoare la functiile de translatare şi
evaluare , pentru comunicatorii umani pot apare mai multe situaţii sau clase:
Clasa comunicatorilor umani care vorbesc aceeaşi limbă: în acest caz dacă
se impune ca F1=F2, nu neaapărat şi T1= T2, din motive lesne de înţeles,
printre care cel mai simplu este deat de existenţa sinonimelor, chiar pentru
comunicatori cu acceeaşi profesie şi pregătire.
Clasa comunicatorilor care vorbesc limbi diferite: F F1 2 . Caracteristic însă
procesului de comunicare uman este că contactul între comunicatori duce la
o situaţie aparent paradoxală care dezvăluie insă concomitent şi relaţia :
F F1 2 . Acesta este cazul general, în particular relaţiile sunt de tipul:
F F1 2 sau F F2 1 .
Clasa comunicatorilor care aparţin aceluiaşi domeniu sau subdomeniu al
cunoaşterii umane: Această clasă are caracteristicile ambelor clase
anterioare, având în plus caracteristic faptul că nivelul de abstractizare al
informaţiei schimbate sau prelucrate poate fi superior realităţii senzoriale.(aşa
Limbaje de Programare a Robotilor Industriali
10
cum este cazul specialiştilor în matematică, fizică,informatică, mecanică
cuantică,etc).
în aceste condiţii relaţia comunicaţională umană poate fi reprezentată sub
forma:
M1 M1
M2 M2
F1
F2
f1f1
-1
f2-1
f2
cc-1T1 T2
Figure 4
Limbaje de Programare a Robotilor Industriali
11
Comunicatorul maşină - comunicator uman. Sigur că acest tip de comunicaţie
poate fi privit şi sub aspectul maşină-maşină-comunicator uman, datorită
existenţei sistemelor ierarhizate de maşini, dar cum comunicaţia maşină nu are
sens fără comunicatorul uman, vom considera cazul general de tip comunicator
masină, în care comunicatorul uman va fi subânţeles. Caracteristic acestui tip
de comunicaţie este faptul ca universul natural al maşinii devine datorită
necesarului uman ca maşina sa fie o extensie a gândirii umane, chiar elementele
de semantică umană, în timp ce funcţia de corespondenţă c introdusă anterior
este o funcţie proprie constructorului maşinii. Aceasta reprezintă modul în care
constructorul maşinii (fie maşina la nivel hard, fie maşina la nivel logic) a
construit universul natural al maşinii. De asemenea funcţia de evaluare nu mai
poate fi privită în mod simplist ca o inversă a unei funcţii, deoarece dacă
introducerea informaţiei se realizează pe anumite canale, emiterea informaţiei
după prelucrare se realizează de regulă pe alte canale senzoriale. Menţinând
funcţiile cu semnificaţiile detaliate în cadrul comunicatorului uman, schema de
comunicare devine:
M1 M1
F1 F1
F1
F2
f1f1
-1
f2-1
f2
cc-1T1 T2
Figure 5
Limbaje de Programare a Robotilor Industriali
12
De remarcat că în ciuda formalismului evident rezultat din analiza Figure 5, prin
care T1 are aceeaşi structură cu f2, acestea sunt diferite intre ele: f2 este o funcţie
de transformare, în timp ce T1 este o funcţie de reprezentare.
Pentru specificarea comunicatorilor de tip maşină, în acelaşi univers natural UN
se procedează astfel:
se consideră o clasă de comunicatori naturali specificaţi cu ajutorul unui
limbaj comunicator: L M F f M FC , , : şi se alege o structură din F
numită sistem formal asociat comunicatorului maşina, astfel încât: M FF .
În funcţie de posibilităţile de reprezentare a obiectelor dim MF cu ajutorul
elementelor fizice asociate comunicatorului maşină se construieşte sistemul
formal FM, care va reprezenta obiectele clasei MF
se defineşte funcţia f M FM F M: prin care fiecărui obiect din MF i se
asociază un simbol din FM prin intermediul funcţiei fM, considerată funcţia de
reprezentare.
În aceste condiţii se poate considera ca L M F f M FM F M M F M , , : este
comunicatorul maşină.
Deoarece în construcţia limbajului se încearcă extragerea unui algoritm se
propune următoarea procedură:
se caută o metodă de specificare a clasei tuturor obiectelor reale M pe care
comunicatorul le poate recunoaşte şi mânui la nivel simbolic - se construieşte
emantica limbajului
se caută sintetizarea, chiar şi la nivel logic, a unui dispozitiv care să genereze
clasa tuturor formelor sau semnăturilor simbolice a obiectelor din M - se
construieşte sintaxa
se stabileşte o regulă prin care fiecarui obiect semantic îi corspunde un
element sintactic - se construieşte funcţia: f M Fm: , astfel ca m f m, să fie
un mesaj.
Limbaje de Programare a Robotilor Industriali
13
Cum în acestă lucrare accentul se pune pe comunicarea maşină se va insista în
cele ce urmează asupra algoritmului specific limbajului maşină:
1) specificarea semnaticii MF a limbajului se reduce la specificarea unui sistem
formal care poate fi recepţionat corect de comunicatorul maşină prin
dispozitivele de intrare de care acesta dispune. Este evident ca intre sintaxa
comunicatorului uman F si semantica comunicatorului maşină MF exista
relaţia: M FF . în aceste condiţii se impun două reguli:
I. mesajele comunicatorului uman m f m, să fie compatibile la nivel
comunicaţional cu sistemul receptor al maşinii f Mm F .
II. semantica maşină să fie un sistem suficient de larg astfel ca acei
comunicatori care lucrează cu limbajul LM să poată să îşi exprime
mesajele în mod natural. Se remarcă că în cazul limbajelor evoluate,
comunicatorii umani aparţin unor clase largi de comunicatori. în
esenţa se urmărşte ca semantica să fie heterogenă în ceea ce priveşte
comunicatorii umani utilizatori: se caută un simbolism S care să
servească drept mijloc de comunicare cu maşina oricare ar fi
comunicatorul natural al unei clase C.
2) sintaxa maşină FM depinde numai de structura fizică a maşinii capabilă să
înmagazineze şi să stocheze informaţia, precum şi de arhitectura sistemului
maşină.
3) specificarea funcţiei de asociere devine elementul cel mai dificil în această
construcţie. Se reamintesc elementele definitorii ale celor două limbaje
L M F f M F , , : şi L M F f M FM F M M F M , , : precum si condiţia
suplimentară M FF . Denumind ca funcţie de utilizare funcţia
:: F M condiţiile pe care aceasta împreună cu f trebuie să le îndeplinească
sunt: f fM F 1 1 , funcţia id este denumită funcţie translatoare iar o
reprezentare grafică este:
Limbaje de Programare a Robotilor Industriali
14
Având în vedere ca dialogul se realizează între comunicatori formali aparţinând
clasei C. specificaţi prin L M M F f M MF F , , : şi comunicatorul maşină
L M F T M FM F M F M , , : , diagrama de comunicaţie va avea structura:
în aceste condiţii limbajul maşină va fi definit prin tripletul
L M F T M FM F M F M , , : sau mai exact L F F id F FM M M M M , , : în timp ce
tripletul L M M F f M MP F F F , , : va purta numele de limbaj de
programare.
Pentru a completa această discuţie este normal să fie prezentat şi legătura
dintre limbajul maşină şi limbajul constructorului maşinii
L M F f M FC C C C C C , , : . Este evident că F FM C precum şi următoarea
diagramă:
M F
F
M
idid
f
f
Figure 6
M MF
FM
M
T-1T
f
Figure 7
MC FC
FM
MC
id2id1
fC C
C/FnfC/Fn
Figure 8
Limbaje de Programare a Robotilor Industriali
15
Problemele ridicate de accesibilitatea limbajului de programare au complicat în
mod necesa funcţia de translator T F FP M: fapt ce a dus la mărirea timpului
necesar translatării pe de-o parte, respectiv la pierderea naturaleţii limbajului pe
de altă parte.
Pentru o mai bună exploatare şi înţelegere a limbajelor de programare se
remarcă faptul că indiferent de clasa comunicatorilor, schimbul de informaţie se
referă la obiecte statice , ce vor primi numele de date, precum şi la acţiuni ce
trebuie exectutate asupra datelor sau asupra actor acţiuni ce vor primi numele de
operaţii. Generalizând MP este un sistem formal în limbajul natural al clasei
comunicatorilor cărora li se oferă limbajul de comunicare, sistem definit ca o
pereche: M D date O operatiip , .
C. Ierarhizarea sistemelor comunicaţionale
Atât datele cât şi operaţiile pot fi considerate structurate pe două nivele după
următoarele reguli:
Pentru date - D :
E1.există o clasă de date elementare sau primitive care au proprietatea de
afi definite prin ele însele pentru clasa de utilizatori la care se referă
limbajul
E2.celelalte date din D sunt construcţii care se aplică datelor primitive
şi/sau asupra datelor neprimitive ( construcţii deja realizate )
Pentru operaţii - O :
O1.există o clasă de operaţii primitive care relativ la abilitatea
utilizatorului de a executa acţiuni asupra datelor sunt acţiuni simple
O2.celelalte operaţii din O sunt construcţii obţinute prin compunerea
operaţiilor primitive.
În cadrul limbajelor de programare, limbajelor maşină şi nu în ultimul rând şi
în cazul limbajelor naturale se impune o structură ierarhizată, o ierarhie
Limbaje de Programare a Robotilor Industriali
16
exterioară a limbajelor. Pentru detalierea acestui concept, vom presupune că
sisrtemul comunicaţional conţine cel puţin două elemente de bază:
un sistem iniţial de nivel ierarhic zero - 0 - sistem care poate fi reprezentat
chiar de sistemul de calcul asociat comunicatorulu maşină
lege prin care pornind de la un sistem de calcul dat de nivel ierarhic i se poate
trece la un sistem de calcul nou, ierarhic superior i+1.
Algoritmul ce este utilizat pentru stabilirea ierarhiei comunicaţiei este următorul:
oricare ar fi un limbaj de programare dat, L M F f M FP P P P P P , , : , în care
este un sistem de calcul specific unei clase de utilizatori , un limbaj de calcul
superior lui LP se obţine acceptând că MP este bază pentru un nou sistem de
calcul MP’ utilizând legea de generare:
datele D ale sistemului MP se aleg ca date primitive pentru sistemul MP’
operaţiile O ale sistemului MP se aleg ca operaţii primitive pentru sistemul
MP’
se formează un set de operaţii de compunere asupra datelor sistemului MP’.
Acestea devin operaţii primitive pentru noul sistem MP’
se formează un set de operaţii de compunere asupra operaţiilor sistemului
MP’. Acestea devin operaţii primitive asupra operaţiilor pentru noul sistem
MP’
Reprezentarea grafică a aceastei ierarhizări este prezentată în figura 9.
între date şi operaţii de pe diferite nivele există următoarele relaţii:
Cd Pdi i 1 ; Co Poi i 1 i n0,
Concluzionând asupra conceptelor comunicaţionale care prezintă interes pentru
subiectul abordat în această lucrare se poate defini mediul comunicaţional prin
intermediul următoarelor elemente:
L M F f M FP P P P P P , , : - limbajul de programare asociat unei clase de
utilizatori
L M F f M FM m m m m m , , : - limbajul natural al unui comunicator maşină dat.
Limbaje de Programare a Robotilor Industriali
17
Implementarea limbajului LP pentru comunicatorul maşină Cm specificat de LM
se înţelege diagrama de comunicaţie:
Sistem de nivel i OperatiiDate
{primitive - Po i }{primitive - Pd i }
{complexe - Cd i } {complexe - Co i }
Sistem de nivel i+1 OperatiiDate
{primitive - Po i+1 }{primitive - Pd i+1 }
{complexe - Cd i+1 } {complexe - Coi+1 }
Figure 9
MP MP
Mm Mm
FP
Fm
fPP
mfm
h1 h2
T1 T2
Figure 10
Limbaje de Programare a Robotilor Industriali
18
unde T1 şi T2 sunt funcţiile reprezentare integrate în structura asociată lui Fm,
utilizate pentru precizarea ierarhiei interne.
D. Concluzii
1. Comunicaţia pentru a se desfaşura necesită existenţa a trei elemente
principale: comunicatori, sistem de comunicaţie, informaţia sau mesajul
reprezentat sub forma: <m,fm>.
2. Se defineşte drept limbaj natural propriu comunicatorului C tripletul ordonat
L M F f M F , , : unde: M - este semantica limbajului , F - este sintaxa
limbajului, f - functia de asociere a sintaxei
3. Schimbul de informaţie între doi comunicatori se realizează în anumite
condiţii, rezultând existenţa implicită a unor noi funcţii: funcţia translator
T F Fi i j: unde Fi este sintaxa limbajului comunicatorului emiţător, iar Fj
este sintaxa a limbajului comunicatorului receptor, precum şi funcţia de
evaluare E F Mi i: .
4. Comunicarea om-maşină are o serie de caracteristici:
între sintaxa comunicatorului uman F si semantica comunicatorului
maşină MF exista relaţia: M FF .
în cadrul comunicaţiei apar o serie de limbaje între care există
legături ierarhice. Ierarhia acestora este:
a) L M F f M FM m m m m m , , : - limbaj maşină
b) L M F f M FC C C C C C , , : - limbajul constructorului maşinii,
relaţia dintre limbajul maşină şi limbajul constructorului cea mai
importantă fiind F Fm C
c) L M F f M FP P P P P P , , : - limbajul de programare asociat unei
clase de utilizatori, unde MP este un sistem formal în limbajul
natural al clasei comunicatorilor cărora li se oferă limbajul de
comunicare, sistem definit ca o pereche:
Limbaje de Programare a Robotilor Industriali
20
II. Elemente specifice Roboţilor Industriali.
A. Introducere
Principala caracteristica a robotilor este versalitatea; ei pot fi utilizati în
multe scopuri cu eforturi minime. Aceasta versalitate deriva din avantajele
oferite de structura lor fizica si de control, dar ea poate fi exploatata numai daca
robotul poate fi programat cu usurinta. În unelecazuri, lipsa unor unelte de
programare adecvate poate duce la imposibilitatea rezolvarii anumitor probleme.
în alte cazuri, costul programarii poate fi o parte semnificativa din costul total al
aplicatiei.. Din aceste motive, programarea si sistemele de programare ale
robotilor joaca un rol important în dezvoltarea roboticii.
Rolul progrmarii robotilor este diversificat si în mare masura depinde de
utilizatori. El poate fi privit din mai multe puncte de vedere:
a) al operarii robotului în ansamblu:robotul trebuie sa fie sigur si usor
de operat. Operarea usoara poate proveni în mare masura din uneltele de control
oferite de programare. Siguranta în functionarea robotului este foarte importanta
si poate fi realizata si prin intermediul sistemului de programare;
b) al aplicatiei robotului: prin intermediul programarii trebuie sa se
obtina acele elemente, acele unelte specifice sarcinilor pe care va
trebui sa le realizeze robotul în cadrul aplicatiilor în care se utilizeaza (
descrierea intr-o maniera corespunzatoare unei aplicatii date a
traiectoriilor de miscare, a functiilor pe care trebuie sa le realizeze).
c) al productivitatii: prin intermediul programarii, sistemul robot
trebuie sa devinacat mai eficient ( prin reprogramare robotul va
executa diverse sarcini, ceea ce face ca acelesi robot sa poata fi utilizat
în multe aplicatii).
Limbaje de Programare a Robotilor Industriali
21
B. Utilizarea roboţilor industriali în aplicaţii industriale -
Robotizarea unor aplicaţii
Robotizarea unei aplicatii cauta sa inlocuiasca munca operatorului uman
în realizarea unor sarcini repetitive, obositoare si plictisitoare pentru cresterea
productivitatii.
Prin programarea unei aplicatii robotizate se intelege procesul de
elaborare (editare, verificare, transfer) a unui ansamblu de instructiuni
corespunzatoare atat aplicatiei respective,cat si sistemului de programare al
robotului.
Controlul poate fi executat direct de sistemul de conducere alrobotului
sau, mai general, de un sistem de conducere aflat pe un nivel ierarhic superior;
acesta coordoneaza activitatea tuturor echipamentelor din celula robotizata de
productie urmarind paralelismul si sincronizarea tuturor operatiilor efectuate.
În vederea unei clarificări a problematicii abordate, în continure, va fi
abordat şi explicat în detaliu o aplicaţie: preluarea unor semifabricate care pot
sosi intr-o pozitie oarecare, prelucrarea si apoi ambalarea lor.
Structura celulei robotizate care va efectua toate aceste operatii este
urmatoarea:
In cadrul acestei celule se vor executa urmatoarele operatii:
- pozitia oarecare în care sosesc semifabricatele pe banda transportoare
este determinata prin inspectie vizuala cu camera TV (in paralel se pot verifica si
detwermina eventualele defecte ale semifabricatelor );
- în functie de datele inspectiei vizuale, robotul 1 va fi adus intr-o anumita
pozitie si cu o anumita orientare corespunzatoare preluarii semifabricatelor;
- urmeaza operatia de inchidere a dispozitivului de apucare a robotului cu
o forta adaptata la greutatea semifabricatului;
- plasarea semifabricatului în universalul masinii-unelte;
Limbaje de Programare a Robotilor Industriali
22
- piesele prelucrate sunt preluate de robotul 2 si depuse în cutii unde are
loc ambalarea.
Desi nu exista o metodologie unica de robotizare a unei aplicatii pot fi
totusi puse în evidenta cateva etape mai importante:
1. Analiza operatiilor care trebuie executate , stabilirea celor care pot
fi robotizate si determinarea structurii celulei robotizate( avand în vedere
datele aplicatiei s-a ajuns la concluzia ca sunt necesari doi roboti , o masina-
unealta cu comanda numerica si o banda transportoare).
2. Alegerea robotilor în functie de diferite criterii:
numarul de grade de libertate impus de complexitatea miscarilor ce trebuie
executate;
dimensiunile volumului de operare;
performantele referitoare la precizii, viteze si acceleratii, forte de strangere,
e.t.c.;
modul de programare si limbajul utilizat care trebuie sa fie cat mai simple dar
sa corespunda totusi operatiilor ce trebuie executate;
pretul de cost, amortizarea , e.t.c.;
3. Definirea si stabilirea modului de amplasare al utilajelor ( roboti,
masini-unelte, banda) care are în vedere :
- accesibilitatea efectuarii miscarilor impuse robotilor;
- spatiul liber si minimizarea riscului de coliziuni intre elementele aflate în
miscare în celula robotizata;
4. Definirea necesarului si apoi a mijloacelor de comunicare dintre
sistemele de conducere ale echipamentelor din celula; se urmareste:
- natura si modul de distributie al mesajelor;
- oportunitatea unei retele locale de comunicatie;
- posibilitatea integrarii intr-un flux informational la nivelul sectiei sau al
intreprinderii.
Limbaje de Programare a Robotilor Industriali
23
5. Programarea robotilor si a masinilor-unelte. Sarcinile pot fi descrise
prin relatii geometrice intre elementele terminale ale robotilir si pozitia anumitor
puncte de lucru , prin elemente geometrice(puncte, drepte, plane). în principal,
descrierea sarcinilor trebuie sa contina:
- puncte: descrise fie în spatiul coordonatelor operationale, fie în spatiul
coordonatelor articulatiilor robotului;
- traiectorii: vor fi multimi de puncte ce trebuie atinse succesiv în
miscarea robotului;
- miscari: se obtinprin asocierea traiectoriilor la diferite momente de timp;
- interactiuni cu mediul( efectuarea operatiilor de apucare cu o anumita
forta, efectuarea operatiei de ambalare).
Fiecare din etapele enumerate mai sus pot fi realizate în diferite feluri ceea
ce arata ca modul de robotizare al unei aplicatii nu este unic. De exemplu,
structura celulei de lucru poate fi alta,amplasarea utilajelor, maniera în care sunt
definite sarcinile si în care se alcatuiesc programele poate fi diferita.
Alta posibilitate de robotizare a unei aplicatii o reprezinta utilizarea
sistemelor CAD, care , prin intermediul unor elemente specifice de modelare,
analiza si optimizare , permit:
- definirea si organizarea elementelor dintr-o sectie de productie;
- implementarea si compararea diferitelor modele de roboti pentru
realizarea unor sarcini date ( modele disponibile intr-o biblioteca);
- programarea practica a miscarilor si verificarea prin simulare a
comportamentului robotilor, determinarea interferentelor co mediul respectand
restrctiile geometrice, cinematice, si dinamice,evolutia în timp.
C. Utilizarea informatiilor senzoriale în programarea
robotilor industriali
În aplicatia prezentata în capitolul 1.2 pot fi puse în evidenta mai multe
tipuri de senzori prin intermediul carora robotii isi pot desfasura activitatea:
Limbaje de Programare a Robotilor Industriali
24
1. Senzori de pozitie: sunt situati în articulatii si prin intermediul
informatiilor lor se pot determina în orice moment pozitiile structurii mecanice a
robotului;
2. Senzori de vedere: cu ajutorul informatiilor provenite de la camera TV
se determina pozitia si calitatea obiectelor de lucru;
3. Senzori tactili si/sau senzori de forta: sunt dispusi în incheietura
terminalului sau pe bacurile terminaluluisi permit efectuarea operatiei de
apucare sau de depunere.
Integrarea informatiilor senzoriale în buclele de comanda ale robotilor
permit efectuarea unor sarcini în universul partal cunoscut sau bine cunoscut în
care exista impotante incertitudini. Unele din aceste informatii pot fi utilizate
direct de sistemul de comanda al robotului, dar i majoritatea cazurilor, ele sunt
interpretate prin intermediul sistemului de programare caruia i se impun, din
acest punct de vedere, doua mari cerinte:
- sistemul de programare trebuie sa dispuna de "mecanisme" speciale de
intrare/iesire pentru achizitionarea datelor de la senzori; acest lucru este rezolvat
simplu în cazul limbajelor de programare de nivel inalt care au incluse
instructiuni speciale pentru lucrul cu senzori.
- sistemul de programare trebuie sa dispuna de "mecanism" de control
versatile, cum ar fi controlul fortei, pentru utilizaea informatiei senzoriale în
vederea determinarii miscarii robotului. Nevoia de specificare a parametrilor
pentru miscarile bazate pe senzori reprezinta o puternica motivatie pentru
utilizarea unor limbaje complexe de programare.
Dupa cum s-a aratat mai sus, senzorii sunt utilizati în diferite scopuri în
programarea robotilor, fiecare scop conducand la anumite cerinte impuse
proiectarii sistemelor de programare.
Exista cateva tipuri de "mecanisme senzoriale" care ar trebui incluse în
sistemele de programare:
Limbaje de Programare a Robotilor Industriali
25
1. initierea sau terminarea unei miscari.Multe sisteme de programare
dispun de instructiuni pentru asteptarea unui semnal binar extern inainte de
lansarea în executie a unei proceduri. Aceasta facilitate este utilizata pentru
sincronizarea robotilor cu alte utilaje.
Exemple: - preluarea unor obiecte de pe banda transportoare se face în
momentul în care acestea au ajuns în dreptul unui anumit limitator;
- închiderea dispozitivului de apucare se face pana în momentul
în care un micro întrerupator este "facut", ceea ce îndica realizarea contactului
dinte terminal si obiectul de lucru.
2. Alegerea între diferite actiuni. Daca pozitiile în care trebuie sa
ajunga robotul pentru a desfasura operatiile impuse sunt bine precizate la nivelul
programulu, strategia( prin care se intelege modul în care se executa deplasarile
avand în vedere interactiunile cu mediul ) rezulta din evaluarea informatiilor
senzoriale percepute.
Exemplu: - efectuarea operatiei de plasare a unui oboect intr-un orificiu:
terminarea operatiei depinde de rezultatele evaluarii erorilor de la senzorii de forta amplasati
la incheietura dispozitivului de apucare.
Rezulta ca sistemul de programare trebuie sa dispuna de mecanisme de
achizitie a datelor de la diferite sisiteme senzoriale( forta, pozitie, vedere) sa
execute calcule si sa ia decizii în functie de rezultate.
3. Identificarea, pozitionarea si determinarea anumitor trasaturi ale
obiectelor de lucru, ceea ce presupune utilizarea unor sisteme de vedere.
Exemplu: - cu ajtorul camerei TV se poate determina pozitia obiectului
de lucru functie de care se executa pozitia si orientarea terminalului robotului
pentru apucare.
La nivelul sistemului de programare trebuie sa existe acele facilitati, acele
mecanisme care, pe baza informatiilor de vedere, sa fie capabile sa determine
distante, pozitii.
Limbaje de Programare a Robotilor Industriali
26
Identificarea obiectului presupune compararea informatiei provenite de la
senzorii de vedere cuo baza de date. Aceasta identificare se poate face la nivelul
robotului sau la alt nivel, ceea ce presupune includerea în sistemul de
programare a unpr posibilitati de comunicatie cu alte calculatoare unde se afla
baza de date.
4. Miscarea adaptiva sau controlul continuu pe baza informatiei
senzoriale achizitionate de asemenea continuu.
Miscarile si eventual secventierea lor sunt deduse:
- prin interactiunea directa dintre robot si mediu ca în cazul miscarilor
complexe sau ale miscarilor coordonate ale mai multor roboti;
- prin tratarea complexa a informatiilor proximetrice multidimensionale.
Concluzionând, putem spune ca integrarea informaţiilor senzoriale
permite determinarea prin mijloace de complexitate medie sau crescuta a:
- conditiilor de executie;
- situatiilor de asteptare;
- drumurilor sau traiectotiilor ce trebuie parcurse;
- secventelor de miscari ce trebuie realizate.
D. Sistemele de programare si sistemele de comanda ale
roboţilor industriali
Una dintre tendintele actuale care se refera la proiectarea si realizarea R.I.
o reprezinta disocierea operatiilor de programare a sarcinilor care trebuie sa fie
executate, de operatiile de comanda si control ale structurii mecanice care
realizeaza aceste sarcini. în acest sens, putem pune în evidenta următoarea
structură:
Din punct de vedere funcţionare, sistemul de comandă poate fi împărţit pe
următoarele nivele:
Limbaje de Programare a Robotilor Industriali
27
1. Nivelul de bază: coordoneaza activitatea la nivelul articulatiilor fiind
cel care realizeaza traiectoriile de miscare si care interpreteaza informatiile de
pozitie si de viteza;
2. Nivelul al doilea este cel la care se fac transformari de coordonate si se
stabilesc acele informatii necesare generarii traiectoriilor, informatii care sunt
apoi furnizate nivelului 1.
3. Nivelul al treilea, cel mai inalt, este cel la caresarcinile ce trebuie
executate de robot trebuie impartite în miscari distincte care trebuie executate la
nivelul 1 de fiecare axa; tot la acest nivel , se efectueaza calcule matematice, se
implementeaza algoritmi, se realizeaza teste, se asigura sincronizarea miscarilor
intre ele sau cu alte canale de intrare, se realizeaza interfata cu sistemul de
intrare/iesire.
Se cauta tot mai mult obtinerea unei autonomii sporite a sistemului de
comanda fata de sarcinile referitoare la planificarea miscrilor, la corectarea
anumitor erori de miscare. în paralel cu aceasta autonomie, pentru a fi
competitive din punct de vedere al preţului, multe din sistemele actuale au doar
primele doua sisteme functionale si uneori numai primul nivel. Pentru a fi
compatibile si cu toate aceste sisteme de comanda , sistemele de programare
(S.P) trebuie sa permita descrierea sarcinilor fie la nivelul articulatiilor, fie la
nivelul coordonatelor operationale, fie chiar la nivel de obiect sau obiectiv.
Legatura dintre sistemul de programare si cel de comanda se realizeaza prin
intermediul unei informatii codate care poate fi implicita, cand se refera la
generatorul de traiectorii, sau explicita cand, de exemplu, se dau anumite pozitii,
anumite forte de strangere.
Concluzii:
Aceasta tendinta de separare a sarcinilor si de utilizare a doua sisteme,
unul de programare si unul de comanda, conduce laurmatoarele avantaje:
Limbaje de Programare a Robotilor Industriali
28
- efectuarea operatiilor de programare se poate executa în paralel cu
miscarea robotului; dupa ce un anumit program de lucru a fost definitivat si
transferat în sistemul de comanda, în sistemul de progreamare se poate edita si
definitiva un nou program pentru sarcinile ulterioare;
- Acelasi S.P. poate fi utilizat pentru mai multi roboti, pentru transferul
programului în cadrul mai multor sisteme de comanda. Utilizarea unui S.P. la
mai multe tipuri de sisteme de comanda este posibila datorita uniformizarii
codului de transfer al informatiei;
- Avand ca obiect doar definitivarea programului, S.P. poate dispunede o
structura mai complexa - exista astfel S.P. care dispun de simulatoare grafice
pentru verificarea si corectarea miscarilor robotilor prin optimizare care
urmarescindeplinirea anumitor indicatori de performanta( timpi de executie,
consum de enegie).
- La nivelul S.P. au fost implementate limbaje de programare de nivel tot
mai ridicat, care, utilizand elemente de inteligenta artificiala , rezolva sarcini tot
mai complexe cum ar fi asamblarea automata, conducerea adaptiva, lucrul în
acelasi spatiu de operare a mai multor roboti cu evitarea sarcinilor si
coordonarea miscarilor, e.t.c.
E. Descrierea sarcinilor pe care trebuie să le realizeze
roboţii industriali
Descriera unei sarcini ( task ) poate fi exprimata în termenii actiunii robotului
asupra mediului în care opereaza si determina evolutia în timp:
- daca aceasta evolutie este cunoscuta apriori se va descrie o succesiune
de actiuni. Realizarea acestor actiuni (deplasari, operatii cu obiecte ) poate fi
analizata în termenii "succesului" sau "esecului". Daca se ia în consideratie si
esecul(detectia unui obstacol, pierderea unui obiect transportat) trebuie inclus în
descrierea de solutii alternante , adaptive. Daca nu, toate actiuniletrebuie sa
serealizeze cu succes;
Limbaje de Programare a Robotilor Industriali
29
- în caz contrar, va fi un S.P. care va determina actiunile care vor trebui
executate de robot pentru a realiza sarcinile impuse.
Practic, pot fi puse în evidenta doua tipuri de descriere a sarcinilor:
1. Descrierea spatio-temporala, numita si descriere la nivelul manipularii
unde se pot identifica doua subnivele de programare:
- programare la nivelul actionarii ( articulatiei );
- programare la nivelul efortului ( în spatiul sarcinilor);
2. Descrierea fractionala, numita si descrierea la nivelul sarcinii unde, de
asemenea exista doua subnivele:
- programare la nivelul obiectului (actiuni simbolice cu obiecte);
- programare la nivelul obiectivului(ajungerea în anumite stari dorite);
In continuare vor fi analizate caracteristicile descrierilor sarcinilor pentru
fiecare din cele patru nivele de programare.
1. Descrierea la nivelul actionarilor
Coordonatele generalizate qi (sau coordonatele interne generalizate) ale
unui robot, sunt deplasarile liniare sau unghiulare care se realizeaza la nivelul
articulatiilor i din structura mecanica a robotului.
q Qin unde
n- numarul articulatiilor dintr-o structura;
Q- spatiul coordonatelor interne sau spatiul manipulatorului;
In spatiul Qn o traiectorie C este apecificata printr-o suita ordonata de "p"
vectori de coordonate interne qi :
C=( q1q2,...,qp)
Fiecarui segment q q qi i i 1 ii este asociata o viteza (deplasarea C(t))
care este în general un procent din viteza maxima articulara:
a axelor care se deplaseaza simultan (când mişcările manipulatorului sunt
coordonate);
Limbaje de Programare a Robotilor Industriali
30
a axei comandate ( cand miscarea se face succesiv pe fiecare axa ).
Legea de comanda - daca exista- permite determinarea perioadei de timp
în care se parcurge un segment tinand cont de restrictiile cinematice de viteza si
acceleratie ( , max maxq q ).
a) Traiectoria punct cu punct
Traiectoria manipulatorului intre extremitatile segmentului trebuie
determinata astfel incat sa se obtina anumite variatii de viteza si acceleratie în
punctele de plecare si de oprire. De asemenea, pentru comanda si realizarea
deplasarii intre punctele qi si qi+1 se face o impartire a intregului segment în
distante comparabile cu deplasarile maxim admisibile qi de la nivelul
articulatiilor intr-o perioada de esantionare dt a sistemului de conducere. în acest
caz, pentru ajungerea la o anumita cota, se va introduce o frânare prin
diminuarea deplasarilor qi în aproprierea punctului final.
Pentru controlul evolutiei variabileleor q si q exista mai multe metode
care utilizeaza modele analitice de evolutie q(t) si care se realizeaza în principal
prin interpolare poinomiala sau trigonometrica.
b) Traiectorii cu restrictii
Daca configuratiile qi si qi+1 sunt apropiate, traiectoria urmata de robot
este în general robusta din punct de vedere al variatiilor de viteza sau de sarcini
transportate. Pe de alta parte, introducerea de puncte intermediare devine
indispensabila atunci cand ne referim la deplasari mari sau cand intervin diverse
perturbatii, cum ar fi cele de origine dinamica; acestea se numesc traiectorii cu
restrictii.
Aceste puncte de trecere cu viteza diferita de zero sunt introduse prin
programare. Prin ele se realizeaza, de exemplu, esantionarea traiectoriilor
carteziene cand descrierea sarcinilor sunt transferate la nivelul actionarii.
Limbaje de Programare a Robotilor Industriali
31
Din punct de vedere al programarii, este important sa se cunoasca cum
sunt interpretate aceste ordine, acele puncte, de catre generatorul de traiectorii al
controlerului. De exemplu, daca se alege drept criteriu de performanta
minimizarea timpului de parcurs, atunci:
- traiectoria generala trebuie sa treaca exact prin aceste puncte
intermediare introduse;
- continuitatea vitezelor q.i si a acceleratiilor q..i în aceste puncte este
asigurata prin cmanda ( desi mecanismele de transmitere a miscarii actioneaza ca
niste filtre naturale, ele nu sunt suficiente pentru a obtine un raspuns amortizat
convenabil).
Pentru generarea traiectoriilor se pot utiliza:
1. Metoda prin care se determina un polinom de grad minim care trece
prin toate punctele traiectoriei si respecta, verifica, conditiile de viteze si
acceleratii. Aceasta metoda numita si interpolare globala sre doua dezavantaje
mari:
- gradul polinomului necesar creste cu numarul configuratiilor;
- introducerea unui nou punct sau modificarea unei configuratii impune
determinarea unui nou polinom( lucru dificil cand aceste modificari se fac on-
line).
2. Metoda interpolarii pe tronsoane la care se determina cate un polinom (
de grad maxim 4 ) pentru fiecare pereche de puncte.
3. Metoda lui Paul, de ordinul II , care utilizeaza interpolarea liniara si
tranzactii parabolice si care este cel mai frecvent utilizata.
Reprezentarea sarcinilor în spatiul articulatiilor prezinta cateva avantaje
cu privire la generarea traiectoriilor:
nu sunt depasiri ale restrictiilor de viteze si acceleratii;
se cunosc exact limitele articulatiilor ;
nu sunt singularitati care trebuie transformate;
Limbaje de Programare a Robotilor Industriali
32
rapiditate;
permite rezolvarea anumitor situatii ( de exemplu, alegerea configuratiilor)
prin intermediul sistemului de programare.
In schimb, aprecierea situatiilor în spatiul articulatiilor este destul de
dificila cand structurile contin mai mult de trei axe si analiza se face la nivelul
sistemului de programare.
2. Descrierea în spatiul sarcinilor în general se cauta sa se realizeze o descriere a miscarii robotului în
spatiul operatoinal Rm deoarece:
- descrierea spatiului si a pozitiei obiectelor în vederea manipularii lor
este mult mai simpla în acest spatiu decat în Qn ( de exemplu, pozitia unui punct
în sistemul cartezian R3 este data doar de trei coordonate);
- spatiul Rm este un spatiu afin euclidian ceea ce semnifica faptul ca
evolutia poate fi descrisa intr-o maniera unica si continua;
- sarcinile sunt descrise intr-un sistem de referinta care nu este legat de
robot. Sarcina la nivelul efectorului este portabila , ceea ce insemna ca ea poate
fi efectuata si de alti roboti sau ca robotul poate fi deplasat fara sa existe
consecinte în expresia sarcinii;
- informatiile provenite de la sistemul exterioreceptiv ( camere TV,
senzori de forte, e.t.c.) solidar cu spatiul de operare, sunt mereu exprimate în
termenii unor distante, proiectii sau componente în Rm. Doar senzorii
proprioreceptivi , legati de articulatii, dau informatii simple în Qn.
In schimb, este destul de dificil a defini o metoda care tine explicit cont de
redundanta robotului în raport cu o anumita sarcina.
3. Evolutia pozititei si orientarii efectorului Obs.: în loc de pozitie si orientare se utilizeaza des termenul de situatie.
Limbaje de Programare a Robotilor Industriali
33
Programarea deplasarilor în spatiul situatiilor necesita o descriere
geometrica a traiectoriei C=(p1, p2, ..., pn); (vom vorbi de traiectoria operationala
a efectorului). Aceasta descriere poate fi completata cu o lege functie de timp
sau cu restrictii cinematice ale punctelor intermediare pi. De asemenea , daca
parametrul timp este specificat explicit, se poate defini miscarea operationala
sub forma :
C(t)=(p1(t), p2(t), ... , pn(t))
a) Utilizarea legaturilor mecanice
Utilizarea legaturilor mecanice permite definirea relatiilor ce se stabilesc
intre sistemul de referinta asociat terminalului robotului si entitatile geometrice
ce caracterizeaza spatiul de operare. Acestea vor permite reprezentarea
restrictionarii gradelor de libertate ale situatiei atinse( pozitiv, de exemplu).
b) Descrierea traiectoriilor operationale
Daca nici o restrictie cinematica nu este atasata descrierii geometrice a
sarcinii, legea de miscare rezultanta este obtinuta aposteoric în functie de
metodele de generare ale traiectoriilor utilizate de sistemul de comanda. în acest
caz, daca esteexecutabila, traiectoria va fi parcursa în timp minim , singurele
restrictii fiind limitele maxime ale vitezelor q.max si acceleratiilor q..max din
articulatii:
(1) Traiectorii libere
Traiectoria C este numita libera sau punct cu punct, daca descrierea se
rezuma la o situatie ce trebuie atinsa. Traiectoriile libere sunt utilizate în cazul
miscarilor grosiere, de mare amplitudine , sau cand se cauta optimizarea
timpului de parcurs.
Limbaje de Programare a Robotilor Industriali
34
(2) Traiectorii cu restrictii
In majoritatea cazurilor se cauta controlarea traiectoriei efectorului în mod
continuu (traiectorii analitice) sau punctual (puncte de trecere). Aceasta va
permite :
1) Limitarea riscului de ciocnire :
daca exista cai comtinue, în spatiul Qn, libere de coliziuni;
daca toate gradele de libertate ale robotului sunt fixate prin pozitita si
orientarea efectorului;
daca este posibil ,in cazul descrierii sarcinii , sa se impuna o anumita
configuratie a manipulatorului , dintre mai multe posibile;
Atunci este posibil sa se descrie un drum liber printr-o traiectorie continua în
Rm.
2) Realizarea unor miscari care sa raspunda precis restrictiilor de pozitie
si/sau orientare de-a lungul parcursului efectuat.
Descrierea traiectoriilor cu restrictii se poate face :
1) Prin specificarea punctelor de trecere în spatiul operational;
2) Prin specificarea interpolarii liniare sau circulare a situatiei în care
traiectoria este esantionata:
- fie prin incrementi constanti (xp, x0); (pozitie si orientare) intre
situatia initiala si cea finala;
- fie prin metoda liniarizarii lui R. Taylor care presupune divizarea
repetată a segmentului rectiliniu ce trebuie parcurs , pana este satisfacut un
anumit criteriu cum ar fi abaterea de la traiectorie; se cauta astfel ca numarul
punctelor de trecere sa fie crescut numai în zonele în care mici variatii q
conduc la variatii imprtante x.
Concluzia: - daca traiectoria este exprimata analitic , atunci sistemul de
programare trebuie sa o transforme numeric în elemente de deplasare admise de
sistemul de control ( puncte de trecere sau segmente interpolate).
Limbaje de Programare a Robotilor Industriali
35
c) Miscari în spatiul operational
Se poate face o analogie intre traiectoriile si miscarile din spatiul
operational (spatiul sarcinilor pe care trebuie sa le realizeze robotul) cu ceea ce a
fost prezentatmai sus pentru spatiul ariculatiilor:
O deplasare C(t) rezulta prin asocierea unei legi de timp la o traiectorie C,
punct cu punct sau cu restrictii. Generarea unei traiectorii în spatiul operational
presupune definirea unor parametri de viteza si acceleratie în spatiu, maxim
admisi , liniari si unghiulari legati de sistemul de referinta asociat terminalului.
Controlul evolutiei vitezei instantanee , atat liniare cat si unghiulare, se
realizeaza cu modelul variational ( diferential):
dx
dtJ q
dq
dt
unde J(q) reprezinta Jacobianul structurii mecanice.
Observatie - deoarece legatura dintre incrementul Dx al situatiei si
traiectoriei este x x C t t , rezulta ca valabilitatea modelului de mai
sus este legata direct de perioada de eşantionare.
Limbaje de Programare a Robotilor Industriali
36
III. Elemente de bază ale limbajelor de programare a roboţilor industriali
A. Introducere în tematica limbajelor de programare a
roboţilor industriali
După cum s-a observat din problematica abordată în capitolele anterioare
limbajele de programare prezintă o serie de particularităţi, care aplicate în cadrul
structurilor robotice se concretizează în limbaje de sine statătoare care
înglobează elementele definitorii ale ambelor domenii: limbajele de programare
destinate structurilor de calcul, respectiv structurile mechatronice de tip roboţi
industriali.
Programarea roboţilor se poate realiza prin mai multe metode care să nu implice
obligatoriu utilizarea unui limbaj de programare. Dintre acestea se amintesc:
a) programarea manuală - în care se precizează succesiunea mişcărilor prin
intermediul unor elemente senzoriale care definesc momentul opririi
deplasării
b) programarea prin instruire - robotul este deplasat în punctele dorite de către
programator fără acţionarea motoarelor structurii robotice
c) programare secvenţială - este o programare prin instruire realizată cu
acţionarea motoarelor structurii robotice.
d) programarea master-slave - este o programare prin instruire care utilizează
un model ce este învăţat traiectoria, pentru ca apoi programul să fie transferat
master-ului
Singura procedură de programare care implică utilizarea unui limbaj de
programare dedicat este procedura de programare prin învăţare - teach in
procedure. Avantajele acestei metode sunt materializate prin opţiuni privind:
viteza de mişcare
durata mişcării
programarea întârzierilor
Limbaje de Programare a Robotilor Industriali
37
bucle de program simple
programe simple cu ramificaţii depinzând de întreruperi, semnale primite
de la senzori
funcţii speciale
Cum s-a prezentat în capitolul I, un limbaj de programare trebuie să dispună de
un univers natural propriu.Astfel pentru programarea teach-in va trebui să existe
date de tip numeric precum şi un set minimal de tip text. Fiecare funcţie poate fi
introdusă prin intermediul unei chei speciale, taste care pot fi reprezentate printr-
un şir de caractere care alcătuiesc un simbol. Simbolurile utilizate de un limbaj
de programare alcătuiesc vocabularul limbajului, regulile gramaticale care
permit combinaţii între elementele vocabularului alcătuiesc sintacsa, iar
semnificaţia simbolurilor şi a combinaşiei acestora alcătuieşte semantica
limbajului. Organizarea limbajului poartă numele de pragmatică.
Exemplu: Fie un vocabular format din următoarele simboluri:
V={limbaj,student,este,complex,blond,brunet,dificil}.
Regulile de sintaxă sunt:
a) trei elemente ale vocabularului alcătuiesc o propoziţie
b) primul element al propoziţiei trebuie să fie Limbaj sau Student
c) al doilea element al propoziţiei trebuie să fie este
d) al treilea element al propoziţiei este unul dintre simbolurile: complex, blond,
brunet,dificil.
Utilizând aceste reguli propoziţiile posibile sunt:
Limbajul este
complex
dificil
blond
brunet
. respectiv Studentul este
complex
dificil
blond
brunet
. Datorită semnificaţiei în
limba română se observă, eliminând sensurile indirecte, că ultima regulă trebuie
prelucrată sub forma:
d) al treilea simbol al propoziţiei este:
Limbaje de Programare a Robotilor Industriali
38
dacă primul element este Limbaj atunci al treilea element este complex sau
dificil
dacă primul element este Student atunci al treilea element este blond,
dificil sau brunet.
Se observă ca unele simboluri depind puternic de context influenţând total
semantica propoziţiei. În continuare vor fi prezentate caracteristicile limbajelor
de programare pentru sistemele de calcul cu particularităţile pe care le prezintă
în cazul roboţilor industriali.
B. Elemente caracteristice limbajelor de programare destinate structurilor de calcul
În cadrul limbajelor de programare se disting clar câteva categorii de
elemente care intră în alcătuirea limbajului. Dintre acestea se pot aminti:
* simbolurile limbajului
* cuvintele simbol
* date de tip obiect ( care au o anumită semnificaţie în funcţie de
context)
* structurile de date
* operaţiile asupra datelor
* algoritmul.
Dacă această clasificare este cuprinzătoare din punct de vedere funcţional,
în cele ce urmează se vor prezenta elementele unui limbaj clasic de programare ,
din punctul de vedere al utilizatorului, sau mai corect din punct de vedere
conceptual:
1. Variabilele
a) Introducere Acest concept s-a impus în robotică, în special, datorită informaţiilor
preluate de către senzori (realizându-se astfel achiziţia informaţiei de mediu,
Limbaje de Programare a Robotilor Industriali
39
oferită de către senzori), respectiv datorită informaţiilor prelucrate de către
arhitectura de comandă şi control a robotului.
O variabilă este deci identificată printr-un nume şi aparţine unui
anumit tip simplu, implicit limbajului de programare (logic, aritmetic, cuvänt)
sau unui tip compus definit de programator. Ca orice dată folosită de un
calculator o variabilă dispune de o adresă a variabilei şi conţinutul acesteia.
Din punct de vedere al rapidităţii de execuţie a programului se
preferă pentru adresare, adresarea relativă, generându-se un tabel de simboluri în
care intră numele variabilelor şi adresele relative ale acestora. Contorizarea
acestora se face pe baza unui numărător care este incrementat la fiecare
introducere a unei noi variabile cu numărul de biţi necesari memorării variabilei
de tipul respectiv.
Exemple:
Instrucþiune Lungime instrucþiune
Nume Adresă relativă
unu, p1: INTEGER; 2 byti unu 0 total, pozitie: REAL; 14 byti p1 2
total 4 poziþii 8
Un alt tip de variabile este cel al variabilelor tabelare sau tip bloc. Acest
tip, mai ales pentru limbajele de programare a roboţilor, este deosebit de des
întâlnit şi oferă o compactitate deosebită programelor, precum şi o economie de
memorie.
Exemple: MOVE (63, 56.5, 33.8, 26,45,5) sau
VAR P1: FRAME (structuri de 6 valori)
MOVE P1
O structură particulară de variabile este stiva. Aceasta este
constituită dintr-un masiv de memorie în care datele sunt înscrise după
procedura LIFO (Last in, first out). Dacă o dată este introdusă (push) în stivă,
Limbaje de Programare a Robotilor Industriali
40
pointerul este decrementat şi apoi data este introdusă. Extragerea se face prin
citirea datei şi incrementarea pointerului - pop.
Un alt tip particular de variabilă este coada care este opusul stivei, ea fiind
o colecţie de date de tip FIFO.
b) Evoluţia variabilelor de-a lungul programului Datorită programării structurate, care este utilizată şi ín robotică se
pune problema valabilităţii, vieţii, variabilelor de-a lungul programului. Astfel
un program poate să conţină variabile generale a căror definire are sens de-a
lungul întregului program, cät şi variabile locale care au sens numai între
începutul (begin) şi sfärşitul (end) unui bloc component al întregului program.
Cum după părerea autorului, o explicaţie grafică este mult mai clară, figura
următoare, exemplifică cele afirmate în cadrul acestui subcapitol.
BEGIN “ bloc 1 “ VAR a: INTEGER; v: VECTOR;
.
.
.
BEGIN “ bloc 2 “ VAR c,b : INTEGER;
.
.
. END “ bloc 2 “
.
.
. END “ bloc 1 “
Un alt avantaj al programării structurate este datorat alocării
dinamice de memorie prin separarea programului în blocuri componente. Astfel,
dacă este apelat blocul 1, la terminarea operaţiilor specifice, variabilele din acest
a,v - valid
c - valid b - valid
Limbaje de Programare a Robotilor Industriali
41
bloc sunt şterse la nivel de memorie alocată şi în acelaşi spaţiu de memorie, sunt
inserate variabilele altui bloc. Aceasta face ca în cazul în care nu se utilizează
algoritmi recursivi evaluarea memoriei utilizate să se poată face uşor.
2. Subrutine Dacă un program prezintă anumite zone care se repetă, eventual cu
alţi parametrii, se poate utiliza o structură de tip subrutină. Aceasta poate fi
chemată din orice punct al programului, urmând ca întoarcerea după execuţia
subrutinei să se facă la instrucţiunea imediat următoare apelului subrutinei.
Această adresă, adresa de întoarcere este salvată într-o structură de tip stivă,
alocarea memoriei fiind de asemenea o alocare dinamică.
Program “ main program “
declaraţii
SUBROUTINE 1;
RETURN “ intoarcerea din prima subrutina ‘
GOSUB SUBROUTINE 1
GOSUB SUBROUTINE 1
Un caz particular de autoapelare a subrutinei este cazul
recursivitáţii.
3. Proceduri şi funcţii
Limbaje de Programare a Robotilor Industriali
42
Ín esenţă o procedură sau o funcţie sunt o extensie a conceptului de
subrutină, acestea fiind de fapt subrutine cu parametri de intrare şi/sau de ieşire.
Procedura dispune deci de un nume, de parametru de intrare şi/sau ieşire care
pot fi transmişi către programul principal şi un corp al procedurii în care se
efectuează operaţii aritmetico-logice. În corpul procedurii pot fi utilizate şi alte
variabile interne care la ieşirea din procedură vor fi piedute. O caracteristică
importantă este dată de faptul că la definirea procedurii, parametrii de
intrare/ieşire sunt parametri formali urmând ca la înlocuirea lor cu cei din apel
să devină parametri efectivi. Apelul procedurilor şi funcţiilor diferă de cel al
subrutinelor în timp ce revenirea este identică.
În cazul procedurilor, modul în care sunt furnizaţi parametrii de
ieşire trebuie să fie studiat cu atenţie. Dacă însă operaţiile asupra datelor de
intrare nu sunt prea complexe, iar ieşirea se face pe o variabilă se apelează la
conceptul de tip funcţie.
4. Macroinstrucţiunile
Ín general acest tip de pseudoprocedură defineşte substituirea unor texte
sau tablouri. Structura standard cuprinde o definiţie a macro-ului, mai precis
alocarea unui nume setului care va fi substituit şi un corp al macro-ului ce
defineşte o secvenţă de caractere sau apelul la alte ,,macro-uri. Apelul unei
macroinstrucţiuni se face prin numele ataşat care are ca efect înlocuirea acestuia
cu corpul macroinstrucţiunii.
Exemple:
DEFINE inch = # * 2.54 * cm # ;
distance := base + 35 inch; { echivalent cu distance:=base + 35 * 2.54
cm;}
5. Recursivitatea Distingem două tipuri de recursivitate:
Limbaje de Programare a Robotilor Industriali
43
* recursivitate directă - când are loc autoapelarea procedurii
* recursivitatea indirectă - când o procedură apelează o altă procedură în
timpul execuţiei sale, procedură care la rândul
său o apelează pe prima.
În robotică nu se apelează prea des la acest tip de algoritm, însă folosirea
acestei metode duce la realizarea unor programe mult mai compacte.
Exemple:
Procedura A
Call A
recursiv
Procedura A Call B
Procedura B Call A
Call A
Call A
Recursivitate directă Recursivitate indirectă
6. Procese şi corutine Ín cadrul unui program pot fi controlate mai multe procese, între care
poate există o anumită relaţie temporală sau interdependentă.
Astfel un proces poate fi:
* în stare inactivă -dormant state - când procesul poate fi declanşat fie
de alt proces, fie de un eveniment extern. Acesta poate fi executat sau nu
în paralel cu alt proces sau poate aştepta terminarea altui proces.
* în stare activă când este executat;
Limbaje de Programare a Robotilor Industriali
44
* în stare ready - starea premergătoare stării active şi post active;
* în stare de aşteptare a unui eveniment - waiting
Corutinele sunt imagini ale planificării proceselor la nivelul sistemului de
operare. Acestea pot fi declanşate în serie sau în funcţie de comenzile de
întrerupere generate.
Figure 11
Figure 12
Limbaje de Programare a Robotilor Industriali
45
Datorită acestora, cât şi a modului în care procesele trebuie
să aibă loc apare termenul de sincronizare şi implicit de variabile de
sincronizare. Acestea prin aprinderea (activarea) lor (mai poartă numele
de steaguri-flag sau semafor) sesizează unui alt proces faptul că procesul
urmărit de respectiva variabilă s-a terminat sau a început, urmând ca alt
proces să fie iniţializat, pus în stare de aşteptare sau terminat.
C. Conceptele specifice Limbajului Robot
Robotica s-a impus şi se impune ca un domeniu aparte în ştiinţă situându-se
la graniţa dintre mai multe discipline: mecanică, electronică, automatică,
programare. Această poziţie implică revendicarea unor termeni specifici care să
permită:
1. o mai uşoară operare şi programare pentru operator;
2. o apropiere cât mai strânsă cu programarea clasică;
3. reducerea complexităţii în cazul dezvoltării sistemului.
Specificul limbajelor de programare a roboţilor este acela că obiectele cu care
acesta operează se află într-o lume reală, în care distanţele, poziţiile şi orientarea
sunt elemente de bază. Aceste cerinţe au implicat o serie de particularităţi şi
termeni specifici.
1. Sistem de referinţă - Frame
Orientarea şi poziţia end-effectorului şi a întregii arhitecturi robotice este
definită ca fiind poziţia robotului respectiv orientarea acestuia. Acestea sunt
z
x
y
x
z
y
Transl
atie
Rotatie
Figure 13
Limbaje de Programare a Robotilor Industriali
46
definite în funcţie de un sistem referenţial de bază
Cum robotul sau anumite elemente ale arhitecturii acestuia sunt în mişcare, se
pot ataşa sisteme de referinţă fiecări element, orientarea şi poziţia acestuia
putând fi exprimată fie relativ la bază, fie la elementul inferior. Desigur ca cea
de-a doua formă duce la o exprimare relativă, care prin compunere o poate
genera pe cea referitoare la baza sistemului.
Algoritmul Denavit-Hartenberg, transformările relative de bază, operatorul
omogen şi câteva exemple ale folosirii acestora sunt prezentate în [12,13,14,15].
Din punctul de vedere al poziţionării robotului, modul de definire al punctului
ţintă (dorit) nu are prea multă relevanţă, deoarece comanda robotului se face la
nivel de articulaţie. Pentru astfel de comandă este necesară determinarea
corelaţiei care trebuie să existe între coordonatele robot ce trebuiesc alocate
fiecărei articulaţii şi poziţia şi orientarea finală. Această corelaţie poartă numele
de cinematică inversă şi este prezentată şi exemplificată în [15,16,19].
2. Controlul mişcării robotului
Deplasarea robotului între două puncte se poate realiza fie direct, cu viteza
maximă cum este cazul controlului punct cu punct, fie prin puncte intermediare
care definesc fie o dreaptă sau o curbă continuă de diferite ordine.
Acest ultim caz se realizează utilizând diverse metode de interpolare: liniară,
circulară sau parabolică. La rândul ei interpolarea se poate realiza fie la nivelul
articulaţiilor robotului, fie la nivelul sistemului cartezian. Diversele modalităţi
de interpolare şi traiectoria rezultantă pentru un robot cu două articulaţii de
rotaţie sunt prezentate în figurile următoare:
Limbaje de Programare a Robotilor Industriali
48
Datorită faptului că acest aspect, al interpolării, îşi găseşte o largă
aplicabilitate în cadrul programării roboţilor în continuare va fi detaliată
utilizarea spline function utilizând metoda Ho şi Cook:
Ecuaţia unui segment spline (de ordin 3) care trece prin două puncte
intermediare Fk şi Fk+1 (2<k<n-2) pentru o traiectorie care conţine n puncte (şi
este aproximată prin n-1 segmente spline) este: 3
42
321)( tBtBtBBtF 1.1.
unde F(t) reprezintă poziţia articulaţiei exprimată ca funcţie de timp. Dacă
t variază între 0 şi tk+1 se pot exprima condiţiile la limită sub forma:
11
11
)()0(
)()0(
kkk
kkk
FtFFF
FtFFF
1.2.
unde F’k , F’k+1 reprezintă viteza articulaţiei în respectivul punct (Fk şi Fk+1).
Înlocuind 1.2 în 1.1 se obţine:
12
141321
13
142
131211
2
1
32)(
)(
)0(
)0(
kkkk
kkkkk
k
k
FtBtBBtF
FtBtBtBBtF
FBF
FBF
1.3.
Rezolvând aceste ecuaţii în vederea determinării lui B3 şi B4, utilizând apoi forma lui B1 şi B2 obţinem:
11
12
14
11
1
13
)(21
2)(31
kkk
kk
k
kkk
kk
k
FFt
FF
tB
FFt
FF
tB
1.4.
sau mai compact:
1
1
21
21
31
31
112
12
1
4
3
2
1
1122
12330100
0001
k
k
k
k
kkkk
kkkk
F
FF
F
tttt
tttt
B
B
B
B
1.5.
Pentru calcularea coeficienţilor spline, vor trebui determinate iniţial valorile F’k , F’k+1 la momentul tk+1 .Vom considera , pentru simplificare, ca tk+1 va fi o valoare măsurată în unităţi temporale, calculat sub forma:
21
1
2,1,1 )(
m
ikikik qqt
1.6.
Limbaje de Programare a Robotilor Industriali
49
Utilizând 3 puncte intermediare t, tk+1 şi tk+2 se pot determina vitezele utilizând şi condiţiile de continuitate a acceleraţiilor la sfârşitul primului segment spline (1.7), respectiv la începutul celui de-al doilea segment spline(1.8):
11
1
11
1
1
1
1431
2)(32)(26
62)(
kkk
kk
kkk
k
kk
k
kk
FFt
FF
tFF
t
FF
t
tBBtF
1.7.
21
2
12
23 2
(322)0( kk
k
kk
k
FFt
FF
tBF
1.8.
Din egalarea celor două ecuaţii (condiţia de continuitate) rezultă:
kkkkkkkk
kkkkkkk FFtFFttt
FtFttFt
12
2122
121
211122 ()(3
)(2
1.9.
Exprimând această ecuaţie pentru 2 3 k n se obţine:
)()(3
)()(3
)()(3
)(200
0)(20
00)(2
322
1212
212
342545
24
54
232434
23
43
1
3
2
2121
4545
3434
nnnnnnnn
nnnnn
FFtFFttt
FFtFFttt
FFtFFttt
F
F
F
tttt
tttt
tttt
1.10.
sau simbolic [A][X]=[B] ([m][F’]=[a]) . Rezolvând ecuaţia 1.10 obţinem toate informaţiile necesare construcţiei segmentelor spline de aproximare a traiectoriei, cu condiţia cunoaşterii condiţiilor la limită ( la inceputul mişcării şi la sfârşitul mişcării). Dacă se utilizează o funcţie spline de ordinul 4 de forma:
45
34
2321)( tBtBtBtBBtF
1.11.
având condiţiile la limită: F F F Fn n' " ' "1 1 0
1.12. Urmând aceeaşi procedură se obţine:
Limbaje de Programare a Robotilor Industriali
50
2325
2242
2425
32412
3
2
11
43)(
)(
02)0(
0)0(
)0(
FtBtBtF
FtBtBFtF
BF
BF
FBF
1.13.
respectiv rezolvând acest sistem pentru determinarea lui B4 şi B5:
232
2142
5
222
1232
4
1)(
3
1)(
4
Ft
FFt
B
Ft
FFt
B
1.14.
Utilizând condiţiile la limită se obţine:
2543
35
2431
45
34
2311
12
11
12620)(
4320)(
)(
)0(
)0(
nnn
nnnnn
nnnnnnnn
n
n
tBtBBtF
tBtBtBFtF
tBtBtBtFFFtF
FBF
FBF
1.15.
Rezolvând aceste ecuaţii se determină coeficienţii:
)33(1
)388(1
)366(1
1145
1134
1123
nnnnn
nnnnn
nnnnn
tFFFt
B
tFFFt
B
tFFFt
B
1.16.
Dacă se pun condiţiile de continuitate a acceleraţiei pentru primele două segmente
222122
221222
225242 )(3
12)(4
6126)( FtFF
tFtFF
ttBtBtF
rezultă:
)(6
)(31
)32
( 1222
2323
33
223
FFt
FFt
Ft
Ftt
1.17.
Utilizând acelaşi mecanism şi pentru sfârşitul traiectoriei:
)(6
)(31
)32
( 122121
21
11
nnn
nnn
nn
nnn
FFt
FFt
Ft
Ftt
1.18.
Sintetizând aceste rezultate de-a lungul traiectoriei se poate forma o structură compactă a sistemului care trebuie determinat sub forma 1.19 unde:
Limbaje de Programare a Robotilor Industriali
51
)(6
)(332
)(6
)(1
1
32
122121
11
1,1
1222
2321
2,1
323
2322
nnn
nnn
nnn
nn
nnn
FFt
FFt
att
M
FFt
FFat
M
tM
ttM
1
322
1212
212
232434
23
43
1
2
3
2
1,12,1
2121
3434
2322
)()(3
)()(3
00
)(2
0
0
0)(2
00
n
nnnnnnnn
n
n
nnnn
nnnn
a
FFtFFttt
FFtFFttt
F
F
F
F
MM
tttt
tttt
MM
1.19.
Limbaje de Programare a Robotilor Industriali
52
IV. Date şi structuri de date utilizate în cadrul limbajelor de programare a roboţilor industriali(LPRI)
A. Date utilizate de limbaje de programare a robotilor Aceastá categorie de elemente constituite ale unui limbaj de
programare alcátuießte baza limbajului. Se poate spune cá un limbaj
robot este mai evoluat sau mai puternic dacá se pot realiza arhitecturi
de date care sá permitá utilizatorului o folosire compactá a limbajului sá
natural, fárá ínsá a elimina rigozitatea pe care o cere arhitectura
robotului. Un prim exemplu ín íntárirea acestei afirmaþii este zona de
specificare a elementelor sistemului, ín limbajul SRL.
Exemple: SRL: SYSTEM_SPECIFICATION ROBOT: puma600=ROBOT(0); jhrobot =ROBOT(1); EFFECTOR: ringgrip=GRIPPER(0) OF puma600; pargrip =GRIPPER(1) OF jhrobot; SENSOR: visioninfo=CHANNEL(1); STRUCTURE visioninfo=RECORD pantno:INTEGER; x, y:INTEGER END; END_SYSTEM_SPECIFICATION Ín acest prim exemplu se observá cá ín definirea elementelor
sistemului supervizat prin programul scns ín SRL (supervizarea se face
de fapt de cátre structura de control care compileazá ßi ruleazá
respectivul program) se realizeazá definirea roboþilor puma 600 ßi
jhrobot, precum ßi ataßarea gripperelor celor doi roboþi: gripperul
ringgrip deschis(0) lui puma 600 ßi pargrip ínchis lui jhrobot. De
Limbaje de Programare a Robotilor Industriali
53
asemenea este definit sensorul visioninfo ca fiind canalul (1) ßi o
structurá specificatá sub forma unui RECORD.
Un exemplu de folosire a acestui sensor poate fi sub forma:
SRL: INPUT (visioninfo); IF visioninfo.part=3 THEN SMOVE puma60 TO depáßit; Datele specifice unui limbaj de programare sunt specificate
printr-un nume ßi printr-un tip cáruia data aparþine. Ín funcþie de limbajul
la care se face referire, numele asociat unei date poate conþine
caractere alfa numerice, litere mari sau litere mici, respectiv un numár
finit de caractere care vor fi interpretate sau un numár teoretic infinit.
Ín toate cazurile ínsá, caracterul blanc nu este admis ín definirea
unei date, acesta fiind ínlocuit ín cele mai multe cazuri prin caracterul _
. O altá caracteristicá universalá a numelui unei date este faptul cá
acesta chiar dacá poate conþine ßi caractere numerice trebuie sá
ínceapá cu o literá. Pentru completarea acestor informaþii ín tabelul
urmátor sunt prezentate spre exemplificare numárul de caractere
semnificative ßi numárul de caractere permise pentru limbajele cele mai
cunoscute.
Limbaj Litere mari
Litere mici
Numar caractere interpretabile
Numar caractere permise
SRL * * nelimitat nelimitat AL * * 30 nelimitat PASRO * * 8 sau mai multe nelimitat VAL * nelimitat nelimitat AML * nelimitat nelimitat HELP * 6 nelimitat SIGLA adrese speciale I1..I16, P1..P16 respectiv M1..M1023 ROBEX * 6 6
Ín ceea ce priveßte tipul datelor din cadrul unui limbaj de
programare al roboþilor industriali se poate face o separare ín sensul
definirii implicite a tipurilor consacrate: INTEGER, CHARACTER, REAL,
BOOLEAN aláturi de STRING - un ßir predefinit de caractere sau o
Limbaje de Programare a Robotilor Industriali
54
secvenþá liniará de caractere; respectiv EVENT - numárátoare pentru
contorizarea unor evenimente, folosite mai ales pentru asigurarea
sincronizárii programelor.
Ín tabelul urmátor vor fi prezentate tipurile standard de date
pentru diferite limbaje:
PASRO SRL AL AML VAL VAL II HELP SIGLAINTEGER INTEGER SCALAR INT Integer Scalar Scalar CounterREAL REAL SCALAR REAL Scalar Scalar BOOLEAN BOOLEAN SCALAR - - - CHARACTER
CHAR CHAR - - -
STRING STRING - STRING
- -
SEMAPHOR INTERRUPT
EVENT Semaphore
Flags
iar domeniul valorilor acestor tipuri de bazá este prezentat ín
urmátorul tabel:
Tipul de data Numar de byti DomeniulINTEGER 2 -32768 ... + 32767REAL 4 0.15224277E-39 ...
0.17014111E+38BOOLEAN cel putin unul FALSE, TRUE CHARACTER cel putin unul caractere ASCIIEVENT 2 -32768 ... + 32767
Ín afara acestor tipuri de bazá pentru programarea purá
(implicänd date numerice folosite ín calcule interne) apar ßi datele
specifice roboþilor industriali care vor fi enumerate ín continuare:
-VECTOR - ín general vectori tri-dimensionali;
-ROTATION - rotaþia cu un unghi ín jurul unei axe;
-ORIENTATION - rotaþia definitá prin trei unghiuri;
-FRAME - definit prin rotaþii ßi vector;
-TRANS - transformare definitá direct ca un FRAME.
Un exemplu de construcþie a acestui tip de date, pentru
PASRO se poate construi sub forma urmátoare :
PASRO TYPE vector = RECORD
x, y, z : REAL
Limbaje de Programare a Robotilor Industriali
55
END; rotmatrix = RECORD
t,o,a: vector END;
rotation = RECORD axis : vector; angle : REAL; matrix : rotmatrix END;
frame = RECORD rot : rotation; transl : vector END;
Pentru limbajele SRL, PASRO ßi AL, aceste elemente se
folosesc ca tipuri de date standard, fapt care ußureazá mult lucrul cu
acestea, nemaifiind nevoie de o construcþie a acestor tipuri:
Exemple:
SRL: directie: VECTOR; partrotatie : ROTATION; preluare, asteptare : FRAME; directie:=VECTORC(0,35,0);
PASRO: directie: VECTOR; partrotatie: ROTATION; MAKEVECTOR (directie,0,35,0);
AL: DISTANCE VECTOR directie; ROT partrotatie; FRAME preluare,asteptare; directie <- VECTOR (0,35,0) * CM;
VECTOR
Specificatiidimensionale
Identificator
TRANS,
ROT
FRAME
Aceastá definire implicitá este acceptatá ßi de AML, ínsá de
aceastá datá ansamblul de mai multe date definesc: un vector dacá
ansamblul de date conþine 3 date: CONV:NEW 3 OF 0.0 0.0 0.0 0.0
PARTR:NEW<90,0.0,45>;90 0.0 45
x y z x y z
PARTR
Limbaje de Programare a Robotilor Industriali
56
Respectiv frame pentru cazul ín care ansamblul cuprinde 7
date:
PICKUP:NEW 7 OF 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
Pentru limbajul VAL elementele geometrice sunt specificate
de cuväntul cheie POINT care are 6 componente: coordonatele x,y,z ßi
unghiurile Euler.
POINT basis 300, 500, 250, 0, 0, 0 POINT transform 0, 0, 150, 0, 0, 0 MOVE basis:transform Ín cazul limbajelor apropiate de comenzile numerice, cum
este cazul limbajului ROBEX datele geometrice sunt specificate utilizänd
o serie de cuvinte cheie cum ar fi: POINT, LINE, CIRCLE, PATTERN,
PLANE, BEAM, CYLNDR, SPHERE, CONE, BODY, PARF.
B. Structuri de date
Datoritá diversitáþii datelor necesare controlului unui robot ßi mai
ales volumului mare de informaþie care poate fi ínglobat íntr-o categorie
de date pe care operatorul trebuie sá o furnizeze robotului, iar pe de altá
parte robotul trebuie sá o furnizeze operatorului, este impetuos necesar
ca aceste informaþii sá fie grupate íntr-un cadru mai larg cum ar fi
structurile de date.
Pe längá structurile caracteristice limbajelor clasice de
programare, ín cazul limbajelor pentru roboþi apare o nouá structurá
heterogená din punctul de vedere al tipului datelor ce intrá ín alcátuirea
acestui tip, structurá care poartá numele de colecþie (sau ín literatura
englezá de specialitate-aggregates). Ín continuare se vor descrie pe
scurt, prin exemple, structurile de date utilizate:
- tablourile - ARRAY. Acestea pot fi unidimensionale: SCALAR
ARRAY Y[1:3] sau multidimensionale. Aceste structuri au
x y z roll pitch yaw deschidere
PICKUP-frame
Limbaje de Programare a Robotilor Industriali
57
caracteristic faptul cá odatá cu declararea dimensionalitáþii lor,
arhitectura de control alocá memoria necesará stocárii informaþiei.
Chiar dacá dimensionalitatea tabloului poate fi datá de o variabilá,
unitatea de control alocá o memorie corespunzátoare dimensiunii
variabilei ín momentul declarárii.
Unitatea de control sesizeazá ín timpul compilárii eventualele
greßeli dimensionale, operatorul fiind scutit ín mod direct de
aceastá verificare, fárá ínsá ca unitatea de control sá realizeze o
corecþie a respectárii erorii, dar sesizänd-o prin íntreruperea
compilárii ßi afißarea unui mesaj de eroare.
Dimensionalitatea tablourilor poate fi declaratá fie direct, fie prin
constante, variabile sau chiar expresii aritmetice, totul depinzänd
de limbajul folosit. În continuare sunt prezentate cäteva exemple
de tablouri pentru limbajul PASRO, aláturi de observaþia potrivit
cáreia ín mod asemánátor se realizeazá declararea tablourilor ín
SRL, AL ßi HELP ín timp ce pentru limbajele VAL, SIGLA ßi
ROBEX aceste tipuri de structuri de date nu sunt valabile. SRL,
PASRO ßi AL acceptá chiar ßi indici, cu observaþia cã indicele
superior trebuie sá fie mai mare decät indicele inferior, ín timp ce
HELP acceptá declararea dimensiunii numai prin constante
numerice, iar indicele inferior trebuie sá fie minim 1.
Exemple:
AL: sistem_ref : ARRAY [1:4,-10:-5] FRAME ARRAY orificii [1:numar_total] - la definirea unui sir se pot
folosi chiar variabilePASCAL: vector = ARRAY [1..3] OF REAL;
rotmatrix = ARRAY [1..3,1..3] OF REAL;
- ínregistrári -RECORDS. Aceste structuri de date, s-ar putea
afirma, sunt pe o treaptá ierarhicá superioará tablourilor, ín sensul
ín care pot grupa tipuri diferite de date sau chiar tablouri. Astfel
Limbaje de Programare a Robotilor Industriali
58
þinänd cont de tablourile definite anterior se pot defini, pentru
continuarea exemplului, ßi urmátoarele ínregistrári.
Exemple:
PASRO: vectortype = ARRAY [1..3] OF REAL; rotatietype = RECORD
axis : vectortype; angle : REAL END;
transformaretype = RECORD orientare : rotatietype; pos : vectortype; END;
sistemtype = transformaretype; obiecttype = RECORD
coordobiect: sistemtype; xlung, ylung, zlung : REAL; grippozitie : sistemtype; plin : BOOLEAN END;
Accesul la componentele ínregistrárilor se face prin specificarea
numelui ínregistrárii aláturi de componenta care se doreßte a fi
utilizatá.
VAR box: obiecttype; IF box.plin SMOVE (goal) . . . . . . . . . . . . . . . . . . . . diagonala=SQRT(SQR(xlung)+SQR(ylung))/2
- fißierele -FILE. Aceste structuri de date sunt cele mai complexe ßi
ßi mai ample atät din punct de vedere al dimensiunii pe care o
Figure 15
Limbaje de Programare a Robotilor Industriali
59
necesitá pentru a fi stocate, cät ßi din punctul de vedere al tipului
de date cuprinse. Ín general se disting fißiere de date care
furnizeazá argumentele unui program (cum ar fi poziþiile unei
reþele care trebuie prelucrate de robot) sau chiar programul care
trebuie executat de cátre robot. Operaþiile care sunt permise
asupra acestui tip de structuri sunt cele clasice:
creare de fißier CREATE;
deschiderea unui fißier OPEN;
ínchiderea fißierului CLOSE;
scrierea ín fißier RECORD;
ßtergerea fißierului DELETE.
Unele limbaje pot accepta numai anumite tipuri de fißiere (HELP
lucreazá numai cu fißiere text).
colecþii de date - aggregates - din punct de vedere al
diversitáþii de date se situeazá íntre RECORD ßi FILES, ín sensul
ín care aceste structuri pot íngloba atät date numerice, cät ßi
caractere, iar datele numerice pot corespunde unor deplasári,
momente, forþe, informaþii de la senzori. În concluzie agregatele
cupleazã o diversitate de tipuri de date.
Exemple:
f1: NEW <0.0,0.0,0.0,0.0,0.0,0.0,0.0>;
f2: NEW 7 OF 0.0;
nest1: NEW <’obiect’, <‘ element’ , 1>,1.5>;
nest2: NEW < ‘ element’ , 1>;
nest3: NEW <‘ element’ ,nest2,1.5>;
Accesul la componenetele acestor colecþii se face similar cu
accesul la componentele tablourilor
nest1(1) ‘obiect’
nest1(2) <‘element’,1>
Limbaje de Programare a Robotilor Industriali
60
nest1(3) 1.5
nest1(2,1) ‘element’
nest1(2,2) 1
Toate aceste structuri de date prezintá, din punctul de vedere
al alocárii memoriei, un dezavantaj major: necesitá o prealocare a
memoriei necesare stocárii datelor. Astfel dupá ce informaþia a
fost folositá, zona sa de memorie rámäne ín continuare o zoná
restrictivá ín ceea ce priveßte utilizarea sa de cátre alte date.
Acest dezavantaj poate fi eliminat prin folosirea unor variabile
dinamice, care ocupá numai strict memoria de care au nevoie,
íncepänd cu adresa disponibilá íntr-un anumit moment al compilárii
ßi execuþiei programului, urmänd ca odatá ce variabila nu mai este
folositá ßi este deci distrusá sá elibereze memoria ocupatá.
Aceste variabile dinamice poartá numele de pointeri.
Declararea unui pointer se face prin ataßarea unui caracter
suplimentar la tipul care defineßte variabila. Astfel pentru cazul
limbajelor PASRO ßi PASCAL acest caracter este ^, iar pentru
SRL este @. Pentru ínþelegerea exactá a acestor structuri de
date, extrem de utile ín cazul realizárii unui program flexibil, rapid
ßi economic se va prezenta ßi explicita un exemplu de program ín
PASRO.
Limbaje de Programare a Robotilor Industriali
61
1. TYPE 37. begin2. boxpointer=^boxtype; 38. new (affixelem); 3. framepointer=^frametype; 39. affixelem^.next:=nil; 4. affixpointer=^affixelement; 40. affixelem^.affixedbox:=kx; 5. transpointer=^transformationt
ype; 41. write(kx^.num);
6. vectortype=array[1..3] of real;
42. writeln(ky^.num);
7. rotationtype = record 43. if ky^.affixrel=nil then ky^.affixrel:=affixelem
8. axis:vectortype; 44. else 9. andle: real; 45. begin10. end; 46. affixaux:=ky^.affixrel; 11. transformationtype =
record 47. while affixaux^.next <> nil do
12. orient:rotationtype; 48. affixaux:=affixaux^.next; 13. pos:vectortype; 49. affixaux^.next:=affixelem; 14. end; 50. end 15. frametype=transformationtyp
e; 51. end;
16. affixelement = record 52. var 17. affixedbox:boxpointer; 53. boxes:boxpointer; 18. transrelation:transpointer
; 54. boxnumber,i:integer;
19. next:affixpointer; 55. k:boxpointer; 20. end; 56. begin21. boxtype = record 57. read(boxnumber); 22. num:integer; 58. new(boxes); 23. coordsystem:frametype; 59. boxes^.num:=1; 24. xlength, 60. boxes^.next:=nil; 25. ylength, 61. for i:=2 to boxnumber do 26. zlength:real; 62. begin27. gripposition:frametype; 63. new(k); 28. full:boolean; 64. .next:=boxes; 29. next:boxpointer; 65. .num:=i; 30. affixrel:affixpointer 66. .affixrel:=nil; 31. end; 67. boxes:=k; 32. procedure
affix(kx,ky:boxpointer); 68. end;
33. {Generarea relatiilor intre kx si ky}
69. k:=boxes^.next^.next;
34. var 70. affix(k^.next,k); 35. affixelem:affixpointer; 71. affix(boxes^.next,k); 36. affixaux:affixpointer; 72. affix(k,k^.next);
73. affix(boxes^.next,k^.next); 74. end.
Programul genereazá un set de elemente k1k4, care vor fi
memorate utilizänd variabile de tip pointer.Ín cadrul pointerului
Limbaje de Programare a Robotilor Industriali
62
ataßat Figure 16 se observá cá se vor introduce informaþii
privitoare la:
- orientarea ßi poziţia sistemului de referinþá -
coordsystem:frametype;
- dimensiunile elementului: x length, y length, z length;
- orientarea gripperului pentru ca elementul sá fie másurat-
gripposition:frametype;
- conþinutul elementului (dacá este plin sau nu)-full;
- conexinea logicá cu alte elemente next;
- conexiunea fizicá cu alte elemente-affixrel.
Se observá cá dacá primele elemente sunt cunoscute ca
dimensiune, ultimul element poate evolua íntr-un mod care nu
poate fi precizat anterior ínceputului mißcárii, motiv pentru care se
preferá ßi aici folosirea unui pointer. Pe de altá parte deoarece
toate elementele vor fi de tip pointer ßi penultima datá va fi de tip
pointer (next).
Figure 16
Limbaje de Programare a Robotilor Industriali
63
Ín cadrul programului principal se introduc elementele care vor fi
manevrate, introducerea fácändu-se sub forma algoritmului de tip
listá LIFO. Relaþia care se stabileßte íntre elementele ín cadrul
acestei párþi de program este lipsitá de semnificaþie poziþionalá
Ín partea a doua a programului se introduc relaþiile poziþionale
dintre elemente. Fie o relaþie poziþionalá exprimatá grafic ín
Figure 18.
Din prima parte a programului se reaminteßte cá ultimul introdus
este elementul 4, fapt care face ca k:=boxes^.next^.next=2.
Instrucþiune affix (k^.next, k) este un apel al procedurii affix
(kky).
Figure 17
Figure 18
4ref 3 2
Limbaje de Programare a Robotilor Industriali
64
Aceastá procedurá utilizeazá un pointer nou element pentru
manipularea primului element din argument, kx (sau 1 din primul
apel) ßi apoi este cercetat cel de-l doilea pointer ky (sau 2). Dacá ky
nu are nici o relaþie cu alt element, atunci se introduce la pointerul
relaþie pointerul elementului kx. Ín caz contrar se transferá
pointerul relaþie din cadrul pointerului ky íntr-un pointer auxiliar
urmänd ca apoi transferul sá se facá päná ín clipa ín care se
gáseßte ultima locaþie din cadrul pointerului ky (ín cazul nostru
íncárcaþi ín affixaux ßi affixaux^.next) liberá (nil) moment ín care
se introduce ín locaþia relaþiei elementul kx (1).
Limbaje de Programare a Robotilor Industriali
65
Forma finală datorată acestor instrucţiuni de cuplare a elementelor este
prezentată în figura următoare:
Ín cazul limbajului AL, programul este mai simplu existänd
instrucþiunea AFFIX cu variantele RIGIDLY (conectare rigidá,
fermá) respectiv NONRIGIDLY (aßezare relativá de elemente).
Ín prezentarea datelor ßi structurilor de date nu s-a alocat un
spaþiu separat constantelor ßi operaþiilor de atribuire, acestea
fácändu-se ín modul caracteristic limbajelor de programare uzuale.
Figure 19
Limbaje de Programare a Robotilor Industriali
66
C. Moduri de manipulare a datelor Manipularea datelor se face ín cadrul utilizárii acestora ca
operatori.
Cum capitolul destinat instrucþiunilor de mißcare va detalia
operaþiile permise ín cadrul LPRI, ne vom márgini numai sá
enumerám ßi sá prezentám sintetic principalele operaþii ce se pot
realiza cu datele prezentate.
1. Operaţii logice Operatorul SRL si
PASRO AL AML HELP
Funcţia Şi b AND b s AND s i AND i expr AND expr Funcţia SAU
b OR b s OR s i OR i expr OR expr
Funcţia NU NOT b NOT s NOT i NOT expr Funcţia SAU exclusiv
b <> b s XOR s i XOR i
Echivalenţă b=b s EQV s b - data BOOLEANA; i, s - data reala sau intreaga, expr - expresie logica
2. Operaţii de comparare Operator SRL/PASRO AL AML VAL HELP ROBEX
mai mic x < x s < s x LT x i LT i s < s LT mai mare x > x s > s x GT x i GT i s > s GT egal x = x s = s x EQ x i EQ i s = s EQ mai mic sau egal x <= x s <= s x LE x i LE i LE mai mare sau egal x >= x s >= s x GE x i GE i GE diferit x <> x s <> s x NE x i NE i NE
i - data de tip întreg, s - scalar, x - întreg sau real
Limbaje de Programare a Robotilor Industriali
67
3. Operaţii aritmetice Mod de reprezentare în:
Operaţie SRL şi PASRO
AL AML VAL VAL II HELP SIGLA
Adunare i+I r+r i+r r+I
s+s i+i r+r i+r r+i
i+i s+s s+s IC/i,i
Scădere i-I r-r i-r r-I
s-s i-i r-r i-r r-i
i-i s-s s-s IC/i,-i
Înmulţire i*I r*r i*r r*I
s*s i*i r*r i*r r*i
i*i s*s s*s abs.
Împărţire i/I r/r i/r r/I
s/s i/i r/r i/r r/i
i/i s/s s/s abs.
Împărţire a întregilor
i DIV I s DIV s r DIV r i IDIV i
i/i abs. abs. abs.
Modulo i MOD i s MOD s abs. i%i s MOD s abs. abs. Ridicare la putere abs. S^s abs. abs. abs. abs. abs. Modul ABS(i)
ABS(r) |s| abs. abs. abs. abs. abs.
Inversare semn -I -r
-s -i -r
-i abs. -s NE/-i
Obs. i-întreg, r - real, s-scalar, abs - nu se poate realiza respectiva operaţie
4. Operaţii geometrice Reprezentarea operaţiei Semnificaţia operaţiei
SRL PASRO AL s:=VLENGTH(v) VABS(s,v) s <- |v| lungimea vectorului v s:=r.angle s:=r.angle s <- |r| unghi de rotatie s:=v1 DOT v2 VDOT(s,v1,v2) s <- v1.v2 produs scalar v:=s*v VMUL(v,v,s) v <- s*v inmultire cu scalar v:=v/s VDIV(v,v,s) v <- v/s impartire cu scalar v:=v1+v2 VADD(v,v1,v2) v <- v1+v2 adunare de vectori v:=v1-v2 VSUB(v,v1,v2) v <- v1-v2 scadere de vectori v:=v1*v2 VCROSS(v,v1,v2) v <- v1*v2 produs vectorial v:=r*v VROT(v,r,v) v <- r*v rotatia unui vector v <- t*v ( t-matrice de
translatie) Transformari
de v <- f*v (f matricea coordonate
Limbaje de Programare a Robotilor Industriali
68
unei transformari complexe)
v:=ROTAXIS(r) ROTAXIS(v,r) v <- AXIS(r) rotatia lui v, in jurul vectorului vr, cu unghiul
r:=r1*r2 ROTROT(r,r2,r1) r <- r1,r2 compunerea a doua rotatii
f=f+v FRAMETRANSL (f,f,v)
f <- f+v translatia unui sistem f cu un vector v
f:=f-v f <- f-v f:=r*f FRAMEROT(f,f,r) rotatia unui sistem f f:=f*f TRANSFRAME
(f,f1,f2) f <- f*f compunerea a doua
transformari t:=f1 FREL f2 FRAMEREL(t,f1,f2) t <- f1 -> f2 Transformarea care
asigura trecerea de la sistemul f1 la f2
fi:=FINV(f) FRAMEINV(fi,f) fi <- INV(f) Transformarea inversa a lui f
s - scalar; v -vector(x,y,z); r - (vr,)=rotatie in jurul vectorului vr, cu unghiul ;
5. Funcţii standard Funcþia PASRO SRL AL AML HELP ROBEX
sinus SIN cosinus COStangentã TAN abs. abs.
arctangentã ARCTAN ATAN2 ATAN ARCTG
ATAN
arcsinus abs. ASIN abs. abs. arccosinus abs. ACOS abs. abs.
conversie REAL la INTREG cu :
trunchiere rotunjire
TRUNCH ROUND
TRUNCH ROUND
INT
abs.
abs.
abs.
exponent EXP abs. abs. EXP logaritm natural LN LOG abs. abs. NLOG
logaritm abs. abs. abs. abs. abs. LOG radical SQRT
ridicare la pãtrat SQR abs. abs. abs. abs. abs. modul ABS abs. abs. ABS
Introducerea de date:
scalare booleene
vector rotaþii sistem
vread rread fread
INPUT INPUT INPUT INPUT INPUT
INSCALARQUERY
abs.
ASK ASKN
abs.
Limbaje de Programare a Robotilor Industriali
69
Se observá cá datele sunt folosite ca operanzi ín cadrul acestor
operaþii.
6. Expresii complexe cu anumite priorităţi:
Prioritate SRL/PASRO AL AML HELP 1. Prioritate
maximă function
call,(),NOT function
call,||,NOT = function
call,(),NOT 2. *,.,/,DIV,MOD,
AND WRT, ->, ^ NOT *,/,AND
3. +,-,OR *,/,.,DIV,MOD,MIN,MAX
*,/,IDIV +,-,OR
4. =,<,>,<=,=>,<> +,- +,- =, <, > 5. =,<,>,<=,=>,<
>ROTL
6. AND EQ, NE, LT, LE, GT,GE
7. OR,XOR AND 8. EQV OR,XOR 9. OF 10. IS
1. Prioritate minimă
=
Ca nißte particularitáþi pentru datele vehiculate ín cadrul unui
limbaj de programare a roboþilor se pot evidenþia anumite tipuri de
date:
- intrári ßi date de intrare din partea operatorului: controlul robotului
realizändu-se ín funcþie de anumite condiþii tehnologice, ín
funcþie de un mediu de lucru unitatea de control preia fie din
proces, prin intermediul unor canale de intrare, fie de la tastatura
de comandá a utilizatorului, date care pot sau sunt folosite ín
cadrul programului.
num <- 0; WHILE QUERY (num, “Obiect prelucrat, a se continua? “) DO BEGIN PRINT (“ Introduceti dimensiunile obiectului: “ ); height <- INSCALAR *cm; num <- num+1;
Limbaje de Programare a Robotilor Industriali
70
END; - tot ca o particularitate pentru LPRI sunt instrucþiunile prin care
se poate citi poziþia ßi orientarea curentá a robotului, elemente
care pot fi folosite pentru ocolirea unor obstacole sau pentru
generarea unor comenzi sau mesaje de avertisment.
SRL. current_position:=robotframe(puma).transl; IF robotframe(puma).transl.z > 50 THEN WRITELN (“ Brat prea sus “)
AL: current_position <- POS(ARM);HELP: COORD(1);
framef (1) := AX(1); framef (2) := AY(1); framef (3) := AZ(1); framef (4) := AR(1); framef (5) := AP(1); framef (6) := AYW(1);
se citeşte pozişia curentă, urmând ca elementele curente AX,AY,AZ,AR,AP, AYW să fie memorate într-o matrice framef
- generarea unor mesaje text sau/ßi numere prin intermediul
programului cátre operator ín vederea monitorizárii sau chiar
controlului evoluþiei robotului.
Exemple:
SRL: OUTPUT (<canal>,<lista de parametri>); WRITELN(<lista de parametri>);
PASRO:
WRITE(<lista de parametri>);
AL: PRINT(<lista de parametri>) PROMT(<lista de parametri>)
AML: WRITE(<canal intrare/iesire>,<lista de parametri>); DISPLAY(<lista de parametri>); PRINT(<lista de parametri>);
VAL: TYPE(<text>) TYPEI(<intreg>) PAUSE(<text>)
HELP: PRINT(<lista de parametri>) SIGLA: NL/<text>,<numarator>
Limbaje de Programare a Robotilor Industriali
71
V. Instrucţiuni
Aceste elemente fac parte din semantica unui limbaj, ele utilizând sintaxa
declarată prin intermediul datelor, structurilor de date, cuvintelor rezervate.
Instrucţiunile în cadrul unui program-robot şi nu numai, sunt executate în
ordinea scrierii lor, excepţie făcând cazurile în care apar instrucţiunile de salt.
Încercând o sintetizare a instrucţiunilor, element care se poate dovedi
extrem de util pentru o prezentare generală, cum este cazul prezentei lucrări, se
pot defini următoarele tipuri de instrucţiuni:
1. Instrucţiuni de descriere a mediului de operare
2. Instrucţiuni de generare a mişcării
3. Instrucţiuni de comandă şi control a elementului terminal
4. Instrucţiuni specifice sistemului senzorial
5. Instrucţiuni de delimitare a blocurilor structurale ale programului
6. Instrucţiuni de oprire a mişcării robotului sau a elementului
terminal
7. Instrucţiuni de control ale programului
8. Instrucţiuni de control a stării robotului şi a sistemului de
microcontacte asociat controlului
9. Instrucţiuni de tratarea a situaţiilor excepţionale
În continuare vor fi explicate la nivel general aceste tipuri de instrucţiuni,
alături de prezentarea unor exemple elocvente în vederea înţelegerii acţiunii
respectivelor tipuri de instrucţiuni.
A. Instrucţiuni de descriere a mediului de operare Instrucţiunile de descriere a mediului de operare sunt destinate în special
programării off-line, când se urmăreşte descrierea spaţiului în care operează
robotul în vederea utilizării facilităţilor de mişcare optimală a robotului,
Limbaje de Programare a Robotilor Industriali
72
respectiv resurselor soft referitoare la inteligenţa artificială, pentru structurile de
roboţi avansate.
O modalitate de descriere este utilizarea unei structuri de tip data, în care
se specifică numele obiectului sub care robotul îl va recunoaşte, respectiv
atributele acestuia:
obiect: declararea numelui şi atributelor acestuia (numele atributelor);
atribut: numele atributului şi valoarea acestuia.
Observaţie. Prin atribut vom înţelege anumite proprietăţi definitorii ale
obiectului, cum ar fi: lungimea, lăţimea, înălţimea, culoarea, greutatea, etc.
Exemplu:
EXISTENCE (part 1):
cere informaţia legată de existenţa obiectului part1; rezultatul poate fi False sau True.
SRL: greutate_obiect1:= ATTRIBUTE weight OF obiect1:
variabila greutate_obiect1 ia valoarea atributului anterior declarat weight al obiectului obiect1
ATTRIBUTE length OF element1:= 5.3; lungimea obiectului element1 este 5.3
Un alt exemplu elocvent este prezentat în continuare. Acesta este specific
limbajelor care au la bază limbajul PASCAL. Deoarece anumite elemente au
fost prezentate anterior, în acest exemplu, vor fi explicitate numai instrucţiunile
de descriere spaţială a elementelor spaţiului de lucru, instrucţiuni de tipul affix –
realizează o legătură prin intermediul unor pointeri, la nivel soft, în vederea
modelării lumii reale. Acesta constă într-un cuplaj între două elemente, mişcare-
element, particularităţi de tip constructiv (găuri, structuri interioare, etc.) şi
element. Instrucţiuni unfix realizează de această dată decuplarea a două
elemente.
Program pointerexemplu; 1. TYPE 48. PROCEDURE affix
(VAR atframe :framepointer; targetframe:framepointer; VAR affixtrans:trans)
2. vector = RECORD 49. BEGIN 3. x, y, z : REAL 50. WITH atframe^ DO 4. END 51. BEGIN 5. rotmatrix = RECORD 52. affixedon:=TRUE;
Limbaje de Programare a Robotilor Industriali
73
6. t,o,a : vector 53. affixframe:=targetframe; 7. END 54. affixrel.translation.x:=
pos.x-targetframe^.pos.x; 8. = RECORD 55. affixtrans.translation.x:=
affixrel.translation.x; 9. axis : vector; 56. affixrel.translation.y:=
pos.y-targetframe^.pos.y; 10. angle : REAL; 57. affixtrans.translation.y:=
affixrel.translation.y; 11. matrix: rotmatrix 58. affixrel.translation.z:=
pos.z-targetframe^.pos.z; 12. END 59. affixtrans.translation.z:=
affixrel.translation.z; 13. trans = RECORD 60. affixrel.rot:=nil; aceasta pentru a 14. translation : vector; 61. affixtrans.rot:=nil;simplifica
procedura 15. rot : rotation 62. END; 16. END 63. END; (sfirsit procedura) 17. framepointer
= ^frame 64. PROCEDURE unfix (
VAR atframe :framepointer; targetframe :framepointer);
18. frame =
RECORD 65. BEGIN
19. next: framepointer; 66. atframe^.affixedon:=FALSE; 20. orient:rotation; 67. atframe^affixframe:=NIL; 21. pos:vector; 68. END (procedura) 22. approach, 69. BEGIN (program principal) 23. departure:framepointer; 70. WITH nilvector^ DO 24. affixedon:BOOLEAN; 71. BEGIN 25. affixframe:framepointer
; 72. x:=0;
26. affixrel:trans 73. y:=0; 27. END; 74. z:=0; 28. VAR 75. END; 29. nilvector :vector; 76. nilrot.axis:=nilvector; 30. nilrot :rotation; 77. nilrot.angle:=0;31. affixvariable,
dummytrans :trans; 78.
32. box,hole,grip,appros
:framepointer; 79. newframe(cutie,80,60,24);
33. PROCEDURE newframe(VAR framevar:framepointer;xf,yf,zf:REAL);
80. newframe(orificiu,70,60,34);
34. BEGIN (se construieste o noua referinta)
81. newframe(mina,70,50,44);
35. NEW(framevar) 82. newframe(apropos,70,50,50); 36. WITH framevar^ DO 83. 37. BEGIN 8 affix(orificiu,cutie,dummytrans
);) 38. next :=NIL; 85. affix(mina,cutie,affixvariable); 39. orient :=nilrot; 86. affix(apros,mina,dummytrans);
Limbaje de Programare a Robotilor Industriali
74
40. pos.x:=xf; 87. 41. pos.y:=yf; 88. unfix(mina,cutie) 42. pos.z:=zf; 89. 43. approach:=NIL; 90. 44. departure:=NIL; 91. END (program principal). 45. affixedon:=FALSE; 92. 46. END; 93. 47. END (procedura) 94.
Figure 20
Limbaje de Programare a Robotilor Industriali
75
Se observă că procedura affix cu atributele atframe, targetframe, affixtrans
realizează o actualizare a parametrilor atframe: x, y, z şi posibil x, y, z (prin
instrucţiunile
affixrel.translation.x(y,z):= pos x – target.frame^. pos.x(y,z)
affixtrans.translation.x(y,z):= affixrel.translation x(y,z) )
Pentru ca transformarea relativă să se facă nu numai prin translaţii, dar şi
prin rotaţii, în cadrul procedurii affix, instrucţiunile affixrel.rot şi affixtrans.rot
trebuie să expliciteze transformarea corespunzător. (În cadrul exemplului acestea
nu au fost considerate, fiind egale nil).
De remarcat că affixtrans este folosit şi ca parametru de ieşire, accesibil
programului principal (prin apelul procedurii, parametrii affixtrans pot fi
atribuiţi unor variabile).
Limbajul AL utilizând date de tipul FRAME, VECTOR, ROT, TRANS
permite o exprimare mai uşoară, rezultând programe mai compacte pentru
această descriere.
Exemplu:
AFFIX hole TO box
AFFIX gripp TO box BY affixtrans
AFFIX appros TO gripp AT TRANS (NILROT, VECTOR (0,0,6) * CM);
UNFIX gripp FROM box
unde
box FRAME (NILROT, VECTOR (55,30,22) * CM);
hole FRAME (NILROT, VECTOR (45,30,28) * CM);
gripp FRAME (NILROT, VECTOR (45,50,34) * CM).
O altă particularitate a limbajului AL este atributul RIGIDLY care face ca
elementele din cadrul instrucţiunii AFFIX care îl conţine să fie privite ca un
singur bloc, transformările ulterioare fiind transferate ambelor elemente: AFFIX
box TO ARM RIGIDLY.
Coordonata X a lui atframe
Limbaje de Programare a Robotilor Industriali
76
B. Instrucţiuni de mişcare Robotul,în general este destinat executării unor activităţi care presupun
mişcarea. Din acest motiv, instrucţiunile de mişcare pot fi considerate ca fiind
tipul de instrucţiuni cu cea mai mare importanţă.
Chiar dacă la prima vedere o nouă diviziune instrucţiunilor poate părea
excesivă, din considerente pur didactice, le putem clasifica în:
- instrucţiuni de mişcare implicite
- instrucţiuni de mişcare explicite.
1. Instrucţiunile de mişcare implicite. Dacă din punctul de vedere al operatorului sunt preferabile (relativ la
efortul de introducere) ele solicită o descriere detaliată a spaţiului de lucru, în
paralel cu posibilitatea relativ redusă de evitare a unor posibile coliziuni. Din
acest motiv, numai limbajul ROBEX dispune de acest tip de instrucţiuni de
mişcare implicită, în paralel însă cu existenţa unui set de instrucţiuni de mişcare
explicită.
Sintaxa unei instrucţiuni de mişcare implicită este:
MOVE Elementul 1 , AGAINST
COPLANAR
/Numele
suprafeteielementului 1
,
Numelesuprafetei
elementului 2,Elementul 2, Parametri
aditionali,
Figure 21
Limbaje de Programare a Robotilor Industriali
77
Exemplu:
ROBEX: MOVE / cutie1, underside, AGAINST, cutie2, top, EVENT, 2, ELSE, mesaj
Se dă comanda de a muta cutie1 cu faţa de jos (underside) deasupra (top) cutie2, mişcarea care are loc atâta timp cât canalul este în 1 logic. În cazul în care canalul este 0 logic, se afişează un mesaj în paralel cu oprirea mişcării.
2. Instrucţiunile de mişcare explicite. Sunt, comparativ cu instrucţiunile de mişcare implicite, mai bogate în
informaţii. Acestea pot conţine pe lângă declaraţia explicită a punctului în care
se doreşte poziţionarea şi parametrii ai mişcării. Câteva exemple de parametri
auxiliari sunt: ce motor va fi activat, viteza de deplasare, acceleraţia /
deceleraţia, precizia mişcării, durata mişcării, forma mişcării, condiţionarea
mişcării de informaţiile furnizate de anumiţi senzori. Gama acestui tip de
instrucţiuni fiind extrem de bogată, în continuare vor fi prezentate câteva
exemple edificatoare în vederea înţelegerii sintaxei şi semanticii acestor
instrucţiuni.
Una dintre cele mai importante poziţii ale robotului este poziţia iniţială, de
sincronizare sau home position . Marea majoritate a limbajelor alocă pentru
mişcarea robotului din poziţia curentă în poziţia iniţială o instrucţiune dedicată.
Exemplu:
SRL PASRO AL VAL ROBEX FIRSTPOS robot, Nullpos; PARK
ARMi READY Declară oriunde poziţia
iniţială: SAFPOS/50,0,30 şi o utilizează apoi în cadrul unei instrucţiuni de mişcare obişnuită: GOTO / SAFPOS
Instrucţiunile de mişcare explicite se pot desfăşura cu aportul
informaţional al unor senzori auxiliari de tip traductoare de forţă, de moment,
sistem de vedere artificială, fie fără acest tip de control auxiliar.
Limbaje de Programare a Robotilor Industriali
78
Cele mai generale instrucţiuni de mişcare explicită pot fi exprimate
formal:
< MNEMONIC MISCARE>, <PUNCT TINTA (TARGET POINT)>
Variantele acestui tip de mişcare sunt prezentate şi explicitate în
următoarele exemple:
SIGLA: MO/1,1317,3,M3,P1, 180 se comandă mişcarea motorului 1 cu 1317 paşi, a motorului 3, cu o valoare înscrisă în registrul M3, a motorului denumit P1 cu 180 de paşi sau în poziţia 180.
SRL: DRIVE AXIS (2) OF arm3 TO 100 PASRO: drive (2,110) Miscari asolute comandate
unui singur dispozitiv de acţionare
AL: DRIVE JOINT(4) OR ARM1 TO 210
ROBEX: DRIVE / 3,135 SRL: DRIVE AXIS(2) OF arm1 BY 10 PASRO: drive(2, robotjoints[2]+20 Miscări relative comandate
unuiAL: DRIVE JOINT(4) OF ARM1 BY 20 singur motor ROBEX: DRIDLT / 2, 10 VAL: DRIVE 2, 20,
100
– limbajul VAL realizeaza numai mişcări relative ( motor 2 cu 20 de pasi), însoţite de valoarea vitezei (100) cu care se desfăşoară mişcarea.
În afară de aceste mişcări prin care se realizează comanda, fie în
coordonate absolute, fie relative a unui singur motor sunt mişcările care conduc
robotul prin comanda tuturor sau mai multor motoare în vederea poziţionării
robotului într-un punct al spaţiului de lucru sau în vederea descrierii unui anumit
tip de traiectorie.
Astfel de instrucţiuni care comandă mişcarea robotului într-un anumit
punct al spaţiului de operare pot fi exemplificate prin:
VAL: POINT #P1 0 110 30 0 60 0X Y Z roll pitch yaw, , , , ,
MOVE #P1 SRL: SMOVE robot TO FRAMEC (VECTORC(95,20,40),
ROTC(zaxis,90)
Limbaje de Programare a Robotilor Industriali
79
PASRO: sttframe(goal, 95, 20, 40, yaxis, 90); smove(goal)
AL: MOVE ARM TO FRAME(ROT(HAT,90*DEG),VECTOR(95,20,40)* CM)
AML: MOVE(<JX,JY,JZ,JP>,<95,20,40,90>)
HELP: MOVE(1,#1,950,#2,200,#3,400,#5,90); - acest limbaj nu poate comanda implicit motoarele, fiind necesară o comandă explicită a fiecărui motor
ROBEX: GOTO / 95,20,40,ZXROT,90 sau P1 = POINT / 95,20,40 ............................................
GOTO / P1
De asemenea se pot specifica şi mişcări relative cu operand implicit: SRL: SMOVE robot TO ROBOTFRAME(robot) +
VECTORC(20,0,10);
PASRO: makevector (relvector, 10,5,5); frametransl (goal, robotframe, relvector); smove(goal);
se defineşte relvector
frame-ul goal = robotframe curent + relvector
mişcare în frame-ul goal
AL: MOVE ARM1 TO @ + VECTOR(20,10,0)*CM AML: DMOVE(<jx, jy, jz>, 20,10,0>)VAL: DRAW 20, ,10 HELP: MOVE(1,#1,X+200,2,Y,#3,Z+100);ROBEX: GODLTA / 20,0,10,0,0
Pe lângă aceste specificaţii de mişcare, fiecărei mişcări a robotului i se pot
adăuga anumite atribute ale mişcare:
- adăugarea parametrului viteză se realizează fie prin exprimare globală,
sau parţială, utilizând cuvinte cheie alături de procentele pe care le reprezintă din
viteza maximă, fie relativ la viteza medie:
SRL: SMOVE robot TO targetframe WITH VELOCITY = 20; SPEEDFACTOR := 50
PASRO: SPEEDFACTOR := 5AL: MOVE ARM TO targetframe WITH SPEED FACTOR =3 AML: SPEED (0.8) VAL: SPEED 200 - de 3 ori viteza normală HELP: SPEED(1,80)
MOVE(1,#1,30,#3,10,#11,80)- braţul 1 se mişcă cu 80% din viteza maximă
ROBEX: RAPID
Limbaje de Programare a Robotilor Industriali
80
FEDRAT / 80 Alţi parametri care pot fi specificaţi sunt:
acceleraţia şi deceleraţia numai în AML prin:
ACCEL (0.5) mişcarea se face cu jumătate din acceleraţia maximă
durata mişcării numai în AL:
MOVE ARM TO targetframe WITH DURATION = 5 * SEC
o anumită configuraţie cinematică pentru structuri redundante (structura
PUMA)
SMOVE robot TO goalframe WITH
Argumentele care urmează după WITH pot fi:
POSTURE(1) RIGHTY – configuraţie corespunzând braţului uman drept
LEFTY – configuraţie corespunzând braţului uman stâng
ABOVE – “cotul” structurii PUMA este în poziţia superioară
BELOW – “cotul” structurii PUMA este în poziţia inferioară
3. Precizia poziţionării. Robotul îşi poate înceta mişcarea atunci când a ajuns în punctul a cărui
coordonate au fost indicate de către argumentul instrucţiunii sau în preajma
punctului, într-o anumită vecinătate.
AL: MOVE ARM TO targetframe WITH NULLING SRL: SMOVE robot TO
goalframe WITH NULLING- mişcare cu precizie
AML: SETTLE(OFF) MOVE(ARM, targetframe)
- după încetarea mişcării curente controlul este transferat operatorului
COARSE se fixează o toleranţă ridicată la nivelul servocontrollerelor
FINE se cere o toleranţă redusă
NONULL mişcarea se termină fără a fi nevoie de a primi confirmarea terminării mişcării fiecărei axe
VAL: NULL mişcarea se termină numai în clipa recepţiei semnalului de terminare a mişcării fiecărei axe
INTOFF corecţia erorii în timpul integrării traiectoriei de control este dezactivată
Limbaje de Programare a Robotilor Industriali
81
VAL: INTON corecţia erorii în timpul integrării traiectoriei de control este activată
4. Tipul controlului mişcării. Robotul în timpul mişcării se deplasează fie punct cu punct, în anumite
poziţii instruite sau ale căror coordonate sunt deja introduse, fie după o anumită
traiectorie: circulară, eliptică sau linie dreaptă. Unele dintre aceste funcţii pot fi
implementate hard prin controllerul dispozitivelor de acţionare, dar la marea
majoritate a roboţilor există posibilitatea stabilirii modului de deplasare prin
program, alături de posibilitatea precizării unor puncte intermediare în cadrul
traiectoriei.
Exemple:
SRL: PTPMOVE puma TO goalframe mişcare punct cu punct până în goalframe, mai precis toate articulaţiile sunt mişcate până în poziţia finală cu viteză maximă şi fără sincronizare
SYNMOVE puma TO goalframe WITH DURATION = 5
mişcare cu interpolare lineară, toate motoarele pornind în acelaşi timp şi oprindu-se în acelaşi punct
SMOVE robot TO goalframe WITH V=25 WITH ACC = 20 WITH CONSTORIENT
mişcarea se realizează cu o viteză programată cu o acceleraţie programată, menţinând permanent orientarea gripper-ului const.
CIRCLE robot CP = centerframe DEG = -45
robotul va descrie o mişcare circulară, unde centrul cercului este în punctul centerframe. Mişcare se va pe 360 / 45 = 1 / 8 din cerc în sens antiorar.
LANEMOVE rip TO goalframe WITH VIAFRAMES(savepos1, savepos2)
robotul rip se mişcă până în goalframe prin poziţiile intermed. savepos1, savepos2.
Exemple: PASRO: pmove (goalframe) -mişcare punct cu punct
jmove (goalframe) -ca şi SYNMOVE
smove (goalframe) -similar SMOVE
VAL: MOVE targetframe -interpolare la nivel de articulaţie
MOVES targetframe -interpolare lineară
Limbaje de Programare a Robotilor Industriali
82
Un caz particular de instrucţiune de mişcare este cel în care argumentele
pot specifica şi controlul end-effectorului. Astfel se poate specifica şi comanda
deschiderea respectiv închiderea gripper-ului în timpul mişcării sau eventual de
plasare cu comanda gripper-ului:
Limbaje de Programare a Robotilor Industriali
83
Exemple:
AL: COBEGIN MOVE ARM TO targetframe; OPEN HAND TO 1*cm COEND
VAL: MOVET targetframe, 10 – mişcarea se face cu închiderea gripper-ului la 10mm
MOVEST targetframe, 10 – mişcare cu interpolare liniară în paralel cu închiderea gripper-ului la 10mm.
O altă situaţie interesantă este cea prin care se urmăreşte evitarea
coliziunii motiv pentru care se introduc puncte de trecere intermediare. Mai
precis mişcarea nu are loc trecând exact prin sistemele intermediare, doar prin
apropierea lor, motiv pentru care se impune alegerea adecvată a acestor puncte.
Exemple:
SRL:
SMOVE robo TO targetframe WITH SMOOTHFAC=0,5 WITH VIAFRAMES
(interframe1, interframe2);
-mişcarea se ralizează după o traiectorie care va trece prin cele 2 puncte intermediare
VIAMOVE WITH SMOVE puma TO interframe
-mişcarea se realizează până în interframe, urmănd ca în acest punct , robotul puma să aştepte comnda de mişcare următoare. În caz contrar va fi generat un mesaj de eroare
MOVEDEF complex_handling; Begin_MOVEDEF PTPMOVE TO above_pas SMOVE TO bow_beg WITH
CONSTORIENT; CIRCLEMOVE
CP=bow_center DEG=90 ITH V=150;
-mişcarea este definită sub forma unei proceduri, cuărinzând mişcare punct cu punct, mişcare liniară şi circulară cu o viteză programată. Se observă structura de bloc a procedurii. Apelul acestei proceduri se face prin instrucţiunea standard MOVEDO şi numele procedurii de mişcare, fară ca să fie necesară efectuarea calculelor de mişcare ce au fost executate în timpul declanşării procedurii
Limbaje de Programare a Robotilor Industriali
84
END_MOVEDEF; MOVEDO complex_handling ;
AL: MOVE ARM TO targetframe VIA inertframe1, interframe2;
- caracteristic acestei mişcări este faptul că în cazul în care poziţiile intermediare suunt apropiate, poate interveni o mişcare suplimentară nu întotdeauna controlabilă
VAL: ENABLE CP MOVES interframe1 MOVES interframe2 MOVES targetframe DISABLE CP
-mişcarea prin punctele intermediare este auxiliar controlată prin sistemul de microîntrrerupătoare (de întreruperi ON/OFF hard) CP
HELP: SMOVE(1,#1,xz1,#2,yz1,#3,zz1,#4,rz1,#5,pz1,#6,yawz1,#7,400); SMOVE(1,#1,xz2,#2,yz2,#3,zz1,#4,rz2,#5,pz2,#6,yawz2,#7,300); MOVE(1,#1,x,#2,y,#3,z,#4,r,#5,p,#6,yaw);
-limbajul HELP neavând declaraţii de puncte intermediare de tip implicit, realizează mişcarea liniară cu instrucţiunea SMOVE şi argumentele specifice deplasării fiecărui motor cu un increment declarat explicit.
Ca o observaţie generală, toate aceste limbaje acceptă în declararea
mişcării prin puncte intermediare şi argumente de tip viteză, respectiv durata etc.
Exemple:
SRL: SMOVE ir600 TO targetframe WITH V=50 WITH VIAFRAMES ( interframe) WITH V=15
-mişcarea începe cu V=50cm/s, iar după atingerea lui interframe continuă cu 15cm/s
Modul de apropiere sau depărtare poate fi deasemenea programat. Aceste
specificaţii pot controla prindereea sau desprinderea unui obiect într-un spaţiu cu
restricţii la nivel de ţintă.
Din toate limbajele prezentate până în acest moment, acest tip de
instrucţiuni sunt definite numai în SRL, AL şi VAL.
Limbaje de Programare a Robotilor Industriali
85
Exemple:
SRL: SMOVE rhino TO targetframe WITH APRO=20 WITH DEP=10 WITH SMOOTHFAC=8;
-primele argumente indică primele mişcări pe care le face robotul în traiectoria de atingere a poziţiei finale (targetframe): mişcare în sus cu 20cm (deasupra ţintei) urmată cu o mişcare cu 10cm deasupra ţintei. Argumentul 3 indică precizia dintre mişcări
AL: MOVE ARM TO targetframe WITH APPROACH=FRAME( rotation, vector)
-explicaţia este similară celei anterioare, cu deosebirea că aici modul de apropiere este mai complex specificat: prin poziţia şi orientarea asociată
Sigur că modul de apropiere se poate defini în AL şi numai prin vectori:
AL: MOVE ARM TO targetframe WITH APPROCH=VECTOR (25,9,0) WITH DEPARTURE=VECTOR (0,20,12)
VAL: APRO targetframe, 50 APROS targetframe, 40 MOVE targetframe
-mişcarea iniţială se face cu 50mm pe axa Z, urmată de o mişcare până la 40mm pe Z
Mişcări complexe pentru executarea unor operaţii de sudură continuă sau
operaţii de vopsire. Limbajele AL, SRL şi VAL oferă instrucţiuni implicite
Figure 22
Limbaje de Programare a Robotilor Industriali
86
pentru mişcări într-un plan sau spaţiu de tip zig-zag, fără ca acest lucru să nu
poată fi posibil şi pentru celelalte limbaje, însă cu observaţia că în cazul
celorlalte limbaje, mişcarea va trebui precizată explicit.
Exemple:
SRL: SYNMOVE robo TO targetframe WITH WOBBLE
-se comandă o mişcare sinusoidală implicită
AL: MOVE ARM TO targetframe WITH WOBBLE=2
-în acest caz amplitudinea sinusoidei poate fi programată
VAL: WAEVE 25,5,2 MOVES targetframe
-se indică o milcare triunghiulară cu amplitudine de 25mm, un ciclu de 5 sec şi un timp de contact de 2 sec în fiecare vârf al unui triunghi din ciclu.
5. Instrucţiunile de mişcare care integrează şi supravegherea senzorilor.
Acest tip de mişcare este extrem de interesant deoarece se poate afirma că
utilizarea acestor instrucţiuni “îmbracă” senzorial operaţiile efectuate de robot.
În aceste condiţii, instrucţiunile care cuprind şi referiri la semnalele preluate de
senzori pot fi:
a) Instrucţiuni de mişcare cu supraveghere a unor senzori
b) Instrucţiuni de mişcare la care argumentele mişcării sunt
furnizate de senzori.
În cele ce urmează vor fi detaliate ambele tipuri de instrucţiuni cu precizarea că
numai limbajelor evoluate dispun de astfel de instrucţiuni implicite.
c) Instrucţiunea de mişcare cu supraveghere a unor senzori
Se poate afirma că o astfel de mişcare este reprezentată din punct de vedere logic
prin plasarea iniţială a unui bloc de decizie, în funcţie de care are loc sau nu
mişcarea, sau are loc o mişcare sau alta, argumentului blocului de decizie fiind
respectarea unor valori de către sistemul senzorial.
Exemple:
Limbaje de Programare a Robotilor Industriali
87
SRL: WHEN SENSOR 2 force>=100 MONITORED EVERY 75 MS DURING SMOVE robot TO box WITH VELOCITY=0.5; END_DURING DO STOP robot;
- dacă forţa de-a lungul direcţiei Z este mai mare sau egală cu 100g în timpul deplasării de-a lungul unei drepte spre box robot se va opri. Această condiţie este verificată (monitorizată) la fiecare 75ms
SRL: DIRMOVE puma IN ZAXIS WITH V=20
UNTIL DISTANCE TO START>50 OR SENSOR switch=TRUE MONITORED EVERY 100MS
-se constată că decizia de oprire este una combinată între respectarea unei distanţe şi activarea unui switch, care este citit la fiecare 100msec din considerente legate de efortul de calcul
Limbajul AL permite verificarea forţei, respectiv momentului de manevră,
prin intermediul unui senzor montat pe gripper-ul robotului: Momentul poate fi
definit în două moduri: referitor la baza robotului (IN WORD) sau la sistemul
gripper-ului (IN HAND).
Exemple:
MOVE ARM TO targetframe ON FORCE(ZHAT)>=100*GM DO STOP 2
-dacă în timpul deplasării braţului ARM spre targetframe forţa de-a lungul axei Z este >=100g atunci robotul se va opri
Exemple:
MOVE ARM2 TO targetframe WITH FORCE_FRAME=gripperframe IN
HAND ON FORCE>= 200*GM ALONG ZHAT DO BEGIN STOP; PRINT ("Depaşire forţă ") tableARM2 flag T END;
-sistemul de referinţă pentru exprimarea forţei este cel legat de gripper (IN HAND) şi controlează astfel deplasarea spre targetframe cu forţa mai mică de 200g. Dacă forţa este mai mare sau egală cu 200g se va afişa mesajul DEPĂŞIRE FORŢĂ, indicatorul flag trece în TRUE, iar table este încărcat cu constanta ARM2
Exemple:
Limbaje de Programare a Robotilor Industriali
88
MOVE ARM3 TO targetframe ON FORCE <30*GM ALONG XHAT OF edge in WORLD DO ON FORCE >=500*GM ALONG YHAT DOPRINT ("Atenţie la forţa de-a lungul axei Y")2;
-braţul ARM3 este comndat să se mişte spre targetframe cu o forţă de 30g de-a lungul axei X exprimata în coordonate faţă de bază, iar dacă este mai mic, atunci se verifică dacă forţa de-a lungul axei este mai mare sau egală cu 500g când se afişează mesajul
Limbajul AML dispune de o instrucţiune specializată de monitorizare a
valorilor predefinite ale senzorilor, lucru care duce la o formă compactă şi uşor
de utilizat.
Exemple:
MONITOR(LED,2,0,0,1,5,'este corect'); MOVE (ARM,fgoal,LED)
-este monitorizat sistemul senzorial din gripper-ul robotului la fiecare 1,5sec. Dacă bariera luminoasă este întreruptă, în timpul deplasării spre fgoal, atunci robotul este oprit.
Dacă limbajul VAL nu dispune de instrucţiuni de mişcare cu monitorizarea
senzorilor ca şi ROBEX, limbajul HELP dispune de instrucţiuni dedicate de
supraveghere a forţe de-a lungul unei axe sau într-o articulaţie:
Limbaje de Programare a Robotilor Industriali
89
Exemple: SMOVE (1,#3,150); FORCE (1,#3,60);
-robotul este comandat pentru a se deplasa de-a lungul dreptei Z (adică axa 3) cu 150mm, cu o forţă mai mică de 60 (din gama 0 la 255). Dacă forţa este egală sau mai mare atunci robotul se opreşte.
Continuând cu studiul acestui tip de mişcare cu limbajul SIGLA se
reaminteşte că acest limbaj este unul rudimentar la care mnemonicele nu sunt
prea bogate în semnificaţie, iar manevrarea informaţiei se face la nivel de
registru.
Exemplu:
MT/3, M5, 1 - mnemonicul MT duce la încărcarea în registrul M5 a valorii senzorului 3
RP/2, 7, 120, 70, 3, -10, 4, 5 - instrucţiune de deplasare efectivă a 3 cu 70 de paşi. La fiecare 7 paşi senzorul 2 este monitorizat dacă depăşeşte valoarea de 120. Dacă da se execută instrucţiunea cu eticheta 5, în caz contrar instrucţiunea cu eticheta 4. –10 este un parametru de întârziere a deciziei, a cărei valoare este exprimată temporal.
C. Instrucţiuni de mişcare cu specificaţii tehnologice.
Astfel de mişcări trebuiesc generate în cazul în care robotul trebuie să
realizeze operaţii de vopsire, grunduire, sudare, gravare, etc., când deplasarea
trebuie făcută cu respectarea unor forţe da contact sau momente ale unor forţe
tehnologice. Astfel în funcţie de cerinţele forţei tehnologice mişcarea este
accelerată sau încetinită astfel încât forţa măsurată de senzorii tactili grupate pe
gripper să fie constantă. Limbajele SRL şi AL permit introducerea explicită în
instrucţiunile lor de mişcare a unor astfel de cerinţe:
Exemplu:
SRL: SMOVE rip TO left_side WITH FORCE IN XAXIS=500
- robotul rip se deplasează spre left_side cu o forţă de-a lungul direcţiei x de 500g
AL: MOVE pensulă TO left_side WITH FORCE (XHAT)=500*GM
- dipozitivul de vopsire ce este fixat în gripperul robotului este deplasat în left_side cu forţa de-a lungul lui x de 500g
Limbaje de Programare a Robotilor Industriali
90
MOVE burghiu TO below
WITH FORCE=700*GM
ALONG ZHAT OF drilltip IN
HAND
WITH FORCE=0*GM ALONG XHAT
WITH FORCE=0*GM ALONG YHAT
- găurirea se realizează cu o
forţă de 700g de-a lungul axei Z
în timp ce de-a lungul axelor X şi
Y în sistemul relativ la gripper
forţa va fi 0
D. Instrucţiuni de mişcare cu monitorizarea unor evenimente.
Mediul de lucru al unui robot conţine de obicei şi alte dispozitive cu care
această structură interacţionează în vederea realizării unui task. Astfel se poate
impune ca robotul să desfăşoare un anumit protocol în clipa în care soseşte o
piesă pe o bandă transportoare sau este adusă o piesă de un transportor sau pot
apare alte evenimente asincrone care influenţează în mod direct evoluţia
programului. Dacă marea majoritate a limbajelor reacţionează la apariţia unui
eveniment prin întreruperea mişcării, limbajele SRL, AL şi HELP permit
deservirea evenimentelor în paralel cu alte mişcări ale robotului. Evenimentele
por fi generate de către dispozitive periferice sau prin întreruperi soft datorate
utilizatorului.
Exemplu:
Figure 23
Limbaje de Programare a Robotilor Industriali
91
SRL: WHEN strung-stop DURING SMOVE brat1 TO destinaţie END_DURING DO STOP brat1
oprirea prelucrării pe strung (sesizată de un senzor cuplat şi asigrat a fi strung-stop) duce la întreruperea mişcării braţ1 către destinaţie
AL: MOVE ARM1 TO destinaţie ON brat2stop DO STOP ARM1
odată cu terminarea mişcării braţ 2 şi validarea semaforului soft braţ2stop are loc oprirea mişcării executată în paralel de către ARM1
VAL: REACT 2, întrerupt MOVE destinaţie IGNORE 2 ALWAYS
dacă în timpul deplasării către destinaţie canalul 2 este activat se trece la execuţia programului întrerupt după ajungerea la destinaţie, pentru ca apoi acest canal să fie ignorat varianta cu REACTI duce la execuţia imediată a programului întrerupt fără a mai aştepta ajungerea la destinaţie
HELP Eticheta: IF TESTB(5) THEN !instrucţiuni !instrucţiuni EOM(1) END; COORD(1); IF AY(1)<149 THEN GO TO eticheta END; EOM(1)
- după testarea canalului 5 coordonatele robotului sunt comparate cu cele corespunzătoare poziţiei finale a robotului. Dacă nu s-a terminat mişcarea atunci are loc un salt la etichetă şi mişcarea se reia, dacă da, atunci EOM aşteaptă confirmarea terminării mişcării de către toate axele şi apoi programul continuă. Dacă canalul 5 este în 1 logic atunci zona IF poate fi executat de câteva ori, îndeplinirea condiţiei ca AY(1)149 să fie urmate de EOM cu aceeaşi semifivaţie
duration:=3; SMOVE(1, 2, 120); Starttime:= TIME(); Eticheta:
dt:= TIME() – starttime IF dt=duration OR dt>duration THEN INSTRUCŢIUNI EOM(1) ELSE COORD(1) IF AY(1) < 120.1 THEN GO TO eticheta END END;
- dacă durata mişcării curente nu depăşeşte o valoare prestabilită (3 secunde în acest caz) se execută setul INSTRUCŢIUNI în paralel cu execuţia mişcării anterior declanşate până la terminarea tuturor deplasărilor EOM(1). În caz contrar până la atingerea coordonatei de-a lungul axei Y de 120,1 se reia execuţia mişcărilor în paralel cu execuţia INSTRUCŢIUNI.
Limbaje de Programare a Robotilor Industriali
92
E. Instrucţiuni de comandă şi control a end-effectorului
Instrucţiunile destinate comenzii gripper-ului se pot împărţi în instrucţiuni
simple de genul gripper închis, gripper deschis precum şi instrucţiuni care
generează anumite acţiuni ale gripper-ului care trebuiesc executate cu o anumită
forţă de apucare globală sau la nivel de degete, deschideri intermediare ale
terminalului (la care deschiderea elementelor de apucare are o valoare
prestabilită prin program) etc.
Limbaje de Programare a Robotilor Industriali
93
Din cadrul primului tip de instrucţiuni, în continuare vor fi date
câteva exemple pentru limbajele SRL, PASRO.
Exemple:
SRL: OPERATE şurubelniţa BY şurub
- definirea şurubelniţei şi a şurubului în zona anterioară declaraţia face ca elementul şurub să fie acţionat de către dispozitivul şurubelniţă
OPEN pneumatic_terminal CLOSE pneumatic_terminal
- instrucţiuni clasice de tip deschidere închidere gripper pneumatic
PASRO: Gripopen Gripclose Gripforce(6, 3, 1)
acelaşi tip de instrucţiuni simple de deschidere/ închidere gripper prin această instrucţiune este setată forţa de pondere 6 (din numărul total de 7) iar forţa de menţinere 3, iar timpul total de prindere este de 1 sec.
AL: OPEN HAND TO 5*CM; CLOSE HAND TO 5*CM;
- în cadrul acestui limbaj deschiderea/închiderea gripper-ului necesită parametri de indicare a deschiderii între elementele de prindere
VAL: OPEN MOVE gripframe CLOSEI DEPART 0
pentru limbajul VAL atât pentru terminale electrice cât şi pentru cele pneumatice se utilizează comenzile standard OPEN/CLOSE cu observaţia ca aceste comenzi devin executabile abia când este executată instrucţiunea următoare, în timp ce OPENI/CLOSEI sunt executate imediat. Instrucţiunea RELAX eliberează aerul din gripper-ul pneumatic
ROBEX: GOTO/p3, XYROT, 180, EVENT, 2, ELSE, nobox
- robotul este comandat să se deplaseze în poziţia p3 cu orientarea corespunzătoare. Dacă pe canalul 2 apare un eveniment atunci robotul este oprit şi are loc execuţia instrucţiunii următoare. Dacă nu programul va continua cu eticheta nobox.
Atät limbajul HELP cät ßi SIGLA nu dispun de instrucþiuni dedicate
lucrului cu terminalul. Acesta este considerat ca fiind un element robot
asemánátor cu orice braþ al robotului, acþionarea sa realizändu-se ín
mod similar:
Exemple:
HELP: SET(5) DELAY(20) MOVE(1, #1, 500, #3,
- elementul terminal este cuplat la canalul 5 cänd comanda SET duce la activarea sa (de obicei ínchidere). Se introduce o íntärziere pentru a asigura siguranþa prinderii, apoi se
Limbaje de Programare a Robotilor Industriali
94
40) RESET
deplaseazá robotul de-a lungul axei X cu 500 mm, z cu 40 mm ßi se dezactiveazá canalul 5 (OPEN);
PULSE(1) DELAY(timp_íntärziere) MOVE(1, #1, 200, #3,
250) PULSE(2)
DELAY(timp_íntärziere)
- acest tip de acþionare gripper este specific terminalelor electrice cu acþionare de tip SET (RESET), ín sensul ín care un impuls transmis la canalul 1 duce la ínchiderea terminalului, iar alt impuls cátre canalul 2 duce la deschiderea terminalului;
SIGLA: AX/-1,-12; MO/...; AX/1;
- instrucþiunea AX cu parametru negativ duce la deschiderea terminalului, ín timp ce o valoare pozitivá duce la ínchiderea sa.
Limbajul ROBEX ínscriindu-se ín cadrul limbajelor evoluate
dispune de instrucþiuni dedicate care ußureazá sarcina
utilizatorului.
Exemple:
ROBEX: GRIPNO/5 OPENGR CLOSEGR/3
- se specificá gripper-ul curent, cel de la canalul 5, urmänd comanda de deschidere. Specificarea canalului ca argument la instrucþiunea OPENGR/CLOSEGR duce la acþionarea gripperului specificat (3) ßi a celui curent (5).
Limbaje de Programare a Robotilor Industriali
95
1. Instrucţiuni de acţionare a terminalelor cu parametrii Aßa cum s-a arátat asupra terminalelor se pot folosi:
instrucþiuni simple de tipul ínchidere/deschidere gripper dar ßi
instrucþiuni complexe care sá ducá la o serie de specificári privind:
- orientarea gripperului;
- durata mißcárii gripper-ului;
- viteza cu care se efectueazá mißcarea terminalului;
- forþa de apucare;
- toleranþa controlului;
- instrucþiuni specifice terminalului folosit.
Anumite limbaje permit specificarea parametrilor terminalelor
pentru douá sau mai multe terminale, depinzänd de structura robotului.
Astfel dacá parametrii de identificare a gripperului lipsesc, instrucþiunile
de tip TO ßi BY se referá la gripper-ul curent, mai precis la ultimul
terminal specificat.
Exemple:
SRL: OPEN táietor BY OPERATION(1) DURING MOVE
- táietorul este acþionat ín timpul mißcárii urmátoare
OPEN gripper BY 3 DURING MOVE
SMOVE puma TO destinaþii CLOSE gripper1 TO4
WITH VELOCITY=0.5
- ín timpul mißcárii robotului puma cátre destinaţie, gripperul 1 este deschis cu 3cm, apoi (dupá mißcare) este ínchis päná la distanţa de 4 cm íntre degete cu viteza de 0,5 cm/s;
GRIPWITH gripper 2 TO 7
- gripper-ul este ínchis sau deschis päná la distanţa dintre degetele gripper 2 este de 7 cm;
PASRO: gripwith(7)
- acţiunea este similará cu cea determinatá de instrucţiunea SRL anterioará;
AL: OPEN HAND TO 8*CM MOVE ARM1 TO destinaþie OPEN HAND1 BY 3*CM MOVE ARM1 TO @+ZHAT CLOSE HAND1 TO 2*CM
- se comandá deschiderea gripper-ului la 8 cm ín timpul mißcárii cátre destinaţie, pentru ca ín timpul celei de-a doua mißcári sá se comande ca HAND1 sá fie deschisá cu 3 cm iar apoi ínchisá la 2 cm;
Limbaje de Programare a Robotilor Industriali
96
VAL: OPEN 45 - gripper-ul este deschis ce 45 mm.
Ín afará de parametrii de deschidere/ínchidere a gripper-ului se pot
introduce pe längá viteza de operare a gripper-ului, element care
este utilizat cu succes mai ales ín operaþiile paralele sau de
sincronizare a mai multor mißcári prin durate.
Exemple:
SRL: ALWAYS WHEN max_curent DURING OPERATE TOOL(1) BY OPERATION(3)END_DURING
DO START warning (17)
- în cazul unui blocaj sesizat de un consum de curent suplimentar, ín timpul operaţiilor (OPERATION) execuţia de TOOL(1) se afişează un mesaj de avertizare warning (17);
CLOSE WITH MAVSPEED - se comandă ínchiderea gripper-ului cu vitezá maximá.
WHEN start_time <= SYSTIME+close_duration
MONITORED EVERY 50 MS DURING start_time:=SYSTIME CLOSE gripper 2 with V=0,5; END_DURING DO STOP gripper 2
- dacă are loc depăşirea duratei de timp alocate închiderii gripper-ului (close duration) - un element supravegheat la fiecare 50 msec se comandá ínchiderea gripper-ului 2 cu viteza de 0,5 cm/sec;
AL: OPEN HAND TO 5*CM WITH VELOCITY=0,5*CM
- deschiderea gripper-ului la 5 cm cu viteza de 0,5 cm/sec;
OPEN HAND BY 2*CM
WITH DURATION=5- deschidere gripper cu 2
cm/sec in 5 sec;
2. Instrucţiuni de comandá a terminalului cu monitorizarea senzorilor asociaţi
Operaþiile de manipulare a obiectelor se fac implicit cu
folosirea unor senzori de contact, de forþá, ín vederea asigurárii unei
pierderi corespunzátoare a elementului ce trebuie manipulat ín paralel cu
asigurarea unei forþe de manevrá. Se pot accepta ca instrucþiuni de
comandá a terminalului cu monitorizarea senzorilor ßi instrucþiunile de
ínchidere/deschidere a terminalului cu/la o anumitá distanþá íntre
degetele acestuia, precum ßi impunerea unui timp de execuþie al
Limbaje de Programare a Robotilor Industriali
97
mißcárii sau a unei viteze, dar se preferá introducerea acestei categorii
separate de instrucþiuni deoarece aceste ultime instrucþiuni pot fi
considerate a se baza pe sistemul senzorial interioceptor.
Numai cäteva limbaje oferá acest tip de instrucþiuni care presupun
un sistem senzorial ataßat terminalului. Dintre acestea putem evidenþia
limbajele:
Exemple:
SRL: CLOSE gripper1 UPTO GRIPFORCE>stringforta+0.3
N
gripper-ul 1 este ínchis päná ce forţa de ínchidere este mai mare ca stringforta+0,3 N
WHEN touch_sens=TRUE DURRING
CLOSE gripper2 END_DURING
DO STOP gripper2
dacá senzorul de atingere este activat ín timpul ínchiderii gripper-ului 2 se opreßte acţionarea acestuia.
AL: CLOSE HAND TO 2*CM
ON FORCE>=100*GM DO
STOP HAND
se comandá ínchiderea mäinii la 2 cm, ínchidere care va fi opritá dacá nu s-a ajuns la respectiva distanţá dar forţa de strängere a fost egalá sau mai mare de 100g*9,81 m/s2
VAL: GRASP 14.8,200
ín VAL controlul forþei este fácut de cátre controller-ul de forþá cu parametrii prestabiliþi. Astfel dacá la atingerea acestei forþe distanþa dintre degetele gripper-ului este mai micá decät valoarea specificatá de instrucþiune (14,8) se realizeazá saltul automat la eticheta cuprinsá ín argumentul al doilea (200).
Limbaje de Programare a Robotilor Industriali
98
F. Instrucţiuni dedicate lucrului cu sistemul exterioceptor
Prin sistem senzorial exterioceptor se ínþelege ansamblul
senzorilor care oferá arhitecturii de control a robotului informaþii legate
de mediul de lucru al robotului. Din punct de vedere al complexitáþii
constructive senzorii exterioceptivi pot fi grupaþi ín senzori binari,
senzori analogici ßi sisteme de vedere artificialá.
Pe de altá parte din punct de vedere al modului de utilizare a
informaþiei captate de la aceßtia prin intermediul limbajelor de
programare dedicate roboþilor, instrucþiunile se pot diviza ín instrucþiuni
dedicate senzorilor binari ßi analogici destinaþi controlului unor márimi
fizice ßi instrucþiuni dedicate sistemelor de vedere artificialá.
Deoarece prezenta carte se adreseazá specialißtilor in domeniu se
va omite o descriere mai amplá a senzorilor exterioceptori ßi a tipurilor
de semnale furnizate de aceßtia, cei interesaþi de astfel de elemente
putändu-li-se indica o bibliografie adecvatá ín acest sens [. . . ].
Prezenþa acestor instrucþiuni se datoreazá faptului cá roboþii
industriali nu sunt construiþi pentru utilizarea íntr-o aplicaþie specificá, ei
dispun de o arhitecturá cu ínalt grad de generalitate dar ßi adaptabilitate,
ín sensul ín care la canalele de comunicaþie cu mediul de lucru se pot
ataßa senzori sau module inteligente de control a senzorilor care sá
furnizeze anumite semnale robotului. Prezenþa acestor structuri ín
arhitectura interná a robotului ar duce la avantajele evidente legate de
timpul de prelucrare al semnalelor senzorilor, ín paralel cu limitarea
folosirii respectivului robot la un domeniu relativ íngust.
Ambele tipuri de structuri duc la aceeaßi acþiune: realizarea unui
anumit nivel, tip de informaþie, valoare sesizatá de cátre senzor are ca
efect o anumitá evoluþie a robotului ín timp ce nerealizarea acestei
Limbaje de Programare a Robotilor Industriali
99
condiþii conduce la o altá evoluþie specificatá de utilizator. Instrucþiunile
oferite de limbajele de nivel ínalt pot furniza elemente de identificare ßi
alocare a unui tip de informaþie cátre senzorii care vor fi citiþi,
instrucþiuni care poatá numele de instrucþiuni de configurare a
sistemului senzorial. Datoritá complexitáþii ridicate a sistemelor de
vedere artificialá, acestea vor fi tratate separat.
G. Instrucţiuni de configurare a sistemului senzorial Acest tip de instrucþiuni sunt íntälnite ín special la limbajele:
Exemple:
SRL: SYSTEM SPECIFICATION SENSOR: contact=CHANNEL(3) STRUCTURE contact=BOOLEAN greutate=CHANNEL(2) STRUCTURE greutate=INTEGER END_SYSTEM_SPECIFICATION
primeşte instrucţiuni ce configurează senzorii contact de tip boolean (digital) fiind la canalul 3 (conectarea hard) iar greutate este de tip întreg, reprezentat de informaţia citită pe canalul 2.
SIGLA: MT/1,M8,2 - valoarea senzorului 1 este stocatá ín registrul M8, aßteptändu-se un timp de 2 sec päná
se trece la instrucþiunea urmátoare. HELP: IF TESTB(3) THEN... - dacá intrarea 3 este ín nivel ínalt
rezultatele acestei structuri este TRUE. IF VALUE (1) > 80 THEN - instrucþiunea VALUE (1) citeßte canalul 1
de mai multe ori furnizänd o valoare care a diferit pentru douá másurátori succesive cel mult la cel mai puþin semnificativ bit.
IF IVALUE (1) > 80 THEN - deosebirea constá ín faptul cá valoarea oferitá de IVALUE este prima valoare cititá. Ca o observaţie, aceste ultime douá instrucţiuni pot fi alocate unor variabile de program (Ex: sens:3=VALUE(3);).
Fárá índoialá cá monitorizarea senzorilor se poate face programat
ín modul ín care deja a fost prezentat anterior:
Exemple:
SRL: ALWAYS WHEN SENSOR(3)>=5 MONITORED EVERY 100MS DURING Instrucţiune de mißcare
Limbaje de Programare a Robotilor Industriali
100
END_DURING DO START warning
Ín mod similar limbajul AML poate sá ofere facilitáţi de
monitorizare a senzorilor.
Exemple:
MONITOR (LED, 2, 0, 0, 1.5, trece)
- la fiecare 1,5 secunde este monitorizat senzorul LED ßi dacá 2 semnale sunt 0 atunci are loc oprirea mißcárii, dacá nu este afißat mesajul trece ßi executá mißcarea.
Chiar dacá limbajul HELP nu are instrucţiuni specifice de
monitorizare aceastá instrucţiune poate fi emulatá prin intermediul unor
task-uri.
Exemple:
Monitor: sens2:=VALUE(2); IF sens2>5 OR sens2=5 THEN PRINT (0, Maßina1 este pornitá
); M10n:=1 END; DELAY(10) GO TO monitor.
- indicator pornire maßiná
Ín continuare instrucţiunile de implementare a condiţiilor de
evoluţie datorate senzorilor exterioceptivi au o structurá conceptualá
generalá de tipul:
IF condiţie senzor THEN mißcare 1
(ELSE) mißcare 2
Exemple:
SRL: IFSIG contact 3 THEN PTPMOVE TO
eroare ELSE SMOVE TO destinaþie
- dacă senzorul contact 3 este activat (1 logic) atunci robotul se va mişca punct cu punct către punctul eroare, în caz contrar va avea loc mişcarea liniară către destinaţie.
INPUT (temperaturá) IF temperatura > temp_limit
THEN BEGIN
- valoarea analogică a senzorului temperatură este citită şi dacă condiţia de a fi mai mare decât temperatura limită este índeplinită atunci este executat blocul de instrucţiuni cuprins
Limbaje de Programare a Robotilor Industriali
101
SMOVE robot TO aproviz;
END
între BEGIN şi END. În caz contrar se execută instrucţiunile de după instrucţiunea END.
AML: IF SENSI (LED,0) THEN BREAK (Direcþie
blocatá)
- dacă LED este întrerupt (senzorul) atunci are loc afişarea mesajului şi oprirea structurii, dacă nu se continuă cu instrucţiunea de BREAK (Direcţie blocată).
VAL: IFSIG 1, -5, , THEN 300 - limbajul VAL permite şi implementarea unor funcţii logice ŞI între semnalele senzorilor pe nivel 1 sau 0. Astfel în cazul instrucţiunii prezentate ca exemplu dacă semnalul 1 este setat (în 1 logic) şi semnalul 5 resetat (în 0 logic, de unde şi semnal negativ) se realizează saltul la instrucţiunea 300. Ín caz contrar se continuă execuţia cu instrucţiunea următoare.
SIGLA: PP/-1,12 - dacă senzorul 1 este ín 0 logic se realizează saltul la eticheta 12.
MT/1, M8,2 BL/M8, 75, 3 grup 1
instrucţiune JU/4; NU/3; grup 2
instrucţiune NU/4;
- valoarea senzorului 1 este încărcată în registrul M8. Dacá valoarea din M8 este mai mare sau egalá decät 75 se executá grupul 1 de instrucţiuni şi apoi prin JU/4 - salt necondiţionat la eticheta 4 (NU/4). Dacá valoarea este sub 75 (below-BL) are loc executarea grupului 2 de instrucţiuni ce íncepe cu eticheta 3 (NU/3).
H. Instrucţiuni de mişcare cu controlul duratei mişcării
În cadrul unor procese tehnologice implicând anumite transformări fizico-
chimice timpul, durata unei mişcări devin un element care nu poate fi neglijat,
motiv pentru care poate fi privit ca fiind un parametru care ar trebui specificat
explicit. Acest tip de problemă poate fi rezolvat în cadrul limbajelor de
programare a roboţilor industriali fie prin existenţa unor instrucţiuni explicite
cum este cazul limbajelor SRL şi AL, fie prin monitorizarea momentului de
început a mişcării şi a momentului curent, diferenţa acestora putând duce la
Limbaje de Programare a Robotilor Industriali
102
setarea unor indicatori soft, flag-uri care să intervină în cadrul procesului sub
forma unor evenimente.
Exemplu:
SRL: WHEN start_time<=SYSTIME-durata_miscarii MONITORED EVERY 20 MS DURING SMOVE robot TO destinaţie END_DURING DO START altă_deplasare
- dacă timpul de mişcare a robotului spre destinaţie, monitorizat la fiecare 20 MS a fost depăşit (evaluarea duratei mişcării cu funcţia SYSTIME este mai mare decât durata planificată) se realizează trecerea automată la execuţia deplasării următoare
AL: MOVE ARM1 TO destinaţie ON DURATION >=5*sec DO BEGIN MOVE ARM2 TO centru WITH DURATION=3*SEC; PRINT (“start proces”); END;
- la 5 secunde de la începerea deplasării lui ARM1 către destinaţie este acţionat şi ARM2 spre centru timp de 3 secunde şi apoi este afişat un mesaj
I. Procese în paralel
Deoarece mişcarea robotului sau operaţiile de afişare a unor informaţii la
imprimantă sunt mult mai lente comparativ cu instrucţiunile de prelucrări
logico-aritmetice, acces informaţia de pe disc, salturi în cadrul programului sunt
permise funcţii care să declanşeze explicit anumite operaţii de prelucrare în
paralel cu execuţia mişcării structurii robotului. Acest tip de instrucţiuni sunt
specifice în special limbajelor AML şi HELP.
Limbaje de Programare a Robotilor Industriali
103
Exemplu:
AML: AMOVE (ARM, framedestinaţie) . . WAITMOVE
- instrucţiunea specifică mişcării asincrone urmând ca instrucţiunile cuprinse între acesata şi WAITMOVE să fie executate odată cu începerea mişcării, iar trecerea la instrucţiunile de după WAITMOVE să se realizeze numai după terminarea mişcării.
Exemple:
ROBEX: ONSIG/EVENT, 3, JMP, wait - dacă semnalul de la canalul 3 este în 1 logic se realizează saltul la eticheta wait.
HELP: IF TESTB(3) THEN DELAY(50) END; IF VALUE(1)70 THEN MOVE(1, 1, 140, 3, 50); PULSE(2) MOVE(1, 1, 120, 2, 260,
150) ELSE PRINT (“Valoare
insuficientă”) HOLD END;
- dacă senzorul 3 este TRUE atunci execuţia programului este întârziată cu 1 sec (50x20 msec) - dacă valoarea senzorului 1 este mai mare decât 70 atunci piesa este depozitată, gripper-ul deschis şi robotul mutat într-o a doua poziţie. În caz contrar se afişează un mesaj şi se aşteaptă intervenţia operatorului.
J. Instrucţiuni destinate lucrului cu sisteme de vedere artificiale
Sistemul de vedere artificială este de departe sistemul senzorial care pe
lângă faptul că oferă o informaţie complexă şi completă asupra scenei de lucru,
necesită şi un set de operaţii complexe de aliniere sau mai precis de stabilire a
unor relaţii între cele două sisteme care fac parte din sistem: sistemul de
referinţă asociat camerei de luat vederi şi sistemul robot. Pe de altă parte
sistemul de vedere artificială dispune de o serie de caracteristici care-I permit o
integrare mai uşoară în sistemul robot:
Limbaje de Programare a Robotilor Industriali
104
- obiectele identificate pot primi nume simbolice, reprezentate în ASCII
prin şiruri de caractere
- poziţia şi orientarea obiectelor sunt evaluate în relaţie cu un sistem de
coordonate cartezian
- sistemul poate “învăţa” obiectele printr-o instruire prealabilă, alocând
totodată şi numele simbolice elementelor învăţate.
O serie de limbaje, cum este cazul limbajului VAL, au fost extinse cu
seturi de instrucţiuni special dedicate sistemelor de vedere artificială.
Instrucţiunile de bază pentru VAL (VAL11) de lucru cu sistemul de vedere
artificială sunt VPICTURE care captează imaginea prin camera de luat vederi şi
o depune într-un masiv de memorie special destinat acestui lucru (un buffer de
memorie) şi VLOCATE instrucţiune care generează localizarea imaginii
achiziţionate în modelele memorate (caută imaginea în imaginile memorate)
pentru ca în cazul găsirii unui obiect orientarea şi poziţia curentă să fie
memorate într-un obiect, iar în caz contrar să se realizeze un salt la eticheta
cuprinsă în cel de-al doilea argument. Dacă eticheta lipseşte programul se
opreşte şi este generat un mesaj de eroare. Deoarece o completă prelucrare a
informaţiei captate de sistemul de vedere artificială conţine şi o serie de operaţii
de calibrare, determinare a transformărilor de coordonate între sisteme, pentru
înţelegerea acestora va fi prezentat şi comentat un exemplu:
Limbaje de Programare a Robotilor Industriali
105
Exemple:
HERE calibrobot - prin această instrucţiune se defineşte centrul discului în care este plasat terminalul ca fiind sistemul de calibrare al robotului (calibrobot)
MOVE respoint - robotul este extras din schema de recunoaştere a obiectelor prin mutarea într-un alt punct (restpoint)
VPICTURE - este captată imaginea de către camera de luat vederi
VLOCATE calibcamera, 150 - dacă obiectul este recunoscut (poziţia iniţială), elementele privitoare la orientare şi poziţie sunt stocate în sistemul calibcamera dacă nu salt la instrucţiunea cu eticheta 150
INV invcalibcamera=calibcamera
- se calculează sistemul invers care corespunde transformării coordonatelor obiectului în sistemul de coordonate al camerei (achiziţionarea imaginii oferă date referitoare la sistemul imagine)
SET camerasystem=calibrobot:
invcalibcamera
- se calculează transformarea cameră sistem prin compunerea transformărilor bază-robot-cameră
Până în acest punct a avut loc calibrarea şi definirea transformărilor necesare
prelucrării imaginilor şi poziţionării robotului. Din acest punct începe efectiv
prelucrarea obiectelor a căror imagine este achiziţionată de sistemul de vedere.
Limbaje de Programare a Robotilor Industriali
106
VPICTURE - este achiziţionată imaginea unui obiect
VLOCATE obiect, 150
- se caută identificarea obiectului
MOVE camera system:obiect
- utilizând orientarea şi poziţia obiectului compusă cu transformarea camerasystem se poate defini sistemul în care este nevoie ca robotul să se poziţioneze.
Un alt exemplu de limbaj evoluat destinat lucrului cu sistem senzorial de
vedere artificial este RAIL. Acest limbaj dispune de mai multe elemente care să
permită identificarea obiectelor care au fost preluate de către un sistem de vedere
artificială. Asemănător cu VAL11 limbajul RAIL dispune de o instrucţiune
explicită de captură a imaginii: PICTURE dar şi de un set de instrucţiuni care să
permită identificarea obiectului – OBS_FEA(TURE) – în funcţie de anumite
caracteristici: poziţie (OBJ_XMIN, OBJ_XMAX, OBJ_YMIN, OBJ_YMAX),
orientare (OBJ_ANGLE), numărul orificiilor (OBJ_HOLES), dimensiunea
Imagineacaptata
Identificareaobiectului si
determinareapozitiei Frame lista
.
.box
x valoarey valoare
z = 0Orientare
.
.
.
MOVE camera system
VLOCATE box,150
.
.
.
.
.
VPICTURE
.
.
.
.
.
Sistemul de vedereartificiala
Programuutilizatoru
Elementeprogram
Figure 25
Limbaje de Programare a Robotilor Industriali
107
diametrului maxim, minim al cercului care încadrează obiectul -
circumscrie/înscrie obiectul (OBJ_RMAX, OBJ_RMIN), culoare
(OBJ_COLOR), arie (OBJ_TOTALAREA), centrul de greutate (OBJ_XCENT,
OBJ_YCENT). Numărul total de caracteristici care pot fi recunoscute prin
intermediul limbajului RAIL este de 45.
Deoarece nu toate cele 45 de caracteristici sunt folosite unele dintre acestea
pot fi inhibate sau chiar toate (prin REC_FEAT) oferindu-se însă posibilitatea
utilizării unor alţi identificatori cum ar fi: primul obiect din cadrul imaginii
curente (FIRSTPART), următorul obiect (NEXTPART), primul obiect sau
orificiu din imaginea curentă (FIRSTBLOB), următorul obiect/orificiu
(NEXTBLOB). Aceşti identificatori sunt utilizaţi în legătură cu variabila
VIS_NPART care identifică numărul de obiecte din imagine:
Exemple: PICTURE IF VIS_PART0 THEN BEGIN FOR număr elemente =1 TO VIS_NPART DOBEGIN IF număr elemente ==1 THEN FIRSTPART ELSE NEXTPART IF OBJ_NHOLES ==3 THEN ENTLOOD END END
- după achiziţia imaginii se identifică prin VIS_NPART numărul de elemente şi dacă acesta este 1 se declară respectivul ca primul, în caz contrar se indică că sunt mai multe: NEXTPART. Dacă numărul de orificii este 3 atunci se iese din bucla de examinare, în caz contrar se continuă examinarea (după ultimul END poate urma o instrucţiune de genul GO TO ).
În cadrul limbajului RAIL există posibilitatea de a controla mai multe
sisteme de vedere artificială sau inhibată afişarea imaginii pe monitor, afişarea
color sau nivele de gri sau alţi parametri hard care de obicei sunt setaţi iniţial de
utilizator, pentru aplicaţia respectivă şi apoi nu mai sunt modificări.
Exemple: VIS_DISPLAY = OFF; - se inhibă afişarea pe monitor
VIS_CAMERANO =2; - sistemul de vedere artificială curent este numărul 2
Limbaje de Programare a Robotilor Industriali
108
K. Delimitarea programului prin intermediul blocurilor Utilizarea blocurilor de program facilitează programatorului o abordare mai
concentrată, mai flexibilă şi mult mai uşor depanabilă. Problemele care apar în
cadrul folosirii structurilor de tip blocuri se referă la valabilitatea variabilelor
definite în interiorul unor blocuri. Structura centrală a declarării blocurilor
conţine curente cheie de tipul BEGIN şi END cu particularităţi legate de
limbajul folosit. Spre exemplu AL cere pe lângă cele 2 cuvinte cheie şi un nume
al blocului, SRL utilizează cuvinte cheie BEGIN_BLOCK şi END_BLOCK, iar
PASCAL şi PASRO utilizează structurile concrete de blocuri împreună cu
structurile de tip procedură.
Exemple:
BEGIN “bloc 1” SCALAR – limit, a, b, c; . . IF SENSOR(2) limit THEN BEGIN “bloc 2” SCALAR I; . . END “bloc 2” ELSE BEGIN “bloc 3” SCALAR k; . . END “bloc 3” . . END “bloc 1”
PROGRAM principal VAR limit a, b, c : INTEGER PROCEDURE verif (x, y: REAL)
END
BEGIN
INTEGERVARi
i
.
.
:
END
END
INTEGERVARk
BEGIN
k
.
.
.
.
:
STATIC BLOCK Subr1: . . RETURN ENDBLOCK INIT?BLOCK DEFINE v(3); V[1]=3 V[2]=4 V[3]=5 ENDBLOCK BLOCK . . ENDBLOCK BLOCK . . ENDBLOCK
Exemplu în AL Exemplu în Pascal Exemplu în HELP
Limbaje de Programare a Robotilor Industriali
109
Din cele 3 exemple se cuvine a se adăuga câteva specificaţii referitoare la
limbajul HELP care dispune de blocuri dinamice ale căror instrucţiuni
sunt şterse după executare (BLOCK ENDBLOCK) ca şi în cazul
blocurilor de iniţializare (INIT_BLOCK) precum şi blocuri statice care
rămân memorate în memoria de lucru a robotului, acestea putând fi
apelate prin numele subrutinei şi parametri (aceeaşi specificaţie se
menţine şi pentru limbajul PASCAL şi PASRO).
L. Instrucţiuni de control al parcurgerii programului Chiar dacă numele tipului de instrucţiuni pare poate puţin prea elevat,
acest tip de instrucţiuni a fost deja întâlnit până în acest moment, autorul
dorind să realizeze în cele ce urmează o prezentare mai compactă a logicii
folosirii acestei instrucţiuni, în paralel cu exemplificarea tipurilor de
instrucţiuni pentru diverse limbaje. În cadrul alcătuirii unui program se
apelează de foarte multe ori la pictograme care descriu evoluţia
programului, structura acestuia la nivel de mişcare sau blocuri. În esenţă
elementele utilizate şi întreaga organigramă va trebui să îndeplinească
următoarele reguli:
- instructurile de tip bloc vor avea o intrare şi o ieşire
- evoluţia dinamicii programului va fi de sus în jos prin intermediul
structurilor de tip bloc
- o structură bloc este o unitate funcţională închisă (ale cărui efect se
datorează strict instrucţiunii/instrucţiunilor din respectivul bloc)
- într-un bloc sunt definite clar instrucţiunile/instrucţiunea care trebuie
efectuată
- comenzile, argumentele pentru prelucrarea executată de blocul curent
sunt preluate de la vecini
Ţinând cont de aceste specificaţii se pot defini cu uşurinţă următoarele
tipuri de instrucţiuni destinate controlului parcurgerii programului:
Limbaje de Programare a Robotilor Industriali
110
1. Instrucţiuni de salt necondiţionat Tipul general al unui astfel de instrucţiune conţine un element de tip
eticheta: instrucţiune urmată de o instrucţiune de tipul GO TO eticheta.
Chiar dacă acest tip de instrucţiuni sunt deosebit de clare se recomandă însă
utilizarea cât mai puţin cu putinţă a acestui tip de instrucţiune datorită rigidităţii
ei.
2. Instrucţiuni de execuţie condiţionată În cadrul acestor instrucţiuni putem evidenţia mai multe subtipuri:
1. Instrucţiuni cu final condiţionat (cu ieşire condiţionată)
Din cadrul acestor instrucţiuni fac parte instrucţiunile de tip REPEAT
UNTIL, precum şi instrucţiunile de tipul FOR i=1 TO n DO. Acestea au
ca efect repetarea execuţiei unui set de instrucţiuni sau unor blocuri până
când variabila de tip semafor devine egală cu o anumită valoare sau mai
mică/mai mare decât valoarea prestabilită.
Exemple: REPEAT i:= i + dt; IF i valfind THEN EXIT_REPEAT UNTIL total 10
FOR i = 1 TO valfinal DO BEGIN END
FOR K: = 1 find DO l: = l + 1; REP
Instrucţiunea REPEAT cu ieşire forţată (de valoarea valfind a lui i) pentru limbajul SRL
Instrucţiuni FOR pentru PASCAL şi PASRO
Instrucţiune FOR pentru HELP
3. Instrucţiuni cu execuţii condiţionate Din cadrul acestor instrucţiuni fac parte instrucţiunile de tip CASE. De
departe acest tip de instrucţiuni este cel mai flexibile şi cel mai recomandat în
abordarea structurală a unui program prin varietatea obţiunilor oferite. Se
Limbaje de Programare a Robotilor Industriali
111
remarcă rolul central pe care-l joacă variabila de decizie, în speţă valorile
particulare ale acestei variabile.
Principal o structură CASE se poate reprezenta astfel:
Exemple:
AML: BRANCH (IF N GE 1 AND N LE 4 THEN CASE1, CASE2, CASE3, CASE4 (N) ELSE ERROR_CASE CASE1:
BRANCH (CASE_END); CASE2:
BRANCH (CASE_END); CASE4:
BRANCH (CASE_END); ERROR CASE:
CASE_END
HELP: IF case 0.5 THEN caseend END; GO TO (case, case1, …. , casen); GO TO caseend case1: instrucţiuni GO TO caseend case2: instrucţiuni GO TO caseend casen: instrucţiuni caseend:
Instrucţiunile CASE pentru limbajele PASRO, SRL, AL conţin elementele
caracteristice structurii de bază, în timp ce limbajele AML şi HELP pot
implementa structura CASE utilizând elemente de tipul GO TO şi BRANCH.
Tot o instrucţiune de Test de ieşire de astă dată la intrarea în bucla este
structura WHILE. Aceasta este specifică limbajelor SRL, PASRO, HELP, AL
BLOC 1 BLOC 2
CASE
BLOC n
Case1 Case 2 Case n
Case n
Case 1
Case 2Case test
Structurablocului 1
Structurablocului 2
Structurablocului n
. . . . .
Limbaje de Programare a Robotilor Industriali
112
având o structură logică WHILE expresie logică DO bloc mai precis atâta timp
cât expresia logică este TRUE se execută bloc.
4. Instrucţiuni cu salt condiţionat Acest tip de instrucţiune se bazează pe structura IF condiţie logică
THEN bloc1 ELSE bloc2. Reprezentarea de tip organigramă a acestui tip de
instrucţiuni este
BLOC 1 BLOC 2
CONDITIE
FalseTrue
THENBLOC 1
ELSEBLOC 2
CONDITIETRUE FALSE
BLOC 1
CONDITIE
FalseTrue
THENBLOC1
CONTINUA
CONDITIETRUE
FALSE
Limbaje de Programare a Robotilor Industriali
113
Chiar dacă instrucţiunea CASE este cea mai flexibilă instrucţiunea
de tip IF este în general cea mai folosită şi datorită faptului că în general
semnalele primite de la structurile de control sunt în general binare motiv pentru
care aceste semnale sunt fie TRUE, fie FALSE. Condiţiile logice cele mai
utilizate sunt de tip relaţional: mai mic, mai mare, egal, mai mic cel mult egal,
mai mare cel mult egal. Dacă limbajele PASRO, SRL, AML, AL utilizează
forme clasice a instrucţiunii, limbajul SIGLA datorită strânsei conectivităţi pe
care o are cu arhitectura hard, necesită o tratare mai atentă şi inserarea unor
comentarii care să permită o mai rapidă identificare a condiţiilor.
Exemple:
AL şi PASRO: HELP:IF x a THEN IF x =b THEN BEGIN IF x=(a+b)/2 THEN PRINT (“corect”) END ELSE PRINT (“prea mare”) ELSE PRINT (“prea mic”);
IF (x a) OR (x = a) THEN IF (x b) OR (x = b) THEN IF x = (a+b)/2 THEN PRINT (“corect”) END ELSE PRINT (“prea mare”) END ELSE PRINT (“prea mic”) END;
VAL: SIGLA: IF x GE a THEN 10 TYPE prea mic GO TO 100 IF x LE b THEN 20 TYPE prea mare GO TO 100 20 SETI timp = a+b SETI temp = temp/2 IF x NE temp GO TO 100 TYPE corect 100
MT/1, M1, 2 – se încarcă în registrul M1 valoarea de la senzorul 1 (x = M1) MT/a, M2, 2 – se transferă valoarea a în M2 MT/b, M3, 2 – se transferă valoarea b în M3 BL/M1, M2, 1 – dacă M1 M2 = a atunci salt la eticheta 1 BG/M1, M3, 2 – dacă M3 M1 atunci salt la eticheta 2 SE/M4, M2 – M4M2 IC/M4, M3 – M4M4+M3 SE/M5, 0 – M50 NU/10 – eticheta 10 IC/M5, 1 – M5M5+1 IC/M4, -2 – M4M4-2
Limbaje de Programare a Robotilor Industriali
114
BG/M4, 0, 10 – dacă M4 este 0 salt la 10 BE/M4, 0, 11 – dacă M4 este = 0 salt la 11 IC/M5, -1 – M5M5-1 dacă M4 0 NU/11 – eticheta 11 BE/M1, M5, 3 – dacă M1 = M5 salt la 3 JU/100 – salt eticheta 100 NU/1 – eticheta 1 NT/ prea mic, M1 – afişează prea mic JU/100 – salt la 100 NU/2 – eticheta 2 NT/ prea mare, M1 – afişează prea mare JU/100 – salt la 100 NU/3 – eticheta 3 NT/corect,M1 – afişează corect NU/100 – eticheta 100
Toate exemplele prezentate sunt utilizate pentru implementarea unei
evoluţii ca în organigrama următoare :
x >= a
PRINT ' Prea mic 'x <= b
True
PRINT ' Prea mare '
False
False
x =(a+b)/2
True
PRINT ' Prea mare '
True False
x >=bFalseTrue
PRINT "Prea mic"
x<=bFalseTrue
PRINT "Preamare "
x=(a+b)/2FalseTrue
PRINT " corect"
Continua
Limbaje de Programare a Robotilor Industriali
115
Dacă primele 3 exemple (limbajele VAL, AL, PASRO şi HELP) nu credem
că necesită explicaţii suplimentare, exemplul în SIGLA implementează operaţia
de împărţire prin scădere repetată, rezultatul întreg fiind încercat în registrul M5:
astfel atâta timp cât M40 se scade din M4 2 şi la fiecare scădere se
incrementează M5, urmând că dacă M4=0 să se încheie împărţirea, să se
realizeze ieşirea din bucla care simulează împărţirea cu 2, iar dacă M40
decrementându-se M5 se iese deasemenea din simularea împărţirii.
M. Instrucţiuni de sincronizare şi de temporizare condiţionată
Acest tip de instrucţiuni sunt folosite la sincronizarea mişcării robotului
cu alte elemente ale modului de lucru sau a mişcării robotului cu mişcarea
elementului terminal. O astfel de instrucţiune combinată este formată din
două comenzi: una de captare a semnalului de sincronizare SIGNAL
eveniment semnal şi cea de-a doua de aşteptare până în clipa în care
semnalul eveniment este TRUE: WAIT semnal eveniment. Sigur că
există şi varianta care cumulează cele două instrucţiuni sub forma
instrucţiunii de tip TEST semnal eveniment.
Limbaje de Programare a Robotilor Industriali
116
SIGLA are aceeaşi structură în schimb mnemonicele folosite sunt mai
sintetice: ES/ variabilă eveniment (variabila este setată dacă evenimentul este
TRUE) şi EW/ variabila eveniment, variabila,…….evoluţia programului este
oprită până ce variabilele sunt setate.
Instrucţiunile simple de temporizare condiţionată pot fi clasificate ca:
Instrucţiuni condiţionate temporal
Instrucţiuni condiţionate de terminal
Instrucţiuni condiţionate de activarea unei taste speciale
Instrucţiuni condiţionate de evenimente externe
N. Alte consideraţii privitoare la tratarea situaţiilor excepţionale, la atributele şi starea sistemului
Sistemul robot dispune ca orice structură complexă sistemică de un
set de atribute interne şi stări care pot fi citite şi uneori chiar modificate
prin intermediul unui program utilizator. Spre exemplu AML dispune de
atribute privitoare la starea unui anumit canal – QCHAN, atributele unui
anumit senzor QIODEF, poziţia şi orientarea curentă QPOSITION, etc.
Modificarea acestor atribute nu se recomandă a fi făcută de utilizator,
proiectantul hard/soft al structurii fiind cel care utilizând aceste informaţii
conduce sistemul spre o bună funcţionare. Deasemenea situaţiile
excepţionale sunt de obicei tratate prin intermediul unor subrutine de
întreruperi nemascabile implementate de către constructor. Astfel de
situaţii de excepţie pot fi:
- oprirea robotului
- elementul ce se doreşte a fi prins este greşit poziţionat sau absent
- mişcarea robotului poate duce la blocaj intern sau coliziune
- împărţirea la zero a unui operand
Limbaje de Programare a Robotilor Industriali
117
- timpul de aşteptare al unui eveniment depăşeşte o valoare maximă
prestabilită
- magazia este goală
- forţa exercitată asupra robotului sau terminalului este mult prea mare
Limbaje de Programare a Robotilor Industriali
118
VI. Integrarea în program a programării prin instruire
Este cunoscut faptul că robotul este o structură complexă atât din
punct de vedere cinematic cât şi dinamic. Utilizarea unui model cinematic
sau dinamic face apel la o serie de simplificări, care în cazul utilizării
modelului drept bază pentru programarea off-line a robotului poate
conduce la erori de neneglijat. Utilizând ideea conform căreia cel mai bun
model al unui obiect este obiectul însăşi a apărut modalitatea de
programare a unui robot prin instruire, când robotul este condus punct cu
punct pe traiectoria care se doreşte a fi descrisă, punctele sunt memorate,
pentru ca apoi în cadrul execuţiei automate robotul să descrie traiectoria
pe care a fost instruit.
În esenţă programarea unui robot care dispune de un limbaj de
programare se compune din două etape:
construcţia structurii logice a programului
construcţia punctelor, spaţiilor şi orientărilor specifice execuţiei
robotului.
Mai precis prima etapă include evoluţia dorită a robotului. Aşa cum
am arătat, deoarece nu pot fi definite cu suficientă precizie poziţia şi
orientarea robotului în punctele de interes se preferă ca acestea să fie
introduse de către programator în cadrul procedurii de instruire (învăţare).
Această instruire, din punct de vedere al momentului în care se execută
este de două feluri:
a). se execută programul urmând ca poziţiile şi orientările să aibă
nume simbolice, lucru care va duce ca la prima rulare executată să se
oprească atunci când se ajunge la simboluri încă nedefinite valoric. În
acest moment se trece în regimul de instruire şi se poziţionează
convenabil robotul, cu ajutorul unui joystick, în marea majoritate a
Limbaje de Programare a Robotilor Industriali
119
cazurilor, iar la activarea unei chei speciale valorile curente să fie atribuite
simbolului întâlnit. Această procedură impune o alocare corespunzătoare
de memorie, în paralel cu dezavantajul generat de instrucţiunile
condiţionale de tip IF, respectiv CASE la care o primă rulare va duce la
definirea evoluţiei corespunzătoare condiţiei îndeplinite, pentru ca în
cazul altei evoluţii condiţionale robotul să se oprească din nou şi să fie
nevoie completarea variabilelor simbolice.
b). se defineşte separat o listă de poziţii şi orientări care va fi
asigurată separat de evoluţia on line a robotului prin procedura de
instruire adecvată. Chiar dacă aparent această procedură este
Programator
Programul textcontinind instructiunide miscare, salturi,
comenzi intrare-iesire
Produra de instruire
Sistem de programareoffline ( editoare si
compilatoare )
Sistem de programareonline avandcomponenteinteractive
Structura cadru aprogramului
Structura cadru amiscarii
Program executabil
Sistem interpretor side comanda acontrollerelor
Robot
Figure 26
Limbaje de Programare a Robotilor Industriali
120
consumatoare de timp, din punct de vedere al blocării producţiei această
metodologie exclude complet dezavantajele primei metode.
În plus alcătuirea de fişiere cu tipuri adecvate de sisteme, orientări,
poziţii se dovedeşte a fi extrem de flexibilă, adăugarea unor alte tipuri de
variabile făcându-se cu ansamblu.
Spre exemplu în PASRO sau SRL se definesc 5 tipuri de operaţii cu
fişiere, operaţii care conferă o deosebită flexibilitate în manevrarea
informaţiei.
Spre exemplu se pot defini următoarele tipuri de variabile:
Exemple:
PASRO: TYPE gripstatustyp = (gdeschis, gînchis) ffilename = PACKED ARRAY 1 ffmax OF CHAR framename = PACKED ARRAY 1…….ffmax OF CHAR ffilerecord = RECORD name : framename value : frame gripvalue : REAL grips : gripstatustyp END; ffiltyp = FILE OF ffilerecord
Dacă se doreşte introducerea unor noi variabile, spre exemplu
coordonatele generalizate ale cuplelor în poziţia curentă acest lucru se
poate face cu uşurinţă prin inserarea în declararea TYPE a unei linii de
genul : robotangletyp = ARRAY 0 5 OF REAL iar în RECORD :
robotangle : robotangletyp
Operaţiile cu fişiere sunt:
deschiderea unui fişier openframefile (filename: ffilename; VAR status:
INTEGER);
închiderea unui fişier closeframefile
Limbaje de Programare a Robotilor Industriali
121
iniţializarea unui fişier frameinitialize se declară prin procedură
valorile de ieşire a frame-ului, valorile terminalului, status-ului
acestuia
INTEGERVARstatus
framenamefname
typgripstatusVARgsout
REALVARgvout
frameVARfout
:
;:
;:
;:
;:
crearea unui fişier createframefile (filename: ffilename; VAR status:
INTEGER)
scrierea într-un fişier framewrite
;:
:sin
:
:
:
INTEGERVARstatus
typgripstatusg
REALgvin
framefin
framenmefname
Pentru limbajul VAL crearea listei de simboluri se face prin
utilizarea cheilor speciale de pe teach – pendant utilizând cheile T pentru
interpolare la nivelul coordonatelor robot, respectiv TS pentru interpolare
carteziană liniară.
Exemple: T store - se lansează procedura de instruire. La atingerea
orientării şi poziţiei dorite se apasă butonul RECORD.
MOVE store 1, 0, 0
- la atingerea punctului următor se apasă iar butonul RECORD – gripperul fiind închis (0, 0)
MOVE store 2, 47.3
- se memorează al treilea punct cu comanda deschiderii gripper-ului la 47.3mm
În mod relativ asemănător se realizează programe în HELP, mai
precis construcţia tabelei de poziţii şi orientări :
Exemple:
MANUAL (1) - se comandă trecere pe instrucţiune
CREATE (program instruire) - se creează fişierul program instruire
PRINT ('INSTRUIRE')
COORD (1) - se aşteaptă activarea cheii de terminare
Limbaje de Programare a Robotilor Industriali
122
a poziţionării când coordonatele poziţiei actuale sunt citite
RECORD (#0, 'strtx:= ', AX(1), ' ; ');
- se înregistrează în fişierul deschis valoarea deplasării pe x
RECORD (#0, 'strty:= ', AY(1), ' ; ');
- la fel deplasarea pe y
RECORD (#0, 'MOVE (1, #1,strtx, #2, strty, ,#6, strtw) ' );
- se înregistrează instrucţiunea de mişcare ce se doreşte a fi executate
RECORD (#0, 'STOP'); CLOSE STOP.
- se introduce indicatorul de sfârşit de fişier
Limbaje de Programare a Robotilor Industriali
123
VII. Subrutine, proceduri şi funcţii Un program realizat pentru orice tip de aplicaţie este cu atât mai bine
structurat şi realizat cu cât numărul instrucţiunilor se salt este mai mic.
Eliminarea acestor instrucţiuni, fără afectarea evoluţiei programului
se face utilizând o segmentare a programului şi mai ales o definire a unor
entităţi soft sub forma unor funcţii, subrutine, proceduri.
Astfel de entităţi vor cuprinde:
numele entităţii
specificarea parametrilor în zona de declarare a variabilelor
un mecanism de transfer al datelor, parametrilor de intrare (call by
value)
un mecanism de transfer al datelor prelucrate de entităţi soft (call by
reference)
un set de instrucţiuni care prelucrează datele
ieşirea din proceduri printr-un singur punct bine definit
Se remarcă faptul că nu s-a făcut absolut nici o specificaţie
referitoare la intrările în procedură, element care este exploatat de HELP
care permite o structură de tip subrutină cu mai multe intrări (o subrutină
în HELP este definită formal sub forma SUBROUTINE etichetă
Exemple:
L10 : IF a = b THEN GO SUB 50 END; L20 : IF a b THEN GO SUB L30 END; L40 : IF c b THEN GO SUB L50 END; L30 : L50 : RETURN
Limbaje de Programare a Robotilor Industriali
124
Datorită faptului că subrutinele, procedurile, funcţiile sunt elemente
cunoscute de către orice programator, în cele ce urmează ne vom limita la
expunerea principalelor particularităţi pe care le prezenta aceste structuri
în cazul limbajelor de programare a roboţilor industriali. Subrutinele sunt
specifice tuturor limbajelor ci excepţia limbajului ROBEX care
compensează acest lucru prin utilizarea procedurilor. Specific structurii
subrutina este faptul că apelul său se face printr-o instrucţiune de tipul
GOSUB nume program/etichetă iar întoarcere se face după execuţia
subrutinei şi întâlnirea instrucţiunii RETURN. În cazul limbajului VAL
după RETURN poate urma un index care să specifice dacă întoarcerea se
realizează la instrucţiunea de după apelul subrutinei (indexul lipseşte) sau
la a doua,….., a index-a instrucţiune după cea care a realizat apelul
subrutinei.
De remarcat că apelul unei subrutine se poate realiza şi prin
instrucţiunea REACTI când revenirea se face după RETURN la
instrucţiunea imediat următoare apelului, respectiv REACT index când
revenirea se face după index instrucţiuni ce urmează după apel.
Procedurile pot fi privite ca subprograme în cadrul programului
principal. Acestea sunt apelate prin numele procedurii însoţit de parametri
de intrare şi cei de ieşire. Corpul procedurii este cuprins, de obicei, între
un început BEGIN şi END, respectiv BEGIN_PROCEDURE,
END_PROCEDURE (pentru SRL). Utilizarea acestor structuri permit o
folosire mai judicioasă a memoriei, variabilele interne procedurii fiind
şterse la terminarea acesteia.
Limbaje de Programare a Robotilor Industriali
125
Dacă una dintre acestea trebuie memorată în vederea unor prelucrări
ulterioare sau alte apeluri ea va fi declarată OWN.VAR
Exemple:
Program 3: SE/M1, P1 - P1, P2 sunt parametri formali: M1P1 IC/M1, P2 - M1= M1 + P2 SE/I3, M1 - I3M1 Main program: SE/M10, 5 - M105 SE/M20, 17 - M2015
EX/3, M10, M20, 100 - apel program 3 cu P1=M10, P2=M20, I3=100 registru
Funcţiile realizează un compromis între proceduri şi subrutine în
ceea ce priveşte complexitatea: sunt apelate similar procedurile prin nume
şi parametri de intrare, dar numărul instrucţiunilor din corpul lor este
relativ redus. Corpul unei funcţii poate fi delimitat prin delimitatorii de tip
bloc (BEGIN şi END), tipul rezultatului întors trebuind să fie declarat în
declaraţia funcţiei. Numai limbajele SRL, PASRO, AL şi AML dispun de
structuri de tip funcţie.
Exemple: PASRO: FUNCTION sumă vector(v: vector): REAL; BEGIN Sumă vector: = v*x + v*y +v*z; END
PROCEDURA NUMEPROCEDURA
LISTAPARAMETRILOR ; BLOC DE
INSTRUCTIUNI
FORWARD
Declararea unei proceduri in PASRO si SR
Limbaje de Programare a Robotilor Industriali
126
A. Blocuri cu execuţie în paralel şi organizarea programului sub forma unor task-uri
Chiar dacă de obicei structura de control a unui robot nu este
multiprocesor, diferenţa de timp datorită vitezei mult mai mari a
procesorului relativ la viteza de execuţie a elementelor în mişcare permite
introducerea conceptului de execuţie în paralel a unor blocuri sau chiar
conceptul de multitasking. Diferenţa între blocuri cu execuţie în paralel şi
conceptul de multitasking se află mai mult la nivel conceptual şi al
validităţii datelor: blocurile executate în paralel nu schimbă date în paralel
ci mai degrabă într-un mod secvenţial în timp ce utilizarea programării
multitasking permite schimbul de date instantaneu între taskuri. Utilizarea
blocurilor cu execuţie în paralel este permisă numai de limbajele SRL şi
AL, începutul acestor blocuri fiind declarat prin instrucţiunile COBEGIN
pentru AL şi BEGIN_PARALLEL (pentru SRL) respectic COEND şi
END_PARALLEL.
Pentru blocurile cu execuţie în paralel se utilizează de obicei
indicativul soft sau întreruperi de tip semnal de la senzori în vederea
sincronizării execuţiei acestora.
Astfel spre exemplu dacă se doreşte comanda a două braţe care să
transfere un obiect din braţul 1 către braţul 2
Limbaje de Programare a Robotilor Industriali
127
Exemplu de program cu operaţii care se execută în paralel (limbajul AL)
BEGIN EVENT braţ deasupra, obiect prins, obiect eliberat; FRAME obiect, poziţie deasupra, terminal pe obiect, destinaţie; COBEGIN BEGIN “braţ 1” MOVE arm 1 TO obiect; CENTER arm 1; AFFIX obiect TO arm 1 MOVE obiect TO poziţie deasupra WITH APPROCH = -3xcm SIGNAL braţ deasupra; WAIT obiect prins OPEN hand 1 TO 6xcm UNFIX obiect FROM arm1
SIGNAL obiect eliberat END “braţ 1” BEGIN “braţ 2” OPEN hand 2 TO 6xcm; MOVE arm2 TO terminal pe obiect WITH APPROCH = -3xcm; WAIT braţ deasupra; CENTER arm2; AFFIX obiect TO arm2 SIGNAL obiect prins WAIT obiect eliberat MOVE arm2 TO destinaţie WITH DEPARTURE = - 6xcm END “braţ 2”; COEND; END;
B. Task-uri
În cadrul acestor structuri secvenţe funcţionale sunt rulate şi executate în paralel
sau cvasi-paralel, implicând astfel câteva caracteristici specifice task-urilor:
fiecare task are un suport local de date
un task poate fi oprit, pus în aşteptare, continuat sau terminat din exterior printr-
o comandă sistem sau alt task sau se pot opri sau termina prin evoluţie proprie.
anumite sisteme pot permite apeluri multiple ale unor task-uri specifice
între task-uri este posibilă o comunicaţie la nivel de date intertasking.
În continuare este prezentat un exemplu de multitasking destinat deservirii unui
număr de 10 magazii:
SYSTEM_SPECIFICATION ROBOT: rip = ROBOT (1) EFFECTOR: degete = GRIPPER(0) OF rip SENSOR:detector = CHANNEL(5) STRUCTURE detector = RECORD Contact: BOOLEAN; Lungime: REAL; END; INTERRUPT: emty FROM CHANNEL(7);
END_SYSTEM_SPECICICATION PROGRAM monitorizare (INFILE, OUTFILE) . . SECTION distribuţie VAR Magazin_list: ARRAY [1 9] OF FRAME Get_pos: FRAME Nr_magazie_curentă: INTEGER
Limbaje de Programare a Robotilor Industriali
128
Ieşire: BOOLEAN Clr: CHAR; SECTION break (nr_magazii: INTEGER); BEGIN_SECTION “break” WRITELN (“Întreruperi după magazie”, nemagazie); Ieşire:= TRUE END_SECTION “break” BEGIN_SECTION “distributie” WRITELN (“se începe distribuire”) Ieşire: = FALSE - se iniţializează lista magaziei şi poziţia depunere get_pos prin proceduri TEACH-IN ALWAYS WHEN detector contact= TRUE DURING FOR nr_magazie_curenta: = 1 TO 9 DO PTPMOVE rip TO get_pos; CLOSE degete; SMOVE rip TO magazin_list [nr_magazie_curentă] WITH DEP = 10; OPEN degete; IF ieşire THEN BEGIN WRITE(‘Indicator activat! Contiuni? Y/N’;
READLN (ch); IF ch = ‘N’ THEN EXIT_SECTION ELSE SUSPEND 500 MS END_IF END END_IF; END_FOR; END_DURING; DO START breeak(nr_magazie_curentă); WRITELN(‘Toate magaziile umplute!’); END_SECTION “distributie”; BEGIN_PROGRAM WRITELN (‘Programul de monitorizare magazii a inceput!’)
(* *)
START distributie; (* *)
END_PROGRAM.
Se remarcă faptul că în SRL task-urile sunt identificate prin secţiuni şi declarate
în mod similar procedurilor. O altă caracteristică evidenţiată de ctre programul
anterior este dată de faptul programul principal apare ca un fel de program de
nivel înalt care apelează task-urile declarate anterior.Se poate afirma că diferenţa
dintre task-uri şi proceduri este relativ redusă din punct de vedere sintactic, dar
din punct de vedere al execuţiei task-urile pot fi executate în paralel sau chiar
activate printr-un proces care implică acordarea unei anumite priorităţi fiecărui
task.
În cadrul programului prezentat ca exemplu se observă declararea iniţială a
subsistemelor şi elementelor structurii în cadrul secţiunii SYSTEM
SPECIFICATION. În cadrul secţiunii break se defineşte modul în care robotul
trebuie să răspundă la apariţia unui mesaj de tip semafor din partea unei intrări
Limbaje de Programare a Robotilor Industriali
129
logice, când după afişarea locului unde a avut loc evenimentul este activată logic
variabila set exit. Secţiunea distributie asigură comanda robotlui pentru
asigurarea alimentării cu piese a unor magazii precum şi apelul la alte secţiuni în
clipa apariţiei unor evenimente. Se observă modul în care secţiunile distribuţie,
break şi system specification interacţionează sau sunt executate în paralel
(distribuşie cu break)
Limbajul HELP care permite de asemenea regimul multitasking priveşte fiecare
task drept un program aparte, individual, identificat printr-o eticheta. Activarea
respectivului program se face printr-o comandă de tip ACTIVE (număr task,
număr task, …), pentru ca în prealabil fiecare task să fi avut definită o etichetă
identificatoare: ASSIGN (număr, REF tabel de referinţe).
Limbaje de Programare a Robotilor Industriali
130
VIII.Bibliografie şi referinţe [1.] A Manufacturing Language - Concepts and User’s Guide. IBM Corporation,
Boca Raton, Florida [2.] AML/Entry, Version 4, User’s Guide. IBM Corporation, Boca Raton, Florida [3.] Bernorio, M. Programming an Industrial Robot, 7th ISIR Tokyo [4.] Blume C, A Structured Way of Implementating the High Level Programming
Language AL on a Mini and Microcomputer Configuration - Proceedings of 11th ISIR, Tokyo .
[5.] Brockett Robotic manipulator and the product of exponentials formula, Mathematical Theory of Networks and Systems, 120-129, 1984
[6.] Brockett, A.Stokes, F.C. Park; A geometrical formulation of the dynamical equations describing kinematic chain, IEEE International Conference on Robotics and Automatics,637-642,1993
[7.] Christian Blume, Wilfrid Jakob, Programming Languages for Industrial Robots
[8.] Coiffet , Teleoperation and Robotics, Robot Technology Hermes Publishing [9.] Djikstra, P. J. , GOTO - Statement Considered Harmful, Communications of
the ACM 11 [10.] F.C.Park, Computational aspects of the product-of-exponentials formula for
robot kinematics,IEEE Transactions on Automatic Control,1994 [11.] Guide to Help - Language . Digital Electronic Automation, Turin [12.] Ivănescu,M., Roboti industriali -Algoritmi si sisteme de conducere, Editura
Universitara, Craiova, 1994. [13.] J.Denavit, R.S. Hartenberg A kinematic notation for lower-pair mechanisms
based on matrices- Journal of Applied Mechanics,215-221, 1955. [14.] Murray R. W. and al. A Mathematical Introduction to Robotic Manipulation,
CRC Press, Boca Raton, Florida [15.] Paden B., Kinematics abd Control Manipulators, PhD Thesis, Department of
Electrical Engineering and Computers Sciences, University of California, Berkley
[16.] Paul, R.P., Robot Manipulators: Mathematics, Programming and Control, MIT [17.] Pragma A 3000 - Operating and Programming Manual. Digital Electronic
Automation, Turin [18.] RAIL Reference Manual. AUTOVISION, Automatix Inc. Burlington,
Massachusetts [19.] Ranky, P. G. Robot Modelling - Control and applications with software,
Spring-Verlag [20.] Robotica - colecţie 1990 -1998 [21.] Rohlfing, H., SIMULA. Mannheim Wien Zurich [22.] Seling, J.M., Geometrical Methods in Robotics, Spring-Verlag [23.] SIGLA - The Olivetti Sigma Robot Programming Language, 8th ISIR, Stuttgard [24.] User Guide to VAL. A Robot Programming and Control System.Unimation
Robotics Inc.Connectticut [25.] User’s Guide to VAL II - A Robot Programming and Control System.
Unimation Inc. Danbury, Connetticut [26.] Weck M., Zuhlke D, Short Reference Manual of the ROBEX - Language