Transcript

Limbaje de Programare a Robotilor Industriali

1

Cuprins

I. CONCEPTUL DE LIMBAJ. 3

A. Noţiuni introductive 3

B. Exemple de comunicatori şi sisteme de comunicaţie. 8

C. Ierarhizarea sistemelor comunicaţionale 15

D. Concluzii 18

II. ELEMENTE SPECIFICE ROBOŢILOR INDUSTRIALI. 20

A. Introducere 20

B. Utilizarea roboţilor industriali în aplicaţii industriale - Robotizarea unor aplicaţii 21

C. Utilizarea informatiilor senzoriale în programarea robotilor industriali 23

D. Sistemele de programare si sistemele de comanda ale roboţilor industriali 26

E. Descrierea sarcinilor pe care trebuie să le realizeze roboţii industriali 28 1. Descrierea la nivelul actionarilor 29 2. Descrierea în spatiul sarcinilor 32 3. Evolutia pozititei si orientarii efectorului 32

III. ELEMENTE DE BAZĂ ALE LIMBAJELOR DE PROGRAMARE A ROBOŢILOR INDUSTRIALI 36

A. Introducere în tematica limbajelor de programare a roboţilor industriali 36

B. Elemente caracteristice limbajelor de programare destinate structurilor de calcul 38 1. Variabilele 38 2. Subrutine 41 3. Proceduri şi funcţii 41 4. Macroinstrucţiunile 42 5. Recursivitatea 42 6. Procese şi corutine 43

C. Conceptele specifice Limbajului Robot 45 1. Sistem de referinţă - Frame 45 2. Controlul mişcării robotului 46

IV. DATE ŞI STRUCTURI DE DATE UTILIZATE ÎN CADRUL LIMBAJELOR DE PROGRAMARE A ROBOŢILOR INDUSTRIALI 52

A. Date utilizate de limbaje de programare a robotilor 52

B. Structuri de date 56

C. Moduri de manipulare a datelor 66 1. Operaţii logice 66 2. Operaţii de comparare 66 3. Operaţii aritmetice 67

Limbaje de Programare a Robotilor Industriali

2

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

V. INSTRUCŢIUNI 71

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

B. Instrucţiuni de mişcare 76 1. Instrucţiunile de mişcare implicite. 76 2. Instrucţiunile de mişcare explicite. 77 3. Precizia poziţionării. 80 4. Tipul controlului mişcării. 81 5. Instrucţiunile de mişcare care integrează şi supravegherea senzorilor. 86

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

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

E. Instrucţiuni de comandă şi control a end-effectorului 92 1. Instrucţiuni de acţionare a terminalelor cu parametrii 95 2. Instrucţiuni de comandă a terminalului cu monitorizarea senzorilor asociaţi 96

F. Instrucţiuni dedicate lucrului cu sistemul exterioceptor 98

G. Instrucţiuni de configurare a sistemului senzorial 99

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

I. Procese în paralel 102

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

K. Delimitarea programului prin intermediul blocurilor 108

L. Instrucţiuni de control al parcurgerii programului 109 1. Instrucţiuni de salt necondiţionat 110 2. Instrucţiuni de execuţie condiţionată 110 3. Instrucţiuni cu execuţii condiţionate 110 4. Instrucţiuni cu salt condiţionat 112

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

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

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

VII. SUBRUTINE, PROCEDURI ŞI FUNCŢII 123

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

B. Task-uri 127

VIII. BIBLIOGRAFIE ŞI REFERINŢE 130

Limbaje de Programare a Robotilor Industriali

3

I. Conceptul de limbaj.

A. Noţiuni introductive

Rolul esenţial pe care îl joacă comunicarea impune o abordare sintetică

care să permită aplicarea formalismului matematic. Astfel comunicarea conţine

în esenţă trei tipuri de elemente fundamentale:

comunicatorul - ca element receptor, transformator şi emiţător de informaţie

sistemul de comunicaţie - ca structură determinată având ca suport clase date

de comunicatori

informaţia ca suport primar material al comunicaţiei

Prin mesaj se defineşte mijlocul general prin care este transmisă

informaţia din lumea reală între comunicatori. Mesajul are în general două

laturi:

latură obiectivă sau semnificaţia mesajului, independentă de comunicatorul

de la care pleacă mesajul, respectiv de comunicatorul la care ajunge mesajul -

latură ce poartă numele de obiectul sau semnificaţia mesajului - notată cu m

o latură reprezentaţională sau simbolică care depinde direct de comunicatorii

care intervin în comunicaţie: receptor, respectiv transmiţător - forma

mesajului - notată fm.

În concluzie mesajele vor fi notate sub forma unei perechi < m, fm >.

Comunicatorul va fi considerat pentru început o entitate informală care există

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

ComunicatrulX

ComunicatorulY

Prelucrareainformatiei

Transmisiainformatiei

Receptiainformatiei

Figure 1

Limbaje de Programare a Robotilor Industriali

4

recepţioneze, să prelucreze şi să transmită informaţie. Spre simplificare vom

reprezenta comunicatorul prin aceste caracteristici ale sale sub forma unui graf

orientat:

Mediul real al comunicatorului Ci ( se va nota sub această forma

comunicatorul) este universul care poate fi afectat de Ci sau poate afecta pe Ci la

nivel informaţional, desigur, motiv pentru care acesta va fi notat cu UN(C) -

Universul Natural al lui C sau mai simplu UN. Obiectele cu care C nu intră în

contact vor fi deci considerate a fi în afara lui UN.

În cadrul universului natural se disting la rândul lor alte două categorii de

clase:

1. clasa obiectelor care au sens pentru comunicatorul C , adică obiectele pe care

C le recunoaşte dupa forma asociată ca reprezentare pentru C - notat cu M -

mesaj pe care C îl poate recepţiona, prelucra sau transmite

M m m UN C , iar m f m, este un mesaj care pote fi recepţionat sau

transmis de C

2. clasa obiectelor care nu au sens pentru C, nefiind recunoscute după forma de

reprezentare simbolică asociată, cel putin în momentul curent.

Ca o observaţie deosebit de importantă este faptul ca prin învăţare prima

clasa poate fi extinsă prin asimilarea unor obiecte aparţinând celei de-a doua

clase. încercând introducerea formalismului matematic vom putea considera ca

fm - sensul, semantica mesajului m, se poate fi privit ca o funcţie parţială f

definită pe UN( C ) cu domeniul în M - clasa obiectelor cu sens pentru C şi

codomeniul în F, unde F este sintaxa sau forma de reprezentare a obiectelor din

M pentru comunicatorul C. Procesul de extindere al funcţiei f, mai precis al

codomeniului F poartă numele de învăţare, funcţie ce se explică prin asocierea

pentru un mesaj m din M inclus în UN( C ) a unui sens pentru C, a unui nume

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

numele de reprezentarea sau semnătura lui m pentru C).

Limbaje de Programare a Robotilor Industriali

5

Astfel pentru comunicatorul C, se va defini drept limbaj natural propriu

comunicatorului C tripletul ordonat L M F f M F , , : unde:

M - este semantica limbajului , F - este sintaxa limbajului, f - functia de

asociere a sintaxei

Limbajul, ca mijloc de comunicaţie, se realizează prin parcurgerea

următoarelor etape:

1) identificarea obiectelor limbajului printr-un proces de învăţare

2) asocierea reprezentărilor simbolice pentru obiectele specificate la 1 sau

specificarea sintaxei limbajului

3) integrarea funcţiei de învăţare prin identificarea obiectelor specificate la 1 cu

reprezentările lor alese la 2.

Prin prisma celor prezentate anterior se poate considera a fi perfect

determinat de universul sau natural şi de limbajul său, mai precis

L M F f M F , , : care are o anumită dinamică.

Comunicaţia impune existenţa a cel puţin 2 comunicatori C1 -

L M F f M F1 1 1 1 1 1 , , : , respectiv C2 - L M F f M F2 2 2 2 2 2 , , : , motiv pentru

care în continuare se vor defini condiţiile ca schimbul de mesaje să aibă loc:

1) comunicatorii trebuie sa aibă sens unul pentru altul: C M C M

f C F f C F1 2 2 1

2 1 2 1 2 1

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

UN C UN C1 2

Detalierea condiţiilor necesare pentru ca schimbul de mesaje să aibă loc se

realizează prin completarea condiţiilor anterioare cu următoarele condiţii de

transformare a mesajelor m:

1) f F f Fm m1

12

2 - semantica primului comunicator sa fie transformată îintr-o

semantică ce poate fi înţeleasă de cel de-al doilea

2) f F m Mm2

2 semantica celui de-al doilea comunicator să poată reface

informaţia percepută iniţial de primul comunicator.

Limbaje de Programare a Robotilor Industriali

6

Aceste ultime două cerinţe impun definirea a două noi funcţii:

funcţia translator Ti a cărui domeniul de definiţie este sintaxa Fi a limbajului

comunicatorului emiţator, iar domeniul valorilor este sintaxa Fj a limbajului

comunicatorului receptor: T F Fi i j:

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

E F Mi i: .

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

următoarea schemă:

M F1

F2

M

E2

E1f1

f2

Figure 2

Limbaje de Programare a Robotilor Industriali

7

Relaţiile dintre funcţiile descrise anterior sunt:

f T E f E f T E f E

f T f f T f

f E id f E idM M

1 1 2 2 2 2 2 1 1 1

1 1 2 2 2 1

2 2 1 1

;

;

;

Concluzionând o pereche de comunicatori C1, C2 formează un sistem de

comunicaţie dacă sunt îndeplinite urmatoarele condiţii:

1) C1 si C2 au acelaşi univers natural : UN(C1)=UN(C2)

2) f1 şi f2 sunt funcţii injective, iar f f11

21 , sunt inversele lor

3) există o pereche de funcţii T F F1 1 2: şi T F F2 2 1: care asigură

comutativitatea diagramei.

Un exemplu edificator în acest sens va fi ilustrat în cele ce urmează:

Fie doi comunicatori C1 şi C2 specificaţi prin următoarele universe

naturale: L N f N1 10 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 , , , , , , , , , , *, : , , , , , , , , , * - acest limbaj

asociază numerelor naturale reprezentarea zecimală

L N f N2 20 1 0 1 , , *, : , * - acest limbaj asociază numerelor naturale

reprezentarea binară.

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

f c c c c c c cpp p

p11

0 1 2 0 1110 10 , , ; c c c cp0 1 2 0 1 2 3 4 5 6 7 8 9, , , , , , , , , , , * ,

respectiv f c c c c c cqq q

q21

0 1 0 112 2 , , unde c c cq0 1 0 1, , , * . Funcţiile

translatoare se obţin rapid, T1 fiind reprezentarea binara a numărului zecimal ( se

va aplica algoritmul de împărţiri repetate pentru schimbarea bazei zecimale în

bază binară), iar T2 fiind de fapt f c c c c c cqq q

q21

0 1 0 112 2 , . Schema

comunicaţiei între cele două limbaje devine:

Limbaje de Programare a Robotilor Industriali

8

B. Exemple de comunicatori şi sisteme de comunicaţie.

Pentru înţelegerea formalismului introdus anterior în continuare vor fi

prezentate câteva exemple de comunicatori si reprezentări schematice ale

sistemelor de comunicaţie:

Comunicatorul uman - universul natural al acestui comunicator îl

constituie universul real uman. Formele de reprezentare a acestui univers depind

de canalele senzoriale care recepţionează realitatea. Odată receptionată

informaţia, mesajul, obiectul din universul natural, aceasta este transformat în

sintaxă specific umană, sintaxă care poate permite prelucrarea după procesul de

învăţare al mesajului. Această operaţie de învăţare va permite ulterior

manipularea informaţiei la nivel abstract, semantic, realizându-se astfel

prelucrări si transformări ale informaţiei, fără ca realul să mai fie prezent efectiv.

Procesul de învăţare poate fi privit ca fiind realizat după următoarele etape:

1. etapa receptoare în care obiectul real este perceput pe o cale senzorială de

către comunicator(i)

2. etapa de transformare semantică în care comunicatorul/comunicatorii

transformă informaţia obţinuta în prima etapă în cunoaştere sau mai exact

atribuie un nume sau mai exact anumite proprietaţi informaţiei obţinute în

etapa 1. Acest nume sau proprietăţi senzoriale permit comunicatorului sa

distingă clar informaţia acumulată de aceast ultim mesaj.

N

{0,1}

N

f-12

f-11

T2 T1f2

f1{0,1,2,3,4,5,6,7,8,9}

Figure 3

Limbaje de Programare a Robotilor Industriali

9

3. etapa de fixare a semanticii şi indirect a informaţiei, când sintaxa generală a

comunicatorului este imbogăţită cu noua informaţie. Această etapă va

permite comunicatorului ca de acum înainte semantica dată informaţiei să fie

suficientă pentru transformări la nivel abstract care vor conţine mesaje de

tipul celei asimilate. Această ultimă etapă poate fi reluată în cazul în care

fixarea nu are loc.

Schematic comunicarea umană poate fi structurată utilizând următoarele funcţii:

Pentru comunicatorul C1 : L M F f M F1 1 1 1 1 1 , , : ; iar pentru comunicatorul C2

L M F f M F2 2 2 2 2 2 , , : caracteristic fiind faptul ca M1 = M2 . Sigur că în

realitate relaţia nu este general valabilă, relaţii de tipul M M1 2 sau

M M1 2 fiind mult mai generale. Din considerente de simetrie va mai fi

introdusă o funcţie parţial inversabilă , funcţie de corespondenţă c M M: 1 2 care

leagă cele două universuri naturale ale comunicatorilor.

Ca o caracteristică interesantă referitoare la functiile de translatare şi

evaluare , pentru comunicatorii umani pot apare mai multe situaţii sau clase:

Clasa comunicatorilor umani care vorbesc aceeaşi limbă: în acest caz dacă

se impune ca F1=F2, nu neaapărat şi T1= T2, din motive lesne de înţeles,

printre care cel mai simplu este deat de existenţa sinonimelor, chiar pentru

comunicatori cu acceeaşi profesie şi pregătire.

Clasa comunicatorilor care vorbesc limbi diferite: F F1 2 . Caracteristic însă

procesului de comunicare uman este că contactul între comunicatori duce la

o situaţie aparent paradoxală care dezvăluie insă concomitent şi relaţia :

F F1 2 . Acesta este cazul general, în particular relaţiile sunt de tipul:

F F1 2 sau F F2 1 .

Clasa comunicatorilor care aparţin aceluiaşi domeniu sau subdomeniu al

cunoaşterii umane: Această clasă are caracteristicile ambelor clase

anterioare, având în plus caracteristic faptul că nivelul de abstractizare al

informaţiei schimbate sau prelucrate poate fi superior realităţii senzoriale.(aşa

Limbaje de Programare a Robotilor Industriali

10

cum este cazul specialiştilor în matematică, fizică,informatică, mecanică

cuantică,etc).

în aceste condiţii relaţia comunicaţională umană poate fi reprezentată sub

forma:

M1 M1

M2 M2

F1

F2

f1f1

-1

f2-1

f2

cc-1T1 T2

Figure 4

Limbaje de Programare a Robotilor Industriali

11

Comunicatorul maşină - comunicator uman. Sigur că acest tip de comunicaţie

poate fi privit şi sub aspectul maşină-maşină-comunicator uman, datorită

existenţei sistemelor ierarhizate de maşini, dar cum comunicaţia maşină nu are

sens fără comunicatorul uman, vom considera cazul general de tip comunicator

masină, în care comunicatorul uman va fi subânţeles. Caracteristic acestui tip

de comunicaţie este faptul ca universul natural al maşinii devine datorită

necesarului uman ca maşina sa fie o extensie a gândirii umane, chiar elementele

de semantică umană, în timp ce funcţia de corespondenţă c introdusă anterior

este o funcţie proprie constructorului maşinii. Aceasta reprezintă modul în care

constructorul maşinii (fie maşina la nivel hard, fie maşina la nivel logic) a

construit universul natural al maşinii. De asemenea funcţia de evaluare nu mai

poate fi privită în mod simplist ca o inversă a unei funcţii, deoarece dacă

introducerea informaţiei se realizează pe anumite canale, emiterea informaţiei

după prelucrare se realizează de regulă pe alte canale senzoriale. Menţinând

funcţiile cu semnificaţiile detaliate în cadrul comunicatorului uman, schema de

comunicare devine:

M1 M1

F1 F1

F1

F2

f1f1

-1

f2-1

f2

cc-1T1 T2

Figure 5

Limbaje de Programare a Robotilor Industriali

12

De remarcat că în ciuda formalismului evident rezultat din analiza Figure 5, prin

care T1 are aceeaşi structură cu f2, acestea sunt diferite intre ele: f2 este o funcţie

de transformare, în timp ce T1 este o funcţie de reprezentare.

Pentru specificarea comunicatorilor de tip maşină, în acelaşi univers natural UN

se procedează astfel:

se consideră o clasă de comunicatori naturali specificaţi cu ajutorul unui

limbaj comunicator: L M F f M FC , , : şi se alege o structură din F

numită sistem formal asociat comunicatorului maşina, astfel încât: M FF .

În funcţie de posibilităţile de reprezentare a obiectelor dim MF cu ajutorul

elementelor fizice asociate comunicatorului maşină se construieşte sistemul

formal FM, care va reprezenta obiectele clasei MF

se defineşte funcţia f M FM F M: prin care fiecărui obiect din MF i se

asociază un simbol din FM prin intermediul funcţiei fM, considerată funcţia de

reprezentare.

În aceste condiţii se poate considera ca L M F f M FM F M M F M , , : este

comunicatorul maşină.

Deoarece în construcţia limbajului se încearcă extragerea unui algoritm se

propune următoarea procedură:

se caută o metodă de specificare a clasei tuturor obiectelor reale M pe care

comunicatorul le poate recunoaşte şi mânui la nivel simbolic - se construieşte

emantica limbajului

se caută sintetizarea, chiar şi la nivel logic, a unui dispozitiv care să genereze

clasa tuturor formelor sau semnăturilor simbolice a obiectelor din M - se

construieşte sintaxa

se stabileşte o regulă prin care fiecarui obiect semantic îi corspunde un

element sintactic - se construieşte funcţia: f M Fm: , astfel ca m f m, să fie

un mesaj.

Limbaje de Programare a Robotilor Industriali

13

Cum în acestă lucrare accentul se pune pe comunicarea maşină se va insista în

cele ce urmează asupra algoritmului specific limbajului maşină:

1) specificarea semnaticii MF a limbajului se reduce la specificarea unui sistem

formal care poate fi recepţionat corect de comunicatorul maşină prin

dispozitivele de intrare de care acesta dispune. Este evident ca intre sintaxa

comunicatorului uman F si semantica comunicatorului maşină MF exista

relaţia: M FF . în aceste condiţii se impun două reguli:

I. mesajele comunicatorului uman m f m, să fie compatibile la nivel

comunicaţional cu sistemul receptor al maşinii f Mm F .

II. semantica maşină să fie un sistem suficient de larg astfel ca acei

comunicatori care lucrează cu limbajul LM să poată să îşi exprime

mesajele în mod natural. Se remarcă că în cazul limbajelor evoluate,

comunicatorii umani aparţin unor clase largi de comunicatori. în

esenţa se urmărşte ca semantica să fie heterogenă în ceea ce priveşte

comunicatorii umani utilizatori: se caută un simbolism S care să

servească drept mijloc de comunicare cu maşina oricare ar fi

comunicatorul natural al unei clase C.

2) sintaxa maşină FM depinde numai de structura fizică a maşinii capabilă să

înmagazineze şi să stocheze informaţia, precum şi de arhitectura sistemului

maşină.

3) specificarea funcţiei de asociere devine elementul cel mai dificil în această

construcţie. Se reamintesc elementele definitorii ale celor două limbaje

L M F f M F , , : şi L M F f M FM F M M F M , , : precum si condiţia

suplimentară M FF . Denumind ca funcţie de utilizare funcţia

:: F M condiţiile pe care aceasta împreună cu f trebuie să le îndeplinească

sunt: f fM F 1 1 , funcţia id este denumită funcţie translatoare iar o

reprezentare grafică este:

Limbaje de Programare a Robotilor Industriali

14

Având în vedere ca dialogul se realizează între comunicatori formali aparţinând

clasei C. specificaţi prin L M M F f M MF F , , : şi comunicatorul maşină

L M F T M FM F M F M , , : , diagrama de comunicaţie va avea structura:

în aceste condiţii limbajul maşină va fi definit prin tripletul

L M F T M FM F M F M , , : sau mai exact L F F id F FM M M M M , , : în timp ce

tripletul L M M F f M MP F F F , , : va purta numele de limbaj de

programare.

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

dintre limbajul maşină şi limbajul constructorului maşinii

L M F f M FC C C C C C , , : . Este evident că F FM C precum şi următoarea

diagramă:

M F

F

M

idid

f

f

Figure 6

M MF

FM

M

T-1T

f

Figure 7

MC FC

FM

MC

id2id1

fC C

C/FnfC/Fn

Figure 8

Limbaje de Programare a Robotilor Industriali

15

Problemele ridicate de accesibilitatea limbajului de programare au complicat în

mod necesa funcţia de translator T F FP M: fapt ce a dus la mărirea timpului

necesar translatării pe de-o parte, respectiv la pierderea naturaleţii limbajului pe

de altă parte.

Pentru o mai bună exploatare şi înţelegere a limbajelor de programare se

remarcă faptul că indiferent de clasa comunicatorilor, schimbul de informaţie se

referă la obiecte statice , ce vor primi numele de date, precum şi la acţiuni ce

trebuie exectutate asupra datelor sau asupra actor acţiuni ce vor primi numele de

operaţii. Generalizând MP este un sistem formal în limbajul natural al clasei

comunicatorilor cărora li se oferă limbajul de comunicare, sistem definit ca o

pereche: M D date O operatiip , .

C. Ierarhizarea sistemelor comunicaţionale

Atât datele cât şi operaţiile pot fi considerate structurate pe două nivele după

următoarele reguli:

Pentru date - D :

E1.există o clasă de date elementare sau primitive care au proprietatea de

afi definite prin ele însele pentru clasa de utilizatori la care se referă

limbajul

E2.celelalte date din D sunt construcţii care se aplică datelor primitive

şi/sau asupra datelor neprimitive ( construcţii deja realizate )

Pentru operaţii - O :

O1.există o clasă de operaţii primitive care relativ la abilitatea

utilizatorului de a executa acţiuni asupra datelor sunt acţiuni simple

O2.celelalte operaţii din O sunt construcţii obţinute prin compunerea

operaţiilor primitive.

În cadrul limbajelor de programare, limbajelor maşină şi nu în ultimul rând şi

în cazul limbajelor naturale se impune o structură ierarhizată, o ierarhie

Limbaje de Programare a Robotilor Industriali

16

exterioară a limbajelor. Pentru detalierea acestui concept, vom presupune că

sisrtemul comunicaţional conţine cel puţin două elemente de bază:

un sistem iniţial de nivel ierarhic zero - 0 - sistem care poate fi reprezentat

chiar de sistemul de calcul asociat comunicatorulu maşină

lege prin care pornind de la un sistem de calcul dat de nivel ierarhic i se poate

trece la un sistem de calcul nou, ierarhic superior i+1.

Algoritmul ce este utilizat pentru stabilirea ierarhiei comunicaţiei este următorul:

oricare ar fi un limbaj de programare dat, L M F f M FP P P P P P , , : , în care

este un sistem de calcul specific unei clase de utilizatori , un limbaj de calcul

superior lui LP se obţine acceptând că MP este bază pentru un nou sistem de

calcul MP’ utilizând legea de generare:

datele D ale sistemului MP se aleg ca date primitive pentru sistemul MP’

operaţiile O ale sistemului MP se aleg ca operaţii primitive pentru sistemul

MP’

se formează un set de operaţii de compunere asupra datelor sistemului MP’.

Acestea devin operaţii primitive pentru noul sistem MP’

se formează un set de operaţii de compunere asupra operaţiilor sistemului

MP’. Acestea devin operaţii primitive asupra operaţiilor pentru noul sistem

MP’

Reprezentarea grafică a aceastei ierarhizări este prezentată în figura 9.

între date şi operaţii de pe diferite nivele există următoarele relaţii:

Cd Pdi i 1 ; Co Poi i 1 i n0,

Concluzionând asupra conceptelor comunicaţionale care prezintă interes pentru

subiectul abordat în această lucrare se poate defini mediul comunicaţional prin

intermediul următoarelor elemente:

L M F f M FP P P P P P , , : - limbajul de programare asociat unei clase de

utilizatori

L M F f M FM m m m m m , , : - limbajul natural al unui comunicator maşină dat.

Limbaje de Programare a Robotilor Industriali

17

Implementarea limbajului LP pentru comunicatorul maşină Cm specificat de LM

se înţelege diagrama de comunicaţie:

Sistem de nivel i OperatiiDate

{primitive - Po i }{primitive - Pd i }

{complexe - Cd i } {complexe - Co i }

Sistem de nivel i+1 OperatiiDate

{primitive - Po i+1 }{primitive - Pd i+1 }

{complexe - Cd i+1 } {complexe - Coi+1 }

Figure 9

MP MP

Mm Mm

FP

Fm

fPP

mfm

h1 h2

T1 T2

Figure 10

Limbaje de Programare a Robotilor Industriali

18

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

utilizate pentru precizarea ierarhiei interne.

D. Concluzii

1. Comunicaţia pentru a se desfaşura necesită existenţa a trei elemente

principale: comunicatori, sistem de comunicaţie, informaţia sau mesajul

reprezentat sub forma: <m,fm>.

2. Se defineşte drept limbaj natural propriu comunicatorului C tripletul ordonat

L M F f M F , , : unde: M - este semantica limbajului , F - este sintaxa

limbajului, f - functia de asociere a sintaxei

3. Schimbul de informaţie între doi comunicatori se realizează în anumite

condiţii, rezultând existenţa implicită a unor noi funcţii: funcţia translator

T F Fi i j: unde Fi este sintaxa limbajului comunicatorului emiţător, iar Fj

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

evaluare E F Mi i: .

4. Comunicarea om-maşină are o serie de caracteristici:

între sintaxa comunicatorului uman F si semantica comunicatorului

maşină MF exista relaţia: M FF .

în cadrul comunicaţiei apar o serie de limbaje între care există

legături ierarhice. Ierarhia acestora este:

a) L M F f M FM m m m m m , , : - limbaj maşină

b) L M F f M FC C C C C C , , : - limbajul constructorului maşinii,

relaţia dintre limbajul maşină şi limbajul constructorului cea mai

importantă fiind F Fm C

c) L M F f M FP P P P P P , , : - limbajul de programare asociat unei

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

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

comunicare, sistem definit ca o pereche:

Limbaje de Programare a Robotilor Industriali

19

M D date O operatiip , .

Limbaje de Programare a Robotilor Industriali

20

II. Elemente specifice Roboţilor Industriali.

A. Introducere

Principala caracteristica a robotilor este versalitatea; ei pot fi utilizati în

multe scopuri cu eforturi minime. Aceasta versalitate deriva din avantajele

oferite de structura lor fizica si de control, dar ea poate fi exploatata numai daca

robotul poate fi programat cu usurinta. În unelecazuri, lipsa unor unelte de

programare adecvate poate duce la imposibilitatea rezolvarii anumitor probleme.

în alte cazuri, costul programarii poate fi o parte semnificativa din costul total al

aplicatiei.. Din aceste motive, programarea si sistemele de programare ale

robotilor joaca un rol important în dezvoltarea roboticii.

Rolul progrmarii robotilor este diversificat si în mare masura depinde de

utilizatori. El poate fi privit din mai multe puncte de vedere:

a) al operarii robotului în ansamblu:robotul trebuie sa fie sigur si usor

de operat. Operarea usoara poate proveni în mare masura din uneltele de control

oferite de programare. Siguranta în functionarea robotului este foarte importanta

si poate fi realizata si prin intermediul sistemului de programare;

b) al aplicatiei robotului: prin intermediul programarii trebuie sa se

obtina acele elemente, acele unelte specifice sarcinilor pe care va

trebui sa le realizeze robotul în cadrul aplicatiilor în care se utilizeaza (

descrierea intr-o maniera corespunzatoare unei aplicatii date a

traiectoriilor de miscare, a functiilor pe care trebuie sa le realizeze).

c) al productivitatii: prin intermediul programarii, sistemul robot

trebuie sa devinacat mai eficient ( prin reprogramare robotul va

executa diverse sarcini, ceea ce face ca acelesi robot sa poata fi utilizat

în multe aplicatii).

Limbaje de Programare a Robotilor Industriali

21

B. Utilizarea roboţilor industriali în aplicaţii industriale -

Robotizarea unor aplicaţii

Robotizarea unei aplicatii cauta sa inlocuiasca munca operatorului uman

în realizarea unor sarcini repetitive, obositoare si plictisitoare pentru cresterea

productivitatii.

Prin programarea unei aplicatii robotizate se intelege procesul de

elaborare (editare, verificare, transfer) a unui ansamblu de instructiuni

corespunzatoare atat aplicatiei respective,cat si sistemului de programare al

robotului.

Controlul poate fi executat direct de sistemul de conducere alrobotului

sau, mai general, de un sistem de conducere aflat pe un nivel ierarhic superior;

acesta coordoneaza activitatea tuturor echipamentelor din celula robotizata de

productie urmarind paralelismul si sincronizarea tuturor operatiilor efectuate.

În vederea unei clarificări a problematicii abordate, în continure, va fi

abordat şi explicat în detaliu o aplicaţie: preluarea unor semifabricate care pot

sosi intr-o pozitie oarecare, prelucrarea si apoi ambalarea lor.

Structura celulei robotizate care va efectua toate aceste operatii este

urmatoarea:

In cadrul acestei celule se vor executa urmatoarele operatii:

- pozitia oarecare în care sosesc semifabricatele pe banda transportoare

este determinata prin inspectie vizuala cu camera TV (in paralel se pot verifica si

detwermina eventualele defecte ale semifabricatelor );

- în functie de datele inspectiei vizuale, robotul 1 va fi adus intr-o anumita

pozitie si cu o anumita orientare corespunzatoare preluarii semifabricatelor;

- urmeaza operatia de inchidere a dispozitivului de apucare a robotului cu

o forta adaptata la greutatea semifabricatului;

- plasarea semifabricatului în universalul masinii-unelte;

Limbaje de Programare a Robotilor Industriali

22

- piesele prelucrate sunt preluate de robotul 2 si depuse în cutii unde are

loc ambalarea.

Desi nu exista o metodologie unica de robotizare a unei aplicatii pot fi

totusi puse în evidenta cateva etape mai importante:

1. Analiza operatiilor care trebuie executate , stabilirea celor care pot

fi robotizate si determinarea structurii celulei robotizate( avand în vedere

datele aplicatiei s-a ajuns la concluzia ca sunt necesari doi roboti , o masina-

unealta cu comanda numerica si o banda transportoare).

2. Alegerea robotilor în functie de diferite criterii:

numarul de grade de libertate impus de complexitatea miscarilor ce trebuie

executate;

dimensiunile volumului de operare;

performantele referitoare la precizii, viteze si acceleratii, forte de strangere,

e.t.c.;

modul de programare si limbajul utilizat care trebuie sa fie cat mai simple dar

sa corespunda totusi operatiilor ce trebuie executate;

pretul de cost, amortizarea , e.t.c.;

3. Definirea si stabilirea modului de amplasare al utilajelor ( roboti,

masini-unelte, banda) care are în vedere :

- accesibilitatea efectuarii miscarilor impuse robotilor;

- spatiul liber si minimizarea riscului de coliziuni intre elementele aflate în

miscare în celula robotizata;

4. Definirea necesarului si apoi a mijloacelor de comunicare dintre

sistemele de conducere ale echipamentelor din celula; se urmareste:

- natura si modul de distributie al mesajelor;

- oportunitatea unei retele locale de comunicatie;

- posibilitatea integrarii intr-un flux informational la nivelul sectiei sau al

intreprinderii.

Limbaje de Programare a Robotilor Industriali

23

5. Programarea robotilor si a masinilor-unelte. Sarcinile pot fi descrise

prin relatii geometrice intre elementele terminale ale robotilir si pozitia anumitor

puncte de lucru , prin elemente geometrice(puncte, drepte, plane). în principal,

descrierea sarcinilor trebuie sa contina:

- puncte: descrise fie în spatiul coordonatelor operationale, fie în spatiul

coordonatelor articulatiilor robotului;

- traiectorii: vor fi multimi de puncte ce trebuie atinse succesiv în

miscarea robotului;

- miscari: se obtinprin asocierea traiectoriilor la diferite momente de timp;

- interactiuni cu mediul( efectuarea operatiilor de apucare cu o anumita

forta, efectuarea operatiei de ambalare).

Fiecare din etapele enumerate mai sus pot fi realizate în diferite feluri ceea

ce arata ca modul de robotizare al unei aplicatii nu este unic. De exemplu,

structura celulei de lucru poate fi alta,amplasarea utilajelor, maniera în care sunt

definite sarcinile si în care se alcatuiesc programele poate fi diferita.

Alta posibilitate de robotizare a unei aplicatii o reprezinta utilizarea

sistemelor CAD, care , prin intermediul unor elemente specifice de modelare,

analiza si optimizare , permit:

- definirea si organizarea elementelor dintr-o sectie de productie;

- implementarea si compararea diferitelor modele de roboti pentru

realizarea unor sarcini date ( modele disponibile intr-o biblioteca);

- programarea practica a miscarilor si verificarea prin simulare a

comportamentului robotilor, determinarea interferentelor co mediul respectand

restrctiile geometrice, cinematice, si dinamice,evolutia în timp.

C. Utilizarea informatiilor senzoriale în programarea

robotilor industriali

În aplicatia prezentata în capitolul 1.2 pot fi puse în evidenta mai multe

tipuri de senzori prin intermediul carora robotii isi pot desfasura activitatea:

Limbaje de Programare a Robotilor Industriali

24

1. Senzori de pozitie: sunt situati în articulatii si prin intermediul

informatiilor lor se pot determina în orice moment pozitiile structurii mecanice a

robotului;

2. Senzori de vedere: cu ajutorul informatiilor provenite de la camera TV

se determina pozitia si calitatea obiectelor de lucru;

3. Senzori tactili si/sau senzori de forta: sunt dispusi în incheietura

terminalului sau pe bacurile terminaluluisi permit efectuarea operatiei de

apucare sau de depunere.

Integrarea informatiilor senzoriale în buclele de comanda ale robotilor

permit efectuarea unor sarcini în universul partal cunoscut sau bine cunoscut în

care exista impotante incertitudini. Unele din aceste informatii pot fi utilizate

direct de sistemul de comanda al robotului, dar i majoritatea cazurilor, ele sunt

interpretate prin intermediul sistemului de programare caruia i se impun, din

acest punct de vedere, doua mari cerinte:

- sistemul de programare trebuie sa dispuna de "mecanisme" speciale de

intrare/iesire pentru achizitionarea datelor de la senzori; acest lucru este rezolvat

simplu în cazul limbajelor de programare de nivel inalt care au incluse

instructiuni speciale pentru lucrul cu senzori.

- sistemul de programare trebuie sa dispuna de "mecanism" de control

versatile, cum ar fi controlul fortei, pentru utilizaea informatiei senzoriale în

vederea determinarii miscarii robotului. Nevoia de specificare a parametrilor

pentru miscarile bazate pe senzori reprezinta o puternica motivatie pentru

utilizarea unor limbaje complexe de programare.

Dupa cum s-a aratat mai sus, senzorii sunt utilizati în diferite scopuri în

programarea robotilor, fiecare scop conducand la anumite cerinte impuse

proiectarii sistemelor de programare.

Exista cateva tipuri de "mecanisme senzoriale" care ar trebui incluse în

sistemele de programare:

Limbaje de Programare a Robotilor Industriali

25

1. initierea sau terminarea unei miscari.Multe sisteme de programare

dispun de instructiuni pentru asteptarea unui semnal binar extern inainte de

lansarea în executie a unei proceduri. Aceasta facilitate este utilizata pentru

sincronizarea robotilor cu alte utilaje.

Exemple: - preluarea unor obiecte de pe banda transportoare se face în

momentul în care acestea au ajuns în dreptul unui anumit limitator;

- închiderea dispozitivului de apucare se face pana în momentul

în care un micro întrerupator este "facut", ceea ce îndica realizarea contactului

dinte terminal si obiectul de lucru.

2. Alegerea între diferite actiuni. Daca pozitiile în care trebuie sa

ajunga robotul pentru a desfasura operatiile impuse sunt bine precizate la nivelul

programulu, strategia( prin care se intelege modul în care se executa deplasarile

avand în vedere interactiunile cu mediul ) rezulta din evaluarea informatiilor

senzoriale percepute.

Exemplu: - efectuarea operatiei de plasare a unui oboect intr-un orificiu:

terminarea operatiei depinde de rezultatele evaluarii erorilor de la senzorii de forta amplasati

la incheietura dispozitivului de apucare.

Rezulta ca sistemul de programare trebuie sa dispuna de mecanisme de

achizitie a datelor de la diferite sisiteme senzoriale( forta, pozitie, vedere) sa

execute calcule si sa ia decizii în functie de rezultate.

3. Identificarea, pozitionarea si determinarea anumitor trasaturi ale

obiectelor de lucru, ceea ce presupune utilizarea unor sisteme de vedere.

Exemplu: - cu ajtorul camerei TV se poate determina pozitia obiectului

de lucru functie de care se executa pozitia si orientarea terminalului robotului

pentru apucare.

La nivelul sistemului de programare trebuie sa existe acele facilitati, acele

mecanisme care, pe baza informatiilor de vedere, sa fie capabile sa determine

distante, pozitii.

Limbaje de Programare a Robotilor Industriali

26

Identificarea obiectului presupune compararea informatiei provenite de la

senzorii de vedere cuo baza de date. Aceasta identificare se poate face la nivelul

robotului sau la alt nivel, ceea ce presupune includerea în sistemul de

programare a unpr posibilitati de comunicatie cu alte calculatoare unde se afla

baza de date.

4. Miscarea adaptiva sau controlul continuu pe baza informatiei

senzoriale achizitionate de asemenea continuu.

Miscarile si eventual secventierea lor sunt deduse:

- prin interactiunea directa dintre robot si mediu ca în cazul miscarilor

complexe sau ale miscarilor coordonate ale mai multor roboti;

- prin tratarea complexa a informatiilor proximetrice multidimensionale.

Concluzionând, putem spune ca integrarea informaţiilor senzoriale

permite determinarea prin mijloace de complexitate medie sau crescuta a:

- conditiilor de executie;

- situatiilor de asteptare;

- drumurilor sau traiectotiilor ce trebuie parcurse;

- secventelor de miscari ce trebuie realizate.

D. Sistemele de programare si sistemele de comanda ale

roboţilor industriali

Una dintre tendintele actuale care se refera la proiectarea si realizarea R.I.

o reprezinta disocierea operatiilor de programare a sarcinilor care trebuie sa fie

executate, de operatiile de comanda si control ale structurii mecanice care

realizeaza aceste sarcini. în acest sens, putem pune în evidenta următoarea

structură:

Din punct de vedere funcţionare, sistemul de comandă poate fi împărţit pe

următoarele nivele:

Limbaje de Programare a Robotilor Industriali

27

1. Nivelul de bază: coordoneaza activitatea la nivelul articulatiilor fiind

cel care realizeaza traiectoriile de miscare si care interpreteaza informatiile de

pozitie si de viteza;

2. Nivelul al doilea este cel la care se fac transformari de coordonate si se

stabilesc acele informatii necesare generarii traiectoriilor, informatii care sunt

apoi furnizate nivelului 1.

3. Nivelul al treilea, cel mai inalt, este cel la caresarcinile ce trebuie

executate de robot trebuie impartite în miscari distincte care trebuie executate la

nivelul 1 de fiecare axa; tot la acest nivel , se efectueaza calcule matematice, se

implementeaza algoritmi, se realizeaza teste, se asigura sincronizarea miscarilor

intre ele sau cu alte canale de intrare, se realizeaza interfata cu sistemul de

intrare/iesire.

Se cauta tot mai mult obtinerea unei autonomii sporite a sistemului de

comanda fata de sarcinile referitoare la planificarea miscrilor, la corectarea

anumitor erori de miscare. în paralel cu aceasta autonomie, pentru a fi

competitive din punct de vedere al preţului, multe din sistemele actuale au doar

primele doua sisteme functionale si uneori numai primul nivel. Pentru a fi

compatibile si cu toate aceste sisteme de comanda , sistemele de programare

(S.P) trebuie sa permita descrierea sarcinilor fie la nivelul articulatiilor, fie la

nivelul coordonatelor operationale, fie chiar la nivel de obiect sau obiectiv.

Legatura dintre sistemul de programare si cel de comanda se realizeaza prin

intermediul unei informatii codate care poate fi implicita, cand se refera la

generatorul de traiectorii, sau explicita cand, de exemplu, se dau anumite pozitii,

anumite forte de strangere.

Concluzii:

Aceasta tendinta de separare a sarcinilor si de utilizare a doua sisteme,

unul de programare si unul de comanda, conduce laurmatoarele avantaje:

Limbaje de Programare a Robotilor Industriali

28

- efectuarea operatiilor de programare se poate executa în paralel cu

miscarea robotului; dupa ce un anumit program de lucru a fost definitivat si

transferat în sistemul de comanda, în sistemul de progreamare se poate edita si

definitiva un nou program pentru sarcinile ulterioare;

- Acelasi S.P. poate fi utilizat pentru mai multi roboti, pentru transferul

programului în cadrul mai multor sisteme de comanda. Utilizarea unui S.P. la

mai multe tipuri de sisteme de comanda este posibila datorita uniformizarii

codului de transfer al informatiei;

- Avand ca obiect doar definitivarea programului, S.P. poate dispunede o

structura mai complexa - exista astfel S.P. care dispun de simulatoare grafice

pentru verificarea si corectarea miscarilor robotilor prin optimizare care

urmarescindeplinirea anumitor indicatori de performanta( timpi de executie,

consum de enegie).

- La nivelul S.P. au fost implementate limbaje de programare de nivel tot

mai ridicat, care, utilizand elemente de inteligenta artificiala , rezolva sarcini tot

mai complexe cum ar fi asamblarea automata, conducerea adaptiva, lucrul în

acelasi spatiu de operare a mai multor roboti cu evitarea sarcinilor si

coordonarea miscarilor, e.t.c.

E. Descrierea sarcinilor pe care trebuie să le realizeze

roboţii industriali

Descriera unei sarcini ( task ) poate fi exprimata în termenii actiunii robotului

asupra mediului în care opereaza si determina evolutia în timp:

- daca aceasta evolutie este cunoscuta apriori se va descrie o succesiune

de actiuni. Realizarea acestor actiuni (deplasari, operatii cu obiecte ) poate fi

analizata în termenii "succesului" sau "esecului". Daca se ia în consideratie si

esecul(detectia unui obstacol, pierderea unui obiect transportat) trebuie inclus în

descrierea de solutii alternante , adaptive. Daca nu, toate actiuniletrebuie sa

serealizeze cu succes;

Limbaje de Programare a Robotilor Industriali

29

- în caz contrar, va fi un S.P. care va determina actiunile care vor trebui

executate de robot pentru a realiza sarcinile impuse.

Practic, pot fi puse în evidenta doua tipuri de descriere a sarcinilor:

1. Descrierea spatio-temporala, numita si descriere la nivelul manipularii

unde se pot identifica doua subnivele de programare:

- programare la nivelul actionarii ( articulatiei );

- programare la nivelul efortului ( în spatiul sarcinilor);

2. Descrierea fractionala, numita si descrierea la nivelul sarcinii unde, de

asemenea exista doua subnivele:

- programare la nivelul obiectului (actiuni simbolice cu obiecte);

- programare la nivelul obiectivului(ajungerea în anumite stari dorite);

In continuare vor fi analizate caracteristicile descrierilor sarcinilor pentru

fiecare din cele patru nivele de programare.

1. Descrierea la nivelul actionarilor

Coordonatele generalizate qi (sau coordonatele interne generalizate) ale

unui robot, sunt deplasarile liniare sau unghiulare care se realizeaza la nivelul

articulatiilor i din structura mecanica a robotului.

q Qin unde

n- numarul articulatiilor dintr-o structura;

Q- spatiul coordonatelor interne sau spatiul manipulatorului;

In spatiul Qn o traiectorie C este apecificata printr-o suita ordonata de "p"

vectori de coordonate interne qi :

C=( q1q2,...,qp)

Fiecarui segment q q qi i i 1 ii este asociata o viteza (deplasarea C(t))

care este în general un procent din viteza maxima articulara:

a axelor care se deplaseaza simultan (când mişcările manipulatorului sunt

coordonate);

Limbaje de Programare a Robotilor Industriali

30

a axei comandate ( cand miscarea se face succesiv pe fiecare axa ).

Legea de comanda - daca exista- permite determinarea perioadei de timp

în care se parcurge un segment tinand cont de restrictiile cinematice de viteza si

acceleratie ( , max maxq q ).

a) Traiectoria punct cu punct

Traiectoria manipulatorului intre extremitatile segmentului trebuie

determinata astfel incat sa se obtina anumite variatii de viteza si acceleratie în

punctele de plecare si de oprire. De asemenea, pentru comanda si realizarea

deplasarii intre punctele qi si qi+1 se face o impartire a intregului segment în

distante comparabile cu deplasarile maxim admisibile qi de la nivelul

articulatiilor intr-o perioada de esantionare dt a sistemului de conducere. în acest

caz, pentru ajungerea la o anumita cota, se va introduce o frânare prin

diminuarea deplasarilor qi în aproprierea punctului final.

Pentru controlul evolutiei variabileleor q si q exista mai multe metode

care utilizeaza modele analitice de evolutie q(t) si care se realizeaza în principal

prin interpolare poinomiala sau trigonometrica.

b) Traiectorii cu restrictii

Daca configuratiile qi si qi+1 sunt apropiate, traiectoria urmata de robot

este în general robusta din punct de vedere al variatiilor de viteza sau de sarcini

transportate. Pe de alta parte, introducerea de puncte intermediare devine

indispensabila atunci cand ne referim la deplasari mari sau cand intervin diverse

perturbatii, cum ar fi cele de origine dinamica; acestea se numesc traiectorii cu

restrictii.

Aceste puncte de trecere cu viteza diferita de zero sunt introduse prin

programare. Prin ele se realizeaza, de exemplu, esantionarea traiectoriilor

carteziene cand descrierea sarcinilor sunt transferate la nivelul actionarii.

Limbaje de Programare a Robotilor Industriali

31

Din punct de vedere al programarii, este important sa se cunoasca cum

sunt interpretate aceste ordine, acele puncte, de catre generatorul de traiectorii al

controlerului. De exemplu, daca se alege drept criteriu de performanta

minimizarea timpului de parcurs, atunci:

- traiectoria generala trebuie sa treaca exact prin aceste puncte

intermediare introduse;

- continuitatea vitezelor q.i si a acceleratiilor q..i în aceste puncte este

asigurata prin cmanda ( desi mecanismele de transmitere a miscarii actioneaza ca

niste filtre naturale, ele nu sunt suficiente pentru a obtine un raspuns amortizat

convenabil).

Pentru generarea traiectoriilor se pot utiliza:

1. Metoda prin care se determina un polinom de grad minim care trece

prin toate punctele traiectoriei si respecta, verifica, conditiile de viteze si

acceleratii. Aceasta metoda numita si interpolare globala sre doua dezavantaje

mari:

- gradul polinomului necesar creste cu numarul configuratiilor;

- introducerea unui nou punct sau modificarea unei configuratii impune

determinarea unui nou polinom( lucru dificil cand aceste modificari se fac on-

line).

2. Metoda interpolarii pe tronsoane la care se determina cate un polinom (

de grad maxim 4 ) pentru fiecare pereche de puncte.

3. Metoda lui Paul, de ordinul II , care utilizeaza interpolarea liniara si

tranzactii parabolice si care este cel mai frecvent utilizata.

Reprezentarea sarcinilor în spatiul articulatiilor prezinta cateva avantaje

cu privire la generarea traiectoriilor:

nu sunt depasiri ale restrictiilor de viteze si acceleratii;

se cunosc exact limitele articulatiilor ;

nu sunt singularitati care trebuie transformate;

Limbaje de Programare a Robotilor Industriali

32

rapiditate;

permite rezolvarea anumitor situatii ( de exemplu, alegerea configuratiilor)

prin intermediul sistemului de programare.

In schimb, aprecierea situatiilor în spatiul articulatiilor este destul de

dificila cand structurile contin mai mult de trei axe si analiza se face la nivelul

sistemului de programare.

2. Descrierea în spatiul sarcinilor în general se cauta sa se realizeze o descriere a miscarii robotului în

spatiul operatoinal Rm deoarece:

- descrierea spatiului si a pozitiei obiectelor în vederea manipularii lor

este mult mai simpla în acest spatiu decat în Qn ( de exemplu, pozitia unui punct

în sistemul cartezian R3 este data doar de trei coordonate);

- spatiul Rm este un spatiu afin euclidian ceea ce semnifica faptul ca

evolutia poate fi descrisa intr-o maniera unica si continua;

- sarcinile sunt descrise intr-un sistem de referinta care nu este legat de

robot. Sarcina la nivelul efectorului este portabila , ceea ce insemna ca ea poate

fi efectuata si de alti roboti sau ca robotul poate fi deplasat fara sa existe

consecinte în expresia sarcinii;

- informatiile provenite de la sistemul exterioreceptiv ( camere TV,

senzori de forte, e.t.c.) solidar cu spatiul de operare, sunt mereu exprimate în

termenii unor distante, proiectii sau componente în Rm. Doar senzorii

proprioreceptivi , legati de articulatii, dau informatii simple în Qn.

In schimb, este destul de dificil a defini o metoda care tine explicit cont de

redundanta robotului în raport cu o anumita sarcina.

3. Evolutia pozititei si orientarii efectorului Obs.: în loc de pozitie si orientare se utilizeaza des termenul de situatie.

Limbaje de Programare a Robotilor Industriali

33

Programarea deplasarilor în spatiul situatiilor necesita o descriere

geometrica a traiectoriei C=(p1, p2, ..., pn); (vom vorbi de traiectoria operationala

a efectorului). Aceasta descriere poate fi completata cu o lege functie de timp

sau cu restrictii cinematice ale punctelor intermediare pi. De asemenea , daca

parametrul timp este specificat explicit, se poate defini miscarea operationala

sub forma :

C(t)=(p1(t), p2(t), ... , pn(t))

a) Utilizarea legaturilor mecanice

Utilizarea legaturilor mecanice permite definirea relatiilor ce se stabilesc

intre sistemul de referinta asociat terminalului robotului si entitatile geometrice

ce caracterizeaza spatiul de operare. Acestea vor permite reprezentarea

restrictionarii gradelor de libertate ale situatiei atinse( pozitiv, de exemplu).

b) Descrierea traiectoriilor operationale

Daca nici o restrictie cinematica nu este atasata descrierii geometrice a

sarcinii, legea de miscare rezultanta este obtinuta aposteoric în functie de

metodele de generare ale traiectoriilor utilizate de sistemul de comanda. în acest

caz, daca esteexecutabila, traiectoria va fi parcursa în timp minim , singurele

restrictii fiind limitele maxime ale vitezelor q.max si acceleratiilor q..max din

articulatii:

(1) Traiectorii libere

Traiectoria C este numita libera sau punct cu punct, daca descrierea se

rezuma la o situatie ce trebuie atinsa. Traiectoriile libere sunt utilizate în cazul

miscarilor grosiere, de mare amplitudine , sau cand se cauta optimizarea

timpului de parcurs.

Limbaje de Programare a Robotilor Industriali

34

(2) Traiectorii cu restrictii

In majoritatea cazurilor se cauta controlarea traiectoriei efectorului în mod

continuu (traiectorii analitice) sau punctual (puncte de trecere). Aceasta va

permite :

1) Limitarea riscului de ciocnire :

daca exista cai comtinue, în spatiul Qn, libere de coliziuni;

daca toate gradele de libertate ale robotului sunt fixate prin pozitita si

orientarea efectorului;

daca este posibil ,in cazul descrierii sarcinii , sa se impuna o anumita

configuratie a manipulatorului , dintre mai multe posibile;

Atunci este posibil sa se descrie un drum liber printr-o traiectorie continua în

Rm.

2) Realizarea unor miscari care sa raspunda precis restrictiilor de pozitie

si/sau orientare de-a lungul parcursului efectuat.

Descrierea traiectoriilor cu restrictii se poate face :

1) Prin specificarea punctelor de trecere în spatiul operational;

2) Prin specificarea interpolarii liniare sau circulare a situatiei în care

traiectoria este esantionata:

- fie prin incrementi constanti (xp, x0); (pozitie si orientare) intre

situatia initiala si cea finala;

- fie prin metoda liniarizarii lui R. Taylor care presupune divizarea

repetată a segmentului rectiliniu ce trebuie parcurs , pana este satisfacut un

anumit criteriu cum ar fi abaterea de la traiectorie; se cauta astfel ca numarul

punctelor de trecere sa fie crescut numai în zonele în care mici variatii q

conduc la variatii imprtante x.

Concluzia: - daca traiectoria este exprimata analitic , atunci sistemul de

programare trebuie sa o transforme numeric în elemente de deplasare admise de

sistemul de control ( puncte de trecere sau segmente interpolate).

Limbaje de Programare a Robotilor Industriali

35

c) Miscari în spatiul operational

Se poate face o analogie intre traiectoriile si miscarile din spatiul

operational (spatiul sarcinilor pe care trebuie sa le realizeze robotul) cu ceea ce a

fost prezentatmai sus pentru spatiul ariculatiilor:

O deplasare C(t) rezulta prin asocierea unei legi de timp la o traiectorie C,

punct cu punct sau cu restrictii. Generarea unei traiectorii în spatiul operational

presupune definirea unor parametri de viteza si acceleratie în spatiu, maxim

admisi , liniari si unghiulari legati de sistemul de referinta asociat terminalului.

Controlul evolutiei vitezei instantanee , atat liniare cat si unghiulare, se

realizeaza cu modelul variational ( diferential):

dx

dtJ q

dq

dt

unde J(q) reprezinta Jacobianul structurii mecanice.

Observatie - deoarece legatura dintre incrementul Dx al situatiei si

traiectoriei este x x C t t , rezulta ca valabilitatea modelului de mai

sus este legata direct de perioada de eşantionare.

Limbaje de Programare a Robotilor Industriali

36

III. Elemente de bază ale limbajelor de programare a roboţilor industriali

A. Introducere în tematica limbajelor de programare a

roboţilor industriali

După cum s-a observat din problematica abordată în capitolele anterioare

limbajele de programare prezintă o serie de particularităţi, care aplicate în cadrul

structurilor robotice se concretizează în limbaje de sine statătoare care

înglobează elementele definitorii ale ambelor domenii: limbajele de programare

destinate structurilor de calcul, respectiv structurile mechatronice de tip roboţi

industriali.

Programarea roboţilor se poate realiza prin mai multe metode care să nu implice

obligatoriu utilizarea unui limbaj de programare. Dintre acestea se amintesc:

a) programarea manuală - în care se precizează succesiunea mişcărilor prin

intermediul unor elemente senzoriale care definesc momentul opririi

deplasării

b) programarea prin instruire - robotul este deplasat în punctele dorite de către

programator fără acţionarea motoarelor structurii robotice

c) programare secvenţială - este o programare prin instruire realizată cu

acţionarea motoarelor structurii robotice.

d) programarea master-slave - este o programare prin instruire care utilizează

un model ce este învăţat traiectoria, pentru ca apoi programul să fie transferat

master-ului

Singura procedură de programare care implică utilizarea unui limbaj de

programare dedicat este procedura de programare prin învăţare - teach in

procedure. Avantajele acestei metode sunt materializate prin opţiuni privind:

viteza de mişcare

durata mişcării

programarea întârzierilor

Limbaje de Programare a Robotilor Industriali

37

bucle de program simple

programe simple cu ramificaţii depinzând de întreruperi, semnale primite

de la senzori

funcţii speciale

Cum s-a prezentat în capitolul I, un limbaj de programare trebuie să dispună de

un univers natural propriu.Astfel pentru programarea teach-in va trebui să existe

date de tip numeric precum şi un set minimal de tip text. Fiecare funcţie poate fi

introdusă prin intermediul unei chei speciale, taste care pot fi reprezentate printr-

un şir de caractere care alcătuiesc un simbol. Simbolurile utilizate de un limbaj

de programare alcătuiesc vocabularul limbajului, regulile gramaticale care

permit combinaţii între elementele vocabularului alcătuiesc sintacsa, iar

semnificaţia simbolurilor şi a combinaşiei acestora alcătuieşte semantica

limbajului. Organizarea limbajului poartă numele de pragmatică.

Exemplu: Fie un vocabular format din următoarele simboluri:

V={limbaj,student,este,complex,blond,brunet,dificil}.

Regulile de sintaxă sunt:

a) trei elemente ale vocabularului alcătuiesc o propoziţie

b) primul element al propoziţiei trebuie să fie Limbaj sau Student

c) al doilea element al propoziţiei trebuie să fie este

d) al treilea element al propoziţiei este unul dintre simbolurile: complex, blond,

brunet,dificil.

Utilizând aceste reguli propoziţiile posibile sunt:

Limbajul este

complex

dificil

blond

brunet

. respectiv Studentul este

complex

dificil

blond

brunet

. Datorită semnificaţiei în

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

prelucrată sub forma:

d) al treilea simbol al propoziţiei este:

Limbaje de Programare a Robotilor Industriali

38

dacă primul element este Limbaj atunci al treilea element este complex sau

dificil

dacă primul element este Student atunci al treilea element este blond,

dificil sau brunet.

Se observă ca unele simboluri depind puternic de context influenţând total

semantica propoziţiei. În continuare vor fi prezentate caracteristicile limbajelor

de programare pentru sistemele de calcul cu particularităţile pe care le prezintă

în cazul roboţilor industriali.

B. Elemente caracteristice limbajelor de programare destinate structurilor de calcul

În cadrul limbajelor de programare se disting clar câteva categorii de

elemente care intră în alcătuirea limbajului. Dintre acestea se pot aminti:

* simbolurile limbajului

* cuvintele simbol

* date de tip obiect ( care au o anumită semnificaţie în funcţie de

context)

* structurile de date

* operaţiile asupra datelor

* algoritmul.

Dacă această clasificare este cuprinzătoare din punct de vedere funcţional,

în cele ce urmează se vor prezenta elementele unui limbaj clasic de programare ,

din punctul de vedere al utilizatorului, sau mai corect din punct de vedere

conceptual:

1. Variabilele

a) Introducere Acest concept s-a impus în robotică, în special, datorită informaţiilor

preluate de către senzori (realizându-se astfel achiziţia informaţiei de mediu,

Limbaje de Programare a Robotilor Industriali

39

oferită de către senzori), respectiv datorită informaţiilor prelucrate de către

arhitectura de comandă şi control a robotului.

O variabilă este deci identificată printr-un nume şi aparţine unui

anumit tip simplu, implicit limbajului de programare (logic, aritmetic, cuvänt)

sau unui tip compus definit de programator. Ca orice dată folosită de un

calculator o variabilă dispune de o adresă a variabilei şi conţinutul acesteia.

Din punct de vedere al rapidităţii de execuţie a programului se

preferă pentru adresare, adresarea relativă, generându-se un tabel de simboluri în

care intră numele variabilelor şi adresele relative ale acestora. Contorizarea

acestora se face pe baza unui numărător care este incrementat la fiecare

introducere a unei noi variabile cu numărul de biţi necesari memorării variabilei

de tipul respectiv.

Exemple:

Instrucþiune Lungime instrucþiune

Nume Adresă relativă

unu, p1: INTEGER; 2 byti unu 0 total, pozitie: REAL; 14 byti p1 2

total 4 poziþii 8

Un alt tip de variabile este cel al variabilelor tabelare sau tip bloc. Acest

tip, mai ales pentru limbajele de programare a roboţilor, este deosebit de des

întâlnit şi oferă o compactitate deosebită programelor, precum şi o economie de

memorie.

Exemple: MOVE (63, 56.5, 33.8, 26,45,5) sau

VAR P1: FRAME (structuri de 6 valori)

MOVE P1

O structură particulară de variabile este stiva. Aceasta este

constituită dintr-un masiv de memorie în care datele sunt înscrise după

procedura LIFO (Last in, first out). Dacă o dată este introdusă (push) în stivă,

Limbaje de Programare a Robotilor Industriali

40

pointerul este decrementat şi apoi data este introdusă. Extragerea se face prin

citirea datei şi incrementarea pointerului - pop.

Un alt tip particular de variabilă este coada care este opusul stivei, ea fiind

o colecţie de date de tip FIFO.

b) Evoluţia variabilelor de-a lungul programului Datorită programării structurate, care este utilizată şi ín robotică se

pune problema valabilităţii, vieţii, variabilelor de-a lungul programului. Astfel

un program poate să conţină variabile generale a căror definire are sens de-a

lungul întregului program, cät şi variabile locale care au sens numai între

începutul (begin) şi sfärşitul (end) unui bloc component al întregului program.

Cum după părerea autorului, o explicaţie grafică este mult mai clară, figura

următoare, exemplifică cele afirmate în cadrul acestui subcapitol.

BEGIN “ bloc 1 “ VAR a: INTEGER; v: VECTOR;

.

.

.

BEGIN “ bloc 2 “ VAR c,b : INTEGER;

.

.

. END “ bloc 2 “

.

.

. END “ bloc 1 “

Un alt avantaj al programării structurate este datorat alocării

dinamice de memorie prin separarea programului în blocuri componente. Astfel,

dacă este apelat blocul 1, la terminarea operaţiilor specifice, variabilele din acest

a,v - valid

c - valid b - valid

Limbaje de Programare a Robotilor Industriali

41

bloc sunt şterse la nivel de memorie alocată şi în acelaşi spaţiu de memorie, sunt

inserate variabilele altui bloc. Aceasta face ca în cazul în care nu se utilizează

algoritmi recursivi evaluarea memoriei utilizate să se poată face uşor.

2. Subrutine Dacă un program prezintă anumite zone care se repetă, eventual cu

alţi parametrii, se poate utiliza o structură de tip subrutină. Aceasta poate fi

chemată din orice punct al programului, urmând ca întoarcerea după execuţia

subrutinei să se facă la instrucţiunea imediat următoare apelului subrutinei.

Această adresă, adresa de întoarcere este salvată într-o structură de tip stivă,

alocarea memoriei fiind de asemenea o alocare dinamică.

Program “ main program “

declaraţii

SUBROUTINE 1;

RETURN “ intoarcerea din prima subrutina ‘

GOSUB SUBROUTINE 1

GOSUB SUBROUTINE 1

Un caz particular de autoapelare a subrutinei este cazul

recursivitáţii.

3. Proceduri şi funcţii

Limbaje de Programare a Robotilor Industriali

42

Ín esenţă o procedură sau o funcţie sunt o extensie a conceptului de

subrutină, acestea fiind de fapt subrutine cu parametri de intrare şi/sau de ieşire.

Procedura dispune deci de un nume, de parametru de intrare şi/sau ieşire care

pot fi transmişi către programul principal şi un corp al procedurii în care se

efectuează operaţii aritmetico-logice. În corpul procedurii pot fi utilizate şi alte

variabile interne care la ieşirea din procedură vor fi piedute. O caracteristică

importantă este dată de faptul că la definirea procedurii, parametrii de

intrare/ieşire sunt parametri formali urmând ca la înlocuirea lor cu cei din apel

să devină parametri efectivi. Apelul procedurilor şi funcţiilor diferă de cel al

subrutinelor în timp ce revenirea este identică.

În cazul procedurilor, modul în care sunt furnizaţi parametrii de

ieşire trebuie să fie studiat cu atenţie. Dacă însă operaţiile asupra datelor de

intrare nu sunt prea complexe, iar ieşirea se face pe o variabilă se apelează la

conceptul de tip funcţie.

4. Macroinstrucţiunile

Ín general acest tip de pseudoprocedură defineşte substituirea unor texte

sau tablouri. Structura standard cuprinde o definiţie a macro-ului, mai precis

alocarea unui nume setului care va fi substituit şi un corp al macro-ului ce

defineşte o secvenţă de caractere sau apelul la alte ,,macro-uri. Apelul unei

macroinstrucţiuni se face prin numele ataşat care are ca efect înlocuirea acestuia

cu corpul macroinstrucţiunii.

Exemple:

DEFINE inch = # * 2.54 * cm # ;

distance := base + 35 inch; { echivalent cu distance:=base + 35 * 2.54

cm;}

5. Recursivitatea Distingem două tipuri de recursivitate:

Limbaje de Programare a Robotilor Industriali

43

* recursivitate directă - când are loc autoapelarea procedurii

* recursivitatea indirectă - când o procedură apelează o altă procedură în

timpul execuţiei sale, procedură care la rândul

său o apelează pe prima.

În robotică nu se apelează prea des la acest tip de algoritm, însă folosirea

acestei metode duce la realizarea unor programe mult mai compacte.

Exemple:

Procedura A

Call A

recursiv

Procedura A Call B

Procedura B Call A

Call A

Call A

Recursivitate directă Recursivitate indirectă

6. Procese şi corutine Ín cadrul unui program pot fi controlate mai multe procese, între care

poate există o anumită relaţie temporală sau interdependentă.

Astfel un proces poate fi:

* în stare inactivă -dormant state - când procesul poate fi declanşat fie

de alt proces, fie de un eveniment extern. Acesta poate fi executat sau nu

în paralel cu alt proces sau poate aştepta terminarea altui proces.

* în stare activă când este executat;

Limbaje de Programare a Robotilor Industriali

44

* în stare ready - starea premergătoare stării active şi post active;

* în stare de aşteptare a unui eveniment - waiting

Corutinele sunt imagini ale planificării proceselor la nivelul sistemului de

operare. Acestea pot fi declanşate în serie sau în funcţie de comenzile de

întrerupere generate.

Figure 11

Figure 12

Limbaje de Programare a Robotilor Industriali

45

Datorită acestora, cât şi a modului în care procesele trebuie

să aibă loc apare termenul de sincronizare şi implicit de variabile de

sincronizare. Acestea prin aprinderea (activarea) lor (mai poartă numele

de steaguri-flag sau semafor) sesizează unui alt proces faptul că procesul

urmărit de respectiva variabilă s-a terminat sau a început, urmând ca alt

proces să fie iniţializat, pus în stare de aşteptare sau terminat.

C. Conceptele specifice Limbajului Robot

Robotica s-a impus şi se impune ca un domeniu aparte în ştiinţă situându-se

la graniţa dintre mai multe discipline: mecanică, electronică, automatică,

programare. Această poziţie implică revendicarea unor termeni specifici care să

permită:

1. o mai uşoară operare şi programare pentru operator;

2. o apropiere cât mai strânsă cu programarea clasică;

3. reducerea complexităţii în cazul dezvoltării sistemului.

Specificul limbajelor de programare a roboţilor este acela că obiectele cu care

acesta operează se află într-o lume reală, în care distanţele, poziţiile şi orientarea

sunt elemente de bază. Aceste cerinţe au implicat o serie de particularităţi şi

termeni specifici.

1. Sistem de referinţă - Frame

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

definită ca fiind poziţia robotului respectiv orientarea acestuia. Acestea sunt

z

x

y

x

z

y

Transl

atie

Rotatie

Figure 13

Limbaje de Programare a Robotilor Industriali

46

definite în funcţie de un sistem referenţial de bază

Cum robotul sau anumite elemente ale arhitecturii acestuia sunt în mişcare, se

pot ataşa sisteme de referinţă fiecări element, orientarea şi poziţia acestuia

putând fi exprimată fie relativ la bază, fie la elementul inferior. Desigur ca cea

de-a doua formă duce la o exprimare relativă, care prin compunere o poate

genera pe cea referitoare la baza sistemului.

Algoritmul Denavit-Hartenberg, transformările relative de bază, operatorul

omogen şi câteva exemple ale folosirii acestora sunt prezentate în [12,13,14,15].

Din punctul de vedere al poziţionării robotului, modul de definire al punctului

ţintă (dorit) nu are prea multă relevanţă, deoarece comanda robotului se face la

nivel de articulaţie. Pentru astfel de comandă este necesară determinarea

corelaţiei care trebuie să existe între coordonatele robot ce trebuiesc alocate

fiecărei articulaţii şi poziţia şi orientarea finală. Această corelaţie poartă numele

de cinematică inversă şi este prezentată şi exemplificată în [15,16,19].

2. Controlul mişcării robotului

Deplasarea robotului între două puncte se poate realiza fie direct, cu viteza

maximă cum este cazul controlului punct cu punct, fie prin puncte intermediare

care definesc fie o dreaptă sau o curbă continuă de diferite ordine.

Acest ultim caz se realizează utilizând diverse metode de interpolare: liniară,

circulară sau parabolică. La rândul ei interpolarea se poate realiza fie la nivelul

articulaţiilor robotului, fie la nivelul sistemului cartezian. Diversele modalităţi

de interpolare şi traiectoria rezultantă pentru un robot cu două articulaţii de

rotaţie sunt prezentate în figurile următoare:

Limbaje de Programare a Robotilor Industriali

47

Figure 14

Limbaje de Programare a Robotilor Industriali

48

Datorită faptului că acest aspect, al interpolării, îşi găseşte o largă

aplicabilitate în cadrul programării roboţilor în continuare va fi detaliată

utilizarea spline function utilizând metoda Ho şi Cook:

Ecuaţia unui segment spline (de ordin 3) care trece prin două puncte

intermediare Fk şi Fk+1 (2<k<n-2) pentru o traiectorie care conţine n puncte (şi

este aproximată prin n-1 segmente spline) este: 3

42

321)( tBtBtBBtF 1.1.

unde F(t) reprezintă poziţia articulaţiei exprimată ca funcţie de timp. Dacă

t variază între 0 şi tk+1 se pot exprima condiţiile la limită sub forma:

11

11

)()0(

)()0(

kkk

kkk

FtFFF

FtFFF

1.2.

unde F’k , F’k+1 reprezintă viteza articulaţiei în respectivul punct (Fk şi Fk+1).

Înlocuind 1.2 în 1.1 se obţine:

12

141321

13

142

131211

2

1

32)(

)(

)0(

)0(

kkkk

kkkkk

k

k

FtBtBBtF

FtBtBtBBtF

FBF

FBF

1.3.

Rezolvând aceste ecuaţii în vederea determinării lui B3 şi B4, utilizând apoi forma lui B1 şi B2 obţinem:

11

12

14

11

1

13

)(21

2)(31

kkk

kk

k

kkk

kk

k

FFt

FF

tB

FFt

FF

tB

1.4.

sau mai compact:

1

1

21

21

31

31

112

12

1

4

3

2

1

1122

12330100

0001

k

k

k

k

kkkk

kkkk

F

FF

F

tttt

tttt

B

B

B

B

1.5.

Pentru calcularea coeficienţilor spline, vor trebui determinate iniţial valorile F’k , F’k+1 la momentul tk+1 .Vom considera , pentru simplificare, ca tk+1 va fi o valoare măsurată în unităţi temporale, calculat sub forma:

21

1

2,1,1 )(

m

ikikik qqt

1.6.

Limbaje de Programare a Robotilor Industriali

49

Utilizând 3 puncte intermediare t, tk+1 şi tk+2 se pot determina vitezele utilizând şi condiţiile de continuitate a acceleraţiilor la sfârşitul primului segment spline (1.7), respectiv la începutul celui de-al doilea segment spline(1.8):

11

1

11

1

1

1

1431

2)(32)(26

62)(

kkk

kk

kkk

k

kk

k

kk

FFt

FF

tFF

t

FF

t

tBBtF

1.7.

21

2

12

23 2

(322)0( kk

k

kk

k

FFt

FF

tBF

1.8.

Din egalarea celor două ecuaţii (condiţia de continuitate) rezultă:

kkkkkkkk

kkkkkkk FFtFFttt

FtFttFt

12

2122

121

211122 ()(3

)(2

1.9.

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

)()(3

)()(3

)()(3

)(200

0)(20

00)(2

322

1212

212

342545

24

54

232434

23

43

1

3

2

2121

4545

3434

nnnnnnnn

nnnnn

FFtFFttt

FFtFFttt

FFtFFttt

F

F

F

tttt

tttt

tttt

1.10.

sau simbolic [A][X]=[B] ([m][F’]=[a]) . Rezolvând ecuaţia 1.10 obţinem toate informaţiile necesare construcţiei segmentelor spline de aproximare a traiectoriei, cu condiţia cunoaşterii condiţiilor la limită ( la inceputul mişcării şi la sfârşitul mişcării). Dacă se utilizează o funcţie spline de ordinul 4 de forma:

45

34

2321)( tBtBtBtBBtF

1.11.

având condiţiile la limită: F F F Fn n' " ' "1 1 0

1.12. Urmând aceeaşi procedură se obţine:

Limbaje de Programare a Robotilor Industriali

50

2325

2242

2425

32412

3

2

11

43)(

)(

02)0(

0)0(

)0(

FtBtBtF

FtBtBFtF

BF

BF

FBF

1.13.

respectiv rezolvând acest sistem pentru determinarea lui B4 şi B5:

232

2142

5

222

1232

4

1)(

3

1)(

4

Ft

FFt

B

Ft

FFt

B

1.14.

Utilizând condiţiile la limită se obţine:

2543

35

2431

45

34

2311

12

11

12620)(

4320)(

)(

)0(

)0(

nnn

nnnnn

nnnnnnnn

n

n

tBtBBtF

tBtBtBFtF

tBtBtBtFFFtF

FBF

FBF

1.15.

Rezolvând aceste ecuaţii se determină coeficienţii:

)33(1

)388(1

)366(1

1145

1134

1123

nnnnn

nnnnn

nnnnn

tFFFt

B

tFFFt

B

tFFFt

B

1.16.

Dacă se pun condiţiile de continuitate a acceleraţiei pentru primele două segmente

222122

221222

225242 )(3

12)(4

6126)( FtFF

tFtFF

ttBtBtF

rezultă:

)(6

)(31

)32

( 1222

2323

33

223

FFt

FFt

Ft

Ftt

1.17.

Utilizând acelaşi mecanism şi pentru sfârşitul traiectoriei:

)(6

)(31

)32

( 122121

21

11

nnn

nnn

nn

nnn

FFt

FFt

Ft

Ftt

1.18.

Sintetizând aceste rezultate de-a lungul traiectoriei se poate forma o structură compactă a sistemului care trebuie determinat sub forma 1.19 unde:

Limbaje de Programare a Robotilor Industriali

51

)(6

)(332

)(6

)(1

1

32

122121

11

1,1

1222

2321

2,1

323

2322

nnn

nnn

nnn

nn

nnn

FFt

FFt

att

M

FFt

FFat

M

tM

ttM

1

322

1212

212

232434

23

43

1

2

3

2

1,12,1

2121

3434

2322

)()(3

)()(3

00

)(2

0

0

0)(2

00

n

nnnnnnnn

n

n

nnnn

nnnn

a

FFtFFttt

FFtFFttt

F

F

F

F

MM

tttt

tttt

MM

1.19.

Limbaje de Programare a Robotilor Industriali

52

IV. Date şi structuri de date utilizate în cadrul limbajelor de programare a roboţilor industriali(LPRI)

A. Date utilizate de limbaje de programare a robotilor Aceastá categorie de elemente constituite ale unui limbaj de

programare alcátuießte baza limbajului. Se poate spune cá un limbaj

robot este mai evoluat sau mai puternic dacá se pot realiza arhitecturi

de date care sá permitá utilizatorului o folosire compactá a limbajului sá

natural, fárá ínsá a elimina rigozitatea pe care o cere arhitectura

robotului. Un prim exemplu ín íntárirea acestei afirmaþii este zona de

specificare a elementelor sistemului, ín limbajul SRL.

Exemple: SRL: SYSTEM_SPECIFICATION ROBOT: puma600=ROBOT(0); jhrobot =ROBOT(1); EFFECTOR: ringgrip=GRIPPER(0) OF puma600; pargrip =GRIPPER(1) OF jhrobot; SENSOR: visioninfo=CHANNEL(1); STRUCTURE visioninfo=RECORD pantno:INTEGER; x, y:INTEGER END; END_SYSTEM_SPECIFICATION Ín acest prim exemplu se observá cá ín definirea elementelor

sistemului supervizat prin programul scns ín SRL (supervizarea se face

de fapt de cátre structura de control care compileazá ßi ruleazá

respectivul program) se realizeazá definirea roboþilor puma 600 ßi

jhrobot, precum ßi ataßarea gripperelor celor doi roboþi: gripperul

ringgrip deschis(0) lui puma 600 ßi pargrip ínchis lui jhrobot. De

Limbaje de Programare a Robotilor Industriali

53

asemenea este definit sensorul visioninfo ca fiind canalul (1) ßi o

structurá specificatá sub forma unui RECORD.

Un exemplu de folosire a acestui sensor poate fi sub forma:

SRL: INPUT (visioninfo); IF visioninfo.part=3 THEN SMOVE puma60 TO depáßit; Datele specifice unui limbaj de programare sunt specificate

printr-un nume ßi printr-un tip cáruia data aparþine. Ín funcþie de limbajul

la care se face referire, numele asociat unei date poate conþine

caractere alfa numerice, litere mari sau litere mici, respectiv un numár

finit de caractere care vor fi interpretate sau un numár teoretic infinit.

Ín toate cazurile ínsá, caracterul blanc nu este admis ín definirea

unei date, acesta fiind ínlocuit ín cele mai multe cazuri prin caracterul _

. O altá caracteristicá universalá a numelui unei date este faptul cá

acesta chiar dacá poate conþine ßi caractere numerice trebuie sá

ínceapá cu o literá. Pentru completarea acestor informaþii ín tabelul

urmátor sunt prezentate spre exemplificare numárul de caractere

semnificative ßi numárul de caractere permise pentru limbajele cele mai

cunoscute.

Limbaj Litere mari

Litere mici

Numar caractere interpretabile

Numar caractere permise

SRL * * nelimitat nelimitat AL * * 30 nelimitat PASRO * * 8 sau mai multe nelimitat VAL * nelimitat nelimitat AML * nelimitat nelimitat HELP * 6 nelimitat SIGLA adrese speciale I1..I16, P1..P16 respectiv M1..M1023 ROBEX * 6 6

Ín ceea ce priveßte tipul datelor din cadrul unui limbaj de

programare al roboþilor industriali se poate face o separare ín sensul

definirii implicite a tipurilor consacrate: INTEGER, CHARACTER, REAL,

BOOLEAN aláturi de STRING - un ßir predefinit de caractere sau o

Limbaje de Programare a Robotilor Industriali

54

secvenþá liniará de caractere; respectiv EVENT - numárátoare pentru

contorizarea unor evenimente, folosite mai ales pentru asigurarea

sincronizárii programelor.

Ín tabelul urmátor vor fi prezentate tipurile standard de date

pentru diferite limbaje:

PASRO SRL AL AML VAL VAL II HELP SIGLAINTEGER INTEGER SCALAR INT Integer Scalar Scalar CounterREAL REAL SCALAR REAL Scalar Scalar BOOLEAN BOOLEAN SCALAR - - - CHARACTER

CHAR CHAR - - -

STRING STRING - STRING

- -

SEMAPHOR INTERRUPT

EVENT Semaphore

Flags

iar domeniul valorilor acestor tipuri de bazá este prezentat ín

urmátorul tabel:

Tipul de data Numar de byti DomeniulINTEGER 2 -32768 ... + 32767REAL 4 0.15224277E-39 ...

0.17014111E+38BOOLEAN cel putin unul FALSE, TRUE CHARACTER cel putin unul caractere ASCIIEVENT 2 -32768 ... + 32767

Ín afara acestor tipuri de bazá pentru programarea purá

(implicänd date numerice folosite ín calcule interne) apar ßi datele

specifice roboþilor industriali care vor fi enumerate ín continuare:

-VECTOR - ín general vectori tri-dimensionali;

-ROTATION - rotaþia cu un unghi ín jurul unei axe;

-ORIENTATION - rotaþia definitá prin trei unghiuri;

-FRAME - definit prin rotaþii ßi vector;

-TRANS - transformare definitá direct ca un FRAME.

Un exemplu de construcþie a acestui tip de date, pentru

PASRO se poate construi sub forma urmátoare :

PASRO TYPE vector = RECORD

x, y, z : REAL

Limbaje de Programare a Robotilor Industriali

55

END; rotmatrix = RECORD

t,o,a: vector END;

rotation = RECORD axis : vector; angle : REAL; matrix : rotmatrix END;

frame = RECORD rot : rotation; transl : vector END;

Pentru limbajele SRL, PASRO ßi AL, aceste elemente se

folosesc ca tipuri de date standard, fapt care ußureazá mult lucrul cu

acestea, nemaifiind nevoie de o construcþie a acestor tipuri:

Exemple:

SRL: directie: VECTOR; partrotatie : ROTATION; preluare, asteptare : FRAME; directie:=VECTORC(0,35,0);

PASRO: directie: VECTOR; partrotatie: ROTATION; MAKEVECTOR (directie,0,35,0);

AL: DISTANCE VECTOR directie; ROT partrotatie; FRAME preluare,asteptare; directie <- VECTOR (0,35,0) * CM;

VECTOR

Specificatiidimensionale

Identificator

TRANS,

ROT

FRAME

Aceastá definire implicitá este acceptatá ßi de AML, ínsá de

aceastá datá ansamblul de mai multe date definesc: un vector dacá

ansamblul de date conþine 3 date: CONV:NEW 3 OF 0.0 0.0 0.0 0.0

PARTR:NEW<90,0.0,45>;90 0.0 45

x y z x y z

PARTR

Limbaje de Programare a Robotilor Industriali

56

Respectiv frame pentru cazul ín care ansamblul cuprinde 7

date:

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

Pentru limbajul VAL elementele geometrice sunt specificate

de cuväntul cheie POINT care are 6 componente: coordonatele x,y,z ßi

unghiurile Euler.

POINT basis 300, 500, 250, 0, 0, 0 POINT transform 0, 0, 150, 0, 0, 0 MOVE basis:transform Ín cazul limbajelor apropiate de comenzile numerice, cum

este cazul limbajului ROBEX datele geometrice sunt specificate utilizänd

o serie de cuvinte cheie cum ar fi: POINT, LINE, CIRCLE, PATTERN,

PLANE, BEAM, CYLNDR, SPHERE, CONE, BODY, PARF.

B. Structuri de date

Datoritá diversitáþii datelor necesare controlului unui robot ßi mai

ales volumului mare de informaþie care poate fi ínglobat íntr-o categorie

de date pe care operatorul trebuie sá o furnizeze robotului, iar pe de altá

parte robotul trebuie sá o furnizeze operatorului, este impetuos necesar

ca aceste informaþii sá fie grupate íntr-un cadru mai larg cum ar fi

structurile de date.

Pe längá structurile caracteristice limbajelor clasice de

programare, ín cazul limbajelor pentru roboþi apare o nouá structurá

heterogená din punctul de vedere al tipului datelor ce intrá ín alcátuirea

acestui tip, structurá care poartá numele de colecþie (sau ín literatura

englezá de specialitate-aggregates). Ín continuare se vor descrie pe

scurt, prin exemple, structurile de date utilizate:

- tablourile - ARRAY. Acestea pot fi unidimensionale: SCALAR

ARRAY Y[1:3] sau multidimensionale. Aceste structuri au

x y z roll pitch yaw deschidere

PICKUP-frame

Limbaje de Programare a Robotilor Industriali

57

caracteristic faptul cá odatá cu declararea dimensionalitáþii lor,

arhitectura de control alocá memoria necesará stocárii informaþiei.

Chiar dacá dimensionalitatea tabloului poate fi datá de o variabilá,

unitatea de control alocá o memorie corespunzátoare dimensiunii

variabilei ín momentul declarárii.

Unitatea de control sesizeazá ín timpul compilárii eventualele

greßeli dimensionale, operatorul fiind scutit ín mod direct de

aceastá verificare, fárá ínsá ca unitatea de control sá realizeze o

corecþie a respectárii erorii, dar sesizänd-o prin íntreruperea

compilárii ßi afißarea unui mesaj de eroare.

Dimensionalitatea tablourilor poate fi declaratá fie direct, fie prin

constante, variabile sau chiar expresii aritmetice, totul depinzänd

de limbajul folosit. În continuare sunt prezentate cäteva exemple

de tablouri pentru limbajul PASRO, aláturi de observaþia potrivit

cáreia ín mod asemánátor se realizeazá declararea tablourilor ín

SRL, AL ßi HELP ín timp ce pentru limbajele VAL, SIGLA ßi

ROBEX aceste tipuri de structuri de date nu sunt valabile. SRL,

PASRO ßi AL acceptá chiar ßi indici, cu observaþia cã indicele

superior trebuie sá fie mai mare decät indicele inferior, ín timp ce

HELP acceptá declararea dimensiunii numai prin constante

numerice, iar indicele inferior trebuie sá fie minim 1.

Exemple:

AL: sistem_ref : ARRAY [1:4,-10:-5] FRAME ARRAY orificii [1:numar_total] - la definirea unui sir se pot

folosi chiar variabilePASCAL: vector = ARRAY [1..3] OF REAL;

rotmatrix = ARRAY [1..3,1..3] OF REAL;

- ínregistrári -RECORDS. Aceste structuri de date, s-ar putea

afirma, sunt pe o treaptá ierarhicá superioará tablourilor, ín sensul

ín care pot grupa tipuri diferite de date sau chiar tablouri. Astfel

Limbaje de Programare a Robotilor Industriali

58

þinänd cont de tablourile definite anterior se pot defini, pentru

continuarea exemplului, ßi urmátoarele ínregistrári.

Exemple:

PASRO: vectortype = ARRAY [1..3] OF REAL; rotatietype = RECORD

axis : vectortype; angle : REAL END;

transformaretype = RECORD orientare : rotatietype; pos : vectortype; END;

sistemtype = transformaretype; obiecttype = RECORD

coordobiect: sistemtype; xlung, ylung, zlung : REAL; grippozitie : sistemtype; plin : BOOLEAN END;

Accesul la componentele ínregistrárilor se face prin specificarea

numelui ínregistrárii aláturi de componenta care se doreßte a fi

utilizatá.

VAR box: obiecttype; IF box.plin SMOVE (goal) . . . . . . . . . . . . . . . . . . . . diagonala=SQRT(SQR(xlung)+SQR(ylung))/2

- fißierele -FILE. Aceste structuri de date sunt cele mai complexe ßi

ßi mai ample atät din punct de vedere al dimensiunii pe care o

Figure 15

Limbaje de Programare a Robotilor Industriali

59

necesitá pentru a fi stocate, cät ßi din punctul de vedere al tipului

de date cuprinse. Ín general se disting fißiere de date care

furnizeazá argumentele unui program (cum ar fi poziþiile unei

reþele care trebuie prelucrate de robot) sau chiar programul care

trebuie executat de cátre robot. Operaþiile care sunt permise

asupra acestui tip de structuri sunt cele clasice:

creare de fißier CREATE;

deschiderea unui fißier OPEN;

ínchiderea fißierului CLOSE;

scrierea ín fißier RECORD;

ßtergerea fißierului DELETE.

Unele limbaje pot accepta numai anumite tipuri de fißiere (HELP

lucreazá numai cu fißiere text).

colecþii de date - aggregates - din punct de vedere al

diversitáþii de date se situeazá íntre RECORD ßi FILES, ín sensul

ín care aceste structuri pot íngloba atät date numerice, cät ßi

caractere, iar datele numerice pot corespunde unor deplasári,

momente, forþe, informaþii de la senzori. În concluzie agregatele

cupleazã o diversitate de tipuri de date.

Exemple:

f1: NEW <0.0,0.0,0.0,0.0,0.0,0.0,0.0>;

f2: NEW 7 OF 0.0;

nest1: NEW <’obiect’, <‘ element’ , 1>,1.5>;

nest2: NEW < ‘ element’ , 1>;

nest3: NEW <‘ element’ ,nest2,1.5>;

Accesul la componenetele acestor colecþii se face similar cu

accesul la componentele tablourilor

nest1(1) ‘obiect’

nest1(2) <‘element’,1>

Limbaje de Programare a Robotilor Industriali

60

nest1(3) 1.5

nest1(2,1) ‘element’

nest1(2,2) 1

Toate aceste structuri de date prezintá, din punctul de vedere

al alocárii memoriei, un dezavantaj major: necesitá o prealocare a

memoriei necesare stocárii datelor. Astfel dupá ce informaþia a

fost folositá, zona sa de memorie rámäne ín continuare o zoná

restrictivá ín ceea ce priveßte utilizarea sa de cátre alte date.

Acest dezavantaj poate fi eliminat prin folosirea unor variabile

dinamice, care ocupá numai strict memoria de care au nevoie,

íncepänd cu adresa disponibilá íntr-un anumit moment al compilárii

ßi execuþiei programului, urmänd ca odatá ce variabila nu mai este

folositá ßi este deci distrusá sá elibereze memoria ocupatá.

Aceste variabile dinamice poartá numele de pointeri.

Declararea unui pointer se face prin ataßarea unui caracter

suplimentar la tipul care defineßte variabila. Astfel pentru cazul

limbajelor PASRO ßi PASCAL acest caracter este ^, iar pentru

SRL este @. Pentru ínþelegerea exactá a acestor structuri de

date, extrem de utile ín cazul realizárii unui program flexibil, rapid

ßi economic se va prezenta ßi explicita un exemplu de program ín

PASRO.

Limbaje de Programare a Robotilor Industriali

61

1. TYPE 37. begin2. boxpointer=^boxtype; 38. new (affixelem); 3. framepointer=^frametype; 39. affixelem^.next:=nil; 4. affixpointer=^affixelement; 40. affixelem^.affixedbox:=kx; 5. transpointer=^transformationt

ype; 41. write(kx^.num);

6. vectortype=array[1..3] of real;

42. writeln(ky^.num);

7. rotationtype = record 43. if ky^.affixrel=nil then ky^.affixrel:=affixelem

8. axis:vectortype; 44. else 9. andle: real; 45. begin10. end; 46. affixaux:=ky^.affixrel; 11. transformationtype =

record 47. while affixaux^.next <> nil do

12. orient:rotationtype; 48. affixaux:=affixaux^.next; 13. pos:vectortype; 49. affixaux^.next:=affixelem; 14. end; 50. end 15. frametype=transformationtyp

e; 51. end;

16. affixelement = record 52. var 17. affixedbox:boxpointer; 53. boxes:boxpointer; 18. transrelation:transpointer

; 54. boxnumber,i:integer;

19. next:affixpointer; 55. k:boxpointer; 20. end; 56. begin21. boxtype = record 57. read(boxnumber); 22. num:integer; 58. new(boxes); 23. coordsystem:frametype; 59. boxes^.num:=1; 24. xlength, 60. boxes^.next:=nil; 25. ylength, 61. for i:=2 to boxnumber do 26. zlength:real; 62. begin27. gripposition:frametype; 63. new(k); 28. full:boolean; 64. .next:=boxes; 29. next:boxpointer; 65. .num:=i; 30. affixrel:affixpointer 66. .affixrel:=nil; 31. end; 67. boxes:=k; 32. procedure

affix(kx,ky:boxpointer); 68. end;

33. {Generarea relatiilor intre kx si ky}

69. k:=boxes^.next^.next;

34. var 70. affix(k^.next,k); 35. affixelem:affixpointer; 71. affix(boxes^.next,k); 36. affixaux:affixpointer; 72. affix(k,k^.next);

73. affix(boxes^.next,k^.next); 74. end.

Programul genereazá un set de elemente k1k4, care vor fi

memorate utilizänd variabile de tip pointer.Ín cadrul pointerului

Limbaje de Programare a Robotilor Industriali

62

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

privitoare la:

- orientarea ßi poziţia sistemului de referinþá -

coordsystem:frametype;

- dimensiunile elementului: x length, y length, z length;

- orientarea gripperului pentru ca elementul sá fie másurat-

gripposition:frametype;

- conþinutul elementului (dacá este plin sau nu)-full;

- conexinea logicá cu alte elemente next;

- conexiunea fizicá cu alte elemente-affixrel.

Se observá cá dacá primele elemente sunt cunoscute ca

dimensiune, ultimul element poate evolua íntr-un mod care nu

poate fi precizat anterior ínceputului mißcárii, motiv pentru care se

preferá ßi aici folosirea unui pointer. Pe de altá parte deoarece

toate elementele vor fi de tip pointer ßi penultima datá va fi de tip

pointer (next).

Figure 16

Limbaje de Programare a Robotilor Industriali

63

Ín cadrul programului principal se introduc elementele care vor fi

manevrate, introducerea fácändu-se sub forma algoritmului de tip

listá LIFO. Relaþia care se stabileßte íntre elementele ín cadrul

acestei párþi de program este lipsitá de semnificaþie poziþionalá

Ín partea a doua a programului se introduc relaþiile poziþionale

dintre elemente. Fie o relaþie poziþionalá exprimatá grafic ín

Figure 18.

Din prima parte a programului se reaminteßte cá ultimul introdus

este elementul 4, fapt care face ca k:=boxes^.next^.next=2.

Instrucþiune affix (k^.next, k) este un apel al procedurii affix

(kky).

Figure 17

Figure 18

4ref 3 2

Limbaje de Programare a Robotilor Industriali

64

Aceastá procedurá utilizeazá un pointer nou element pentru

manipularea primului element din argument, kx (sau 1 din primul

apel) ßi apoi este cercetat cel de-l doilea pointer ky (sau 2). Dacá ky

nu are nici o relaþie cu alt element, atunci se introduce la pointerul

relaþie pointerul elementului kx. Ín caz contrar se transferá

pointerul relaþie din cadrul pointerului ky íntr-un pointer auxiliar

urmänd ca apoi transferul sá se facá päná ín clipa ín care se

gáseßte ultima locaþie din cadrul pointerului ky (ín cazul nostru

íncárcaþi ín affixaux ßi affixaux^.next) liberá (nil) moment ín care

se introduce ín locaþia relaþiei elementul kx (1).

Limbaje de Programare a Robotilor Industriali

65

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

prezentată în figura următoare:

Ín cazul limbajului AL, programul este mai simplu existänd

instrucþiunea AFFIX cu variantele RIGIDLY (conectare rigidá,

fermá) respectiv NONRIGIDLY (aßezare relativá de elemente).

Ín prezentarea datelor ßi structurilor de date nu s-a alocat un

spaþiu separat constantelor ßi operaþiilor de atribuire, acestea

fácändu-se ín modul caracteristic limbajelor de programare uzuale.

Figure 19

Limbaje de Programare a Robotilor Industriali

66

C. Moduri de manipulare a datelor Manipularea datelor se face ín cadrul utilizárii acestora ca

operatori.

Cum capitolul destinat instrucþiunilor de mißcare va detalia

operaþiile permise ín cadrul LPRI, ne vom márgini numai sá

enumerám ßi sá prezentám sintetic principalele operaþii ce se pot

realiza cu datele prezentate.

1. Operaţii logice Operatorul SRL si

PASRO AL AML HELP

Funcţia Şi b AND b s AND s i AND i expr AND expr Funcţia SAU

b OR b s OR s i OR i expr OR expr

Funcţia NU NOT b NOT s NOT i NOT expr Funcţia SAU exclusiv

b <> b s XOR s i XOR i

Echivalenţă b=b s EQV s b - data BOOLEANA; i, s - data reala sau intreaga, expr - expresie logica

2. Operaţii de comparare Operator SRL/PASRO AL AML VAL HELP ROBEX

mai mic x < x s < s x LT x i LT i s < s LT mai mare x > x s > s x GT x i GT i s > s GT egal x = x s = s x EQ x i EQ i s = s EQ mai mic sau egal x <= x s <= s x LE x i LE i LE mai mare sau egal x >= x s >= s x GE x i GE i GE diferit x <> x s <> s x NE x i NE i NE

i - data de tip întreg, s - scalar, x - întreg sau real

Limbaje de Programare a Robotilor Industriali

67

3. Operaţii aritmetice Mod de reprezentare în:

Operaţie SRL şi PASRO

AL AML VAL VAL II HELP SIGLA

Adunare i+I r+r i+r r+I

s+s i+i r+r i+r r+i

i+i s+s s+s IC/i,i

Scădere i-I r-r i-r r-I

s-s i-i r-r i-r r-i

i-i s-s s-s IC/i,-i

Înmulţire i*I r*r i*r r*I

s*s i*i r*r i*r r*i

i*i s*s s*s abs.

Împărţire i/I r/r i/r r/I

s/s i/i r/r i/r r/i

i/i s/s s/s abs.

Împărţire a întregilor

i DIV I s DIV s r DIV r i IDIV i

i/i abs. abs. abs.

Modulo i MOD i s MOD s abs. i%i s MOD s abs. abs. Ridicare la putere abs. S^s abs. abs. abs. abs. abs. Modul ABS(i)

ABS(r) |s| abs. abs. abs. abs. abs.

Inversare semn -I -r

-s -i -r

-i abs. -s NE/-i

Obs. i-întreg, r - real, s-scalar, abs - nu se poate realiza respectiva operaţie

4. Operaţii geometrice Reprezentarea operaţiei Semnificaţia operaţiei

SRL PASRO AL s:=VLENGTH(v) VABS(s,v) s <- |v| lungimea vectorului v s:=r.angle s:=r.angle s <- |r| unghi de rotatie s:=v1 DOT v2 VDOT(s,v1,v2) s <- v1.v2 produs scalar v:=s*v VMUL(v,v,s) v <- s*v inmultire cu scalar v:=v/s VDIV(v,v,s) v <- v/s impartire cu scalar v:=v1+v2 VADD(v,v1,v2) v <- v1+v2 adunare de vectori v:=v1-v2 VSUB(v,v1,v2) v <- v1-v2 scadere de vectori v:=v1*v2 VCROSS(v,v1,v2) v <- v1*v2 produs vectorial v:=r*v VROT(v,r,v) v <- r*v rotatia unui vector v <- t*v ( t-matrice de

translatie) Transformari

de v <- f*v (f matricea coordonate

Limbaje de Programare a Robotilor Industriali

68

unei transformari complexe)

v:=ROTAXIS(r) ROTAXIS(v,r) v <- AXIS(r) rotatia lui v, in jurul vectorului vr, cu unghiul

r:=r1*r2 ROTROT(r,r2,r1) r <- r1,r2 compunerea a doua rotatii

f=f+v FRAMETRANSL (f,f,v)

f <- f+v translatia unui sistem f cu un vector v

f:=f-v f <- f-v f:=r*f FRAMEROT(f,f,r) rotatia unui sistem f f:=f*f TRANSFRAME

(f,f1,f2) f <- f*f compunerea a doua

transformari t:=f1 FREL f2 FRAMEREL(t,f1,f2) t <- f1 -> f2 Transformarea care

asigura trecerea de la sistemul f1 la f2

fi:=FINV(f) FRAMEINV(fi,f) fi <- INV(f) Transformarea inversa a lui f

s - scalar; v -vector(x,y,z); r - (vr,)=rotatie in jurul vectorului vr, cu unghiul ;

5. Funcţii standard Funcþia PASRO SRL AL AML HELP ROBEX

sinus SIN cosinus COStangentã TAN abs. abs.

arctangentã ARCTAN ATAN2 ATAN ARCTG

ATAN

arcsinus abs. ASIN abs. abs. arccosinus abs. ACOS abs. abs.

conversie REAL la INTREG cu :

trunchiere rotunjire

TRUNCH ROUND

TRUNCH ROUND

INT

abs.

abs.

abs.

exponent EXP abs. abs. EXP logaritm natural LN LOG abs. abs. NLOG

logaritm abs. abs. abs. abs. abs. LOG radical SQRT

ridicare la pãtrat SQR abs. abs. abs. abs. abs. modul ABS abs. abs. ABS

Introducerea de date:

scalare booleene

vector rotaþii sistem

vread rread fread

INPUT INPUT INPUT INPUT INPUT

INSCALARQUERY

abs.

ASK ASKN

abs.

Limbaje de Programare a Robotilor Industriali

69

Se observá cá datele sunt folosite ca operanzi ín cadrul acestor

operaþii.

6. Expresii complexe cu anumite priorităţi:

Prioritate SRL/PASRO AL AML HELP 1. Prioritate

maximă function

call,(),NOT function

call,||,NOT = function

call,(),NOT 2. *,.,/,DIV,MOD,

AND WRT, ->, ^ NOT *,/,AND

3. +,-,OR *,/,.,DIV,MOD,MIN,MAX

*,/,IDIV +,-,OR

4. =,<,>,<=,=>,<> +,- +,- =, <, > 5. =,<,>,<=,=>,<

>ROTL

6. AND EQ, NE, LT, LE, GT,GE

7. OR,XOR AND 8. EQV OR,XOR 9. OF 10. IS

1. Prioritate minimă

=

Ca nißte particularitáþi pentru datele vehiculate ín cadrul unui

limbaj de programare a roboþilor se pot evidenþia anumite tipuri de

date:

- intrári ßi date de intrare din partea operatorului: controlul robotului

realizändu-se ín funcþie de anumite condiþii tehnologice, ín

funcþie de un mediu de lucru unitatea de control preia fie din

proces, prin intermediul unor canale de intrare, fie de la tastatura

de comandá a utilizatorului, date care pot sau sunt folosite ín

cadrul programului.

num <- 0; WHILE QUERY (num, “Obiect prelucrat, a se continua? “) DO BEGIN PRINT (“ Introduceti dimensiunile obiectului: “ ); height <- INSCALAR *cm; num <- num+1;

Limbaje de Programare a Robotilor Industriali

70

END; - tot ca o particularitate pentru LPRI sunt instrucþiunile prin care

se poate citi poziþia ßi orientarea curentá a robotului, elemente

care pot fi folosite pentru ocolirea unor obstacole sau pentru

generarea unor comenzi sau mesaje de avertisment.

SRL. current_position:=robotframe(puma).transl; IF robotframe(puma).transl.z > 50 THEN WRITELN (“ Brat prea sus “)

AL: current_position <- POS(ARM);HELP: COORD(1);

framef (1) := AX(1); framef (2) := AY(1); framef (3) := AZ(1); framef (4) := AR(1); framef (5) := AP(1); framef (6) := AYW(1);

se citeşte pozişia curentă, urmând ca elementele curente AX,AY,AZ,AR,AP, AYW să fie memorate într-o matrice framef

- generarea unor mesaje text sau/ßi numere prin intermediul

programului cátre operator ín vederea monitorizárii sau chiar

controlului evoluþiei robotului.

Exemple:

SRL: OUTPUT (<canal>,<lista de parametri>); WRITELN(<lista de parametri>);

PASRO:

WRITE(<lista de parametri>);

AL: PRINT(<lista de parametri>) PROMT(<lista de parametri>)

AML: WRITE(<canal intrare/iesire>,<lista de parametri>); DISPLAY(<lista de parametri>); PRINT(<lista de parametri>);

VAL: TYPE(<text>) TYPEI(<intreg>) PAUSE(<text>)

HELP: PRINT(<lista de parametri>) SIGLA: NL/<text>,<numarator>

Limbaje de Programare a Robotilor Industriali

71

V. Instrucţiuni

Aceste elemente fac parte din semantica unui limbaj, ele utilizând sintaxa

declarată prin intermediul datelor, structurilor de date, cuvintelor rezervate.

Instrucţiunile în cadrul unui program-robot şi nu numai, sunt executate în

ordinea scrierii lor, excepţie făcând cazurile în care apar instrucţiunile de salt.

Încercând o sintetizare a instrucţiunilor, element care se poate dovedi

extrem de util pentru o prezentare generală, cum este cazul prezentei lucrări, se

pot defini următoarele tipuri de instrucţiuni:

1. Instrucţiuni de descriere a mediului de operare

2. Instrucţiuni de generare a mişcării

3. Instrucţiuni de comandă şi control a elementului terminal

4. Instrucţiuni specifice sistemului senzorial

5. Instrucţiuni de delimitare a blocurilor structurale ale programului

6. Instrucţiuni de oprire a mişcării robotului sau a elementului

terminal

7. Instrucţiuni de control ale programului

8. Instrucţiuni de control a stării robotului şi a sistemului de

microcontacte asociat controlului

9. Instrucţiuni de tratarea a situaţiilor excepţionale

În continuare vor fi explicate la nivel general aceste tipuri de instrucţiuni,

alături de prezentarea unor exemple elocvente în vederea înţelegerii acţiunii

respectivelor tipuri de instrucţiuni.

A. Instrucţiuni de descriere a mediului de operare Instrucţiunile de descriere a mediului de operare sunt destinate în special

programării off-line, când se urmăreşte descrierea spaţiului în care operează

robotul în vederea utilizării facilităţilor de mişcare optimală a robotului,

Limbaje de Programare a Robotilor Industriali

72

respectiv resurselor soft referitoare la inteligenţa artificială, pentru structurile de

roboţi avansate.

O modalitate de descriere este utilizarea unei structuri de tip data, în care

se specifică numele obiectului sub care robotul îl va recunoaşte, respectiv

atributele acestuia:

obiect: declararea numelui şi atributelor acestuia (numele atributelor);

atribut: numele atributului şi valoarea acestuia.

Observaţie. Prin atribut vom înţelege anumite proprietăţi definitorii ale

obiectului, cum ar fi: lungimea, lăţimea, înălţimea, culoarea, greutatea, etc.

Exemplu:

EXISTENCE (part 1):

cere informaţia legată de existenţa obiectului part1; rezultatul poate fi False sau True.

SRL: greutate_obiect1:= ATTRIBUTE weight OF obiect1:

variabila greutate_obiect1 ia valoarea atributului anterior declarat weight al obiectului obiect1

ATTRIBUTE length OF element1:= 5.3; lungimea obiectului element1 este 5.3

Un alt exemplu elocvent este prezentat în continuare. Acesta este specific

limbajelor care au la bază limbajul PASCAL. Deoarece anumite elemente au

fost prezentate anterior, în acest exemplu, vor fi explicitate numai instrucţiunile

de descriere spaţială a elementelor spaţiului de lucru, instrucţiuni de tipul affix –

realizează o legătură prin intermediul unor pointeri, la nivel soft, în vederea

modelării lumii reale. Acesta constă într-un cuplaj între două elemente, mişcare-

element, particularităţi de tip constructiv (găuri, structuri interioare, etc.) şi

element. Instrucţiuni unfix realizează de această dată decuplarea a două

elemente.

Program pointerexemplu; 1. TYPE 48. PROCEDURE affix

(VAR atframe :framepointer; targetframe:framepointer; VAR affixtrans:trans)

2. vector = RECORD 49. BEGIN 3. x, y, z : REAL 50. WITH atframe^ DO 4. END 51. BEGIN 5. rotmatrix = RECORD 52. affixedon:=TRUE;

Limbaje de Programare a Robotilor Industriali

73

6. t,o,a : vector 53. affixframe:=targetframe; 7. END 54. affixrel.translation.x:=

pos.x-targetframe^.pos.x; 8. = RECORD 55. affixtrans.translation.x:=

affixrel.translation.x; 9. axis : vector; 56. affixrel.translation.y:=

pos.y-targetframe^.pos.y; 10. angle : REAL; 57. affixtrans.translation.y:=

affixrel.translation.y; 11. matrix: rotmatrix 58. affixrel.translation.z:=

pos.z-targetframe^.pos.z; 12. END 59. affixtrans.translation.z:=

affixrel.translation.z; 13. trans = RECORD 60. affixrel.rot:=nil; aceasta pentru a 14. translation : vector; 61. affixtrans.rot:=nil;simplifica

procedura 15. rot : rotation 62. END; 16. END 63. END; (sfirsit procedura) 17. framepointer

= ^frame 64. PROCEDURE unfix (

VAR atframe :framepointer; targetframe :framepointer);

18. frame =

RECORD 65. BEGIN

19. next: framepointer; 66. atframe^.affixedon:=FALSE; 20. orient:rotation; 67. atframe^affixframe:=NIL; 21. pos:vector; 68. END (procedura) 22. approach, 69. BEGIN (program principal) 23. departure:framepointer; 70. WITH nilvector^ DO 24. affixedon:BOOLEAN; 71. BEGIN 25. affixframe:framepointer

; 72. x:=0;

26. affixrel:trans 73. y:=0; 27. END; 74. z:=0; 28. VAR 75. END; 29. nilvector :vector; 76. nilrot.axis:=nilvector; 30. nilrot :rotation; 77. nilrot.angle:=0;31. affixvariable,

dummytrans :trans; 78.

32. box,hole,grip,appros

:framepointer; 79. newframe(cutie,80,60,24);

33. PROCEDURE newframe(VAR framevar:framepointer;xf,yf,zf:REAL);

80. newframe(orificiu,70,60,34);

34. BEGIN (se construieste o noua referinta)

81. newframe(mina,70,50,44);

35. NEW(framevar) 82. newframe(apropos,70,50,50); 36. WITH framevar^ DO 83. 37. BEGIN 8 affix(orificiu,cutie,dummytrans

);) 38. next :=NIL; 85. affix(mina,cutie,affixvariable); 39. orient :=nilrot; 86. affix(apros,mina,dummytrans);

Limbaje de Programare a Robotilor Industriali

74

40. pos.x:=xf; 87. 41. pos.y:=yf; 88. unfix(mina,cutie) 42. pos.z:=zf; 89. 43. approach:=NIL; 90. 44. departure:=NIL; 91. END (program principal). 45. affixedon:=FALSE; 92. 46. END; 93. 47. END (procedura) 94.

Figure 20

Limbaje de Programare a Robotilor Industriali

75

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

realizează o actualizare a parametrilor atframe: x, y, z şi posibil x, y, z (prin

instrucţiunile

affixrel.translation.x(y,z):= pos x – target.frame^. pos.x(y,z)

affixtrans.translation.x(y,z):= affixrel.translation x(y,z) )

Pentru ca transformarea relativă să se facă nu numai prin translaţii, dar şi

prin rotaţii, în cadrul procedurii affix, instrucţiunile affixrel.rot şi affixtrans.rot

trebuie să expliciteze transformarea corespunzător. (În cadrul exemplului acestea

nu au fost considerate, fiind egale nil).

De remarcat că affixtrans este folosit şi ca parametru de ieşire, accesibil

programului principal (prin apelul procedurii, parametrii affixtrans pot fi

atribuiţi unor variabile).

Limbajul AL utilizând date de tipul FRAME, VECTOR, ROT, TRANS

permite o exprimare mai uşoară, rezultând programe mai compacte pentru

această descriere.

Exemplu:

AFFIX hole TO box

AFFIX gripp TO box BY affixtrans

AFFIX appros TO gripp AT TRANS (NILROT, VECTOR (0,0,6) * CM);

UNFIX gripp FROM box

unde

box FRAME (NILROT, VECTOR (55,30,22) * CM);

hole FRAME (NILROT, VECTOR (45,30,28) * CM);

gripp FRAME (NILROT, VECTOR (45,50,34) * CM).

O altă particularitate a limbajului AL este atributul RIGIDLY care face ca

elementele din cadrul instrucţiunii AFFIX care îl conţine să fie privite ca un

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

box TO ARM RIGIDLY.

Coordonata X a lui atframe

Limbaje de Programare a Robotilor Industriali

76

B. Instrucţiuni de mişcare Robotul,în general este destinat executării unor activităţi care presupun

mişcarea. Din acest motiv, instrucţiunile de mişcare pot fi considerate ca fiind

tipul de instrucţiuni cu cea mai mare importanţă.

Chiar dacă la prima vedere o nouă diviziune instrucţiunilor poate părea

excesivă, din considerente pur didactice, le putem clasifica în:

- instrucţiuni de mişcare implicite

- instrucţiuni de mişcare explicite.

1. Instrucţiunile de mişcare implicite. Dacă din punctul de vedere al operatorului sunt preferabile (relativ la

efortul de introducere) ele solicită o descriere detaliată a spaţiului de lucru, în

paralel cu posibilitatea relativ redusă de evitare a unor posibile coliziuni. Din

acest motiv, numai limbajul ROBEX dispune de acest tip de instrucţiuni de

mişcare implicită, în paralel însă cu existenţa unui set de instrucţiuni de mişcare

explicită.

Sintaxa unei instrucţiuni de mişcare implicită este:

MOVE Elementul 1 , AGAINST

COPLANAR

/Numele

suprafeteielementului 1

,

Numelesuprafetei

elementului 2,Elementul 2, Parametri

aditionali,

Figure 21

Limbaje de Programare a Robotilor Industriali

77

Exemplu:

ROBEX: MOVE / cutie1, underside, AGAINST, cutie2, top, EVENT, 2, ELSE, mesaj

Se dă comanda de a muta cutie1 cu faţa de jos (underside) deasupra (top) cutie2, mişcarea care are loc atâta timp cât canalul este în 1 logic. În cazul în care canalul este 0 logic, se afişează un mesaj în paralel cu oprirea mişcării.

2. Instrucţiunile de mişcare explicite. Sunt, comparativ cu instrucţiunile de mişcare implicite, mai bogate în

informaţii. Acestea pot conţine pe lângă declaraţia explicită a punctului în care

se doreşte poziţionarea şi parametrii ai mişcării. Câteva exemple de parametri

auxiliari sunt: ce motor va fi activat, viteza de deplasare, acceleraţia /

deceleraţia, precizia mişcării, durata mişcării, forma mişcării, condiţionarea

mişcării de informaţiile furnizate de anumiţi senzori. Gama acestui tip de

instrucţiuni fiind extrem de bogată, în continuare vor fi prezentate câteva

exemple edificatoare în vederea înţelegerii sintaxei şi semanticii acestor

instrucţiuni.

Una dintre cele mai importante poziţii ale robotului este poziţia iniţială, de

sincronizare sau home position . Marea majoritate a limbajelor alocă pentru

mişcarea robotului din poziţia curentă în poziţia iniţială o instrucţiune dedicată.

Exemplu:

SRL PASRO AL VAL ROBEX FIRSTPOS robot, Nullpos; PARK

ARMi READY Declară oriunde poziţia

iniţială: SAFPOS/50,0,30 şi o utilizează apoi în cadrul unei instrucţiuni de mişcare obişnuită: GOTO / SAFPOS

Instrucţiunile de mişcare explicite se pot desfăşura cu aportul

informaţional al unor senzori auxiliari de tip traductoare de forţă, de moment,

sistem de vedere artificială, fie fără acest tip de control auxiliar.

Limbaje de Programare a Robotilor Industriali

78

Cele mai generale instrucţiuni de mişcare explicită pot fi exprimate

formal:

< MNEMONIC MISCARE>, <PUNCT TINTA (TARGET POINT)>

Variantele acestui tip de mişcare sunt prezentate şi explicitate în

următoarele exemple:

SIGLA: MO/1,1317,3,M3,P1, 180 se comandă mişcarea motorului 1 cu 1317 paşi, a motorului 3, cu o valoare înscrisă în registrul M3, a motorului denumit P1 cu 180 de paşi sau în poziţia 180.

SRL: DRIVE AXIS (2) OF arm3 TO 100 PASRO: drive (2,110) Miscari asolute comandate

unui singur dispozitiv de acţionare

AL: DRIVE JOINT(4) OR ARM1 TO 210

ROBEX: DRIVE / 3,135 SRL: DRIVE AXIS(2) OF arm1 BY 10 PASRO: drive(2, robotjoints[2]+20 Miscări relative comandate

unuiAL: DRIVE JOINT(4) OF ARM1 BY 20 singur motor ROBEX: DRIDLT / 2, 10 VAL: DRIVE 2, 20,

100

– limbajul VAL realizeaza numai mişcări relative ( motor 2 cu 20 de pasi), însoţite de valoarea vitezei (100) cu care se desfăşoară mişcarea.

În afară de aceste mişcări prin care se realizează comanda, fie în

coordonate absolute, fie relative a unui singur motor sunt mişcările care conduc

robotul prin comanda tuturor sau mai multor motoare în vederea poziţionării

robotului într-un punct al spaţiului de lucru sau în vederea descrierii unui anumit

tip de traiectorie.

Astfel de instrucţiuni care comandă mişcarea robotului într-un anumit

punct al spaţiului de operare pot fi exemplificate prin:

VAL: POINT #P1 0 110 30 0 60 0X Y Z roll pitch yaw, , , , ,

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

ROTC(zaxis,90)

Limbaje de Programare a Robotilor Industriali

79

PASRO: sttframe(goal, 95, 20, 40, yaxis, 90); smove(goal)

AL: MOVE ARM TO FRAME(ROT(HAT,90*DEG),VECTOR(95,20,40)* CM)

AML: MOVE(<JX,JY,JZ,JP>,<95,20,40,90>)

HELP: MOVE(1,#1,950,#2,200,#3,400,#5,90); - acest limbaj nu poate comanda implicit motoarele, fiind necesară o comandă explicită a fiecărui motor

ROBEX: GOTO / 95,20,40,ZXROT,90 sau P1 = POINT / 95,20,40 ............................................

GOTO / P1

De asemenea se pot specifica şi mişcări relative cu operand implicit: SRL: SMOVE robot TO ROBOTFRAME(robot) +

VECTORC(20,0,10);

PASRO: makevector (relvector, 10,5,5); frametransl (goal, robotframe, relvector); smove(goal);

se defineşte relvector

frame-ul goal = robotframe curent + relvector

mişcare în frame-ul goal

AL: MOVE ARM1 TO @ + VECTOR(20,10,0)*CM AML: DMOVE(<jx, jy, jz>, 20,10,0>)VAL: DRAW 20, ,10 HELP: MOVE(1,#1,X+200,2,Y,#3,Z+100);ROBEX: GODLTA / 20,0,10,0,0

Pe lângă aceste specificaţii de mişcare, fiecărei mişcări a robotului i se pot

adăuga anumite atribute ale mişcare:

- adăugarea parametrului viteză se realizează fie prin exprimare globală,

sau parţială, utilizând cuvinte cheie alături de procentele pe care le reprezintă din

viteza maximă, fie relativ la viteza medie:

SRL: SMOVE robot TO targetframe WITH VELOCITY = 20; SPEEDFACTOR := 50

PASRO: SPEEDFACTOR := 5AL: MOVE ARM TO targetframe WITH SPEED FACTOR =3 AML: SPEED (0.8) VAL: SPEED 200 - de 3 ori viteza normală HELP: SPEED(1,80)

MOVE(1,#1,30,#3,10,#11,80)- braţul 1 se mişcă cu 80% din viteza maximă

ROBEX: RAPID

Limbaje de Programare a Robotilor Industriali

80

FEDRAT / 80 Alţi parametri care pot fi specificaţi sunt:

acceleraţia şi deceleraţia numai în AML prin:

ACCEL (0.5) mişcarea se face cu jumătate din acceleraţia maximă

durata mişcării numai în AL:

MOVE ARM TO targetframe WITH DURATION = 5 * SEC

o anumită configuraţie cinematică pentru structuri redundante (structura

PUMA)

SMOVE robot TO goalframe WITH

Argumentele care urmează după WITH pot fi:

POSTURE(1) RIGHTY – configuraţie corespunzând braţului uman drept

LEFTY – configuraţie corespunzând braţului uman stâng

ABOVE – “cotul” structurii PUMA este în poziţia superioară

BELOW – “cotul” structurii PUMA este în poziţia inferioară

3. Precizia poziţionării. Robotul îşi poate înceta mişcarea atunci când a ajuns în punctul a cărui

coordonate au fost indicate de către argumentul instrucţiunii sau în preajma

punctului, într-o anumită vecinătate.

AL: MOVE ARM TO targetframe WITH NULLING SRL: SMOVE robot TO

goalframe WITH NULLING- mişcare cu precizie

AML: SETTLE(OFF) MOVE(ARM, targetframe)

- după încetarea mişcării curente controlul este transferat operatorului

COARSE se fixează o toleranţă ridicată la nivelul servocontrollerelor

FINE se cere o toleranţă redusă

NONULL mişcarea se termină fără a fi nevoie de a primi confirmarea terminării mişcării fiecărei axe

VAL: NULL mişcarea se termină numai în clipa recepţiei semnalului de terminare a mişcării fiecărei axe

INTOFF corecţia erorii în timpul integrării traiectoriei de control este dezactivată

Limbaje de Programare a Robotilor Industriali

81

VAL: INTON corecţia erorii în timpul integrării traiectoriei de control este activată

4. Tipul controlului mişcării. Robotul în timpul mişcării se deplasează fie punct cu punct, în anumite

poziţii instruite sau ale căror coordonate sunt deja introduse, fie după o anumită

traiectorie: circulară, eliptică sau linie dreaptă. Unele dintre aceste funcţii pot fi

implementate hard prin controllerul dispozitivelor de acţionare, dar la marea

majoritate a roboţilor există posibilitatea stabilirii modului de deplasare prin

program, alături de posibilitatea precizării unor puncte intermediare în cadrul

traiectoriei.

Exemple:

SRL: PTPMOVE puma TO goalframe mişcare punct cu punct până în goalframe, mai precis toate articulaţiile sunt mişcate până în poziţia finală cu viteză maximă şi fără sincronizare

SYNMOVE puma TO goalframe WITH DURATION = 5

mişcare cu interpolare lineară, toate motoarele pornind în acelaşi timp şi oprindu-se în acelaşi punct

SMOVE robot TO goalframe WITH V=25 WITH ACC = 20 WITH CONSTORIENT

mişcarea se realizează cu o viteză programată cu o acceleraţie programată, menţinând permanent orientarea gripper-ului const.

CIRCLE robot CP = centerframe DEG = -45

robotul va descrie o mişcare circulară, unde centrul cercului este în punctul centerframe. Mişcare se va pe 360 / 45 = 1 / 8 din cerc în sens antiorar.

LANEMOVE rip TO goalframe WITH VIAFRAMES(savepos1, savepos2)

robotul rip se mişcă până în goalframe prin poziţiile intermed. savepos1, savepos2.

Exemple: PASRO: pmove (goalframe) -mişcare punct cu punct

jmove (goalframe) -ca şi SYNMOVE

smove (goalframe) -similar SMOVE

VAL: MOVE targetframe -interpolare la nivel de articulaţie

MOVES targetframe -interpolare lineară

Limbaje de Programare a Robotilor Industriali

82

Un caz particular de instrucţiune de mişcare este cel în care argumentele

pot specifica şi controlul end-effectorului. Astfel se poate specifica şi comanda

deschiderea respectiv închiderea gripper-ului în timpul mişcării sau eventual de

plasare cu comanda gripper-ului:

Limbaje de Programare a Robotilor Industriali

83

Exemple:

AL: COBEGIN MOVE ARM TO targetframe; OPEN HAND TO 1*cm COEND

VAL: MOVET targetframe, 10 – mişcarea se face cu închiderea gripper-ului la 10mm

MOVEST targetframe, 10 – mişcare cu interpolare liniară în paralel cu închiderea gripper-ului la 10mm.

O altă situaţie interesantă este cea prin care se urmăreşte evitarea

coliziunii motiv pentru care se introduc puncte de trecere intermediare. Mai

precis mişcarea nu are loc trecând exact prin sistemele intermediare, doar prin

apropierea lor, motiv pentru care se impune alegerea adecvată a acestor puncte.

Exemple:

SRL:

SMOVE robo TO targetframe WITH SMOOTHFAC=0,5 WITH VIAFRAMES

(interframe1, interframe2);

-mişcarea se ralizează după o traiectorie care va trece prin cele 2 puncte intermediare

VIAMOVE WITH SMOVE puma TO interframe

-mişcarea se realizează până în interframe, urmănd ca în acest punct , robotul puma să aştepte comnda de mişcare următoare. În caz contrar va fi generat un mesaj de eroare

MOVEDEF complex_handling; Begin_MOVEDEF PTPMOVE TO above_pas SMOVE TO bow_beg WITH

CONSTORIENT; CIRCLEMOVE

CP=bow_center DEG=90 ITH V=150;

-mişcarea este definită sub forma unei proceduri, cuărinzând mişcare punct cu punct, mişcare liniară şi circulară cu o viteză programată. Se observă structura de bloc a procedurii. Apelul acestei proceduri se face prin instrucţiunea standard MOVEDO şi numele procedurii de mişcare, fară ca să fie necesară efectuarea calculelor de mişcare ce au fost executate în timpul declanşării procedurii

Limbaje de Programare a Robotilor Industriali

84

END_MOVEDEF; MOVEDO complex_handling ;

AL: MOVE ARM TO targetframe VIA inertframe1, interframe2;

- caracteristic acestei mişcări este faptul că în cazul în care poziţiile intermediare suunt apropiate, poate interveni o mişcare suplimentară nu întotdeauna controlabilă

VAL: ENABLE CP MOVES interframe1 MOVES interframe2 MOVES targetframe DISABLE CP

-mişcarea prin punctele intermediare este auxiliar controlată prin sistemul de microîntrrerupătoare (de întreruperi ON/OFF hard) CP

HELP: SMOVE(1,#1,xz1,#2,yz1,#3,zz1,#4,rz1,#5,pz1,#6,yawz1,#7,400); SMOVE(1,#1,xz2,#2,yz2,#3,zz1,#4,rz2,#5,pz2,#6,yawz2,#7,300); MOVE(1,#1,x,#2,y,#3,z,#4,r,#5,p,#6,yaw);

-limbajul HELP neavând declaraţii de puncte intermediare de tip implicit, realizează mişcarea liniară cu instrucţiunea SMOVE şi argumentele specifice deplasării fiecărui motor cu un increment declarat explicit.

Ca o observaţie generală, toate aceste limbaje acceptă în declararea

mişcării prin puncte intermediare şi argumente de tip viteză, respectiv durata etc.

Exemple:

SRL: SMOVE ir600 TO targetframe WITH V=50 WITH VIAFRAMES ( interframe) WITH V=15

-mişcarea începe cu V=50cm/s, iar după atingerea lui interframe continuă cu 15cm/s

Modul de apropiere sau depărtare poate fi deasemenea programat. Aceste

specificaţii pot controla prindereea sau desprinderea unui obiect într-un spaţiu cu

restricţii la nivel de ţintă.

Din toate limbajele prezentate până în acest moment, acest tip de

instrucţiuni sunt definite numai în SRL, AL şi VAL.

Limbaje de Programare a Robotilor Industriali

85

Exemple:

SRL: SMOVE rhino TO targetframe WITH APRO=20 WITH DEP=10 WITH SMOOTHFAC=8;

-primele argumente indică primele mişcări pe care le face robotul în traiectoria de atingere a poziţiei finale (targetframe): mişcare în sus cu 20cm (deasupra ţintei) urmată cu o mişcare cu 10cm deasupra ţintei. Argumentul 3 indică precizia dintre mişcări

AL: MOVE ARM TO targetframe WITH APPROACH=FRAME( rotation, vector)

-explicaţia este similară celei anterioare, cu deosebirea că aici modul de apropiere este mai complex specificat: prin poziţia şi orientarea asociată

Sigur că modul de apropiere se poate defini în AL şi numai prin vectori:

AL: MOVE ARM TO targetframe WITH APPROCH=VECTOR (25,9,0) WITH DEPARTURE=VECTOR (0,20,12)

VAL: APRO targetframe, 50 APROS targetframe, 40 MOVE targetframe

-mişcarea iniţială se face cu 50mm pe axa Z, urmată de o mişcare până la 40mm pe Z

Mişcări complexe pentru executarea unor operaţii de sudură continuă sau

operaţii de vopsire. Limbajele AL, SRL şi VAL oferă instrucţiuni implicite

Figure 22

Limbaje de Programare a Robotilor Industriali

86

pentru mişcări într-un plan sau spaţiu de tip zig-zag, fără ca acest lucru să nu

poată fi posibil şi pentru celelalte limbaje, însă cu observaţia că în cazul

celorlalte limbaje, mişcarea va trebui precizată explicit.

Exemple:

SRL: SYNMOVE robo TO targetframe WITH WOBBLE

-se comandă o mişcare sinusoidală implicită

AL: MOVE ARM TO targetframe WITH WOBBLE=2

-în acest caz amplitudinea sinusoidei poate fi programată

VAL: WAEVE 25,5,2 MOVES targetframe

-se indică o milcare triunghiulară cu amplitudine de 25mm, un ciclu de 5 sec şi un timp de contact de 2 sec în fiecare vârf al unui triunghi din ciclu.

5. Instrucţiunile de mişcare care integrează şi supravegherea senzorilor.

Acest tip de mişcare este extrem de interesant deoarece se poate afirma că

utilizarea acestor instrucţiuni “îmbracă” senzorial operaţiile efectuate de robot.

În aceste condiţii, instrucţiunile care cuprind şi referiri la semnalele preluate de

senzori pot fi:

a) Instrucţiuni de mişcare cu supraveghere a unor senzori

b) Instrucţiuni de mişcare la care argumentele mişcării sunt

furnizate de senzori.

În cele ce urmează vor fi detaliate ambele tipuri de instrucţiuni cu precizarea că

numai limbajelor evoluate dispun de astfel de instrucţiuni implicite.

c) Instrucţiunea de mişcare cu supraveghere a unor senzori

Se poate afirma că o astfel de mişcare este reprezentată din punct de vedere logic

prin plasarea iniţială a unui bloc de decizie, în funcţie de care are loc sau nu

mişcarea, sau are loc o mişcare sau alta, argumentului blocului de decizie fiind

respectarea unor valori de către sistemul senzorial.

Exemple:

Limbaje de Programare a Robotilor Industriali

87

SRL: WHEN SENSOR 2 force>=100 MONITORED EVERY 75 MS DURING SMOVE robot TO box WITH VELOCITY=0.5; END_DURING DO STOP robot;

- dacă forţa de-a lungul direcţiei Z este mai mare sau egală cu 100g în timpul deplasării de-a lungul unei drepte spre box robot se va opri. Această condiţie este verificată (monitorizată) la fiecare 75ms

SRL: DIRMOVE puma IN ZAXIS WITH V=20

UNTIL DISTANCE TO START>50 OR SENSOR switch=TRUE MONITORED EVERY 100MS

-se constată că decizia de oprire este una combinată între respectarea unei distanţe şi activarea unui switch, care este citit la fiecare 100msec din considerente legate de efortul de calcul

Limbajul AL permite verificarea forţei, respectiv momentului de manevră,

prin intermediul unui senzor montat pe gripper-ul robotului: Momentul poate fi

definit în două moduri: referitor la baza robotului (IN WORD) sau la sistemul

gripper-ului (IN HAND).

Exemple:

MOVE ARM TO targetframe ON FORCE(ZHAT)>=100*GM DO STOP 2

-dacă în timpul deplasării braţului ARM spre targetframe forţa de-a lungul axei Z este >=100g atunci robotul se va opri

Exemple:

MOVE ARM2 TO targetframe WITH FORCE_FRAME=gripperframe IN

HAND ON FORCE>= 200*GM ALONG ZHAT DO BEGIN STOP; PRINT ("Depaşire forţă ") tableARM2 flag T END;

-sistemul de referinţă pentru exprimarea forţei este cel legat de gripper (IN HAND) şi controlează astfel deplasarea spre targetframe cu forţa mai mică de 200g. Dacă forţa este mai mare sau egală cu 200g se va afişa mesajul DEPĂŞIRE FORŢĂ, indicatorul flag trece în TRUE, iar table este încărcat cu constanta ARM2

Exemple:

Limbaje de Programare a Robotilor Industriali

88

MOVE ARM3 TO targetframe ON FORCE <30*GM ALONG XHAT OF edge in WORLD DO ON FORCE >=500*GM ALONG YHAT DOPRINT ("Atenţie la forţa de-a lungul axei Y")2;

-braţul ARM3 este comndat să se mişte spre targetframe cu o forţă de 30g de-a lungul axei X exprimata în coordonate faţă de bază, iar dacă este mai mic, atunci se verifică dacă forţa de-a lungul axei este mai mare sau egală cu 500g când se afişează mesajul

Limbajul AML dispune de o instrucţiune specializată de monitorizare a

valorilor predefinite ale senzorilor, lucru care duce la o formă compactă şi uşor

de utilizat.

Exemple:

MONITOR(LED,2,0,0,1,5,'este corect'); MOVE (ARM,fgoal,LED)

-este monitorizat sistemul senzorial din gripper-ul robotului la fiecare 1,5sec. Dacă bariera luminoasă este întreruptă, în timpul deplasării spre fgoal, atunci robotul este oprit.

Dacă limbajul VAL nu dispune de instrucţiuni de mişcare cu monitorizarea

senzorilor ca şi ROBEX, limbajul HELP dispune de instrucţiuni dedicate de

supraveghere a forţe de-a lungul unei axe sau într-o articulaţie:

Limbaje de Programare a Robotilor Industriali

89

Exemple: SMOVE (1,#3,150); FORCE (1,#3,60);

-robotul este comandat pentru a se deplasa de-a lungul dreptei Z (adică axa 3) cu 150mm, cu o forţă mai mică de 60 (din gama 0 la 255). Dacă forţa este egală sau mai mare atunci robotul se opreşte.

Continuând cu studiul acestui tip de mişcare cu limbajul SIGLA se

reaminteşte că acest limbaj este unul rudimentar la care mnemonicele nu sunt

prea bogate în semnificaţie, iar manevrarea informaţiei se face la nivel de

registru.

Exemplu:

MT/3, M5, 1 - mnemonicul MT duce la încărcarea în registrul M5 a valorii senzorului 3

RP/2, 7, 120, 70, 3, -10, 4, 5 - instrucţiune de deplasare efectivă a 3 cu 70 de paşi. La fiecare 7 paşi senzorul 2 este monitorizat dacă depăşeşte valoarea de 120. Dacă da se execută instrucţiunea cu eticheta 5, în caz contrar instrucţiunea cu eticheta 4. –10 este un parametru de întârziere a deciziei, a cărei valoare este exprimată temporal.

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

Astfel de mişcări trebuiesc generate în cazul în care robotul trebuie să

realizeze operaţii de vopsire, grunduire, sudare, gravare, etc., când deplasarea

trebuie făcută cu respectarea unor forţe da contact sau momente ale unor forţe

tehnologice. Astfel în funcţie de cerinţele forţei tehnologice mişcarea este

accelerată sau încetinită astfel încât forţa măsurată de senzorii tactili grupate pe

gripper să fie constantă. Limbajele SRL şi AL permit introducerea explicită în

instrucţiunile lor de mişcare a unor astfel de cerinţe:

Exemplu:

SRL: SMOVE rip TO left_side WITH FORCE IN XAXIS=500

- robotul rip se deplasează spre left_side cu o forţă de-a lungul direcţiei x de 500g

AL: MOVE pensulă TO left_side WITH FORCE (XHAT)=500*GM

- dipozitivul de vopsire ce este fixat în gripperul robotului este deplasat în left_side cu forţa de-a lungul lui x de 500g

Limbaje de Programare a Robotilor Industriali

90

MOVE burghiu TO below

WITH FORCE=700*GM

ALONG ZHAT OF drilltip IN

HAND

WITH FORCE=0*GM ALONG XHAT

WITH FORCE=0*GM ALONG YHAT

- găurirea se realizează cu o

forţă de 700g de-a lungul axei Z

în timp ce de-a lungul axelor X şi

Y în sistemul relativ la gripper

forţa va fi 0

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

Mediul de lucru al unui robot conţine de obicei şi alte dispozitive cu care

această structură interacţionează în vederea realizării unui task. Astfel se poate

impune ca robotul să desfăşoare un anumit protocol în clipa în care soseşte o

piesă pe o bandă transportoare sau este adusă o piesă de un transportor sau pot

apare alte evenimente asincrone care influenţează în mod direct evoluţia

programului. Dacă marea majoritate a limbajelor reacţionează la apariţia unui

eveniment prin întreruperea mişcării, limbajele SRL, AL şi HELP permit

deservirea evenimentelor în paralel cu alte mişcări ale robotului. Evenimentele

por fi generate de către dispozitive periferice sau prin întreruperi soft datorate

utilizatorului.

Exemplu:

Figure 23

Limbaje de Programare a Robotilor Industriali

91

SRL: WHEN strung-stop DURING SMOVE brat1 TO destinaţie END_DURING DO STOP brat1

oprirea prelucrării pe strung (sesizată de un senzor cuplat şi asigrat a fi strung-stop) duce la întreruperea mişcării braţ1 către destinaţie

AL: MOVE ARM1 TO destinaţie ON brat2stop DO STOP ARM1

odată cu terminarea mişcării braţ 2 şi validarea semaforului soft braţ2stop are loc oprirea mişcării executată în paralel de către ARM1

VAL: REACT 2, întrerupt MOVE destinaţie IGNORE 2 ALWAYS

dacă în timpul deplasării către destinaţie canalul 2 este activat se trece la execuţia programului întrerupt după ajungerea la destinaţie, pentru ca apoi acest canal să fie ignorat varianta cu REACTI duce la execuţia imediată a programului întrerupt fără a mai aştepta ajungerea la destinaţie

HELP Eticheta: IF TESTB(5) THEN !instrucţiuni !instrucţiuni EOM(1) END; COORD(1); IF AY(1)<149 THEN GO TO eticheta END; EOM(1)

- după testarea canalului 5 coordonatele robotului sunt comparate cu cele corespunzătoare poziţiei finale a robotului. Dacă nu s-a terminat mişcarea atunci are loc un salt la etichetă şi mişcarea se reia, dacă da, atunci EOM aşteaptă confirmarea terminării mişcării de către toate axele şi apoi programul continuă. Dacă canalul 5 este în 1 logic atunci zona IF poate fi executat de câteva ori, îndeplinirea condiţiei ca AY(1)149 să fie urmate de EOM cu aceeaşi semifivaţie

duration:=3; SMOVE(1, 2, 120); Starttime:= TIME(); Eticheta:

dt:= TIME() – starttime IF dt=duration OR dt>duration THEN INSTRUCŢIUNI EOM(1) ELSE COORD(1) IF AY(1) < 120.1 THEN GO TO eticheta END END;

- dacă durata mişcării curente nu depăşeşte o valoare prestabilită (3 secunde în acest caz) se execută setul INSTRUCŢIUNI în paralel cu execuţia mişcării anterior declanşate până la terminarea tuturor deplasărilor EOM(1). În caz contrar până la atingerea coordonatei de-a lungul axei Y de 120,1 se reia execuţia mişcărilor în paralel cu execuţia INSTRUCŢIUNI.

Limbaje de Programare a Robotilor Industriali

92

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

Instrucţiunile destinate comenzii gripper-ului se pot împărţi în instrucţiuni

simple de genul gripper închis, gripper deschis precum şi instrucţiuni care

generează anumite acţiuni ale gripper-ului care trebuiesc executate cu o anumită

forţă de apucare globală sau la nivel de degete, deschideri intermediare ale

terminalului (la care deschiderea elementelor de apucare are o valoare

prestabilită prin program) etc.

Limbaje de Programare a Robotilor Industriali

93

Din cadrul primului tip de instrucţiuni, în continuare vor fi date

câteva exemple pentru limbajele SRL, PASRO.

Exemple:

SRL: OPERATE şurubelniţa BY şurub

- definirea şurubelniţei şi a şurubului în zona anterioară declaraţia face ca elementul şurub să fie acţionat de către dispozitivul şurubelniţă

OPEN pneumatic_terminal CLOSE pneumatic_terminal

- instrucţiuni clasice de tip deschidere închidere gripper pneumatic

PASRO: Gripopen Gripclose Gripforce(6, 3, 1)

acelaşi tip de instrucţiuni simple de deschidere/ închidere gripper prin această instrucţiune este setată forţa de pondere 6 (din numărul total de 7) iar forţa de menţinere 3, iar timpul total de prindere este de 1 sec.

AL: OPEN HAND TO 5*CM; CLOSE HAND TO 5*CM;

- în cadrul acestui limbaj deschiderea/închiderea gripper-ului necesită parametri de indicare a deschiderii între elementele de prindere

VAL: OPEN MOVE gripframe CLOSEI DEPART 0

pentru limbajul VAL atât pentru terminale electrice cât şi pentru cele pneumatice se utilizează comenzile standard OPEN/CLOSE cu observaţia ca aceste comenzi devin executabile abia când este executată instrucţiunea următoare, în timp ce OPENI/CLOSEI sunt executate imediat. Instrucţiunea RELAX eliberează aerul din gripper-ul pneumatic

ROBEX: GOTO/p3, XYROT, 180, EVENT, 2, ELSE, nobox

- robotul este comandat să se deplaseze în poziţia p3 cu orientarea corespunzătoare. Dacă pe canalul 2 apare un eveniment atunci robotul este oprit şi are loc execuţia instrucţiunii următoare. Dacă nu programul va continua cu eticheta nobox.

Atät limbajul HELP cät ßi SIGLA nu dispun de instrucþiuni dedicate

lucrului cu terminalul. Acesta este considerat ca fiind un element robot

asemánátor cu orice braþ al robotului, acþionarea sa realizändu-se ín

mod similar:

Exemple:

HELP: SET(5) DELAY(20) MOVE(1, #1, 500, #3,

- elementul terminal este cuplat la canalul 5 cänd comanda SET duce la activarea sa (de obicei ínchidere). Se introduce o íntärziere pentru a asigura siguranþa prinderii, apoi se

Limbaje de Programare a Robotilor Industriali

94

40) RESET

deplaseazá robotul de-a lungul axei X cu 500 mm, z cu 40 mm ßi se dezactiveazá canalul 5 (OPEN);

PULSE(1) DELAY(timp_íntärziere) MOVE(1, #1, 200, #3,

250) PULSE(2)

DELAY(timp_íntärziere)

- acest tip de acþionare gripper este specific terminalelor electrice cu acþionare de tip SET (RESET), ín sensul ín care un impuls transmis la canalul 1 duce la ínchiderea terminalului, iar alt impuls cátre canalul 2 duce la deschiderea terminalului;

SIGLA: AX/-1,-12; MO/...; AX/1;

- instrucþiunea AX cu parametru negativ duce la deschiderea terminalului, ín timp ce o valoare pozitivá duce la ínchiderea sa.

Limbajul ROBEX ínscriindu-se ín cadrul limbajelor evoluate

dispune de instrucþiuni dedicate care ußureazá sarcina

utilizatorului.

Exemple:

ROBEX: GRIPNO/5 OPENGR CLOSEGR/3

- se specificá gripper-ul curent, cel de la canalul 5, urmänd comanda de deschidere. Specificarea canalului ca argument la instrucþiunea OPENGR/CLOSEGR duce la acþionarea gripperului specificat (3) ßi a celui curent (5).

Limbaje de Programare a Robotilor Industriali

95

1. Instrucţiuni de acţionare a terminalelor cu parametrii Aßa cum s-a arátat asupra terminalelor se pot folosi:

instrucþiuni simple de tipul ínchidere/deschidere gripper dar ßi

instrucþiuni complexe care sá ducá la o serie de specificári privind:

- orientarea gripperului;

- durata mißcárii gripper-ului;

- viteza cu care se efectueazá mißcarea terminalului;

- forþa de apucare;

- toleranþa controlului;

- instrucþiuni specifice terminalului folosit.

Anumite limbaje permit specificarea parametrilor terminalelor

pentru douá sau mai multe terminale, depinzänd de structura robotului.

Astfel dacá parametrii de identificare a gripperului lipsesc, instrucþiunile

de tip TO ßi BY se referá la gripper-ul curent, mai precis la ultimul

terminal specificat.

Exemple:

SRL: OPEN táietor BY OPERATION(1) DURING MOVE

- táietorul este acþionat ín timpul mißcárii urmátoare

OPEN gripper BY 3 DURING MOVE

SMOVE puma TO destinaþii CLOSE gripper1 TO4

WITH VELOCITY=0.5

- ín timpul mißcárii robotului puma cátre destinaţie, gripperul 1 este deschis cu 3cm, apoi (dupá mißcare) este ínchis päná la distanţa de 4 cm íntre degete cu viteza de 0,5 cm/s;

GRIPWITH gripper 2 TO 7

- gripper-ul este ínchis sau deschis päná la distanţa dintre degetele gripper 2 este de 7 cm;

PASRO: gripwith(7)

- acţiunea este similará cu cea determinatá de instrucţiunea SRL anterioará;

AL: OPEN HAND TO 8*CM MOVE ARM1 TO destinaþie OPEN HAND1 BY 3*CM MOVE ARM1 TO @+ZHAT CLOSE HAND1 TO 2*CM

- se comandá deschiderea gripper-ului la 8 cm ín timpul mißcárii cátre destinaţie, pentru ca ín timpul celei de-a doua mißcári sá se comande ca HAND1 sá fie deschisá cu 3 cm iar apoi ínchisá la 2 cm;

Limbaje de Programare a Robotilor Industriali

96

VAL: OPEN 45 - gripper-ul este deschis ce 45 mm.

Ín afará de parametrii de deschidere/ínchidere a gripper-ului se pot

introduce pe längá viteza de operare a gripper-ului, element care

este utilizat cu succes mai ales ín operaþiile paralele sau de

sincronizare a mai multor mißcári prin durate.

Exemple:

SRL: ALWAYS WHEN max_curent DURING OPERATE TOOL(1) BY OPERATION(3)END_DURING

DO START warning (17)

- în cazul unui blocaj sesizat de un consum de curent suplimentar, ín timpul operaţiilor (OPERATION) execuţia de TOOL(1) se afişează un mesaj de avertizare warning (17);

CLOSE WITH MAVSPEED - se comandă ínchiderea gripper-ului cu vitezá maximá.

WHEN start_time <= SYSTIME+close_duration

MONITORED EVERY 50 MS DURING start_time:=SYSTIME CLOSE gripper 2 with V=0,5; END_DURING DO STOP gripper 2

- dacă are loc depăşirea duratei de timp alocate închiderii gripper-ului (close duration) - un element supravegheat la fiecare 50 msec se comandá ínchiderea gripper-ului 2 cu viteza de 0,5 cm/sec;

AL: OPEN HAND TO 5*CM WITH VELOCITY=0,5*CM

- deschiderea gripper-ului la 5 cm cu viteza de 0,5 cm/sec;

OPEN HAND BY 2*CM

WITH DURATION=5- deschidere gripper cu 2

cm/sec in 5 sec;

2. Instrucţiuni de comandá a terminalului cu monitorizarea senzorilor asociaţi

Operaþiile de manipulare a obiectelor se fac implicit cu

folosirea unor senzori de contact, de forþá, ín vederea asigurárii unei

pierderi corespunzátoare a elementului ce trebuie manipulat ín paralel cu

asigurarea unei forþe de manevrá. Se pot accepta ca instrucþiuni de

comandá a terminalului cu monitorizarea senzorilor ßi instrucþiunile de

ínchidere/deschidere a terminalului cu/la o anumitá distanþá íntre

degetele acestuia, precum ßi impunerea unui timp de execuþie al

Limbaje de Programare a Robotilor Industriali

97

mißcárii sau a unei viteze, dar se preferá introducerea acestei categorii

separate de instrucþiuni deoarece aceste ultime instrucþiuni pot fi

considerate a se baza pe sistemul senzorial interioceptor.

Numai cäteva limbaje oferá acest tip de instrucþiuni care presupun

un sistem senzorial ataßat terminalului. Dintre acestea putem evidenþia

limbajele:

Exemple:

SRL: CLOSE gripper1 UPTO GRIPFORCE>stringforta+0.3

N

gripper-ul 1 este ínchis päná ce forţa de ínchidere este mai mare ca stringforta+0,3 N

WHEN touch_sens=TRUE DURRING

CLOSE gripper2 END_DURING

DO STOP gripper2

dacá senzorul de atingere este activat ín timpul ínchiderii gripper-ului 2 se opreßte acţionarea acestuia.

AL: CLOSE HAND TO 2*CM

ON FORCE>=100*GM DO

STOP HAND

se comandá ínchiderea mäinii la 2 cm, ínchidere care va fi opritá dacá nu s-a ajuns la respectiva distanţá dar forţa de strängere a fost egalá sau mai mare de 100g*9,81 m/s2

VAL: GRASP 14.8,200

ín VAL controlul forþei este fácut de cátre controller-ul de forþá cu parametrii prestabiliþi. Astfel dacá la atingerea acestei forþe distanþa dintre degetele gripper-ului este mai micá decät valoarea specificatá de instrucþiune (14,8) se realizeazá saltul automat la eticheta cuprinsá ín argumentul al doilea (200).

Limbaje de Programare a Robotilor Industriali

98

F. Instrucţiuni dedicate lucrului cu sistemul exterioceptor

Prin sistem senzorial exterioceptor se ínþelege ansamblul

senzorilor care oferá arhitecturii de control a robotului informaþii legate

de mediul de lucru al robotului. Din punct de vedere al complexitáþii

constructive senzorii exterioceptivi pot fi grupaþi ín senzori binari,

senzori analogici ßi sisteme de vedere artificialá.

Pe de altá parte din punct de vedere al modului de utilizare a

informaþiei captate de la aceßtia prin intermediul limbajelor de

programare dedicate roboþilor, instrucþiunile se pot diviza ín instrucþiuni

dedicate senzorilor binari ßi analogici destinaþi controlului unor márimi

fizice ßi instrucþiuni dedicate sistemelor de vedere artificialá.

Deoarece prezenta carte se adreseazá specialißtilor in domeniu se

va omite o descriere mai amplá a senzorilor exterioceptori ßi a tipurilor

de semnale furnizate de aceßtia, cei interesaþi de astfel de elemente

putändu-li-se indica o bibliografie adecvatá ín acest sens [. . . ].

Prezenþa acestor instrucþiuni se datoreazá faptului cá roboþii

industriali nu sunt construiþi pentru utilizarea íntr-o aplicaþie specificá, ei

dispun de o arhitecturá cu ínalt grad de generalitate dar ßi adaptabilitate,

ín sensul ín care la canalele de comunicaþie cu mediul de lucru se pot

ataßa senzori sau module inteligente de control a senzorilor care sá

furnizeze anumite semnale robotului. Prezenþa acestor structuri ín

arhitectura interná a robotului ar duce la avantajele evidente legate de

timpul de prelucrare al semnalelor senzorilor, ín paralel cu limitarea

folosirii respectivului robot la un domeniu relativ íngust.

Ambele tipuri de structuri duc la aceeaßi acþiune: realizarea unui

anumit nivel, tip de informaþie, valoare sesizatá de cátre senzor are ca

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

Limbaje de Programare a Robotilor Industriali

99

condiþii conduce la o altá evoluþie specificatá de utilizator. Instrucþiunile

oferite de limbajele de nivel ínalt pot furniza elemente de identificare ßi

alocare a unui tip de informaþie cátre senzorii care vor fi citiþi,

instrucþiuni care poatá numele de instrucþiuni de configurare a

sistemului senzorial. Datoritá complexitáþii ridicate a sistemelor de

vedere artificialá, acestea vor fi tratate separat.

G. Instrucţiuni de configurare a sistemului senzorial Acest tip de instrucþiuni sunt íntälnite ín special la limbajele:

Exemple:

SRL: SYSTEM SPECIFICATION SENSOR: contact=CHANNEL(3) STRUCTURE contact=BOOLEAN greutate=CHANNEL(2) STRUCTURE greutate=INTEGER END_SYSTEM_SPECIFICATION

primeşte instrucţiuni ce configurează senzorii contact de tip boolean (digital) fiind la canalul 3 (conectarea hard) iar greutate este de tip întreg, reprezentat de informaţia citită pe canalul 2.

SIGLA: MT/1,M8,2 - valoarea senzorului 1 este stocatá ín registrul M8, aßteptändu-se un timp de 2 sec päná

se trece la instrucþiunea urmátoare. HELP: IF TESTB(3) THEN... - dacá intrarea 3 este ín nivel ínalt

rezultatele acestei structuri este TRUE. IF VALUE (1) > 80 THEN - instrucþiunea VALUE (1) citeßte canalul 1

de mai multe ori furnizänd o valoare care a diferit pentru douá másurátori succesive cel mult la cel mai puþin semnificativ bit.

IF IVALUE (1) > 80 THEN - deosebirea constá ín faptul cá valoarea oferitá de IVALUE este prima valoare cititá. Ca o observaţie, aceste ultime douá instrucţiuni pot fi alocate unor variabile de program (Ex: sens:3=VALUE(3);).

Fárá índoialá cá monitorizarea senzorilor se poate face programat

ín modul ín care deja a fost prezentat anterior:

Exemple:

SRL: ALWAYS WHEN SENSOR(3)>=5 MONITORED EVERY 100MS DURING Instrucţiune de mißcare

Limbaje de Programare a Robotilor Industriali

100

END_DURING DO START warning

Ín mod similar limbajul AML poate sá ofere facilitáţi de

monitorizare a senzorilor.

Exemple:

MONITOR (LED, 2, 0, 0, 1.5, trece)

- la fiecare 1,5 secunde este monitorizat senzorul LED ßi dacá 2 semnale sunt 0 atunci are loc oprirea mißcárii, dacá nu este afißat mesajul trece ßi executá mißcarea.

Chiar dacá limbajul HELP nu are instrucţiuni specifice de

monitorizare aceastá instrucţiune poate fi emulatá prin intermediul unor

task-uri.

Exemple:

Monitor: sens2:=VALUE(2); IF sens2>5 OR sens2=5 THEN PRINT (0, Maßina1 este pornitá

); M10n:=1 END; DELAY(10) GO TO monitor.

- indicator pornire maßiná

Ín continuare instrucţiunile de implementare a condiţiilor de

evoluţie datorate senzorilor exterioceptivi au o structurá conceptualá

generalá de tipul:

IF condiţie senzor THEN mißcare 1

(ELSE) mißcare 2

Exemple:

SRL: IFSIG contact 3 THEN PTPMOVE TO

eroare ELSE SMOVE TO destinaþie

- dacă senzorul contact 3 este activat (1 logic) atunci robotul se va mişca punct cu punct către punctul eroare, în caz contrar va avea loc mişcarea liniară către destinaţie.

INPUT (temperaturá) IF temperatura > temp_limit

THEN BEGIN

- valoarea analogică a senzorului temperatură este citită şi dacă condiţia de a fi mai mare decât temperatura limită este índeplinită atunci este executat blocul de instrucţiuni cuprins

Limbaje de Programare a Robotilor Industriali

101

SMOVE robot TO aproviz;

END

între BEGIN şi END. În caz contrar se execută instrucţiunile de după instrucţiunea END.

AML: IF SENSI (LED,0) THEN BREAK (Direcþie

blocatá)

- dacă LED este întrerupt (senzorul) atunci are loc afişarea mesajului şi oprirea structurii, dacă nu se continuă cu instrucţiunea de BREAK (Direcţie blocată).

VAL: IFSIG 1, -5, , THEN 300 - limbajul VAL permite şi implementarea unor funcţii logice ŞI între semnalele senzorilor pe nivel 1 sau 0. Astfel în cazul instrucţiunii prezentate ca exemplu dacă semnalul 1 este setat (în 1 logic) şi semnalul 5 resetat (în 0 logic, de unde şi semnal negativ) se realizează saltul la instrucţiunea 300. Ín caz contrar se continuă execuţia cu instrucţiunea următoare.

SIGLA: PP/-1,12 - dacă senzorul 1 este ín 0 logic se realizează saltul la eticheta 12.

MT/1, M8,2 BL/M8, 75, 3 grup 1

instrucţiune JU/4; NU/3; grup 2

instrucţiune NU/4;

- valoarea senzorului 1 este încărcată în registrul M8. Dacá valoarea din M8 este mai mare sau egalá decät 75 se executá grupul 1 de instrucţiuni şi apoi prin JU/4 - salt necondiţionat la eticheta 4 (NU/4). Dacá valoarea este sub 75 (below-BL) are loc executarea grupului 2 de instrucţiuni ce íncepe cu eticheta 3 (NU/3).

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

În cadrul unor procese tehnologice implicând anumite transformări fizico-

chimice timpul, durata unei mişcări devin un element care nu poate fi neglijat,

motiv pentru care poate fi privit ca fiind un parametru care ar trebui specificat

explicit. Acest tip de problemă poate fi rezolvat în cadrul limbajelor de

programare a roboţilor industriali fie prin existenţa unor instrucţiuni explicite

cum este cazul limbajelor SRL şi AL, fie prin monitorizarea momentului de

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

Limbaje de Programare a Robotilor Industriali

102

setarea unor indicatori soft, flag-uri care să intervină în cadrul procesului sub

forma unor evenimente.

Exemplu:

SRL: WHEN start_time<=SYSTIME-durata_miscarii MONITORED EVERY 20 MS DURING SMOVE robot TO destinaţie END_DURING DO START altă_deplasare

- dacă timpul de mişcare a robotului spre destinaţie, monitorizat la fiecare 20 MS a fost depăşit (evaluarea duratei mişcării cu funcţia SYSTIME este mai mare decât durata planificată) se realizează trecerea automată la execuţia deplasării următoare

AL: MOVE ARM1 TO destinaţie ON DURATION >=5*sec DO BEGIN MOVE ARM2 TO centru WITH DURATION=3*SEC; PRINT (“start proces”); END;

- la 5 secunde de la începerea deplasării lui ARM1 către destinaţie este acţionat şi ARM2 spre centru timp de 3 secunde şi apoi este afişat un mesaj

I. Procese în paralel

Deoarece mişcarea robotului sau operaţiile de afişare a unor informaţii la

imprimantă sunt mult mai lente comparativ cu instrucţiunile de prelucrări

logico-aritmetice, acces informaţia de pe disc, salturi în cadrul programului sunt

permise funcţii care să declanşeze explicit anumite operaţii de prelucrare în

paralel cu execuţia mişcării structurii robotului. Acest tip de instrucţiuni sunt

specifice în special limbajelor AML şi HELP.

Limbaje de Programare a Robotilor Industriali

103

Exemplu:

AML: AMOVE (ARM, framedestinaţie) . . WAITMOVE

- instrucţiunea specifică mişcării asincrone urmând ca instrucţiunile cuprinse între acesata şi WAITMOVE să fie executate odată cu începerea mişcării, iar trecerea la instrucţiunile de după WAITMOVE să se realizeze numai după terminarea mişcării.

Exemple:

ROBEX: ONSIG/EVENT, 3, JMP, wait - dacă semnalul de la canalul 3 este în 1 logic se realizează saltul la eticheta wait.

HELP: IF TESTB(3) THEN DELAY(50) END; IF VALUE(1)70 THEN MOVE(1, 1, 140, 3, 50); PULSE(2) MOVE(1, 1, 120, 2, 260,

150) ELSE PRINT (“Valoare

insuficientă”) HOLD END;

- dacă senzorul 3 este TRUE atunci execuţia programului este întârziată cu 1 sec (50x20 msec) - dacă valoarea senzorului 1 este mai mare decât 70 atunci piesa este depozitată, gripper-ul deschis şi robotul mutat într-o a doua poziţie. În caz contrar se afişează un mesaj şi se aşteaptă intervenţia operatorului.

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

Sistemul de vedere artificială este de departe sistemul senzorial care pe

lângă faptul că oferă o informaţie complexă şi completă asupra scenei de lucru,

necesită şi un set de operaţii complexe de aliniere sau mai precis de stabilire a

unor relaţii între cele două sisteme care fac parte din sistem: sistemul de

referinţă asociat camerei de luat vederi şi sistemul robot. Pe de altă parte

sistemul de vedere artificială dispune de o serie de caracteristici care-I permit o

integrare mai uşoară în sistemul robot:

Limbaje de Programare a Robotilor Industriali

104

- obiectele identificate pot primi nume simbolice, reprezentate în ASCII

prin şiruri de caractere

- poziţia şi orientarea obiectelor sunt evaluate în relaţie cu un sistem de

coordonate cartezian

- sistemul poate “învăţa” obiectele printr-o instruire prealabilă, alocând

totodată şi numele simbolice elementelor învăţate.

O serie de limbaje, cum este cazul limbajului VAL, au fost extinse cu

seturi de instrucţiuni special dedicate sistemelor de vedere artificială.

Instrucţiunile de bază pentru VAL (VAL11) de lucru cu sistemul de vedere

artificială sunt VPICTURE care captează imaginea prin camera de luat vederi şi

o depune într-un masiv de memorie special destinat acestui lucru (un buffer de

memorie) şi VLOCATE instrucţiune care generează localizarea imaginii

achiziţionate în modelele memorate (caută imaginea în imaginile memorate)

pentru ca în cazul găsirii unui obiect orientarea şi poziţia curentă să fie

memorate într-un obiect, iar în caz contrar să se realizeze un salt la eticheta

cuprinsă în cel de-al doilea argument. Dacă eticheta lipseşte programul se

opreşte şi este generat un mesaj de eroare. Deoarece o completă prelucrare a

informaţiei captate de sistemul de vedere artificială conţine şi o serie de operaţii

de calibrare, determinare a transformărilor de coordonate între sisteme, pentru

înţelegerea acestora va fi prezentat şi comentat un exemplu:

Limbaje de Programare a Robotilor Industriali

105

Exemple:

HERE calibrobot - prin această instrucţiune se defineşte centrul discului în care este plasat terminalul ca fiind sistemul de calibrare al robotului (calibrobot)

MOVE respoint - robotul este extras din schema de recunoaştere a obiectelor prin mutarea într-un alt punct (restpoint)

VPICTURE - este captată imaginea de către camera de luat vederi

VLOCATE calibcamera, 150 - dacă obiectul este recunoscut (poziţia iniţială), elementele privitoare la orientare şi poziţie sunt stocate în sistemul calibcamera dacă nu salt la instrucţiunea cu eticheta 150

INV invcalibcamera=calibcamera

- se calculează sistemul invers care corespunde transformării coordonatelor obiectului în sistemul de coordonate al camerei (achiziţionarea imaginii oferă date referitoare la sistemul imagine)

SET camerasystem=calibrobot:

invcalibcamera

- se calculează transformarea cameră sistem prin compunerea transformărilor bază-robot-cameră

Până în acest punct a avut loc calibrarea şi definirea transformărilor necesare

prelucrării imaginilor şi poziţionării robotului. Din acest punct începe efectiv

prelucrarea obiectelor a căror imagine este achiziţionată de sistemul de vedere.

Limbaje de Programare a Robotilor Industriali

106

VPICTURE - este achiziţionată imaginea unui obiect

VLOCATE obiect, 150

- se caută identificarea obiectului

MOVE camera system:obiect

- utilizând orientarea şi poziţia obiectului compusă cu transformarea camerasystem se poate defini sistemul în care este nevoie ca robotul să se poziţioneze.

Un alt exemplu de limbaj evoluat destinat lucrului cu sistem senzorial de

vedere artificial este RAIL. Acest limbaj dispune de mai multe elemente care să

permită identificarea obiectelor care au fost preluate de către un sistem de vedere

artificială. Asemănător cu VAL11 limbajul RAIL dispune de o instrucţiune

explicită de captură a imaginii: PICTURE dar şi de un set de instrucţiuni care să

permită identificarea obiectului – OBS_FEA(TURE) – în funcţie de anumite

caracteristici: poziţie (OBJ_XMIN, OBJ_XMAX, OBJ_YMIN, OBJ_YMAX),

orientare (OBJ_ANGLE), numărul orificiilor (OBJ_HOLES), dimensiunea

Imagineacaptata

Identificareaobiectului si

determinareapozitiei Frame lista

.

.box

x valoarey valoare

z = 0Orientare

.

.

.

MOVE camera system

VLOCATE box,150

.

.

.

.

.

VPICTURE

.

.

.

.

.

Sistemul de vedereartificiala

Programuutilizatoru

Elementeprogram

Figure 25

Limbaje de Programare a Robotilor Industriali

107

diametrului maxim, minim al cercului care încadrează obiectul -

circumscrie/înscrie obiectul (OBJ_RMAX, OBJ_RMIN), culoare

(OBJ_COLOR), arie (OBJ_TOTALAREA), centrul de greutate (OBJ_XCENT,

OBJ_YCENT). Numărul total de caracteristici care pot fi recunoscute prin

intermediul limbajului RAIL este de 45.

Deoarece nu toate cele 45 de caracteristici sunt folosite unele dintre acestea

pot fi inhibate sau chiar toate (prin REC_FEAT) oferindu-se însă posibilitatea

utilizării unor alţi identificatori cum ar fi: primul obiect din cadrul imaginii

curente (FIRSTPART), următorul obiect (NEXTPART), primul obiect sau

orificiu din imaginea curentă (FIRSTBLOB), următorul obiect/orificiu

(NEXTBLOB). Aceşti identificatori sunt utilizaţi în legătură cu variabila

VIS_NPART care identifică numărul de obiecte din imagine:

Exemple: PICTURE IF VIS_PART0 THEN BEGIN FOR număr elemente =1 TO VIS_NPART DOBEGIN IF număr elemente ==1 THEN FIRSTPART ELSE NEXTPART IF OBJ_NHOLES ==3 THEN ENTLOOD END END

- după achiziţia imaginii se identifică prin VIS_NPART numărul de elemente şi dacă acesta este 1 se declară respectivul ca primul, în caz contrar se indică că sunt mai multe: NEXTPART. Dacă numărul de orificii este 3 atunci se iese din bucla de examinare, în caz contrar se continuă examinarea (după ultimul END poate urma o instrucţiune de genul GO TO ).

În cadrul limbajului RAIL există posibilitatea de a controla mai multe

sisteme de vedere artificială sau inhibată afişarea imaginii pe monitor, afişarea

color sau nivele de gri sau alţi parametri hard care de obicei sunt setaţi iniţial de

utilizator, pentru aplicaţia respectivă şi apoi nu mai sunt modificări.

Exemple: VIS_DISPLAY = OFF; - se inhibă afişarea pe monitor

VIS_CAMERANO =2; - sistemul de vedere artificială curent este numărul 2

Limbaje de Programare a Robotilor Industriali

108

K. Delimitarea programului prin intermediul blocurilor Utilizarea blocurilor de program facilitează programatorului o abordare mai

concentrată, mai flexibilă şi mult mai uşor depanabilă. Problemele care apar în

cadrul folosirii structurilor de tip blocuri se referă la valabilitatea variabilelor

definite în interiorul unor blocuri. Structura centrală a declarării blocurilor

conţine curente cheie de tipul BEGIN şi END cu particularităţi legate de

limbajul folosit. Spre exemplu AL cere pe lângă cele 2 cuvinte cheie şi un nume

al blocului, SRL utilizează cuvinte cheie BEGIN_BLOCK şi END_BLOCK, iar

PASCAL şi PASRO utilizează structurile concrete de blocuri împreună cu

structurile de tip procedură.

Exemple:

BEGIN “bloc 1” SCALAR – limit, a, b, c; . . IF SENSOR(2) limit THEN BEGIN “bloc 2” SCALAR I; . . END “bloc 2” ELSE BEGIN “bloc 3” SCALAR k; . . END “bloc 3” . . END “bloc 1”

PROGRAM principal VAR limit a, b, c : INTEGER PROCEDURE verif (x, y: REAL)

END

BEGIN

INTEGERVARi

i

.

.

:

END

END

INTEGERVARk

BEGIN

k

.

.

.

.

:

STATIC BLOCK Subr1: . . RETURN ENDBLOCK INIT?BLOCK DEFINE v(3); V[1]=3 V[2]=4 V[3]=5 ENDBLOCK BLOCK . . ENDBLOCK BLOCK . . ENDBLOCK

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

Limbaje de Programare a Robotilor Industriali

109

Din cele 3 exemple se cuvine a se adăuga câteva specificaţii referitoare la

limbajul HELP care dispune de blocuri dinamice ale căror instrucţiuni

sunt şterse după executare (BLOCK ENDBLOCK) ca şi în cazul

blocurilor de iniţializare (INIT_BLOCK) precum şi blocuri statice care

rămân memorate în memoria de lucru a robotului, acestea putând fi

apelate prin numele subrutinei şi parametri (aceeaşi specificaţie se

menţine şi pentru limbajul PASCAL şi PASRO).

L. Instrucţiuni de control al parcurgerii programului Chiar dacă numele tipului de instrucţiuni pare poate puţin prea elevat,

acest tip de instrucţiuni a fost deja întâlnit până în acest moment, autorul

dorind să realizeze în cele ce urmează o prezentare mai compactă a logicii

folosirii acestei instrucţiuni, în paralel cu exemplificarea tipurilor de

instrucţiuni pentru diverse limbaje. În cadrul alcătuirii unui program se

apelează de foarte multe ori la pictograme care descriu evoluţia

programului, structura acestuia la nivel de mişcare sau blocuri. În esenţă

elementele utilizate şi întreaga organigramă va trebui să îndeplinească

următoarele reguli:

- instructurile de tip bloc vor avea o intrare şi o ieşire

- evoluţia dinamicii programului va fi de sus în jos prin intermediul

structurilor de tip bloc

- o structură bloc este o unitate funcţională închisă (ale cărui efect se

datorează strict instrucţiunii/instrucţiunilor din respectivul bloc)

- într-un bloc sunt definite clar instrucţiunile/instrucţiunea care trebuie

efectuată

- comenzile, argumentele pentru prelucrarea executată de blocul curent

sunt preluate de la vecini

Ţinând cont de aceste specificaţii se pot defini cu uşurinţă următoarele

tipuri de instrucţiuni destinate controlului parcurgerii programului:

Limbaje de Programare a Robotilor Industriali

110

1. Instrucţiuni de salt necondiţionat Tipul general al unui astfel de instrucţiune conţine un element de tip

eticheta: instrucţiune urmată de o instrucţiune de tipul GO TO eticheta.

Chiar dacă acest tip de instrucţiuni sunt deosebit de clare se recomandă însă

utilizarea cât mai puţin cu putinţă a acestui tip de instrucţiune datorită rigidităţii

ei.

2. Instrucţiuni de execuţie condiţionată În cadrul acestor instrucţiuni putem evidenţia mai multe subtipuri:

1. Instrucţiuni cu final condiţionat (cu ieşire condiţionată)

Din cadrul acestor instrucţiuni fac parte instrucţiunile de tip REPEAT

UNTIL, precum şi instrucţiunile de tipul FOR i=1 TO n DO. Acestea au

ca efect repetarea execuţiei unui set de instrucţiuni sau unor blocuri până

când variabila de tip semafor devine egală cu o anumită valoare sau mai

mică/mai mare decât valoarea prestabilită.

Exemple: REPEAT i:= i + dt; IF i valfind THEN EXIT_REPEAT UNTIL total 10

FOR i = 1 TO valfinal DO BEGIN END

FOR K: = 1 find DO l: = l + 1; REP

Instrucţiunea REPEAT cu ieşire forţată (de valoarea valfind a lui i) pentru limbajul SRL

Instrucţiuni FOR pentru PASCAL şi PASRO

Instrucţiune FOR pentru HELP

3. Instrucţiuni cu execuţii condiţionate Din cadrul acestor instrucţiuni fac parte instrucţiunile de tip CASE. De

departe acest tip de instrucţiuni este cel mai flexibile şi cel mai recomandat în

abordarea structurală a unui program prin varietatea obţiunilor oferite. Se

Limbaje de Programare a Robotilor Industriali

111

remarcă rolul central pe care-l joacă variabila de decizie, în speţă valorile

particulare ale acestei variabile.

Principal o structură CASE se poate reprezenta astfel:

Exemple:

AML: BRANCH (IF N GE 1 AND N LE 4 THEN CASE1, CASE2, CASE3, CASE4 (N) ELSE ERROR_CASE CASE1:

BRANCH (CASE_END); CASE2:

BRANCH (CASE_END); CASE4:

BRANCH (CASE_END); ERROR CASE:

CASE_END

HELP: IF case 0.5 THEN caseend END; GO TO (case, case1, …. , casen); GO TO caseend case1: instrucţiuni GO TO caseend case2: instrucţiuni GO TO caseend casen: instrucţiuni caseend:

Instrucţiunile CASE pentru limbajele PASRO, SRL, AL conţin elementele

caracteristice structurii de bază, în timp ce limbajele AML şi HELP pot

implementa structura CASE utilizând elemente de tipul GO TO şi BRANCH.

Tot o instrucţiune de Test de ieşire de astă dată la intrarea în bucla este

structura WHILE. Aceasta este specifică limbajelor SRL, PASRO, HELP, AL

BLOC 1 BLOC 2

CASE

BLOC n

Case1 Case 2 Case n

Case n

Case 1

Case 2Case test

Structurablocului 1

Structurablocului 2

Structurablocului n

. . . . .

Limbaje de Programare a Robotilor Industriali

112

având o structură logică WHILE expresie logică DO bloc mai precis atâta timp

cât expresia logică este TRUE se execută bloc.

4. Instrucţiuni cu salt condiţionat Acest tip de instrucţiune se bazează pe structura IF condiţie logică

THEN bloc1 ELSE bloc2. Reprezentarea de tip organigramă a acestui tip de

instrucţiuni este

BLOC 1 BLOC 2

CONDITIE

FalseTrue

THENBLOC 1

ELSEBLOC 2

CONDITIETRUE FALSE

BLOC 1

CONDITIE

FalseTrue

THENBLOC1

CONTINUA

CONDITIETRUE

FALSE

Limbaje de Programare a Robotilor Industriali

113

Chiar dacă instrucţiunea CASE este cea mai flexibilă instrucţiunea

de tip IF este în general cea mai folosită şi datorită faptului că în general

semnalele primite de la structurile de control sunt în general binare motiv pentru

care aceste semnale sunt fie TRUE, fie FALSE. Condiţiile logice cele mai

utilizate sunt de tip relaţional: mai mic, mai mare, egal, mai mic cel mult egal,

mai mare cel mult egal. Dacă limbajele PASRO, SRL, AML, AL utilizează

forme clasice a instrucţiunii, limbajul SIGLA datorită strânsei conectivităţi pe

care o are cu arhitectura hard, necesită o tratare mai atentă şi inserarea unor

comentarii care să permită o mai rapidă identificare a condiţiilor.

Exemple:

AL şi PASRO: HELP:IF x a THEN IF x =b THEN BEGIN IF x=(a+b)/2 THEN PRINT (“corect”) END ELSE PRINT (“prea mare”) ELSE PRINT (“prea mic”);

IF (x a) OR (x = a) THEN IF (x b) OR (x = b) THEN IF x = (a+b)/2 THEN PRINT (“corect”) END ELSE PRINT (“prea mare”) END ELSE PRINT (“prea mic”) END;

VAL: SIGLA: IF x GE a THEN 10 TYPE prea mic GO TO 100 IF x LE b THEN 20 TYPE prea mare GO TO 100 20 SETI timp = a+b SETI temp = temp/2 IF x NE temp GO TO 100 TYPE corect 100

MT/1, M1, 2 – se încarcă în registrul M1 valoarea de la senzorul 1 (x = M1) MT/a, M2, 2 – se transferă valoarea a în M2 MT/b, M3, 2 – se transferă valoarea b în M3 BL/M1, M2, 1 – dacă M1 M2 = a atunci salt la eticheta 1 BG/M1, M3, 2 – dacă M3 M1 atunci salt la eticheta 2 SE/M4, M2 – M4M2 IC/M4, M3 – M4M4+M3 SE/M5, 0 – M50 NU/10 – eticheta 10 IC/M5, 1 – M5M5+1 IC/M4, -2 – M4M4-2

Limbaje de Programare a Robotilor Industriali

114

BG/M4, 0, 10 – dacă M4 este 0 salt la 10 BE/M4, 0, 11 – dacă M4 este = 0 salt la 11 IC/M5, -1 – M5M5-1 dacă M4 0 NU/11 – eticheta 11 BE/M1, M5, 3 – dacă M1 = M5 salt la 3 JU/100 – salt eticheta 100 NU/1 – eticheta 1 NT/ prea mic, M1 – afişează prea mic JU/100 – salt la 100 NU/2 – eticheta 2 NT/ prea mare, M1 – afişează prea mare JU/100 – salt la 100 NU/3 – eticheta 3 NT/corect,M1 – afişează corect NU/100 – eticheta 100

Toate exemplele prezentate sunt utilizate pentru implementarea unei

evoluţii ca în organigrama următoare :

x >= a

PRINT ' Prea mic 'x <= b

True

PRINT ' Prea mare '

False

False

x =(a+b)/2

True

PRINT ' Prea mare '

True False

x >=bFalseTrue

PRINT "Prea mic"

x<=bFalseTrue

PRINT "Preamare "

x=(a+b)/2FalseTrue

PRINT " corect"

Continua

Limbaje de Programare a Robotilor Industriali

115

Dacă primele 3 exemple (limbajele VAL, AL, PASRO şi HELP) nu credem

că necesită explicaţii suplimentare, exemplul în SIGLA implementează operaţia

de împărţire prin scădere repetată, rezultatul întreg fiind încercat în registrul M5:

astfel atâta timp cât M40 se scade din M4 2 şi la fiecare scădere se

incrementează M5, urmând că dacă M4=0 să se încheie împărţirea, să se

realizeze ieşirea din bucla care simulează împărţirea cu 2, iar dacă M40

decrementându-se M5 se iese deasemenea din simularea împărţirii.

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

Acest tip de instrucţiuni sunt folosite la sincronizarea mişcării robotului

cu alte elemente ale modului de lucru sau a mişcării robotului cu mişcarea

elementului terminal. O astfel de instrucţiune combinată este formată din

două comenzi: una de captare a semnalului de sincronizare SIGNAL

eveniment semnal şi cea de-a doua de aşteptare până în clipa în care

semnalul eveniment este TRUE: WAIT semnal eveniment. Sigur că

există şi varianta care cumulează cele două instrucţiuni sub forma

instrucţiunii de tip TEST semnal eveniment.

Limbaje de Programare a Robotilor Industriali

116

SIGLA are aceeaşi structură în schimb mnemonicele folosite sunt mai

sintetice: ES/ variabilă eveniment (variabila este setată dacă evenimentul este

TRUE) şi EW/ variabila eveniment, variabila,…….evoluţia programului este

oprită până ce variabilele sunt setate.

Instrucţiunile simple de temporizare condiţionată pot fi clasificate ca:

Instrucţiuni condiţionate temporal

Instrucţiuni condiţionate de terminal

Instrucţiuni condiţionate de activarea unei taste speciale

Instrucţiuni condiţionate de evenimente externe

N. Alte consideraţii privitoare la tratarea situaţiilor excepţionale, la atributele şi starea sistemului

Sistemul robot dispune ca orice structură complexă sistemică de un

set de atribute interne şi stări care pot fi citite şi uneori chiar modificate

prin intermediul unui program utilizator. Spre exemplu AML dispune de

atribute privitoare la starea unui anumit canal – QCHAN, atributele unui

anumit senzor QIODEF, poziţia şi orientarea curentă QPOSITION, etc.

Modificarea acestor atribute nu se recomandă a fi făcută de utilizator,

proiectantul hard/soft al structurii fiind cel care utilizând aceste informaţii

conduce sistemul spre o bună funcţionare. Deasemenea situaţiile

excepţionale sunt de obicei tratate prin intermediul unor subrutine de

întreruperi nemascabile implementate de către constructor. Astfel de

situaţii de excepţie pot fi:

- oprirea robotului

- elementul ce se doreşte a fi prins este greşit poziţionat sau absent

- mişcarea robotului poate duce la blocaj intern sau coliziune

- împărţirea la zero a unui operand

Limbaje de Programare a Robotilor Industriali

117

- timpul de aşteptare al unui eveniment depăşeşte o valoare maximă

prestabilită

- magazia este goală

- forţa exercitată asupra robotului sau terminalului este mult prea mare

Limbaje de Programare a Robotilor Industriali

118

VI. Integrarea în program a programării prin instruire

Este cunoscut faptul că robotul este o structură complexă atât din

punct de vedere cinematic cât şi dinamic. Utilizarea unui model cinematic

sau dinamic face apel la o serie de simplificări, care în cazul utilizării

modelului drept bază pentru programarea off-line a robotului poate

conduce la erori de neneglijat. Utilizând ideea conform căreia cel mai bun

model al unui obiect este obiectul însăşi a apărut modalitatea de

programare a unui robot prin instruire, când robotul este condus punct cu

punct pe traiectoria care se doreşte a fi descrisă, punctele sunt memorate,

pentru ca apoi în cadrul execuţiei automate robotul să descrie traiectoria

pe care a fost instruit.

În esenţă programarea unui robot care dispune de un limbaj de

programare se compune din două etape:

construcţia structurii logice a programului

construcţia punctelor, spaţiilor şi orientărilor specifice execuţiei

robotului.

Mai precis prima etapă include evoluţia dorită a robotului. Aşa cum

am arătat, deoarece nu pot fi definite cu suficientă precizie poziţia şi

orientarea robotului în punctele de interes se preferă ca acestea să fie

introduse de către programator în cadrul procedurii de instruire (învăţare).

Această instruire, din punct de vedere al momentului în care se execută

este de două feluri:

a). se execută programul urmând ca poziţiile şi orientările să aibă

nume simbolice, lucru care va duce ca la prima rulare executată să se

oprească atunci când se ajunge la simboluri încă nedefinite valoric. În

acest moment se trece în regimul de instruire şi se poziţionează

convenabil robotul, cu ajutorul unui joystick, în marea majoritate a

Limbaje de Programare a Robotilor Industriali

119

cazurilor, iar la activarea unei chei speciale valorile curente să fie atribuite

simbolului întâlnit. Această procedură impune o alocare corespunzătoare

de memorie, în paralel cu dezavantajul generat de instrucţiunile

condiţionale de tip IF, respectiv CASE la care o primă rulare va duce la

definirea evoluţiei corespunzătoare condiţiei îndeplinite, pentru ca în

cazul altei evoluţii condiţionale robotul să se oprească din nou şi să fie

nevoie completarea variabilelor simbolice.

b). se defineşte separat o listă de poziţii şi orientări care va fi

asigurată separat de evoluţia on line a robotului prin procedura de

instruire adecvată. Chiar dacă aparent această procedură este

Programator

Programul textcontinind instructiunide miscare, salturi,

comenzi intrare-iesire

Produra de instruire

Sistem de programareoffline ( editoare si

compilatoare )

Sistem de programareonline avandcomponenteinteractive

Structura cadru aprogramului

Structura cadru amiscarii

Program executabil

Sistem interpretor side comanda acontrollerelor

Robot

Figure 26

Limbaje de Programare a Robotilor Industriali

120

consumatoare de timp, din punct de vedere al blocării producţiei această

metodologie exclude complet dezavantajele primei metode.

În plus alcătuirea de fişiere cu tipuri adecvate de sisteme, orientări,

poziţii se dovedeşte a fi extrem de flexibilă, adăugarea unor alte tipuri de

variabile făcându-se cu ansamblu.

Spre exemplu în PASRO sau SRL se definesc 5 tipuri de operaţii cu

fişiere, operaţii care conferă o deosebită flexibilitate în manevrarea

informaţiei.

Spre exemplu se pot defini următoarele tipuri de variabile:

Exemple:

PASRO: TYPE gripstatustyp = (gdeschis, gînchis) ffilename = PACKED ARRAY 1 ffmax OF CHAR framename = PACKED ARRAY 1…….ffmax OF CHAR ffilerecord = RECORD name : framename value : frame gripvalue : REAL grips : gripstatustyp END; ffiltyp = FILE OF ffilerecord

Dacă se doreşte introducerea unor noi variabile, spre exemplu

coordonatele generalizate ale cuplelor în poziţia curentă acest lucru se

poate face cu uşurinţă prin inserarea în declararea TYPE a unei linii de

genul : robotangletyp = ARRAY 0 5 OF REAL iar în RECORD :

robotangle : robotangletyp

Operaţiile cu fişiere sunt:

deschiderea unui fişier openframefile (filename: ffilename; VAR status:

INTEGER);

închiderea unui fişier closeframefile

Limbaje de Programare a Robotilor Industriali

121

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

valorile de ieşire a frame-ului, valorile terminalului, status-ului

acestuia

INTEGERVARstatus

framenamefname

typgripstatusVARgsout

REALVARgvout

frameVARfout

:

;:

;:

;:

;:

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

INTEGER)

scrierea într-un fişier framewrite

;:

:sin

:

:

:

INTEGERVARstatus

typgripstatusg

REALgvin

framefin

framenmefname

Pentru limbajul VAL crearea listei de simboluri se face prin

utilizarea cheilor speciale de pe teach – pendant utilizând cheile T pentru

interpolare la nivelul coordonatelor robot, respectiv TS pentru interpolare

carteziană liniară.

Exemple: T store - se lansează procedura de instruire. La atingerea

orientării şi poziţiei dorite se apasă butonul RECORD.

MOVE store 1, 0, 0

- la atingerea punctului următor se apasă iar butonul RECORD – gripperul fiind închis (0, 0)

MOVE store 2, 47.3

- se memorează al treilea punct cu comanda deschiderii gripper-ului la 47.3mm

În mod relativ asemănător se realizează programe în HELP, mai

precis construcţia tabelei de poziţii şi orientări :

Exemple:

MANUAL (1) - se comandă trecere pe instrucţiune

CREATE (program instruire) - se creează fişierul program instruire

PRINT ('INSTRUIRE')

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

Limbaje de Programare a Robotilor Industriali

122

a poziţionării când coordonatele poziţiei actuale sunt citite

RECORD (#0, 'strtx:= ', AX(1), ' ; ');

- se înregistrează în fişierul deschis valoarea deplasării pe x

RECORD (#0, 'strty:= ', AY(1), ' ; ');

- la fel deplasarea pe y

RECORD (#0, 'MOVE (1, #1,strtx, #2, strty, ,#6, strtw) ' );

- se înregistrează instrucţiunea de mişcare ce se doreşte a fi executate

RECORD (#0, 'STOP'); CLOSE STOP.

- se introduce indicatorul de sfârşit de fişier

Limbaje de Programare a Robotilor Industriali

123

VII. Subrutine, proceduri şi funcţii Un program realizat pentru orice tip de aplicaţie este cu atât mai bine

structurat şi realizat cu cât numărul instrucţiunilor se salt este mai mic.

Eliminarea acestor instrucţiuni, fără afectarea evoluţiei programului

se face utilizând o segmentare a programului şi mai ales o definire a unor

entităţi soft sub forma unor funcţii, subrutine, proceduri.

Astfel de entităţi vor cuprinde:

numele entităţii

specificarea parametrilor în zona de declarare a variabilelor

un mecanism de transfer al datelor, parametrilor de intrare (call by

value)

un mecanism de transfer al datelor prelucrate de entităţi soft (call by

reference)

un set de instrucţiuni care prelucrează datele

ieşirea din proceduri printr-un singur punct bine definit

Se remarcă faptul că nu s-a făcut absolut nici o specificaţie

referitoare la intrările în procedură, element care este exploatat de HELP

care permite o structură de tip subrutină cu mai multe intrări (o subrutină

în HELP este definită formal sub forma SUBROUTINE etichetă

Exemple:

L10 : IF a = b THEN GO SUB 50 END; L20 : IF a b THEN GO SUB L30 END; L40 : IF c b THEN GO SUB L50 END; L30 : L50 : RETURN

Limbaje de Programare a Robotilor Industriali

124

Datorită faptului că subrutinele, procedurile, funcţiile sunt elemente

cunoscute de către orice programator, în cele ce urmează ne vom limita la

expunerea principalelor particularităţi pe care le prezenta aceste structuri

în cazul limbajelor de programare a roboţilor industriali. Subrutinele sunt

specifice tuturor limbajelor ci excepţia limbajului ROBEX care

compensează acest lucru prin utilizarea procedurilor. Specific structurii

subrutina este faptul că apelul său se face printr-o instrucţiune de tipul

GOSUB nume program/etichetă iar întoarcere se face după execuţia

subrutinei şi întâlnirea instrucţiunii RETURN. În cazul limbajului VAL

după RETURN poate urma un index care să specifice dacă întoarcerea se

realizează la instrucţiunea de după apelul subrutinei (indexul lipseşte) sau

la a doua,….., a index-a instrucţiune după cea care a realizat apelul

subrutinei.

De remarcat că apelul unei subrutine se poate realiza şi prin

instrucţiunea REACTI când revenirea se face după RETURN la

instrucţiunea imediat următoare apelului, respectiv REACT index când

revenirea se face după index instrucţiuni ce urmează după apel.

Procedurile pot fi privite ca subprograme în cadrul programului

principal. Acestea sunt apelate prin numele procedurii însoţit de parametri

de intrare şi cei de ieşire. Corpul procedurii este cuprins, de obicei, între

un început BEGIN şi END, respectiv BEGIN_PROCEDURE,

END_PROCEDURE (pentru SRL). Utilizarea acestor structuri permit o

folosire mai judicioasă a memoriei, variabilele interne procedurii fiind

şterse la terminarea acesteia.

Limbaje de Programare a Robotilor Industriali

125

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

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

Exemple:

Program 3: SE/M1, P1 - P1, P2 sunt parametri formali: M1P1 IC/M1, P2 - M1= M1 + P2 SE/I3, M1 - I3M1 Main program: SE/M10, 5 - M105 SE/M20, 17 - M2015

EX/3, M10, M20, 100 - apel program 3 cu P1=M10, P2=M20, I3=100 registru

Funcţiile realizează un compromis între proceduri şi subrutine în

ceea ce priveşte complexitatea: sunt apelate similar procedurile prin nume

şi parametri de intrare, dar numărul instrucţiunilor din corpul lor este

relativ redus. Corpul unei funcţii poate fi delimitat prin delimitatorii de tip

bloc (BEGIN şi END), tipul rezultatului întors trebuind să fie declarat în

declaraţia funcţiei. Numai limbajele SRL, PASRO, AL şi AML dispun de

structuri de tip funcţie.

Exemple: PASRO: FUNCTION sumă vector(v: vector): REAL; BEGIN Sumă vector: = v*x + v*y +v*z; END

PROCEDURA NUMEPROCEDURA

LISTAPARAMETRILOR ; BLOC DE

INSTRUCTIUNI

FORWARD

Declararea unei proceduri in PASRO si SR

Limbaje de Programare a Robotilor Industriali

126

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

Chiar dacă de obicei structura de control a unui robot nu este

multiprocesor, diferenţa de timp datorită vitezei mult mai mari a

procesorului relativ la viteza de execuţie a elementelor în mişcare permite

introducerea conceptului de execuţie în paralel a unor blocuri sau chiar

conceptul de multitasking. Diferenţa între blocuri cu execuţie în paralel şi

conceptul de multitasking se află mai mult la nivel conceptual şi al

validităţii datelor: blocurile executate în paralel nu schimbă date în paralel

ci mai degrabă într-un mod secvenţial în timp ce utilizarea programării

multitasking permite schimbul de date instantaneu între taskuri. Utilizarea

blocurilor cu execuţie în paralel este permisă numai de limbajele SRL şi

AL, începutul acestor blocuri fiind declarat prin instrucţiunile COBEGIN

pentru AL şi BEGIN_PARALLEL (pentru SRL) respectic COEND şi

END_PARALLEL.

Pentru blocurile cu execuţie în paralel se utilizează de obicei

indicativul soft sau întreruperi de tip semnal de la senzori în vederea

sincronizării execuţiei acestora.

Astfel spre exemplu dacă se doreşte comanda a două braţe care să

transfere un obiect din braţul 1 către braţul 2

Limbaje de Programare a Robotilor Industriali

127

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

BEGIN EVENT braţ deasupra, obiect prins, obiect eliberat; FRAME obiect, poziţie deasupra, terminal pe obiect, destinaţie; COBEGIN BEGIN “braţ 1” MOVE arm 1 TO obiect; CENTER arm 1; AFFIX obiect TO arm 1 MOVE obiect TO poziţie deasupra WITH APPROCH = -3xcm SIGNAL braţ deasupra; WAIT obiect prins OPEN hand 1 TO 6xcm UNFIX obiect FROM arm1

SIGNAL obiect eliberat END “braţ 1” BEGIN “braţ 2” OPEN hand 2 TO 6xcm; MOVE arm2 TO terminal pe obiect WITH APPROCH = -3xcm; WAIT braţ deasupra; CENTER arm2; AFFIX obiect TO arm2 SIGNAL obiect prins WAIT obiect eliberat MOVE arm2 TO destinaţie WITH DEPARTURE = - 6xcm END “braţ 2”; COEND; END;

B. Task-uri

În cadrul acestor structuri secvenţe funcţionale sunt rulate şi executate în paralel

sau cvasi-paralel, implicând astfel câteva caracteristici specifice task-urilor:

fiecare task are un suport local de date

un task poate fi oprit, pus în aşteptare, continuat sau terminat din exterior printr-

o comandă sistem sau alt task sau se pot opri sau termina prin evoluţie proprie.

anumite sisteme pot permite apeluri multiple ale unor task-uri specifice

între task-uri este posibilă o comunicaţie la nivel de date intertasking.

În continuare este prezentat un exemplu de multitasking destinat deservirii unui

număr de 10 magazii:

SYSTEM_SPECIFICATION ROBOT: rip = ROBOT (1) EFFECTOR: degete = GRIPPER(0) OF rip SENSOR:detector = CHANNEL(5) STRUCTURE detector = RECORD Contact: BOOLEAN; Lungime: REAL; END; INTERRUPT: emty FROM CHANNEL(7);

END_SYSTEM_SPECICICATION PROGRAM monitorizare (INFILE, OUTFILE) . . SECTION distribuţie VAR Magazin_list: ARRAY [1 9] OF FRAME Get_pos: FRAME Nr_magazie_curentă: INTEGER

Limbaje de Programare a Robotilor Industriali

128

Ieşire: BOOLEAN Clr: CHAR; SECTION break (nr_magazii: INTEGER); BEGIN_SECTION “break” WRITELN (“Întreruperi după magazie”, nemagazie); Ieşire:= TRUE END_SECTION “break” BEGIN_SECTION “distributie” WRITELN (“se începe distribuire”) Ieşire: = FALSE - se iniţializează lista magaziei şi poziţia depunere get_pos prin proceduri TEACH-IN ALWAYS WHEN detector contact= TRUE DURING FOR nr_magazie_curenta: = 1 TO 9 DO PTPMOVE rip TO get_pos; CLOSE degete; SMOVE rip TO magazin_list [nr_magazie_curentă] WITH DEP = 10; OPEN degete; IF ieşire THEN BEGIN WRITE(‘Indicator activat! Contiuni? Y/N’;

READLN (ch); IF ch = ‘N’ THEN EXIT_SECTION ELSE SUSPEND 500 MS END_IF END END_IF; END_FOR; END_DURING; DO START breeak(nr_magazie_curentă); WRITELN(‘Toate magaziile umplute!’); END_SECTION “distributie”; BEGIN_PROGRAM WRITELN (‘Programul de monitorizare magazii a inceput!’)

(* *)

START distributie; (* *)

END_PROGRAM.

Se remarcă faptul că în SRL task-urile sunt identificate prin secţiuni şi declarate

în mod similar procedurilor. O altă caracteristică evidenţiată de ctre programul

anterior este dată de faptul programul principal apare ca un fel de program de

nivel înalt care apelează task-urile declarate anterior.Se poate afirma că diferenţa

dintre task-uri şi proceduri este relativ redusă din punct de vedere sintactic, dar

din punct de vedere al execuţiei task-urile pot fi executate în paralel sau chiar

activate printr-un proces care implică acordarea unei anumite priorităţi fiecărui

task.

În cadrul programului prezentat ca exemplu se observă declararea iniţială a

subsistemelor şi elementelor structurii în cadrul secţiunii SYSTEM

SPECIFICATION. În cadrul secţiunii break se defineşte modul în care robotul

trebuie să răspundă la apariţia unui mesaj de tip semafor din partea unei intrări

Limbaje de Programare a Robotilor Industriali

129

logice, când după afişarea locului unde a avut loc evenimentul este activată logic

variabila set exit. Secţiunea distributie asigură comanda robotlui pentru

asigurarea alimentării cu piese a unor magazii precum şi apelul la alte secţiuni în

clipa apariţiei unor evenimente. Se observă modul în care secţiunile distribuţie,

break şi system specification interacţionează sau sunt executate în paralel

(distribuşie cu break)

Limbajul HELP care permite de asemenea regimul multitasking priveşte fiecare

task drept un program aparte, individual, identificat printr-o eticheta. Activarea

respectivului program se face printr-o comandă de tip ACTIVE (număr task,

număr task, …), pentru ca în prealabil fiecare task să fi avut definită o etichetă

identificatoare: ASSIGN (număr, REF tabel de referinţe).

Limbaje de Programare a Robotilor Industriali

130

VIII.Bibliografie şi referinţe [1.] A Manufacturing Language - Concepts and User’s Guide. IBM Corporation,

Boca Raton, Florida [2.] AML/Entry, Version 4, User’s Guide. IBM Corporation, Boca Raton, Florida [3.] Bernorio, M. Programming an Industrial Robot, 7th ISIR Tokyo [4.] Blume C, A Structured Way of Implementating the High Level Programming

Language AL on a Mini and Microcomputer Configuration - Proceedings of 11th ISIR, Tokyo .

[5.] Brockett Robotic manipulator and the product of exponentials formula, Mathematical Theory of Networks and Systems, 120-129, 1984

[6.] Brockett, A.Stokes, F.C. Park; A geometrical formulation of the dynamical equations describing kinematic chain, IEEE International Conference on Robotics and Automatics,637-642,1993

[7.] Christian Blume, Wilfrid Jakob, Programming Languages for Industrial Robots

[8.] Coiffet , Teleoperation and Robotics, Robot Technology Hermes Publishing [9.] Djikstra, P. J. , GOTO - Statement Considered Harmful, Communications of

the ACM 11 [10.] F.C.Park, Computational aspects of the product-of-exponentials formula for

robot kinematics,IEEE Transactions on Automatic Control,1994 [11.] Guide to Help - Language . Digital Electronic Automation, Turin [12.] Ivănescu,M., Roboti industriali -Algoritmi si sisteme de conducere, Editura

Universitara, Craiova, 1994. [13.] J.Denavit, R.S. Hartenberg A kinematic notation for lower-pair mechanisms

based on matrices- Journal of Applied Mechanics,215-221, 1955. [14.] Murray R. W. and al. A Mathematical Introduction to Robotic Manipulation,

CRC Press, Boca Raton, Florida [15.] Paden B., Kinematics abd Control Manipulators, PhD Thesis, Department of

Electrical Engineering and Computers Sciences, University of California, Berkley

[16.] Paul, R.P., Robot Manipulators: Mathematics, Programming and Control, MIT [17.] Pragma A 3000 - Operating and Programming Manual. Digital Electronic

Automation, Turin [18.] RAIL Reference Manual. AUTOVISION, Automatix Inc. Burlington,

Massachusetts [19.] Ranky, P. G. Robot Modelling - Control and applications with software,

Spring-Verlag [20.] Robotica - colecţie 1990 -1998 [21.] Rohlfing, H., SIMULA. Mannheim Wien Zurich [22.] Seling, J.M., Geometrical Methods in Robotics, Spring-Verlag [23.] SIGLA - The Olivetti Sigma Robot Programming Language, 8th ISIR, Stuttgard [24.] User Guide to VAL. A Robot Programming and Control System.Unimation

Robotics Inc.Connectticut [25.] User’s Guide to VAL II - A Robot Programming and Control System.

Unimation Inc. Danbury, Connetticut [26.] Weck M., Zuhlke D, Short Reference Manual of the ROBEX - Language


Top Related