Sunteți pe pagina 1din 133

 Limbaje de Programare a Robotilor Industriali

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 39


1. Variabilele 39
2. Subrutine 41
3. Proceduri şi funcţii 42
4. Macroinstrucţiunile 43
5. Recursivitatea 43
6. Procese şi corutine 44

C. Conceptele specifice Limbajului Robot 45


1. Sistem de referinţă - Frame 46
2. Controlul mişcării robotului 47

IV. DATE ŞI STRUCTURI DE DATE UTILIZATE ÎN CADRUL


LIMBAJELOR DE PROGRAMARE A ROBOŢILOR INDUSTRIALI 53

A. Date utilizate de limbaje de programare a robotilor 53

B. Structuri de date 57

C. Moduri de manipulare a datelor 67


1. Operaţii logice 67
2. Operaţii de comparare 67
3. Operaţii aritmetice 68

1
 Limbaje de Programare a Robotilor Industriali

4. Operaţii geometrice 68
5. Funcţii standard 69
6. Expresii complexe cu anumite priorităţi: 70

V. INSTRUCŢIUNI 73

A. Instrucţiuni de descriere a mediului de operare 73

B. Instrucţiuni de mişcare 78
1. Instrucţiunile de mişcare implicite. 78
2. Instrucţiunile de mişcare explicite. 79
3. Precizia poziţionării. 82
4. Tipul controlului mişcării. 83
5. Instrucţiunile de mişcare care integrează şi supravegherea senzorilor. 88

C. Instrucţiuni de mişcare cu specificaţii tehnologice. 91

D. Instrucţiuni de mişcare cu monitorizarea unor evenimente. 92

E. Instrucţiuni de comandă şi control a end-effectorului 94


1. Instrucţiuni de acţionare a terminalelor cu parametrii 97
2. Instrucţiuni de comandă a terminalului cu monitorizarea senzorilor asociaţi 98

F. Instrucţiuni dedicate lucrului cu sistemul exterioceptor 100

G. Instrucţiuni de configurare a sistemului senzorial 101

H. Instrucţiuni de mişcare cu controlul duratei mişcării 103

I. Procese în paralel 104

J. Instrucţiuni destinate lucrului cu sisteme de vedere artificiale 105

K. Delimitarea programului prin intermediul blocurilor 110

L. Instrucţiuni de control al parcurgerii programului 111


1. Instrucţiuni de salt necondiţionat 112
2. Instrucţiuni de execuţie condiţionată 112
3. Instrucţiuni cu execuţii condiţionate 113
4. Instrucţiuni cu salt condiţionat 114

M. Instrucţiuni de sincronizare şi de temporizare condiţionată 118

N. Alte consideraţii privitoare la tratarea situaţiilor excepţionale, atribute şi stare sistemului 119

VI. INTEGRAREA ÎN PROGRAM A PROGRAMĂRII PRIN INSTRUIRE 121

VII. SUBRUTINE, PROCEDURI ŞI FUNCŢII 126

A. Blocuri cu execuţie în paralel şi organizarea programului sub forma unor task-uri 129

B. Task-uri 130

VIII. BIBLIOGRAFIE ŞI REFERINŢE 133

2
 Limbaje de Programare a Robotilor Industriali

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ă

Prelucrarea
informatiei

Transmisia Receptia
informatiei informatiei

Comunicatrul Comunicatorul
3
X Y

Figure 1
 Limbaje de Programare a Robotilor Industriali

într-un cadru real dat şi care se caracterizeazăprin faptul că este capabil să


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 C i 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

4
 Limbaje de Programare a Robotilor Industriali

simbolic care duce la extinderea lui F (nume care va purta, în continuare,


numele de reprezentarea sau semnătura lui m pentru C).
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 -


L1  M1 , F1 , f 1: M1  F1 , respectiv C2 - L2  M 2 , F2 , f 2 : M 2  F2 , motiv pentru
care în continuare se vor defini condiţiile ca schimbul de mesaje să aibă loc:
 C1  M 2 C2  M 1
1) comunicatorii trebuie sa aibă sens unul pentru altul: 
 f 2 C1   F2 f 1 C2   F1

2) comunicarea să poată să se facă prin mesaje ce pot fi înţelese:


UN C1   UN C2 

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 m1  F1  f m2  F2 - semantica primului comunicator sa fie transformată îintr-
o semantică ce poate fi înţeleasă de cel de-al doilea

5
 Limbaje de Programare a Robotilor Industriali

2) f m2  F2  m  M semantica celui de-al doilea comunicator să poată reface


informaţia percepută iniţial de primul comunicator.
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 F i a limbajului
comunicatorului emiţator, iar domeniul valorilor este sintaxa F j a limbajului
comunicatorului receptor: Ti : Fi  Fj

 funcţia de evaluare Ei definita pe sintaxa Fi si domeniul valorilor M:


Ei : Fi  M .

Relaţional funcţiile definite până în acest moment pot fi descrise prin


următoarea schemă:

f1 E1
M F1 M

f2
E2
F2

Figure 2

6
 Limbaje de Programare a Robotilor Industriali

Relaţiile dintre funcţiile descrise anterior sunt:


f 1  T1  E 2  f 2  E 2 ; f 2  T2  E1  f 1  E1
f 1  T1  f 2 ; f 2  T2  f 1
f 2  E 2  id M ; f 1  E1  id M

Concluzionând o pereche de comunicatori C 1, 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 11 , f 21 sunt inversele lor
3) există o pereche de funcţii T1: F1  F2 şi T2 : F2  F1 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: L1  N , 0,1,2,3,4,5,6,7,8,9*, f 1: N  0,1,2,3,4,5,6,7,8,9 * - acest limbaj
asociază numerelor naturale reprezentarea zecimală
L2  N , 0,1*, f 2 : N  0,1 * - acest limbaj asociază numerelor naturale

reprezentarea binară.
În aceste condiţii poate fi construită functia inversă

 
f 11 c0 , c1 , c2 c p  c0  10 p  c1  10 p1 c p ; c0 , c1 , c2 c p 0,1,2,3,4,5,6,7,8,9 * ,

respectiv f 21 c0 , c1cq   c0  2 q  c1  2 q 1 cq , unde c0 , c1 ,cq 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 21 c0 , c1cq   c0  2 q  c1  2 q 1 cq . Schema

comunicaţiei între cele două limbaje devine:

7
 Limbaje de Programare a Robotilor Industriali

f1 f-11
N {0,1,2 ,3,4,5 ,6,7 ,8,9} N

f2 T2 T1

f-12

{0,1}

Figure 3

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.

8
 Limbaje de Programare a Robotilor Industriali

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 : L1  M1 , F1 , f 1: M1  F1 ; iar pentru comunicatorul C2

L2  M 2 , F2 , f 2 : M 2  F2 caracteristic fiind faptul ca M1 = M2 . Sigur că în


realitate relaţia nu este general valabilă, relaţii de tipul M1  M 2 sau
M1  M 2 fiind mult mai generale. Din considerente de simetrie va mai fi

introdusă o funcţie parţial inversabilă , funcţie de corespondenţă c: M1  M 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: F1  F2 . 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 : F1  F2   . Acesta este cazul general, în particular relaţiile sunt de
tipul: F1  F2 sau F2  F1 .
 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

9
 Limbaje de Programare a Robotilor Industriali

informaţiei schimbate sau prelucrate poate fi superior realităţii


senzoriale.(aşa 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:

f1 f 1-1
M1 F1 M1

c T1 T2
c-1

f 2-1
f2
M2 F2 M2

Figure 4

10
 Limbaje de Programare a Robotilor Industriali

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:

f1 f 1-1
M1 F1 M1

c T1 T2
c-1

f 2-1
f2
F1 F2 F1

Figure 5

11
 Limbaje de Programare a Robotilor Industriali

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: LC  M , F , f : M  F şi se alege o structură din F
numită sistem formal asociat comunicatorului maşina, astfel încât: M F  F .
Î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 : M F  FM 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  M F , FM , f M : M F  FM 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 : M  F , astfel ca m, f m să fie
un mesaj.

12
 Limbaje de Programare a Robotilor Industriali

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ă M F exista
relaţia: M F  F . î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 m  M 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  M F , FM , f M : M F  FM precum si condiţia
suplimentară MF  F . Denumind ca funcţie de utilizare funcţia
:: F  M condiţiile pe care aceasta împreună cu f trebuie să le îndeplinească

sunt: f    1M   f  1F , funcţia id este denumită funcţie translatoare iar o


reprezentare grafică este:

13
 Limbaje de Programare a Robotilor Industriali

f 
M F M

id id

f

F

Figure 6
Având în vedere ca dialogul se realizează între comunicatori formali
aparţinând clasei C. specificaţi prin L  M, M F  F, f : M  M F şi

comunicatorul maşină L M  M F , FM , T: M F  FM , diagrama de comunicaţie va


avea structura:
f 
M MF M

T T-1

FM

Figure 7
în aceste condiţii limbajul maşină va fi definit prin tripletul
L M  M F , FM , T: M F  FM sau mai exact L M  FM , FM , id: FM  FM în timp ce

tripletul LP  M F , M F  F , f : M  M F va purta numele de limbaj de


programare.

fC 
C
MC FC MC

f C/F n 
C
/F n
id1 id2

FM

Figure 8
14
 Limbaje de Programare a Robotilor Industriali

Pentru a completa această discuţie este normal să fie prezentat şi legătura


dintre limbajul maşină şi limbajul constructorului maşinii
LC  M C , FC , f C : M C  FC . Este evident că FM  FC precum şi următoarea

diagramă:
Problemele ridicate de accesibilitatea limbajului de programare au complicat în
mod necesa funcţia de translator T: FP  FM 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 p  D  date, O  operatii .

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

15
 Limbaje de Programare a Robotilor Industriali

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
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, LP  M P , FP , f P : M P  FP , î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 i  Pd i 1 ; Coi  Poi 1 i  0, n

16
 Limbaje de Programare a Robotilor Industriali

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:
LP  M P , FP , f P : M P  FP - limbajul de programare asociat unei clase de
utilizatori
L M  M m , Fm , f m : M m  Fm - limbajul natural al unui comunicator maşină dat.

{primitive - Pdi } {primitive - Poi }

Date Sistem de nivel i Operatii

{complexe - Cdi } {complexe - Coi }

{primitive - Pdi+1 } {primitive - Poi+1 }

Date Sistem de niveli+1 Operatii

{complexe - Cdi+1 } {complexe - Coi+1 }

Figure 9
Implementarea limbajului LP pentru comunicatorul maşină Cm specificat de LM
se înţelege diagrama de comunicaţie:

fP P
MP FP MP

h1 T1 T2
h2

m
fm
Mm Fm Mm

Figure 10

17
 Limbaje de Programare a Robotilor Industriali

unde T1 şi T2 sunt funcţiile reprezentare integrate în structura asociată lui F m,


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
Ti : Fi  Fj unde Fi este sintaxa limbajului comunicatorului emiţător, iar Fj

este sintaxa a limbajului comunicatorului receptor, precum şi funcţia de


evaluare Ei : Fi  M .
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 F  F .
 în cadrul comunicaţiei apar o serie de limbaje între care există
legături ierarhice. Ierarhia acestora este:
a) L M  M m , Fm , f m : M m  Fm - limbaj maşină

b) LC  M C , FC , f C : M C  FC - limbajul constructorului maşinii,


relaţia dintre limbajul maşină şi limbajul constructorului cea
mai importantă fiind Fm  FC

c) LP  M P , FP , f P : M P  FP - limbajul de programare asociat unei


clase de utilizatori, unde MP este un sistem formal în limbajul

18
 Limbaje de Programare a Robotilor Industriali

natural al clasei comunicatorilor cărora li se oferă limbajul de


comunicare, sistem definit ca o pereche:
M p  D  date, O  operatii .

19
 Limbaje de Programare a Robotilor Industriali

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).

20
 Limbaje de Programare a Robotilor Industriali

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;

21
 Limbaje de Programare a Robotilor Industriali

- 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.

22
 Limbaje de Programare a Robotilor Industriali

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:

23
 Limbaje de Programare a Robotilor Industriali

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:

24
 Limbaje de Programare a Robotilor Industriali

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.

25
 Limbaje de Programare a Robotilor Industriali

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:

26
 Limbaje de Programare a Robotilor Industriali

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:

27
 Limbaje de Programare a Robotilor Industriali

- 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;

28
 Limbaje de Programare a Robotilor Industriali

- î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.
qi  Q n 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 qi  qi 1  qi 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);

29
 Limbaje de Programare a Robotilor Industriali

 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 ( q max , qmax ).

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.

30
 Limbaje de Programare a Robotilor Industriali

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;

31
 Limbaje de Programare a Robotilor Industriali

 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 R m. 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.

32
 Limbaje de Programare a Robotilor Industriali

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 p i. 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.

33
 Limbaje de Programare a Robotilor Industriali

(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.

34
 Limbaje de Programare a Robotilor Industriali

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).

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):

 J q  
dx dq
dt 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.

35
 Limbaje de Programare a Robotilor Industriali

III. Elemente de bază ale l imbajelor 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

36
 Limbaje de Programare a Robotilor Industriali

 programarea întârzierilor
 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:
complex complex
dificil dificil
Limbajul este . respectiv Studentul este . Datorită semnificaţiei
blond blond
brunet brunet

în limba română se observă, eliminând sensurile indirecte, că ultima regulă


trebuie prelucrată sub forma:

37
 Limbaje de Programare a Robotilor Industriali

d) al treilea simbol al propoziţiei este:


 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.

38
 Limbaje de Programare a Robotilor 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,
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

39
 Limbaje de Programare a Robotilor Industriali

î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 Nume Adresă relativă
instrucþiune
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ă,
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

40
 Limbaje de Programare a Robotilor Industriali

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;
.
.
. c - valid
END “ bloc 2 “ b - valid
.
.
.
a,v - valid
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 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

41
 Limbaje de Programare a Robotilor Industriali

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

Í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

42
 Limbaje de Programare a Robotilor Industriali

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:
* 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:

43
 Limbaje de Programare a Robotilor Industriali

Procedura A Procedura A
 
Call A Call B
recursiv 

 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;
* în stare ready - starea premergătoare stării active şi post active;
* în stare de aşteptare a unui eveniment - waiting

Figure 11

44
 Limbaje de Programare a Robotilor Industriali

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.
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.

45
 Limbaje de Programare a Robotilor Industriali

1. Sistem de referinţă - Frame

Figure 13

46
 Limbaje de Programare a Robotilor Industriali

Orientarea şi poziţia end-effectorului şi a întregii arhitecturi robotice este


definită ca fiind poziţia robotului respectiv orientarea acestuia. Acestea sunt
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:

47
 Limbaje de Programare a Robotilor Industriali

Figure 14

48
 Limbaje de Programare a Robotilor Industriali

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:
F (t )  B1  B2t  B3t 2  B4t 3 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:
F (0)  Fk F (tk 1 )  Fk 1
F (0)  Fk F (tk 1 )  Fk1 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:
F (0)  B1  Fk
F (0)  B2  Fk
F (t k 1 )  B1  B2 t k 1  B3t k21  B4 t k31  Fk 1 1.3.
F (t k 1 )  B2  2 B3t k 1  3B4 t k21  Fk1
Rezolvând aceste ecuaţii în vederea determinării lui B 3 şi B4, utilizând
apoi forma lui B1 şi B2 obţinem:
1  3( Fk 1  Fk ) 
B3    2 Fk  Fk1 
t k 1  t k 1 
1  2( Fk  Fk 1 )  1.4.
B4  2   Fk  Fk1 
t k 1  t k 1 
sau mai compact:
 B1   1 0 0 0   Fk 
B   0  
0 1 0   Fk 1 
 2 3 3 2  1  Fk 
 B3    2 
   t k 1 t k21 t k 1 t k 1    1.5.
   2 2 1 1 F 
 
 B4   t 3   k 1 
   k 1 t k31 t k21   
2
t k 1
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 t k+1 va fi o
valoare măsurată în unităţi temporale, calculat sub forma:
1
m  2
t k 1   (qi ,k 1  qi ,k ) 2 
 i 1  1.6.

49
 Limbaje de Programare a Robotilor Industriali

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):
F (t k 1 )  2 B3  6 B4 t k 1
6  2( Fk  Fk 1 )  2  3( Fk 1  Fk ) 
   Fk  Fk1     2 Fk  Fk1  1.7.
t k 1  t k 1  t k 1  t k 1 

2  3( Fk  2  Fk 1 
F (0)  2 B3    2 Fk1  Fk 2 
1.8.
t k 2  t k 2 
Din egalarea celor două ecuaţii (condiţia de continuitate) rezultă:
t k  2 Fk  2(t k  2  t k 1 ) Fk1  t k 1 Fk 2 
3

t k 1t k  2
t k21 ( Fk  2  Fk 1 )  t k2 2 ( Fk 1  Fk  1.9.

Exprimând această ecuaţie pentru 2  k  n  3 se obţine:


t 4 2(t 3  t 4 ) t3 0 0   F2 
0 t5 2(t 4  t 5 ) t4 0   F3 

       
  
       
       
  
 0 0 t n 1 2(t n  2  t n 1 ) t n  2   Fn1 


 
3 2
t 3t 4
t 3 ( F4  F3 )  t 42 ( F3  F2 )  

 



3 2
t 4t5
t 4 ( F5  F4 )  t 5 ( F4  F3 )
2
 

   
 
  
  
 3 
  
t n2 2 ( Fn 1  Fn  2 )  t n21 ( Fn  2  Fn 3 )  1.10.
 t n  2 t n 1 
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:
F (t )  B1  B2 t  B3t 2  B4 t 3  B5t 4
1.11.
având condiţiile la limită: F'1  F"1  F' n  F" n  0 1.12.
Urmând aceeaşi procedură se obţine:

50
 Limbaje de Programare a Robotilor Industriali

F (0)  B1  F1
F (0)  B2  0
F (0)  2 B3  0
1.13.
F (t 2 )  F1  B4 t 23  B5 t 24  F2
F (t 2 )  3B4 t 22  4 B5 t 23  F2
respectiv rezolvând acest sistem pentru determinarea lui B4 şi B5:
4 1
B4  3
( F2  F1 )  2 F2
t2 t2
3 1 1.14.
B5  4
( F1  F2 )  3 F2
t2 t2
Utilizând condiţiile la limită se obţine:
F (0)  B1  Fn 1
F (0)  B2  Fn1
F (t n )  Fn  Fn 1  Fn1t n  B3t n2  B4 t n3  B5 t n4 1.15.
F (t n )  0  Fn1  2 B3t n  3B4 t n2  4 B5 t n3
F (t n )  0  2 B3  6 B4 t n  12 B5 t n2
Rezolvând aceste ecuaţii se determină coeficienţii:
1
B3  (6 Fn  6 Fn 1  3Fn1t n )
t n2
1
B4  (8 Fn  8 Fn 1  3Fn1t n )
t n3 1.16.
1
B5  (3Fn  3Fn 1  Fn1t n )
t n4
Dacă se pun condiţiile de continuitate a acceleraţiei pentru primele două
segmente
F (t 2 )  6 B4 t 2  12 B5 t 22 
6
2
4( F2  F1 )  t 2 F2  122 3( F1  F2 )  t 2 F2
t2 t2
rezultă:
2 3 1 3 6
(  ) F2  F3  2 ( F3  F2 )  2 ( F2  F1 )
t3 t 2 t3 t3 t2 1.17.
Utilizând acelaşi mecanism şi pentru sfârşitul traiectoriei:
2 3 1 3 6
(  ) Fn1  Fn2  2 ( Fn1  Fn 2 )  2 ( Fn  Fn1 )
t n1 tn t n1 t n1 1.18. tn
Sintetizând aceste rezultate de-a lungul traiectoriei se poate forma o
structură compactă a sistemului care trebuie determinat sub forma 1.19 unde:

51
 Limbaje de Programare a Robotilor Industriali

2 3
M 22  
t3 t 2
1
M 23 
t3
1 6
M n 1,n  2  a 2  ( F3  F2 )  ( F2  F1 )
t n 1 t 22
2 3 3 6
M n 1,n 1   a n 1  2
( Fn 1  Fn  2 )  ( Fn  Fn 1 )
t n 1 tn t n 1 t n2
 M 22 M 23 0      0  F2 
 t 2(t 3  t 4 ) t 3 0        F3 
 4  
 0           
  
         0   
    t n 1 2(t n  2  t n 1 )   t n2    Fn 2 
  
 0   0 M n 1,n  2   M n 1,n 1    Fn1 


 
3 2
t 3t 4
t 3 ( F4  F3 )  t 42 ( F3  F2 )

 
 
  
  
 
  

 3 t 2 (F  F )  t 2 (F  F ) 
 t n  2 t n 1 n  2 n 1 n2 n 1 n2 n 3


 
 a n 1  1.19.

52
 Limbaje de Programare a Robotilor Industriali

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

53
 Limbaje de Programare a Robotilor Industriali

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 Litere Numar caractere Numar caractere
mari mici interpretabile 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

54
 Limbaje de Programare a Robotilor Industriali

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 SIGLA
INTEGER INTEGER SCALAR INT Integer Scalar Scalar Counter
REAL REAL SCALAR REAL Scalar Scalar
BOOLEAN BOOLEAN SCALAR - - -
CHARACTE CHAR CHAR - - -
R
STRING STRING - STRIN - -
G
SEMAPHOR EVENT Semapho Flags
INTERRUPT re
iar domeniul valorilor acestor tipuri de bazá este prezentat ín
urmátorul tabel:
Tipul de data Numar de byti Domeniul
INTEGER 2 -32768 ... + 32767
REAL 4 0.15224277E-39 ...
0.17014111E+38
BOOLEAN cel putin unul FALSE, TRUE
CHARACTER cel putin unul caractere ASCII
EVENT 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

55
 Limbaje de Programare a Robotilor Industriali

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 Identificator

Specificatii
dimensionale
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
x y z
x y z
PARTR:NEW<90,0.0,45>;  90 0.0 45
PARTR

56
 Limbaje de Programare a Robotilor Industriali

Respectiv frame pentru cazul ín care ansamblul cuprinde 7


x y z roll pitch yaw deschidere
date: gripper

PICKUP:NEW 7 OF 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0


PICKUP-frame
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

57
 Limbaje de Programare a Robotilor Industriali

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 variabile
PASCAL: 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

58
 Limbaje de Programare a Robotilor Industriali

þ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

Figure 15
- fißierele -FILE. Aceste structuri de date sunt cele mai complexe
ßi mai ample atät din punct de vedere al dimensiunii pe care o

59
 Limbaje de Programare a Robotilor Industriali

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>

60
 Limbaje de Programare a Robotilor Industriali

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.

61
 Limbaje de Programare a Robotilor Industriali

1. TYPE 37. begin


2. boxpointer=^boxtype; 38. new (affixelem);
3. framepointer=^frametype; 39. affixelem^.next:=nil;
4. affixpointer=^affixelement; 40. affixelem^.affixedbox:=kx;
5. transpointer=^transformationt 41. write(kx^.num);
ype;
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. begin
10. end; 46. affixaux:=ky^.affixrel;
11. transformationtype = 47. while affixaux^.next <> nil do
record
12. orient:rotationtype; 48. affixaux:=affixaux^.next;
13. pos:vectortype; 49. affixaux^.next:=affixelem;
14. end; 50. end
15. frametype=transformationtyp 51. end;
e;
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. begin
21. 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. begin
27. 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 68. end;
affix(kx,ky:boxpointer);
33. {Generarea relatiilor intre kx 69. k:=boxes^.next^.next;
si ky}
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 k1k4, care vor fi
memorate utilizänd variabile de tip pointer.Ín cadrul pointerului

62
 Limbaje de Programare a Robotilor Industriali

ataßat Figure 16 se observá cá se vor introduce informaþii


privitoare la:

Figure 16

- 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).

63
 Limbaje de Programare a Robotilor Industriali

Figure 17
Í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
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
(kky).

64
 Limbaje de Programare a Robotilor Industriali

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).

65
 Limbaje de Programare a Robotilor Industriali

Forma finală datorată acestor instrucţiuni de cuplare a elementelor este


prezentată în figura următoare:

Figure 19
Í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.

66
 Limbaje de Programare a Robotilor Industriali

C. Moduri de manipulare a datelo r


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 AL AML HELP
PASRO
Funcţia Şi b AND b s AND s i AND i expr AND expr
Funcţia b OR b s OR s i OR i expr OR expr
SAU
Funcţia NU NOT b NOT s NOT i NOT expr
Funcţia b <> b s XOR s i XOR i
SAU
exclusiv
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

67
 Limbaje de Programare a Robotilor Industriali

3. Operaţii aritmetice
Mod de reprezentare în:
Operaţie SRL şi AL AML VAL VAL II HELP SIGLA
PASRO
Adunare i+I s+s i+i i+i s+s s+s IC/i,i
r+r r+r
i+r i+r
r+I r+i
Scădere i-I s-s i-i i-i s-s s-s IC/i,-i
r-r r-r
i-r i-r
r-I r-i
Înmulţire i*I s*s i*i i*i s*s s*s abs.
r*r r*r
i*r i*r
r*I r*i
Împărţire i/I s/s i/i i/i s/s s/s abs.
r/r r/r
i/r i/r
r/I r/i
Împărţire a i DIV I s DIV s r DIV r i/i abs. abs. abs.
întregilor i IDIV i
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) |s| abs. abs. abs. abs. abs.
ABS(r)
Inversare semn -I -s -i -i abs. -s NE/-i
-r -r
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
unei

68
 Limbaje de Programare a Robotilor Industriali

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 translatia unui sistem
(f,f,v) 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 <- f*f compunerea a doua
(f,f1,f2) 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 COS
tangentã TAN abs. abs.
arctangentã ARCTAN ATAN2 ATAN ARCT ATAN
G
arcsinus abs. ASIN abs. abs.
arccosinus abs. ACOS abs. abs.
conversie REAL
la INTREG cu :
trunchiere TRUNCH TRUNCH INT abs. abs. abs.
rotunjire ROUND ROUND
exponent EXP abs. abs. EXP
logaritm natural LN LOG abs. abs. NLOG
logaritm zecimal 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 INPUT INSCALAR ASK
booleene INPUT QUERY abs. ASKN abs.
vector vread INPUT
rotaþii rread INPUT
sistem fread INPUT

69
 Limbaje de Programare a Robotilor Industriali

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 function function = function
maximă call,(),NOT call,||,NOT call,(),NOT
2. *,.,/,DIV,MOD, WRT, ->, ^ NOT *,/,AND
AND
3. +,-,OR *,/,.,DIV,MOD, *,/,IDIV +,-,OR
MIN,MAX
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;

70
 Limbaje de Programare a Robotilor Industriali


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); se citeşte pozişia curentă, urmând ca
framef (1) := AX(1); elementele curente AX,AY,AZ,AR,AP,
AYW să fie memorate într-o matrice
framef (2) := AY(1);
framef
framef (3) := AZ(1);
framef (4) := AR(1);
framef (5) := AP(1);
framef (6) := AYW(1);

- 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>);
PASR WRITE(<lista de parametri>);
O:
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>

71
 Limbaje de Programare a Robotilor Industriali

72
 Limbaje de Programare a Robotilor Industriali

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,

73
 Limbaje de Programare a Robotilor Industriali

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 cere informaţia legată de existenţa obiectului part1;


(part 1): rezultatul poate fi False sau True.
SRL: greutate_obiect1:= ATTRIBUTE variabila greutate_obiect1 ia valoarea
weight OF obiect1: 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;

74
 Limbaje de Programare a Robotilor Industriali

6. t,o,a : vector 53. affixframe:=targetframe;


7. END 54. affixrel.translation.x:=
pos.x-targetframe^.pos.x;
rotation
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, :trans; 78. 
dummytrans
32. box,hole,grip, :framepointer; 79. newframe(cutie,80,60,24);
appros
33. PROCEDURE newframe(VAR 80. newframe(orificiu,70,60,34);
framevar:framepointer;xf,yf,zf:REAL);
34. BEGIN (se construieste o noua 81. newframe(mina,70,50,44);
referinta)
35. NEW(framevar) 82. newframe(apropos,70,50,50);
36. WITH framevar^ DO 83. 
37. BEGIN 84. affix(orificiu,cutie,dummytrans
);)
38. next :=NIL; 85. affix(mina,cutie,affixvariable);

75
 Limbaje de Programare a Robotilor Industriali

39. orient :=nilrot; 86. affix(apros,mina,dummytrans);


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

76
 Limbaje de Programare a Robotilor Industriali

Se observă că procedura affix cu atributele atframe, targetframe,


affixtrans realizează o actualizare a parametrilor atframe: x, y, z şi posibil x, y,
Coordonata X a lui atframe
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

77
 Limbaje de Programare a Robotilor Industriali

singur bloc, transformările ulterioare fiind transferate ambelor elemente: AFFIX


box TO ARM RIGIDLY.

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:
N um ele
MOVE / Ele me ntul 1 , s upr afe te i
e le me ntului 1
, A GA INST

C OPLA N A R

N um ele
Par a me tr i
, Ele me ntul 2 , s upr afe te i
e le me ntului 2
, a ditiona li

Figure 21

78
 Limbaje de Programare a Robotilor Industriali

Exemplu:
ROBEX: MOVE / cutie1, underside, Se dă comanda de a muta cutie1 cu
AGAINST, cutie2, top, EVENT, 2, faţa de jos (underside) deasupra
(top) cutie2, mişcarea care are loc
ELSE, mesaj
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 READY Declară oriunde poziţia
ARMi 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.

79
 Limbaje de Programare a Robotilor Industriali

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, se comandă mişcarea motorului 1 cu 1317 paşi,
180 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
unui
AL: DRIVE JOINT(4) OF ARM1 BY 20 singur motor
ROBEX: DRIDLT / 2, 10
VAL: DRIVE 2, 20, – limbajul VAL realizeaza numai
100 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 0X ,110
Y
,30 , 0 , 60 , 0
Z roll pitch yaw

MOVE #P1
SRL: SMOVE robot TO FRAMEC (VECTORC(95,20,40),
ROTC(zaxis,90)

80
 Limbaje de Programare a Robotilor Industriali

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);  se defineşte relvector
frametransl (goal, robotframe,  frame-ul goal =
relvector); robotframe curent + relvector
smove(goal);  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 := 5
AL: MOVE ARM TO targetframe WITH SPEED FACTOR =3
AML: SPEED (0.8)
VAL: SPEED 200 - de 3 ori viteza normală
HELP: SPEED(1,80) - braţul 1 se mişcă cu 80% din
MOVE(1,#1,30,#3,10,#11,80) viteza maximă
ROBEX: RAPID

81
 Limbaje de Programare a Robotilor Industriali

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  Argumentele care urmează după WITH pot fi:
WITH
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 - mişcare cu precizie
goalframe WITH NULLING
AML: SETTLE(OFF) - după încetarea mişcării curente
MOVE(ARM, targetframe) 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

82
 Limbaje de Programare a Robotilor Industriali

traiectoriei de control este dezactivată


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  mişcare cu interpolare lineară, toate
WITH DURATION = 5 motoarele pornind în acelaşi timp şi
oprindu-se în acelaşi punct
SMOVE robot TO goalframe  mişcarea se realizează cu o viteză
WITH V=25 programată cu o acceleraţie
WITH ACC = 20 programată, menţinând permanent
orientarea gripper-ului const.
WITH CONSTORIENT
CIRCLE robot CP = centerframe  robotul va descrie o mişcare
DEG = -45 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  robotul rip se mişcă până în
WITH VIAFRAMES(savepos1, goalframe prin poziţiile intermed.
savepos2) 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

83
 Limbaje de Programare a Robotilor Industriali

MOVES targetframe -interpolare lineară


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:

84
 Limbaje de Programare a Robotilor Industriali

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 -mişcarea se ralizează după o traiectorie care
WITH SMOOTHFAC=0,5 va trece prin cele 2 puncte intermediare
WITH VIAFRAMES
(interframe1, interframe2);

VIAMOVE WITH SMOVE -mişcarea se realizează până în interframe,


puma TO 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 -mişcarea este definită sub forma unei
complex_handling; proceduri, cuărinzând mişcare punct cu punct,
mişcare liniară şi circulară cu o viteză
Begin_MOVEDEF
programată. Se observă structura de bloc a
PTPMOVE TO above_pas procedurii.
SMOVE TO bow_beg Apelul acestei proceduri se face prin
WITH instrucţiunea standard MOVEDO şi numele
CONSTORIENT; procedurii de mişcare, fară ca să fie necesară
CIRCLEMOVE efectuarea calculelor de mişcare ce au fost
CP=bow_center executate în timpul declanşării procedurii
DEG=90
ITH V=150;

85
 Limbaje de Programare a Robotilor Industriali

END_MOVEDEF;
MOVEDO complex_handling ;
AL: MOVE ARM TO targetframe - caracteristic acestei mişcări este faptul că în
VIA inertframe1, interframe2; cazul în care poziţiile intermediare suunt
apropiate, poate interveni o mişcare
suplimentară nu întotdeauna controlabilă
VAL: ENABLE CP -mişcarea prin punctele intermediare este
MOVES interframe1 auxiliar controlată prin sistemul de
microîntrrerupătoare (de întreruperi ON/OFF
MOVES interframe2
hard) CP
MOVES targetframe
DISABLE CP
HELP: SMOVE(1,#1,xz1,#2,yz1,#3,zz1 -limbajul HELP neavând declaraţii de puncte
,#4,rz1,#5,pz1,#6,yawz1,#7,400 intermediare de tip implicit, realizează
mişcarea liniară cu instrucţiunea SMOVE şi
);
argumentele specifice deplasării fiecărui
SMOVE(1,#1,xz2,#2,yz2,#3,zz1 motor cu un increment declarat explicit.
,#4,rz2,#5,pz2,#6,yawz2,#7,300
);
MOVE(1,#1,x,#2,y,#3,z,#4,r,#5,
p,#6,yaw);
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 -mişcarea începe cu V=50cm/s, iar după
WITH V=50 atingerea lui interframe continuă cu 15cm/s
WITH VIAFRAMES ( interframe)
WITH V=15
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.

86
 Limbaje de Programare a Robotilor Industriali

Figure 22
Exemple:
SRL: SMOVE rhino TO targetframe -primele argumente indică primele
WITH APRO=20 mişcări pe care le face robotul în
traiectoria de atingere a poziţiei finale
WITH DEP=10
(targetframe): mişcare în sus cu 20cm
WITH SMOOTHFAC=8; (deasupra ţintei) urmată cu o mişcare cu
10cm deasupra ţintei. Argumentul 3
indică precizia dintre mişcări
AL: MOVE ARM TO targetframe -explicaţia este similară celei anterioare,
WITH APPROACH=FRAME( rotation, cu deosebirea că aici modul de apropiere
este mai complex specificat: prin poziţia
vector)
ş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 -mişcarea iniţială se face cu 50mm pe axa Z,


APROS targetframe, 40 urmată de o mişcare până la 40mm pe Z
MOVE targetframe
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

87
 Limbaje de Programare a Robotilor Industriali

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 -se comandă o mişcare sinusoidală implicită
WITH WOBBLE
AL: MOVE ARM TO targetframe -în acest caz amplitudinea sinusoidei poate fi
WITH WOBBLE=2 programată

VAL: WAEVE 25,5,2 -se indică o milcare triunghiulară cu


MOVES targetframe 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:

88
 Limbaje de Programare a Robotilor Industriali

SRL: WHEN SENSOR 2 force>=100 - dacă forţa de-a lungul direcţiei Z


MONITORED EVERY 75 MS este mai mare sau egală cu 100g în
timpul deplasării de-a lungul unei
DURING
drepte spre box robot se va opri.
SMOVE robot TO box Această condiţie este verificată
WITH VELOCITY=0.5; (monitorizată) la fiecare 75ms
END_DURING
DO STOP robot;
SRL: DIRMOVE puma IN ZAXIS WITH -se constată că decizia de oprire
V=20 este una combinată între respectarea
UNTIL DISTANCE TO START>50 unei distanţe şi activarea unui
switch, care este citit la fiecare
OR SENSOR switch=TRUE 100msec din considerente legate de
MONITORED EVERY 100MS 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 -dacă în timpul deplasării braţului ARM spre


ON FORCE(ZHAT)>=100*GM targetframe forţa de-a lungul axei Z este >=100g
atunci robotul se va opri
DO
STOP 2
Exemple:

MOVE ARM2 TO targetframe -sistemul de referinţă pentru


WITH FORCE_FRAME=gripperframe IN exprimarea forţei este cel legat de
gripper (IN HAND) şi controlează astfel
HAND
deplasarea spre targetframe cu forţa mai
ON FORCE>= 200*GM ALONG ZHAT DO mică de 200g. Dacă forţa este mai mare
BEGIN sau egală cu 200g se va afişa mesajul
STOP; DEPĂŞIRE FORŢĂ, indicatorul flag
PRINT ("Depaşire forţă ") trece în TRUE, iar table este încărcat cu
table  ARM2 constanta ARM2
flag  T
END;
Exemple:

89
 Limbaje de Programare a Robotilor Industriali

MOVE ARM3 TO targetframe -braţul ARM3 este comndat să


ON FORCE <30*GM se mişte spre targetframe cu o forţă de
30g de-a lungul axei X exprimata în
ALONG XHAT OF edge in WORLD DO
coordonate faţă de bază, iar dacă este
ON FORCE >=500*GM ALONG YHAT DO mai mic, atunci se verifică dacă forţa
PRINT ("Atenţie la forţa de-a lungul axei Y")2; 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'); -este monitorizat sistemul senzorial din gripper-ul


MOVE (ARM,fgoal,LED) 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:

90
 Limbaje de Programare a Robotilor Industriali

Exemple:
SMOVE (1,#3,150); -robotul este comandat pentru a se deplasa de-a lungul dreptei Z
FORCE (1,#3,60); (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, - instrucţiune de deplasare efectivă a 3 cu 70 de
5 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 - robotul rip se deplasează spre left_side cu o
WITH FORCE IN forţă de-a lungul direcţiei x de 500g
XAXIS=500
AL: MOVE pensulă TO left_side - dipozitivul de vopsire ce este fixat în
WITH FORCE gripperul robotului este deplasat în
left_side cu forţa de-a lungul lui x de
(XHAT)=500*GM
500g

91
 Limbaje de Programare a Robotilor Industriali

MOVE burghiu TO below - găurirea se realizează cu o

WITH FORCE=700*GM forţă de 700g de-a lungul axei Z în


timp ce de-a lungul axelor X şi Y
ALONG ZHAT OF drilltip IN
în sistemul relativ la gripper forţa
HAND
va fi 0
WITH FORCE=0*GM ALONG XHAT
WITH FORCE=0*GM ALONG YHAT

Figure 23

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:

92
 Limbaje de Programare a Robotilor Industriali

SRL: WHEN strung-stop  oprirea prelucrării pe strung (sesizată de


DURING un senzor cuplat şi asigrat a fi strung-stop)
SMOVE brat1 TO duce la întreruperea mişcării braţ1 către
destinaţie
destinaţie
END_DURING
DO STOP brat1
AL: MOVE ARM1 TO  odată cu terminarea mişcării braţ 2 şi
destinaţie validarea semaforului soft braţ2stop are
ON brat2stop DO loc oprirea mişcării executată în paralel de
către ARM1
STOP ARM1
VAL: REACT 2, întrerupt  dacă în timpul deplasării către destinaţie
MOVE destinaţie canalul 2 este activat se trece la execuţia
IGNORE 2 ALWAYS 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: - după testarea canalului 5 coordonatele
IF TESTB(5) THEN robotului sunt comparate cu cele
!instrucţiuni corespunzătoare poziţiei finale a robotului.
Dacă nu s-a terminat mişcarea atunci are loc
!instrucţiuni
un salt la etichetă şi mişcarea se reia, dacă da,
EOM(1) atunci EOM aşteaptă confirmarea terminării
END; mişcării de către toate axele şi apoi programul
COORD(1); continuă. Dacă canalul 5 este în 1 logic atunci
IF AY(1)<149 THEN zona IF poate fi executat de câteva ori,
GO TO eticheta îndeplinirea condiţiei ca AY(1)149 să fie
END; urmate de EOM cu aceeaşi semifivaţie
EOM(1)
duration:=3; - dacă durata mişcării
SMOVE(1, 2, 120); curente nu depăşeşte o
valoare prestabilită (3
Starttime:= TIME();
secunde în acest caz) se
Eticheta:
execută setul
dt:= TIME() – starttime INSTRUCŢIUNI în paralel
IF dt=duration OR dt>duration THEN cu execuţia mişcării anterior
INSTRUCŢIUNI declanşate până la
EOM(1) terminarea tuturor
ELSE deplasărilor EOM(1). În caz
COORD(1) contrar până la atingerea
coordonatei de-a lungul axei
IF AY(1) < 120.1 THEN Y de 120,1 se reia execuţia
GO TO eticheta mişcărilor în paralel cu
END execuţia INSTRUCŢIUNI.
END;

93
 Limbaje de Programare a Robotilor Industriali

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.

94
 Limbaje de Programare a Robotilor Industriali

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 - definirea şurubelniţei şi a şurubului în
şurub zona anterioară declaraţia face ca
elementul şurub să fie acţionat de către
dispozitivul şurubelniţă
OPEN pneumatic_terminal - instrucţiuni clasice de tip deschidere
CLOSE închidere gripper pneumatic
pneumatic_terminal
PASRO: Gripopen  acelaşi tip de instrucţiuni simple de
Gripclose deschidere/ închidere gripper
Gripforce(6, 3, 1)  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; - în cadrul acestui limbaj
CLOSE HAND TO 5*CM; deschiderea/închiderea gripper-ului
necesită parametri de indicare a deschiderii
între elementele de prindere
VAL: OPEN  pentru limbajul VAL atât pentru terminale electrice
MOVE gripframe cât şi pentru cele pneumatice se utilizează
CLOSEI comenzile standard OPEN/CLOSE cu observaţia
ca aceste comenzi devin executabile abia când este
DEPART 0 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, - robotul este comandat să se deplaseze în
EVENT, 2, ELSE, nobox 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) - elementul terminal este cuplat la canalul 5
DELAY(20) cänd comanda SET duce la activarea sa (de
obicei ínchidere). Se introduce o íntärziere
MOVE(1, #1, 500, #3, pentru a asigura siguranþa prinderii, apoi se

95
 Limbaje de Programare a Robotilor Industriali

40) deplaseazá robotul de-a lungul axei X cu 500


RESET mm, z cu 40 mm ßi se dezactiveazá canalul 5
(OPEN);
PULSE(1) - acest tip de acþionare gripper este
DELAY(timp_íntärziere) specific terminalelor electrice cu acþionare de
tip SET (RESET), ín sensul ín care un impuls
MOVE(1, #1, 200, #3, transmis la canalul 1 duce la ínchiderea
250) terminalului, iar alt impuls cátre canalul 2
PULSE(2) duce la deschiderea terminalului;
DELAY(timp_íntärziere)
SIGLA: AX/-1,-12; - instrucþiunea AX cu parametru negativ
MO/...; duce la deschiderea terminalului, ín timp ce o
valoare pozitivá duce la ínchiderea sa.
AX/1;

Limbajul ROBEX ínscriindu-se ín cadrul limbajelor evoluate


dispune de instrucþiuni dedicate care ußureazá sarcina
utilizatorului.
Exemple:
ROBEX: GRIPNO/5 - se specificá gripper-ul curent, cel de la
OPENGR canalul 5, urmänd comanda de deschidere.
Specificarea canalului ca argument la
CLOSEGR/3
instrucþiunea OPENGR/CLOSEGR duce la
acþionarea gripperului specificat (3) ßi a celui
curent (5).

96
 Limbaje de Programare a Robotilor Industriali

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 - táietorul este acþionat
OPERATION(1) DURING MOVE ín timpul mißcárii urmátoare
OPEN gripper BY 3 DURING - ín timpul mißcárii robotului
MOVE puma cátre destinaţie, gripperul 1
SMOVE puma TO destinaþii este deschis cu 3cm, apoi (dupá
mißcare) este ínchis päná la distanţa
CLOSE gripper1 TO4 de 4 cm íntre degete cu viteza de 0,5
WITH VELOCITY=0.5 cm/s;
GRIPWITH gripper - gripper-ul este ínchis sau deschis päná la
2 TO 7 distanţa dintre degetele gripper 2 este de 7 cm;
PASRO: grip - acţiunea este similará cu cea determinatá de instrucţiunea
with(7) SRL anterioará;
AL: OPEN HAND TO 8*CM - se comandá deschiderea
MOVE ARM1 TO destinaþie gripper-ului la 8 cm ín timpul mißcárii
OPEN HAND1 BY 3*CM cátre destinaţie, pentru ca ín timpul
celei de-a doua mißcári sá se comande
MOVE ARM1 TO @+ZHAT ca HAND1 sá fie deschisá cu 3 cm iar
CLOSE HAND1 TO 2*CM apoi ínchisá la 2 cm;

97
 Limbaje de Programare a Robotilor Industriali

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 - în cazul unui blocaj sesizat de
DURING un consum de curent
suplimentar, ín timpul operaţiilor
OPERATE TOOL(1) BY OPERATION(3)
(OPERATION) execuţia de
END_DURING TOOL(1) se afişează un mesaj
DO START warning (17) de avertizare warning (17);
CLOSE WITH MAVSPEED - se comandă ínchiderea gripper-
ului cu vitezá maximá.
WHEN start_time <= - dacă are loc depăşirea
SYSTIME+close_duration duratei de timp alocate
închiderii gripper-ului (close
MONITORED EVERY 50 MS
duration) - un element
DURING supravegheat la fiecare 50
start_time:=SYSTIME msec se comandá ínchiderea
CLOSE gripper 2 with V=0,5; gripper-ului 2 cu viteza de 0,5
END_DURING cm/sec;
DO STOP gripper 2
AL: OPEN HAND TO 5*CM - deschiderea gripper-ului la 5 cm
WITH VELOCITY=0,5*CM cu viteza de 0,5 cm/sec;

OPEN HAND BY 2*CM - deschidere gripper cu 2


WITH DURATION=5 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

98
 Limbaje de Programare a Robotilor Industriali

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  gripper-ul 1 este ínchis päná ce forţa
GRIPFORCE>stringforta+0.3 de ínchidere este mai mare ca
N stringforta+0,3 N
WHEN touch_sens=TRUE  dacá senzorul de atingere este activat
DURRING ín timpul ínchiderii gripper-ului 2 se
opreßte acţionarea acestuia.
CLOSE gripper2
END_DURING
DO STOP gripper2
AL: CLOSE HAND TO  se comandá ínchiderea mäinii la 2 cm,
2*CM ínchidere care va fi opritá dacá nu s-a ajuns la
ON FORCE>=100*GM respectiva distanţá dar forţa de strängere a fost
egalá sau mai mare de 100g*9,81 m/s2
DO
STOP HAND
VAL: GRASP  ín VAL controlul forþei este fácut de cátre controller-ul
14.8,200 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).

99
 Limbaje de Programare a Robotilor Industriali

F. Instrucţiuni dedicate lucrului cu sist emul 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

100
 Limbaje de Programare a Robotilor Industriali

efect o anumitá evoluþie a robotului ín timp ce nerealizarea acestei


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  primeşte instrucţiuni ce
SENSOR: contact=CHANNEL(3) configurează senzorii contact de
STRUCTURE contact=BOOLEAN tip boolean (digital) fiind la
canalul 3 (conectarea hard) iar
greutate=CHANNEL(2) greutate este de tip întreg,
STRUCTURE greutate=INTEGER reprezentat de informaţia citită pe
END_SYSTEM_SPECIFICATION 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

101
 Limbaje de Programare a Robotilor Industriali

Instrucţiune de mißcare

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,  - la fiecare 1,5 secunde este monitorizat
trece) 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á
); - indicator pornire maßiná
M10n:=1
END;
DELAY(10)
GO TO monitor.
Í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 - dacă senzorul contact 3 este activat (1 logic)
PTPMOVE TO atunci robotul se va mişca punct cu punct către
eroare punctul eroare, în caz contrar va avea loc
mişcarea liniară către destinaţie.
ELSE
SMOVE TO destinaþie
INPUT (temperaturá) - valoarea analogică a senzorului
temperatură este citită şi dacă condiţia

102
 Limbaje de Programare a Robotilor Industriali

IF temperatura > temp_limit de a fi mai mare decât temperatura


THEN limită este índeplinită atunci este
BEGIN executat blocul de instrucţiuni cuprins
între BEGIN şi END. În caz contrar se
SMOVE robot TO aproviz; execută instrucţiunile de după
 instrucţiunea END.
END
AML: IF SENSI (LED,0) THEN - dacă LED este întrerupt (senzorul) atunci are
BREAK (Direcþie loc afişarea mesajului şi oprirea structurii, dacă nu
blocatá) 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 - valoarea senzorului 1 este încărcată în registrul M8. Dacá
BL/M8, 75, 3 valoarea din M8 este mai mare sau egalá decät 75 se executá
grup 1 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)
instrucţiune are loc executarea grupului 2 de instrucţiuni ce íncepe cu
 eticheta 3 (NU/3).
JU/4;
NU/3;
grup 2
instrucţiune

NU/4;

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

103
 Limbaje de Programare a Robotilor Industriali

început a mişcării şi a momentului curent, diferenţa acestora putând duce la


setarea unor indicatori soft, flag-uri care să intervină în cadrul procesului sub
forma unor evenimente.
Exemplu:
SRL: WHEN - dacă timpul de mişcare a robotului spre
start_time<=SYSTIME- destinaţie, monitorizat la fiecare 20 MS a
fost depăşit (evaluarea duratei mişcării cu
durata_miscarii
funcţia SYSTIME este mai mare decât
MONITORED EVERY 20 MS durata planificată) se realizează trecerea
DURING automată la execuţia deplasării următoare
SMOVE robot TO destinaţie
END_DURING
DO START altă_deplasare
AL: MOVE ARM1 TO destinaţie - la 5 secunde de la începerea
ON DURATION >=5*sec DO deplasării lui ARM1 către destinaţie este
acţionat şi ARM2 spre centru timp de 3
BEGIN
secunde şi apoi este afişat un mesaj
MOVE ARM2 TO centru
WITH DURATION=3*SEC;
PRINT (“start proces”);
END;

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.

104
 Limbaje de Programare a Robotilor Industriali

Exemplu:
AML: AMOVE (ARM, - instrucţiunea specifică mişcării
framedestinaţie) 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
WAITMOVE 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 -dacă senzorul 3 este TRUE
DELAY(50) atunci execuţia programului
END; este întârziată cu 1 sec
IF VALUE(1)70 THEN (50x20 msec)
MOVE(1, 1, 140, 3, 50);
PULSE(2) - dacă valoarea senzorului 1
MOVE(1, 1, 120, 2, 260,  este mai mare decât 70
150) atunci piesa este depozitată,
ELSE gripper-ul deschis şi robotul
PRINT (“Valoare mutat într-o a doua poziţie.
insuficientă”) În caz contrar se afişează un
HOLD mesaj şi se aşteaptă
END; 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:

105
 Limbaje de Programare a Robotilor Industriali

- 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:

106
 Limbaje de Programare a Robotilor Industriali

Exemple:
Figure 24
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 - se calculează sistemul invers care
invcalibcamera=calibcamera corespunde transformării coordonatelor
obiectului în sistemul de coordonate al
camerei (achiziţionarea imaginii oferă date
referitoare la sistemul imagine)
SET - se calculează transformarea cameră
camerasystem=calibrobot: sistem prin compunerea transformărilor
bază-robot-cameră
invcalibcamera

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.

107
 Limbaje de Programare a Robotilor Industriali

Elemente Programul
Sistemul de vedere program utilizatorului
artificiala

Imaginea VPICTURE
captata
.
.
.
.
.

Identificarea
VLOCATE box,150
obiectului si
determinarea .
pozitiei Frame lista .
. .
. .
box .
MOVE camer a system:box
x valoare
y valoare
z=0
Orientare

.
.
.

Figure 25
VPICTURE - este achiziţionată imaginea unui obiect
VLOCATE obiect, - se caută identificarea obiectului
150
MOVE camera - utilizând orientarea şi poziţia
system:obiect 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

108
 Limbaje de Programare a Robotilor Industriali

(OBJ_HOLES), dimensiunea 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 - după achiziţia imaginii se
IF VIS_PART0 THEN identifică prin VIS_NPART
numărul de elemente şi dacă
BEGIN
acesta este 1 se declară respectivul
FOR număr elemente =1 TO VIS_NPART DO ca primul, în caz contrar se indică
BEGIN că sunt mai multe: NEXTPART.
IF număr elemente ==1 THEN Dacă numărul de orificii este 3
FIRSTPART atunci se iese din bucla de
ELSE examinare, în caz contrar se
NEXTPART continuă examinarea (după
ultimul END poate urma o
IF OBJ_NHOLES ==3 THEN instrucţiune de genul GO TO ).
ENTLOOD
END
END

Î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

109
 Limbaje de Programare a Robotilor Industriali

este numărul 2

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” PROGRAM principal STATIC BLOCK
SCALAR – limit, a, b, VAR limit a, b, c : Subr1:
c; INTEGER .
. PROCEDURE verif .
. (x, y: REAL) RETURN
IF SENSOR(2) limit VARi : INTEGER ENDBLOCK
 BEGIN
THEN 
 INIT?BLOCK
i .
BEGIN “bloc 2” . DEFINE v(3);

SCALAR I; 
 END
V[1]=3
.  BEGIN V[2]=4
VARk : INTEGER
.  V[3]=5
.
END “bloc 2” 
.
ENDBLOCK
k
ELSE  END BLOCK
.
BEGIN “bloc 3”  .
.
SCALAR k;  END

.
. ENDBLOCK
. BLOCK
END “bloc 3” .
. .
. ENDBLOCK
END “bloc 1”

Exemplu în AL Exemplu în Pascal Exemplu în HELP

110
 Limbaje de Programare a Robotilor Industriali

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:

111
 Limbaje de Programare a Robotilor Industriali

- 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:

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:

112
 Limbaje de Programare a Robotilor Industriali

REPEAT FOR i = 1 TO valfinal FOR K: = 1 find


i:= i + dt; DO DO
BEGIN l: = l + 1;
IF i  valfind THEN
EXIT_REPEAT
REP
UNTIL total  10 END

 Instrucţiunea REPEAT cu  Instrucţiuni


FOR  Instrucţiune
ieşire forţată (de valoarea pentru PASCAL şi FOR pentru
valfind a lui i) pentru PASRO HELP
limbajul SRL

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
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:

C as e 1
Ca se tes t
C as e 2
CASE
Struc tura
blocului 1
Struc tura
C as e n
blocului 2
C ase1 C ase 2 C ase n

. . . . . Struc tura
BLOC 1 BLOC 2 BLOC n
blocului n

113
 Limbaje de Programare a Robotilor Industriali

Exemple:
AML: HELP:
BRANCH (IF N GE 1 AND N LE IF case 0.5 THEN caseend END;
4 THEN GO TO (case, case1, …. , casen);
CASE1, CASE2, CASE3, GO TO caseend
CASE4 (N) case1: instrucţiuni
ELSE ERROR_CASE GO TO caseend
CASE1: case2: instrucţiuni
 GO TO caseend
BRANCH (CASE_END); 
CASE2: casen: instrucţiuni
 caseend:
BRANCH (CASE_END);
CASE4:

BRANCH (CASE_END);
ERROR CASE:

CASE_END

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
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

TRUE CONDITIE FALSE

CONDITIE
True False
BLOC 1 BLOC 2 THEN ELSE
BLOC 1 BLOC 2

114
 Limbaje de Programare a Robotilor Industriali

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

TRUE CONDITIE CONDITIE

True False
THEN CONTINUA
FALSE
BLOC 1 BLOC1

115
 Limbaje de Programare a Robotilor Industriali

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 IF (x  a) OR (x = a)
THEN IF x =b THEN THEN IF (x  b) OR (x = b)
BEGIN THEN IF x = (a+b)/2
IF x=(a+b)/2 THEN THEN PRINT (“corect”)
PRINT (“corect”) END
END ELSE PRINT (“prea mare”)
ELSE PRINT (“prea mare”) END
ELSE PRINT (“prea mic”); ELSE PRINT (“prea mic”)
END;
VAL: SIGLA:
IF x GE a THEN 10 MT/1, M1, 2 – se încarcă în registrul M1
TYPE prea mic valoarea de la senzorul 1 (x = M1)
GO TO 100 MT/a, M2, 2 – se transferă valoarea a în
IF x LE b THEN 20 M2
TYPE prea mare MT/b, M3, 2 – se transferă valoarea b în
GO TO 100 M3
20 SETI timp = a+b BL/M1, M2, 1 – dacă M1  M2 = a atunci
SETI temp = temp/2 salt la eticheta 1
IF x NE temp GO TO 100 BG/M1, M3, 2 – dacă M3  M1 atunci salt
TYPE corect la eticheta 2
100 SE/M4, M2 – M4M2
IC/M4, M3 – M4M4+M3
SE/M5, 0 – M50
NU/10 – eticheta 10
IC/M5, 1 – M5M5+1
IC/M4, -2 – M4M4-2

116
 Limbaje de Programare a Robotilor Industriali

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 – M5M5-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 :

True x >= a

False
x >=b
True False
True x <= b False
PRINT ' Prea mic ' x<=b PRINT "
True False Prea mic"
x=(a+b)/2 PRINT "
PRINT ' Prea mare ' True False Prea
x =(a+b)/2
PRINT " corect Continua mare "
True False "

PRINT ' Prea mare '

117
 Limbaje de Programare a Robotilor Industriali

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 M40 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ă M4 0
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.

118
 Limbaje de Programare a Robotilor Industriali

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

119
 Limbaje de Programare a Robotilor Industriali

- 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

120
 Limbaje de Programare a Robotilor Industriali

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

121
 Limbaje de Programare a Robotilor Industriali

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.

Programator

Pro gramul text Pro dura de in str uir e


continind in str uctiuni
de miscare, saltur i,
comenz i intrare-iesir e

Sistem de pro gramar e


online avand
componente
Sistem de pro gramar e inter active
offline ( editoare si
compilatoar e )

Structura cadru a Structura cadru a


pro gramului miscarii

Pro gram executabil

Sistem inter pretor si


de comanda a
controllerelor

Robot

Figure 26

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

122
 Limbaje de Programare a Robotilor Industriali

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

123
 Limbaje de Programare a Robotilor Industriali

 iniţializarea unui fişier frameinitialize se declară prin procedură


valorile de ieşire a frame-ului, valorile terminalului, status-ului
VARfout : frame; 
 
VARgvout : REAL ; 
acestuia VARgsout : gripstatus typ ; 

 
 fname : framename; 
VARstatus : INTEGER  
 

 crearea unui fişier createframefile (filename: ffilename; VAR status:


INTEGER)
 fname : framenme 
 
 fin : frame 

 scrierea într-un fişier framewrite gvin : REAL 
 
 g sin : gripstatus typ 
VARstatus : INTEGER; 
 

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 - la atingerea punctului următor se apasă iar butonul
store 1, RECORD – gripperul fiind închis (0, 0)
0, 0
MOVE - se memorează al treilea punct cu comanda deschiderii
store 2, gripper-ului la 47.3mm
47.3

Î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')

124
 Limbaje de Programare a Robotilor Industriali

COORD (1) - se aşteaptă activarea cheii de terminare


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, - se înregistrează instrucţiunea de
#2, strty, ,#6, strtw) ' ); mişcare ce se doreşte a fi executate
RECORD (#0, 'STOP'); - se introduce indicatorul de sfârşit de
CLOSE fişier
STOP.

125
 Limbaje de Programare a Robotilor Industriali

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

126
 Limbaje de Programare a Robotilor Industriali

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.

127
 Limbaje de Programare a Robotilor Industriali

Dacă una dintre acestea trebuie memorată în vederea unor prelucrări


ulterioare sau alte apeluri ea va fi declarată OWN.VAR

N U ME LISTA B LOC D E
PROCEDURA PR OC ED U R A PA R A METR ILOR ; IN STRU C TIU N I

FOR WA R D

Declararea unei proceduri in PASRO si SR


Exemple:
Program 3:
SE/M1, P1 - P1, P2 sunt parametri formali: M1P1
IC/M1, P2 - M1= M1 + P2
SE/I3, M1 - I3M1
Main program:
SE/M10, 5 - M105
SE/M20, 17 - M2015
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

128
 Limbaje de Programare a Robotilor Industriali

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

129
 Limbaje de Programare a Robotilor Industriali

Exemplu de program cu operaţii care se execută în paralel (limbajul AL)


BEGIN SIGNAL obiect eliberat
EVENT braţ deasupra, obiect prins, END “braţ 1”
obiect eliberat; BEGIN “braţ 2”
FRAME obiect, poziţie deasupra, OPEN hand 2 TO 6xcm;
terminal pe obiect, destinaţie; MOVE arm2 TO terminal pe obiect
COBEGIN WITH APPROCH = -3xcm;
BEGIN “braţ 1” WAIT braţ deasupra;
MOVE arm 1 TO obiect; CENTER arm2;
CENTER arm 1; AFFIX obiect TO arm2
AFFIX obiect TO arm 1 SIGNAL obiect prins
MOVE obiect TO poziţie deasupra WAIT obiect eliberat
WITH APPROCH = -3xcm MOVE arm2 TO destinaţie
SIGNAL braţ deasupra; WITH DEPARTURE = - 6xcm
WAIT obiect prins END “braţ 2”;
OPEN hand 1 TO 6xcm COEND;
UNFIX obiect FROM arm1 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 END_SYSTEM_SPECICICATION
ROBOT: rip = ROBOT (1) PROGRAM monitorizare (INFILE,
EFFECTOR: degete = GRIPPER(0) OF rip OUTFILE)
SENSOR:detector = CHANNEL(5) .
STRUCTURE detector = RECORD .
Contact: BOOLEAN; SECTION distribuţie
Lungime: REAL; VAR
END; Magazin_list: ARRAY [1 9] OF FRAME
INTERRUPT: emty FROM Get_pos: FRAME
CHANNEL(7); Nr_magazie_curentă: INTEGER

130
 Limbaje de Programare a Robotilor Industriali

Ieşire: BOOLEAN READLN (ch);


Clr: CHAR; IF ch = ‘N’ THEN
SECTION break (nr_magazii: INTEGER); EXIT_SECTION
BEGIN_SECTION “break” ELSE
WRITELN (“Întreruperi după magazie”, SUSPEND 500 MS
nemagazie); END_IF
Ieşire:= TRUE END
END_SECTION “break” END_IF;
BEGIN_SECTION “distributie” END_FOR;
WRITELN (“se începe distribuire”) END_DURING;
Ieşire: = FALSE DO
- se iniţializează lista magaziei şi poziţia START breeak(nr_magazie_curentă);
depunere get_pos prin proceduri TEACH- WRITELN(‘Toate magaziile umplute!’);
IN END_SECTION “distributie”;
ALWAYS WHEN detector contact=
TRUE BEGIN_PROGRAM
DURING WRITELN (‘Programul de monitorizare
FOR nr_magazie_curenta: = 1 TO 9 DO magazii a inceput!’)
PTPMOVE rip TO get_pos; (*
CLOSE degete; 
SMOVE rip TO magazin_list *)
[nr_magazie_curentă] START distributie;
WITH DEP = 10; (*
OPEN degete; 
IF ieşire THEN *)
BEGIN END_PROGRAM.
WRITE(‘Indicator activat! Contiuni?
Y/N’;
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

131
 Limbaje de Programare a Robotilor Industriali

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).

132
 Limbaje de Programare a Robotilor Industriali

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

133

S-ar putea să vă placă și