Sunteți pe pagina 1din 21

Florin Daniel ANTON

Silvia ANTON

8. SINCRONIZAREA MICRILOR ROBOILOR N TASKURI COOPERATIVE


8.1 INTRODUCERE
Integrarea roboilor industriali pentru obinerea unor sisteme multi-robot
implicate n task-uri colective reprezint tendinele actuale n industrie i sistemele
de producie. Astfel de sisteme sunt de interes din diferite motive:
Task-urile pot fi prea complexe (sau chiar imposibile) pentru ca un singur
robot s le poat realiza, sau se pot obine beneficii de performan din
utilizarea de roboi multipli;
Utilizarea mai multor roboi mai simpli poate fi mai ieftin, uoar, flexibil i
tolerant la defect dect avnd un singur robot mai puternic pentru fiecare task
separat.
Manipulatoarele robot (ct i roboii cooperativi), pot gsi, n prezent multe
arii de aplicabilitate. Multe beneficii pot fi obinute prin utilizarea lor n producia
industrial. Un exemplu tipic n asamblarea flexibil este acela n care roboii
asambleaza dou componente formnd un singur produs.
Roboii ce lucreaz ntr-o manier cooperativ pot fi de asemenea folosii n
manipularea materialelor, e.g., transportarea de obiecte a cror greutate depete
capacitatea de transport a unui singur robot. Mai mult, folosirea acestor roboi
permite mbuntirea calitii task-urilor de producie ce necesit o precizie mare.
Aceast lucrare de laborator este bazat pe doi roboi SCARA de tipul Adept
Cobra s600 i 600TT (Figura 1). Roboii sunt utilizai ntr-un task de micare
cooperativ (manipularea de obiecte). Soluia este bazat pe sincronizarea
micrilor folosind comunicaia TCP/IP pe Ethernet i comunicaia folosind liniile
de I/E.

Figura1. Un exemplu de task robot cooperativ.

Florin Daniel ANTON


Silvia ANTON

8.2 SEGMENTE VIRTUALE


Task-urile de manipulare a obiectelor necesit un control precis al forelor
interne. Modelul forelor interne asociate cu o manipulare cu prinderi multiple (mai
muli roboi) poate fi dat de modelul segmentelor virtuale. n acest model, punctele
de prindere sunt conectate de un set nchis de segmente virtuale ce nu se
intersecteaz.

Figura 2. Segmentele virtuale.

Aceeai abordare este utilizat i n aceasta lucrare de laborator, dar n cazul


nostru roboii se gsesc ntr-o relaie client-server (sau master-slave) (Figura 2). Pe
baza poziiei spaiale i a orientrii roboilor, i folosind modelele cinematice ale
roboilor, robotul server (sau master) calculeaza traiectoria pentru ambii roboi i
clientul doar executa micrile ntr-o manier sincronizat. Folosind aceast
abordare, roboii pot fi controlai fr senzorii de for deoarece micrile sunt
compuse din segmente mici de micri liniare sincronizate folosind liniile de I/E.
Poziia i orientarea bazei robotului Client (relativ la sistemul de coordonate
World al robotului server) ( X ' , Y ' , Z ' i ) i dimensiunile obiectului manipulat
sunt bine cunoscute, de asemenea poziiile de prindere sunt nvate cu precizie.
Utiliznd doar micri liniare, roboii au trei tipuri de micri cooperative
exprimate relativ la obiectul manipulat:

Translaii (n acest mod ambii roboi se mic n aceeai direcie


utiliznd aceeai vitez i realiznd un segment de micare egal);
Rotaii (aici roboii au diferite direcii de micare, viteze diferite i
realizeaz segmente de micare diferite). n acest caz roboii ncep i
ncheie micarea n acelai timp, astfel c timpul de micare este acelai
n ciuda faptului c distanele parcurse sunt diferite;
Micri compuse din cele dou tipuri de micri descrise anterior

In primul caz problema este foarte simpl:


Un segment de micare x pe axa X a robotului server implic o micare a
robotului client ce exte compus din micri pe ambele axe:

Florin Daniel ANTON


Silvia ANTON

x' = x cos( )
x
y ' = x sin( )

(1)

Iar un segment de micare y pe axa Y genereaz:

x' = y sin( )
y
y ' = y cos( )

(2)

n al doilea caz, rotaiile pot fi executate n jurul oricrui punct ce se gsete


ntre punctele de prindere (inclus n segmentul OL ) i nu numai. Notm cu x
punctul n care se va face rotaia (ales pe OL ), atunci segmentul OL este mprit n
dou segmente l x1 = dist (G S , x) i l x2 = dist ( x, GC ) unde G S i GC

sunt

punctele de prindere ale roboilor relativ la obiect: O L = dist (G S , GC ) . Dac


obiectul trebuie s fie rotit cu L n sens trigonometric aceast rotaie va fi

generat de o rotaie 4 S i o micare PxS , Py S a robotului server:

PxS = PxSi l x1 sin( L )

L Py S = Py Si + l x1 cos( L )
=
4S
4 Si
L

(3)

Unde PxSi , PYSi i 4 Si este poziia iniial a robotului server i rotaia segmentului
4.

Figura 3. Punctele iniiale i finale pentru rotaia segmentului

OL .

n triunghiurile ( x, PS , PSi ) i ( x, PC , PCi ) (Figura 3) avem relaia:

l x1
l x2
unde

x S y S
=
xC y C

(4)

Florin Daniel ANTON


Silvia ANTON

x S = PxS PxSi

y S = PyS PySi
i

(5)

xC = PxC PxCi

y C = PyC PyCi
Din (4) i (5) rezult:

l x1 PxCi + ( PxS PxSi )l x2

PxC =
l x1

L
l x1 PyCi + ( PyS PySi )l x2
P =
yC
l x1

(6
)

Dar PxC i PYC sunt exprimate n sistemul de coordonate al robotului server, pentru
a calcula coordonatele corecte se inlocuiete (5) i (4) n (1) i (2) rezultnd:

Px' = Px'Ci l x2 sin( L + )


L C
Py 'C = Py 'Ci + l x2 cos( L )

(7)

Rotaia segmentului 4 este:

4 = 4 L
C

(8)

Ci

8.3 O ALTERNATIV LA CONTROLUL DESCENTRALIZAT


Abordarea force control este de a utiliza o schem de control cu o
arhitectur descentralizat, astfel c momentele de intrare pentru fiecare robot sunt
calculate n propriul spaiu al articulaiilor i ia n considerare constrngerile de
micare dect s in cont de dinamica obiectului manipulat.
n cazul unui sistem multi-robot, fiecare robot are acces n timp real doar la
propria informaie de stare i poate oferi informaii despre forele celorlali roboi
prin aciunea lor combinat asupra obiectului. n structura de control
descentralizat, specificaiile la nivel de obiect despre task sunt transformate n
task-uri individuale pentru fiecare dintre roboii cooperativi. Buclele de control de
feedback local sunt dezvoltate la nivelul fiecrui punct de prindere. Transformarea
task-urilor i proiectarea controllerelor locale sunt realizate n concordan cu
modelul segmentelor virtuale. Structura de ansamblu a controlului descentralizat
este prezentat n Figura 4, unde F force i Fint sunt fora de intrare i forele
interne de intrare, f i i f s ,i sunt forele din punctul de prindere i i forele detectate
la punctul de prindere i .
Structura de control prezentat va funciona corect dac obiectul este rigid i
dac nu apar alunecri n zona punctelor de prindere. Alunecarea gripper-ului ntr-

Florin Daniel ANTON


Silvia ANTON

un sistem real va genera erori n calculul cinematic i inconsistene n modelul


segmentelor virtuale.
Pentru a compensa aceste efecte, un anumit nivel de comunicaie ntre roboi
este necesar pentru actualizarea strii roboilor i modificarea specificaiilor taskurilor. Rata la care aceast comunicaie este cerut este mult mai mic dect rata de
control servo. O astfel de comunicaie poate fi realizat chiar i la viteze de 10-20
Hz, folosind o linie serial.
n cazul nostru, vom utiliza comunicaia pentru a deplasa obiectele ntr-o
manier sincronizat. Aceast abordare este bazat pe cunoaterea poziiei iniiale a
roboilor, dimensiunile i poziia final dorit a obiectului manipulat.
Structura de control este bazat pe arhitectura client-server. Aici unul dintre
roboi (serverul) cunoate toate datele iniiale, de asemenea cunoate i modelul
cinematic al robotului client i calculeaza off-line calea pe care robotul client
trebuie s o urmreasc. Calea este mprit n segmente mici de micare iar
roboii sincronizeaz micrile utiliznd liniile de I/E.
Acest lucru permite rezolvarea urmtoarelor probleme: nu este necesar ca
obiectul s fie rigid (nu se folosesc senzori de for), nu apar alunecri la punctele
de prindere deoarece se folosesc segmente mici de micare sincronizate. De
asemenea, datorit faptului c toate calculele (calculul traiectoriei) sunt executate
off-line (cnd roboii nu au nceput micarea) i programele de micare sunt
aproape identice (singura diferen o reprezint valorile stocate n varibilele de tip
locaie), o sincronizare eronat datorat timpului de execuie al instruciunilor este
evitat.

Figura 4. Structura de control descentralizat.

Florin Daniel ANTON


Silvia ANTON

8.4 COMUNICAIA
8.4.1 INTERACIUNE PRIN MEDIU
Cel mai simplu i mai limitat tip de interaciune apare atunci cnd mediul
nsui devine mediu de comunicaie, i nu apare o comunicaie explicit sau
interaciune ntre roboi. Aceast modalitate de interaciune se mai numete i
cooperare fr comunicaie.
Acest tip de comunicaie se preteaz pentru roboii cu senzori de for ce
sunt conectai prin segmente virtuale utiliznd obiectele manipulate. n cazul
manipulrii cooperative datorit problemelor prezentate mai sus (alunecarea
gripper-ului, manipulare obiectelor ce nu sunt rigide) o conexiune de comunicaie
Serial/Ethernet este de asemenea necesar.
8.4.2 INTERACIUNE PRIN COMUNICAIE
Aceast form de interaciune implic o comunicaie explicit. Abordarea
utilizat este de a folosi doar comunicaia Ethernet i I/E pentru a sincroniza
micrile roboilor.
n acest caz n care un obiect este manipulat de doi roboi, primul robot
calculeaz offline un set de puncte pe care al doilea robot le urmrete, aici, nainte
ca micarea s nceap, roboii realizeaz o cumunicaie TCP/IP pentru a
trimite/recepiona setul de puncte, n etapa online micrile sunt sincronizate prin
activarea/dezactivarea unei linii de I/E pentru a semnala nceperea/terminarea
fiecrei micri.
8.4.2.1 BAZELE COMUNICAIEI PE LINII DE I/E
Uniti logice
Toate operaiile de comunicaie au ca referin o valoare ntreag numit
Numr de Unitate Logica sau LUN. LUN ofer o cale scurt pentru a identifica ce
dispozitiv sau fiier este referit de o operaie de I/E.
Verificarea execuiei instruciunilor de I/E
Spre deosebire de majoritatea instruciunilor V+, operaiile de I/E pot s nu
se execute corect n anumite cazuri. De exemplu, cnd se citete un fiier, un status
este returnat programului pentru a indica dac s-a ajuns la sfritul fiierului.
Programul trebuie s trateze acest status i s continue execuia. n mod similar, o
linie serial poate returna un status de eroare pentru o eroare de paritate ce ar trebui
s determine programul s reia secvena de transmisie a datelor.
Din acest motiv, instruciunile V+ de I/E nu opresc execuia programului
cnd apare o eroare. n schimb, starea execuiei instruciunii este salvat intern
pentru a putea fi accesat de funcia IOSTAT. De exemplu execuia funciei
IOSTAT(5) va returna o valoare indicnd starea ultimei operaii de I/E asupra LUN
5. Valorile returnate de IOSTAT se ncadreaza ntr-una din categoriile:

Florin Daniel ANTON


Silvia ANTON

Valoare
1
0
<0

Descriere
Operaia de I/E s-a efectuat cu succes
Operaia de I/E nc nu s-a terminat, acest cod
apare de obicei n cazul n care se realizeaza o
operatie de I/E fr ateptare
Operaia de I/E s-a terminat cu o eroare, codul
indic tipul de eroare ce a aparut
Tabelul 1. Valorile returnate de IOSTAT.

n cazul n care valoarea returnat de IOSTAT este mai mic dect 0, atunci
funcia $ERROR poate fi folosit pentru a genera mesajul de eroare asociat cu
majoritatea erorilor de I/E.
Pentru o bun practic este bine ca IOSTAT s fie folosit dup fiecare
operaie de I/E. n cazul n care se folosete funcia GETC nu mai este necesar
folosirea funciei IOSTAT deoarece erorile sunt returnate direct de catre GETC.
Ataarea/Detaarea Unitilor Logice
n general, un dispozitiv de I/E trebuie s fie ataat folosind instruciunea
ATTACH nainte ca acesta s poat fi accesat de program. Odat ce un dispozitiv a
fost ataat de un program, dispozitivul respectiv nu mai poate fi folosit de un alt
program. Majoritatea operaiilor de I/E vor genera erori dac dispozitivul asociat cu
LUN-ul referit nu este ataat.
Fiecare task program are propriul set de uniti logice. Astfel c mai multe
programe pot ataa acelai numr de unitate logic n acelai timp fr s apar
interferene.
Un tip de dispozitiv fizic poate fi specificat cnd unitatea logic este ataat.
Dac un tip de dispozitiv este specificat, suprascrie dispozitivul predefinit, ns
doar pentru unitatea logic ataat. Tipul de dispozitiv specificat rmne selectat
pn cnd unitatea logic este detaat.
O cerere de ataare poate specifica opional modul imediat. n mod normal, o
cerere de ataare este plasat ntr-o coad, iar programul apelant este suspendat
dac un alt program are dispozitivul ataat. Cnd dispozitivul este detaat,
urmtoarea cerere din coad va fi procesat. n modul imediat, instruciunea
ATTACH se execut imediat, i se termin cu o eroare dac dispozitivul este deja
ataat de un alt program.
n V+, cererile de ataare pot s specifice de asemenea modul no-wait. Acest
mod permite ca o cerere de ataare s fie introdus n coad fr a fora programul
s atepte ca aceasta s fie tratat. n acest caz trebuie folosit funcia IOSTAT
pentru a determina cnd s-a realizat ataarea.
Dac un task este deja ataat la o unitate logic, va primi o eroare dac va
ncerca s ataeze din nou fr ca n prealabil s detaeze un dispozitiv fr a se
ine cont de tipul de ateptare specificat.
Cnd un program a ncetat a folosi un dispozitiv, trebuie s detaeze acel
dispozitiv folosind instruciunea DETACH ceea ce va permite celorlalte programe
s proceseze operaiile de I/E cu acel dispozitiv.

Florin Daniel ANTON


Silvia ANTON

Cnd un program i ncheie execuia normal, toate dispozitivele de I/E


ataate sunt automat detaate. Dac un program se oprete anormal, majoritatea
dispozitivelor ataate rmn ataate. Dac progranul este reluat i se rencearc
ataarea acestor dispozitive, se vor genera erori datorate faptului c atarile sunt
nc n uz. Comanda monitor KILL foreaz un program s detaeze toate
dispozitivele ce au fost anterior ataate.
Citirea de la un dispozitiv de I/E
Instruciunea READ proceseaz intrrile de la toate dispozitivele.
Instruciunea de baz READ face o cerere ctre dispozitivul ataat la LUN-ul
indicat i ateapt pn cnd o nregistrare complet de date este recepionat apoi
execuia programului continu. (Lungimea ultimei nregistrri citite poate fi
obinut cu funcia IOSTAT cu al doilea argument egal cu 2.)
Funcia GETC returneaz urmtorul byte de date de la un dispozitiv de I/E
fr s atepte o nregistrare complet de date. Acest funcie este folosit de obicei
pentru citirea datelor de la linia serial sau de la terminal. De asemenea poate fi
folosit pentru a citi datele dintr-un fisier byte cu byte.
Scrierea la un dispozitiv de I/E
Instruciunea WRITE proceseaz ieirile ctre un dispozitiv de I/E.
Instruciunea WRITE face o cerere ctre dispozitivul ataat la LUN-ul indicat, i
ateapt pn cnd datele de ieire au fost scrise, apoi continu execuia
programului.
Moduri de ateptare pentru Intrri
n mod normal, V+ ateapt pn cnd datele sunt disponibile pentru o
instruciune de intrare dup care continu execuia programului. Totui
instruciunea READ i funcia GETC accept un argument opional ce specific un
mod fr ateptare. n modul fr ateptare, aceste instruciuni returneaz imediat
codul de eroare 526 (No data received) dac nu sunt date disponibile. Un program
poate funciona n bucl i poate folosi aceste operaii n mod repetat pn cnd se
realizeaz citirea datelor sau pn cnd se recepioneaz o anumit eroare.
Moduri de ateptare pentru Ieiri
n mod normal, V+ ateapt ca fiecare operaie de I/O s se termine nainte
de a trece la urmtoarea instruciune din program. n mod similar instruciunile
WRITE la liniile seriale vor atepta ca datele de ieire s fie scrise nainte de a
continua. Aceast ateptare nu se realizeaz dac formatul de control /N (no wait)
este specificat n instruciune. n schimb V+ execut imediat urmtoarea
instruciune. Funcia IOSTAT va verifica dac datele de ieire au fost scrise i va
returna o valoare de 0 dac scrierea datelor nu s-a terminat.
Dac o a doua instruciune de ieire pentru un LUN particular a fost ntlnit
inainte ca prima operaie fr ateptare s se termine, a doua instruciune va atepta
automat pn cnd se va termina prima.

Florin Daniel ANTON


Silvia ANTON

Configurarea I/E pentru liniile seriale


n plus fa de selectarea protocolului ce va fi utilizat, programul de
configurare al controller-ului permite definirea ratei de transmisie i formatul de
bii pentru fiecare linie serial. Odat ce configuraia liniei seriale a fost definit i
sistemul este alimentat, comanda FSET poate fi utilizat pentru a reconfigura
temporar liniile seriale. Urmtoarele formate de bii sunt disponibile:
Bii de date: 7 sau 8, fr a include biii de paritate
Unul sau doi biti de stop
Paritatea activat sau dezactivat
Paritate impar sau par
Urmtoarele rate de bii sunt disponibile:
110, 300, 600, 1200, 2400, 4800, 7200, 9600, 19200, 38400
Exemplu de program ce folosete linia serial
Exemplul ataeaz prima linie serial i realizeaz operaii simple WRITE i
READ:
.PROGRAM seriala()
AUTO slun ; Unitate Logica pentru comunicatia pe portul
;serial
AUTO $text
;Se face atasarea unitatii logice
ATTACH (slun, 4) "SERIAL:1"
IF IOSTAT(slun) < 0 GOTO 100
; Se scrie un mesaj pe linia seriala
WRITE (slun) "Mesaj trimis pe linia seriala 1."
IF IOSTAT(slun) < 0 GOTO 100
;Se citeste o linie de text ce trebuie sa fie incheiata
;cu CR/LF
READ (slun) $text
IF IOSTAT(slun) < 0 GOTO 100
TYPE $text
;Se afiseaza erorile
100
IF IOSTAT(slun) < 0 THEN
TYPE IOSTAT(slun), " ", $ERROR(IOSTAT(slun))
END
DETACH (slun) ;Se detaseaza unitatea logica
.END

Exerciiu
Folosind scheletul de program de mai sus i funciile (INRANGE, POS,
$MID, VAL), realizai un program ce ateapt pe linia serial o nregistrare de tipul
x,y,z, i va deplasa robotul ntr-o poziie ce se gsete la distana x, y, z, pe axele
X, Y, Z (sistem de coordonate World) fa de poziia precedent.
.PROGRAM move.serial()
AUTO slun ;Unitate Logica pentru comunicatia pe portul
;serial

Florin Daniel ANTON


Silvia ANTON

AUTO $text, $xsir, $ysir, $zsir


AUTO x, y, z, del1, del2, del3
;Se face atasarea unitatii logice
ATTACH (slun, 4) "SERIAL:1"
IF IOSTAT(slun) < 0 GOTO 100
;Se cere o inregistrare
WRITE (slun) "Introduceti coordonatele sub forma:
x,y,z,"
IF IOSTAT(slun) < 0 GOTO 100
;Se citeste o linie de text ce trebuie sa fie incheiata
cu CR/LF
READ (slun) $text
IF IOSTAT(slun) < 0 GOTO 100
IF $text == "quit" GOTO 110
del1 = POS($text,",",1)
del2 = POS($text,",",del1+1)
del3 = POS($text,",",del2+1)
$xsir = $MID($text,1,del1-1)
$ysir = $MID($text,del1+1,del2-del1-1)
$zsir = $MID($text,del2+1,del3-del2-1)
x = VAL($xsir)
y = VAL($ysir)
z = VAL($zsir)
IF NOT INRANGE(SHIFT(HERE BY x,y,z)) THEN
MOVE SHIFT(HERE BY x,y,z)
END
;Se afiseaza erorile
100
IF (IOSTAT(slun) < 0) THEN
TYPE IOSTAT(slun), " ", $ERROR(IOSTAT(slun))
END
110
DETACH (slun) ; Se detaseaza unitatea logica
.END

Florin Daniel ANTON


Silvia ANTON

8.4.2.2 MODELUL SOFTWARE ADEPTNET


Modelul Software AdeptNet descrie arhitectura software a reelei Adept.

Figura 5. Modelul SoftwareAdeptNET.

n acest model stratifcat, fiecare nivel software folosete serviciile furnizate


de nivelul inferior. Nivelul inferior este reprezentat de nivelul hardware Ethernet.
Acest nivel definete conectivitatea fizic a reelei i software-ul low-level necesar
pentru a transmite i a recepiona mesaje de-a lungul reelei.
Deasupra acestui nivel se gsete un protocol standard numit Internet
Protocol (IP). Fiecare nod al reelei are o adres IP. Adresa IP identific n mod
unic fie nodul retelei sau LAN-ul (reteaua local) sau WAN-ul. n cazul
transmisiei, nivelul IP realizeaz o conxiune cu nodul destinaie dorit. n cazul
recepionrii unui mesaj, nivelul IP recunoate adresa IP a nodului i apoi accept
sau respinge mesajul ce urmeaz a fi recepionat.
Deasupra nivelului IP se alf dou protocoale diferite: UDP i TCP. Ca
funcionalitate, aceste dou protocoale produc aceleai rezultate: ofer o interfa
consistent ctre aplicaiile ce necesit acces la reea. UDP (User Datagram
Protocol) ofer un serviciu nesigur, adic livrarea de mesaje nu este garantat.
Acest lucru implic simplitate i o vitez mbuntit la efectuarea operaiilor
deoarece nodul destinatar al reelei nu este obligat s confirme c mesajul a fost
recepionat. Din acest motiv, UDP este de obicei folosit pentru aplicaii ce nu
necesit o fiabilitate absolut, dar i pentru transmisia ctre mai multe noduri
simultan. O aplicaie ce foloseste UDP poate la rndul ei s ntreprind o
monitorizare a statusului i o verificare a erorilor.
TCP (Transmision Control Protocol) furnizeaz un serviciu de tip point-topoint de ncredere. TCP a fost proiectat pentru aplicaii ce implic transmisia de
date prin reele WAN (Wide Area Network) cum ar fi Internet-ul, unde
comunicaiile sigure sunt eseniale. AdeptNet folosete UDP/IP sau TCP/IP n
funcie de ce protocol este folosit n aplicaie.
La nivelul aplicaie, Adept ofer trei pachete: sistemul de fiiere al reelei
(NFS), funcionalitatea de transfer al fiierelor (FTP) i posibilitatea de a realiza
protocoale particulare. Protocoalele de pe cel mai nalt nivel n modelul software

Florin Daniel ANTON


Silvia ANTON

folosesc funciile asigurate de nivelurile inferioare. n cazul transiterii de date,


fiecare nivel ataeaz antetul propriu la mesajul deja existent , iar n cazul primirii
unui mesaj, fiecare nivel ndeprteaz antetul necesar i trimite ce a rmas din
mesaj ctre nivelul de mai sus.
Scrierea de Protocoale personalizate folosind AdeptTCP/IP
Suportul TCP/IP n controllerele Adept permite programelor V+ s
comunice cu alte dispozitive TCP/IP (controllere Adept sau alte echipamente) fiind
fie clieni fie servere. n modul client, controller-ul Adept solicit informaii de la
un nod particular din reea, numit server. n modul server, controller-ul Adept
rspunde cererilor de la unul sau mai multe noduri client.
Porturi i Socketi
TCP utilizeaz adresarea de porturi pentru a furniza informaia ctre aplicaii
sau programe. Un port este o adres pe 16 bii. Termenul de socket se refer la
gruparea dintre adresa IP a nodului i un numr de port utilizat de aplicaie sau
program. Conceptul de deschidere a unui socket ntr-o aplicaie faciliteaz
realizarea de sesiuni multiple pe un singur nod n reea.
De exemplu, dou task-uri V+, sau sesiuni, pe acelai controller pot
comunica simultan cu un server din reea, dei ambele task-uri se execut pe
acelai nod i au acelai IP. Totui, datorit folosirii de sockei, combinaia dintre
IP i numrul de port identific unic task-ul la care TCP trebuie s ruteze
informaia.
Stabilirea conexiunii TCP
Protocolul TCP este divizat n dou pri, partea de server i partea client.
Instruciunile programului client difer de cele ale serverului.
Serverul
Pentru a stabili o conexiune de tip server TCP, un task de tip server V+ TCP
informeaz driverul local TCP c dorete s accepte toate conexiunile pe un anumit
port. Oricrui nod client din reea i este acum permis s se conecteze la acest
server folosind adresa IP a serverului i portul specificat.
Serverului nu ii este necesar s tie IP-ul sau portul clientului ce s-a conectat,
n schimb clientul trebuie s tie IP-ul serverului. Atunci cnd un client se
conecteaza la server, clientului i este atribuit un control de monitorizare (handle)
pe server. Din acest moment, numrul controlului va fi folosit pentru a identifica
clientul. Atunci cnd clientul se deconecteaz de la server, controlul este eliberat i
este folosit de orice alt client ce dorete s se conecteze la server.
De multe ori este nevoie de un sistem client-server singular, adic un singur
client se conecteaza la un singur server, o astfel de comunicaie se numeste
comunicaie de tip peer-to-peer.

Florin Daniel ANTON


Silvia ANTON

Clientul
Pentru a stabili o conexiune, clientul trebuie s tie adresa IP i numrul
portului deschis de server. Clientul poate alege portul local pe care va realiza
comunicaia n mod arbitrar, dar n general acesta este ales de ctre driverul TCP.
Cu ajutorul acestor informaii, clientul poate ncerca o stabilire a conexiunii
transmind o cerere ctre server.
Atunci cnd serverul TCP primete aceast cerere, verific dac portul
clientului se potrivete cu cel de pe server. n momentul in care s+au terminat
verificrile, se retransmite un mesaj ctre client. Odat ce conexiunea client-server
a fost stabilit, att serverul ct i clientul pot ncepe o transmitere bidirecional de
date.
Exemplu de aplicaie de comunicatie pe TCP: Echo Server
Urmtorul program implementeaz un server echo. Mesajele primite de la
clieni sunt trimise napoi. Un astfel de program poate fi folosit pentru testarea
conexiunilor de reea.
.PROGRAM server.echo()
;-----------------------------------------------------------;Serever ECHO
;Programul poate fi oprit prin trimiterea mesajului "quit"
;-----------------------------------------------------------AUTO handle, lun, do_wait, status
AUTO $in.str, $out.str, repeat_loop
;Constante de initializare
do_wait = 0
lun = 7
;se ataseaza dispozitivul TCP, mode=4 inseamna ca se
;aloca
;urmatorul LUN disponibil
ATTACH (lun, 4) "TCP"
status = IOSTAT(lun) ; Se verifica executia
;instructiunii ATTACH
IF status < 0 THEN
TYPE "Eroare la ATTACH:", $ERROR(status)
GOTO 110
END
;Se deschide un socket pe portul 1234, ce accepta 5
;clienti, avand un buffer de 1024 de bytes
FOPEN (lun, 16) "/LOCAL_PORT 1234 /CLIENTS 5
/BUFFER_SIZE 1024"
status = IOSTAT(lun) ;Se verifica executia
;instructiunii FOPEN
IF status < 0 THEN
TYPE "Eroare la FOPEN:", $ERROR(status)
GOTO 100
END

Florin Daniel ANTON


Silvia ANTON

repeat_loop = TRUE
WHILE repeat_loop DO
WAIT
READ (lun, handle, do_wait) $in.str
status = IOSTAT(lun)
CASE status OF
VALUE 1: ;Succes - se trimite sirul de caractere
;inapoi
IF $in.str == "quit" GOTO 100
$out.str = $in.str
TYPE "S-a primit sirul: ", $out.str
WRITE (lun, handle) $out.str, /N
VALUE 100: ;S-a deschis o noua conexiune
TYPE "S-a deschis o noua conexiune. Handle=",
handle
VALUE 101: ;Conexiune inchisa
TYPE "Conexiune inchisa. Handle=", handle
FCMND (lun, 600) $INTB(handle) ; Eliberare handle
status = IOSTAT(lun) ; Se verifica executia
;instructiunii FCMND
IF status < 0 THEN
TYPE "Eroare la FCMND:", $ERROR(status)
GOTO 100
END
WAIT
VALUE -526: ;Nu s-au receptionat date
ANY ;Alte erori
TYPE "Eroare la citire: ", $ERROR(status)
GOTO 100
END
END
;Se inchid toate conexiunile, si se elibereaza unitatea
;logica
100
FCLOSE (lun)
DETACH (lun)
110
;Iesire din program
.END

Exerciiu
Realizai un program de tip Client/Server pentru schimbul de mesaje ntre
cei doi roboi SCARA. Mesajele vor fi scrise de la terminalul fiecarui robot.
ROBOTUL COBRA S600
.PROGRAM s600.com()
;-----------------------------------------------------------;Program Comunicatie TCP s600
;Programul poate fi oprit prin trimiterea mesajului "quit"
;------------------------------------------------------------

Florin Daniel ANTON


Silvia ANTON

AUTO handle, lun, wait, status


AUTO $in.str, repeat_loop
;Constante de initializare
wait = 1
lun = 7
$mesaj = ""
;se ataseaza dispozitivul TCP, mode=4 inseamna ca se
;aloca urmatorul LUN disponibil
ATTACH (lun, 4) "TCP"
status = IOSTAT(lun) ; Se verifica executia
;instructiunii ATTACH
IF status < 0 THEN
TYPE "Eroare la ATTACH:", $ERROR(status)
GOTO 110
END
;Se deschide un socket pe portul 1234, ce accepta 5
;clienti, avand un buffer de 1024 de bytes
FOPEN
(lun,
16)
"/LOCAL_PORT
1234
/CLIENTS
/BUFFER_SIZE 1024"
status = IOSTAT(lun) ;Se verifica executia
;instructiunii FOPEN
IF status < 0 THEN
TYPE "Eroare la FOPEN:", $ERROR(status)
GOTO 100
END

repeat_loop = TRUE
WHILE repeat_loop DO
WAIT
IF $mesaj == "quit" GOTO 100
IF $mesaj <> "" THEN
WRITE (lun, handle) $mesaj, /N
IF IOSTAT(lun)<0 THEN
TYPE
"Eroare
de
comunicatie:
",
$ERROR(IOSTAT(lun))
GOTO 100
END
$mesaj = ""
END
READ (lun, handle, wait) $in.str
status = IOSTAT(lun)
CASE status OF
VALUE 1: ;Succes - se afiseaza sirul de caractere
TYPE "S-a primit de la 600TT sirul: ", $in.str
VALUE 100: ;S-a deschis o noua conexiune
TYPE "S-a deschis o noua conexiune. Handle=",
handle
VALUE 101: ;Conexiune inchisa
TYPE "Conexiune inchisa. Handle=", handle

Florin Daniel ANTON


Silvia ANTON

FCMND (lun, 600) $INTB(handle) ; Eliberare handle


status = IOSTAT(lun) ; Se verifica executia
;instructiunii FCMND
IF status < 0 THEN
TYPE "Eroare la FCMND:", $ERROR(status)
GOTO 100
END
WAIT
VALUE -526: ;Nu s-au receptionat date
ANY ;Alte erori
TYPE "Eroare la citire: ", $ERROR(status)
GOTO 100
END
END
;Se inchid toate conexiunile, si se elibereaza unitatea
;logica
100
FCLOSE (lun)
DETACH (lun)
110
;Iesire din program
.END
.PROGRAM send.message()
WHILE TRUE DO
PROMPT "Mesaj de trimis pt 600TT:", $mesaj
IF $mesaj == "quit" GOTO 100
END
100
.END

ROBOTUL COBRA 600TT


.PROGRAM tt600.com()
;-----------------------------------------------------------;Program de comunicatie TCP 600TT
;Programul poate fi oprit prin trimiterea mesajului "quit"
;-----------------------------------------------------------AUTO lun, wait
AUTO $read_str
;Constante de initializare
wait = 1
$mesaj = ""
;se ataseaza dispozitivul TCP, mode=4 inseamna ca se
;aloca
;urmatorul LUN disponibil
ATTACH (lun, 4) "TCP"
status = IOSTAT(lun) ; Se verifica executia
;instructiunii ATTACH
IF status < 0 THEN
TYPE "Eroare la ATTACH:", $ERROR(status)

Florin Daniel ANTON


Silvia ANTON

GOTO 110
END
FOPEN

(lun,

0)

"s600

/REMOTE_PORT

1234

/BUFFER_SIZE

1024"
status = IOSTAT(lun) ;Se verifica executia
;instructiunii FOPEN
IF status < 0 THEN
TYPE "Eroare la FOPEN:", $ERROR(status)
GOTO 100
END
;mlun=4
;ATTACH(mlun)
;FOPEN(mlun)
repeat_loop = TRUE
WHILE repeat_loop DO
WAIT
IF $mesaj == "quit" GOTO 100
IF $mesaj <> "" THEN
WRITE (lun) $mesaj
IF IOSTAT(lun)<0 THEN
TYPE
"Eroare
de
comunicatie:
$ERROR(IOSTAT(lun))
GOTO 100
END
$mesaj = ""
END
READ (lun, wait) $read_str
IF IOSTAT(lun)<0 THEN
TYPE
"Eroare
de
comunicatie:
$ERROR(IOSTAT(lun))
GOTO 100
END
TYPE "Mesaj de la s600: ", $read_str
END

",

",

;Se inchid toate conexiunile, si se elibereaza unitatea


;logica
100
FCLOSE (lun)
DETACH (lun)
110
;Iesire din program
.END
.PROGRAM send.message()
WHILE TRUE DO
PROMPT "Mesaj de trimis la s600:", $mesaj
IF $mesaj == "quit" GOTO 100
END
100
.END

Florin Daniel ANTON


Silvia ANTON

8.5 APLICAIE DE MANIPULARE A UNUI OBIECT FOLOSIND DOI


ROBOI INDUSTRIALI CU MICRI SINCRONIZATE
Se dorete deplasarea unui obiect folosind doi roboi SCARA. n sensul
celor prezentate n preambulul teroretic. Se cunosc poziiile safe i p1 (poziia de
prindere a obiectului). Robotul Cobra s600 va creea un server TCP i va trimite
coordonatele (calculate n prealabil i stocate n vectorul $coord[], respectiv pos[])
ce vor descrie micarea, ctre robotul 600TT. Dup ce coordonatele sunt
recepionate se poate executa micarea ce este sincronizat folosind liniile de I/E.

Figura 6. Aplicaie de manipulare folosind micri robot sincronizate.

ROBOTUL COBRA S600


.PROGRAM sincro()
;-----------------------------------------------------------;Program miscare sincronizata Cobra s600
;-----------------------------------------------------------AUTO handle, lun, do_wait, status
AUTO $in.str, semnal1, semnal2
;Constante de initializare
do_wait = 0
lun = 7
semnal1 = 1009
semnal2 = 1
PARAMETER HAND.TIME = 0.5
SPEED 100 ALWAYS
RIGHTY
MOVET safe, 1
APPRO p1, 80
BREAK
MOVES p1
CLOSEI

Florin Daniel ANTON


Silvia ANTON

;se ataseaza dispozitivul TCP, mode=4 inseamna ca se


;aloca
;urmatorul LUN disponibil
ATTACH (lun, 4) "TCP"
status = IOSTAT(lun) ; Se verifica executia
;instructiunii ATTACH
IF status < 0 THEN
TYPE "Eroare la ATTACH:", $ERROR(status)
GOTO 110
END
;Se deschide un socket pe portul 1234, ce accepta 1
;client, avand un buffer de 1024 de bytes
FOPEN
(lun,
16)
"/LOCAL_PORT
1234
/CLIENTS
/BUFFER_SIZE 1024"
status = IOSTAT(lun) ;Se verifica executia
;instructiunii FOPEN
IF status < 0 THEN
TYPE "Eroare la FOPEN:", $ERROR(status)
GOTO 100
END
TYPE
"Se
asteapta
conectarea
unui
robot
trimiterea coordonatelor"
10
READ (lun, handle, do_wait) $in.str
IF IOSTAT(lun) <> 100 GOTO 10

pentru

TYPE "Se trimit coordonatele"


WRITE (lun, handle) $ENCODE(n)
IF IOSTAT(lun) < 0 GOTO 100
READ (lun, handle, do_wait) $in.str
IF (IOSTAT(lun) < 0) OR (VAL($in.str) <> n) GOTO 100
FOR i = 0 TO n
WRITE (lun, handle) $coord[i]
IF IOSTAT(lun) < 0 GOTO 100
READ (lun, handle, do_wait) $in.str
IF
(IOSTAT(lun)
<
0)
OR
($MID($in.str,1,
LEN($in.str)-2) <> $coord[i]) GOTO 100
END
FCLOSE (lun)
DETACH (lun)
DURATION 1 ALWAYS
FOR i = 0 TO n
WAIT SIG(semnal1)
semnal1 = -1*semnal1
MOVES pos[i]
SIGNAL semnal2
semnal2= -1*semnal2

Florin Daniel ANTON


Silvia ANTON

END
OPENI
DEPARTS 80
GOTO 110
;Se inchid toate conexiunile, si se elibereaza unitatea
;logica
100
FCLOSE (lun)
DETACH (lun)
110
;Iesire din program
.END

ROBOTUL COBRA 600TT


.PROGRAM sincro()
;-----------------------------------------------------------;Program miscare sincronizata Cobra 600TT
;-----------------------------------------------------------AUTO lun, do_wait, semnal1, semnal2, x, y, z, del1,
del2, del3
AUTO $read_str, $xsir, $ysir, $zsir

;Constante de initializare
do_wait = 0
semnal1 = 57
semnal2 = 1048
PARAMETER HAND.TIME = 0.5
SPEED 100 ALWAYS
LEFTY
MOVET safe, 1
APPRO p1, 80
BREAK
MOVES p1
CLOSEI

;se ataseaza dispozitivul TCP, mode=4 inseamna ca se


;aloca
;urmatorul LUN disponibil
ATTACH (lun, 4) "TCP"
status = IOSTAT(lun) ; Se verifica executia
;instructiunii ATTACH
IF status < 0 THEN
TYPE "Eroare la ATTACH:", $ERROR(status)
GOTO 110
END
FOPEN
1024"

(lun,

0)

"s600

/REMOTE_PORT

1234

/BUFFER_SIZE

Florin Daniel ANTON


Silvia ANTON

status = IOSTAT(lun) ;Se verifica executia


;instructiunii FOPEN
IF status < 0 THEN
TYPE "Eroare la FOPEN:", $ERROR(status)
GOTO 100
END
TYPE "Se primesc coordonatele"
READ (lun, do_wait) $read_str
IF IOSTAT(lun) < 0 GOTO 100
WRITE (lun) $read_str
IF IOSTAT(lun) < 0 GOTO 100
n = VAL($read_str)
FOR i = 0 TO n
READ (lun, do_wait) $coord[i]
IF IOSTAT(lun) < 0 GOTO 100
del1 = POS($coord[i],",",1)
del2 = POS($coord[i],",",del1+1)
del3 = POS($coord[i],",",del2+1)
WRITE (lun) $MID($coord[i],1,del3)
IF IOSTAT(lun) < 0 GOTO 100
$xsir = $MID($coord[i],1,del1-1)
$ysir = $MID($coord[i],del1+1,del2-del1-1)
$zsir = $MID($coord[i],del2+1,del3-del2-1)
x = VAL($xsir)
y = VAL($ysir)
z = VAL($zsir)
SET pos[i] = SHIFT(p1 BY x,y,z)
END
FCLOSE (lun)
DETACH (lun)
DURATION 1 ALWAYS
FOR i = 0 TO n
SIGNAL semnal1
semnal1 = -1*semnal1
MOVES pos[i]
WAIT SIG(semnal2)
semnal2 = -1*semnal2
END
OPENI
DEPARTS 80
GOTO 110
;Se inchid toate conexiunile, si se elibereaza unitatea
;logica
100
FCLOSE (lun)
DETACH (lun)
110
;Iesire din program
.END

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

  • Auditul Calitatii - Curs
    Auditul Calitatii - Curs
    Document140 pagini
    Auditul Calitatii - Curs
    Adrian Pugna
    0% (1)
  • Proc Ese
    Proc Ese
    Document7 pagini
    Proc Ese
    briuliana
    Încă nu există evaluări
  • Metodologie Reinginerie Prin TQM Procese
    Metodologie Reinginerie Prin TQM Procese
    Document2 pagini
    Metodologie Reinginerie Prin TQM Procese
    briuliana
    Încă nu există evaluări
  • ''Metodologii SI CPS
    ''Metodologii SI CPS
    Document16 pagini
    ''Metodologii SI CPS
    briuliana
    Încă nu există evaluări
  • Modelarea Proceselor de Afaceri
    Modelarea Proceselor de Afaceri
    Document12 pagini
    Modelarea Proceselor de Afaceri
    Marius Marius
    Încă nu există evaluări
  • Lab11 Ppsight
    Lab11 Ppsight
    Document11 pagini
    Lab11 Ppsight
    MariusAlexandruCristea
    Încă nu există evaluări
  • Baze de Date - CPS
    Baze de Date - CPS
    Document9 pagini
    Baze de Date - CPS
    Teodora Radu
    Încă nu există evaluări
  • Rob 8
    Rob 8
    Document21 pagini
    Rob 8
    briuliana
    Încă nu există evaluări
  • Laborator 7
    Laborator 7
    Document22 pagini
    Laborator 7
    irinuca12
    Încă nu există evaluări
  • Rob 5
    Rob 5
    Document15 pagini
    Rob 5
    briuliana
    Încă nu există evaluări
  • Rob 6
    Rob 6
    Document22 pagini
    Rob 6
    briuliana
    Încă nu există evaluări
  • Rob 2
    Rob 2
    Document8 pagini
    Rob 2
    briuliana
    Încă nu există evaluări
  • Rob 4
    Rob 4
    Document21 pagini
    Rob 4
    briuliana
    Încă nu există evaluări
  • Rob 3
    Rob 3
    Document18 pagini
    Rob 3
    briuliana
    Încă nu există evaluări
  • Rob 1
    Rob 1
    Document27 pagini
    Rob 1
    briuliana
    Încă nu există evaluări