Tema de proiect [303194]

[anonimizat] – [anonimizat], [anonimizat].

Mașinile se clasifică în :

Mașini de forță (energetice);

Mașini de lucru.

[anonimizat].

[anonimizat].

Mașina unealtă este o mașină de lucru având rolul de a [anonimizat], [anonimizat] o [anonimizat]. [anonimizat] o parte a procesului de producție rezultând liniile tehnologice.

[anonimizat], destinatefectuării unor funcții motoare sau intelectuale ale omului. Printre diferitele clase de roboțiuna dintre cele mai importante o [anonimizat].

Un robot industrial este un echipament care nu funcționeazã [anonimizat]ãîmpreunã cu alți roboți și/[anonimizat], ajungându-se astfel lanoțiunea de celulã flexibilã de fabricație.

. Prin“deservire” se înțelege operația de introducere a obiectului de lucru în mașina / utilajul / instalația /dispozitivul în care se produce operația de prelucrare și extragerea lui după terminarea prelucrării.

Lucrarea de are următoarele obiective:

Analiza integrarii unui robot industrial antropomorf intr-o aplicatie de deservire masini unelte

Analiza layoutului optim

Determinarea realizarii productiei cerute si la ce viteza a robotului

Realizarea programarii robotului in modul ofline si testarea lui in K-roset

Definirea fluxului de productie actual

Echipamentele disponibile :

3 [anonimizat] 138s/ [anonimizat], în așa fel încât să se poată interschimba intrarea tavitei in masina cu iesirea acesteia. Acest lucru poate ajuta la definirea layoutului optim si la reducerea timpului de deplasare cu tavitele pline.

Fig.1.1 Componentele mașinii ORBIT

Fig. 1.2 Cote de gabarit ale mașinii ORBIT

5 [anonimizat] 198s / [anonimizat], să se poată interschimba intrarea tavitei in masina cu iesirea acesteia. Acest lucru poate ajuta la definirea layoutului optim si la reducerea timpului de deplasare cu tavitele pline.

Fig. [anonimizat]. [anonimizat]. 1.2 Cote de gabarit ale mașinii ORBIT

Masina de gravat cu laser avand timpul de prelucrare de 45s/ tavita

Fluxul productiei :

Lentilele sunt pregatite de catre operatori. Acestea sunt lipite de un suport metalic cu rolul de a sustine lentila in timpul prelucrarilor ulterioare. Doua cate doua lentile sunt asezate apoi in niste tavite speciale pentru a putea fi introduse in masinile de prelucrat direct.

Lentilele astfel pregatite sunt introduse in masinile de prelucrat ORBIT, aceastea prelucreaza lentilele pentru a ajunge la forma dorita si apoi tavita cu amandoua lentilele este evacuata pe partea opusa intrarii.

Lentilele prelucrate sunt mutate apoi in urmatoarea masina DUO-FLEX in vederea slefuirii si indepartarii oricaror urme posibile lasate de la sculele de prelucrat anterioare. Dupa slefuire acestea sunt evacuate pe partea opusa intrarii la fel ca la ORBIT.

Acum lentilele mai au nevoie doar de gravarea cu laser pentru a avea o identificare a lor, a lotului de productie si datei realizarii lor.

Date de intrare

Pentru realizarea acestei teme am preluat de la client urmatoarele date care sunt necesare:

Productivitatea ceruta este de 1800tavite / 24 ore

marimea suportului pentru lentile si cateva suporturi preluate ca model;

Fig Tavita / suport lentile

timpul de prelucrare cel mai scurt pentru fiecare masina in parte: Orbit: 2,3 minute, duo flex 3,3 minute , masina laser 45 s;

ambele masinii, ORBIT si DUO-FLEX, pot fi programate pentru a interschimba intrarea pieselor cu iesirea;

Fig. Exemplificare intrare/iesire masina ORBIT

spatiul de lucru in care se doreste a fi asamblata celula flexibila de fabricatie

Fig. Layout fabrica actual

Pentru acest proiect se modifica hala, eliminand ziduri interioare, pentru a crea spatiul de lucru pentru celula robotizata conform marcajului galben din fig de mai sus. Rezulta un spatiu cu o lungime de 18m si o latime de 4,7m intr-un capat si 8,3m in celalat capat.

CAD pentru masinile de prelucrat lentile DUO-FLEX si ORBIT

Proiectarea celulei si stabilirea layoutului

Pentru realizarea obiectivului avem nevoie de un layout care sa ne ajute in scurtarea miscarilor robotului si a avea un traseu cat mai scurt in timpul unui ciclu complet.

Etape parcurse :

Stabilirea tipului de robot si a celulei initiale: robot brat articulat cu translatie la baza, a saptea axă;

Stabilirea layoutului initial in 2D;

Fig. Layout initial

Prima idee pentru layout a fost aceea de a pune o sina comuna pentru doi roboti care sa lucreze sincronizat pentru realizarea productivitatii.

De la aceasta idee s-a putut continua si imbunatatii layoutul pana la o forma acceptabila pentru inceperea simularii.

Imbunatatirea layoutului pana la o forma utila unei simulari

Fig. Layout initial modificat

La o analiza mai amanuntita s-a constatat ca nu se putea determina daca doi roboti pe aceeasi sina cresc productivitatea sau se incura pe aceeasi banda. Pentru ca din punct de vedere financiar un singur robot este mai ieftin ca doi, s-a decis ca este nevoie de o simulare pentru a determina daca doar un singur robot poate face fata productivitatii masinilor de prelucrat si anume 1800 de tavite/ 24ore .

Fig. Imbunatatire layout 2d

Fig. Imbunatatire layout 2d, micsorare axa de translatie robot

Layoutul a fost imbunatatit prin adaugarea laserului de gravat si mutatea uneia dintre masinile DUO-FLEX.Prin aceste modificare s-a putut reduce lungimea axei de translatie necesara pentru robot la 14500mm, avand ca rezultat un cost mai scazut pentru realizarea aplicatiei.

Inceputul simulării offline a aplicatiei si continuarea imbunatatirii layoutului in mediu 3D, direct in programul de simulare K-roset

Dupa stabilirea unui layout cat de cat acceptabil s-a trecut la mediu de lucru 3D in K-roset si inceputul simularii offline. Pe masura ce programul robotului a avansat, s-a putut determina si traseul si layoutul robotului optim pentru a se putea atinge productivitatea ceruta.

Versiunea 1 :

Fig. Varianta 1 in K-roset

Descriere poza :

3 masini ORBIT, masrcate cu rosu

5 masini DUO-FLEX marcate cu alb

4 conveioare gravitationale Robital ( 3 de intrare, 1 iesire catre masina de gravat)

Fig. Conveior gravitational cu role

Conveiorul gravitational Robital este construit din profile Maytec de aluminiu profilate, capace din plastic pentru profilele maytec, role rollven tip 28a, baza de plastic pentru preluarea denivelarilor de la nivelul solului, piese de legatura proiectate special pentru preluarea inclinatiei conveiorului.

Lungime conveior = 1500mm, h intrare= 1200, h iesire = 1100

Fig. Vedere laterala conveior gravitational

Fig. Vedere cale de rulare conveior gravitational

Robot RS005L

Fig. Specificatii robot RS005 L

Axa de translatie robot ( cu negru dimensiunea sinei de translatie, cu alb dimensiunea de gabarit)

S-a inceput prin a introduce cel mai mic robot care ar putea ridica tavita cu cele două lentile in greutate de 1kg cât si a efectorului. Din acest motiv s-a inceput testarea cu robotul RS 005L cu masa portanta de 5kg, montat pe un stativ, care, la rândul său a fost montat pe axa de translatie la baza. Acest lucru permite ridicarea robotului la 1m deasupra axei de translatie si atingerea punctelor de preluare necesare. S-a continuat în același timp și optimizarea layoutului.

Fig. Axa de translatie robot F972000

Axa de translatie la baza este modulara si este produsa de Tiesse Robot. Masa portanta maxima este de 600 kg, acceleratia maxima este de 2m/s2.

Versiunea 2 :

Fig. Versiunea 2 K-roset

S-a putut constata ca pentru aceasta aplicatie desi RS005L poate face fata din punct de vedere al masei portante, el nu poate atinge cu usurinta pozitiile de preluare de pe masini, chiar si cu ridicarea robotului pe un suport de 1m, necesitand inlocuirea acestuia cu robotul RS006L, avand masa portanta de . In acelasi timp s-a modificat pozitia conveioarelor de intrare pentru a facilita traseul robotului in aplicatie.

Fig. Specificatii robot RS006L

Versiunea 3 :

Fig. Versiunea 3 K-roset

S-a continuat cu optimizarea layoutului prin mutarea celor trei conveioare de intrare cat mai aproape de masinile ORBIT pentru scurtarea drumului robotului. In acelasi timp a fost calculată si pozitia sinei in partea stanga, astfel încat sa permita robotului sa atinga toate punctele nesesare de pe masini.

Versiunea 4 :

Fig. Versiunea 4 K-roset

Studiul a fost continuat prin a muta din nou conveioarele in raport cu masinile Orbit din acelasi principiu. Conveioarele fiind acum pozitionate intre 2 masini Orbit, robotul poate prelua tavita de pe conveior si sa o depuna pe oricare din cele doua masini fara a se deplasa pe axa 7.

Versiunea 5 :

Fig. Versiunea 5 K-roset

Au fost apoi adaugate mici conveioare gravitationale pentru asigurarea unui buffer de 1 tavita pe intrarile si iesirile din masini.

Versiunea 6 :

Fig. Versiunea 6 K-roset

A fost testată atingerea tuturor punctelor de pe masini cu ajutorul afisarii spatiului de lucru in k-roset . In acelasi timp s-a continuat si optimizarea layoutului prin suprapunerea celor treiconveioare de intrare pentru a avea mai mult spatiu si micsorarea traseului robotului pe axa 7.

Versiunea 7 :

Fig. Versiunea 7 K-roset

A fost stabilită lungimea minima a sinei, 11268mm, prin verificarea atingerii punctelor de pe capetele acesteia. Deoarece axa de transaltie este modulara din module cu lungimea de 800mm plus capetele incative ale acesteia ne rezulta marimea minima a echipamentului de 11900mm .

In acelasi timp pentru optimizare au fost stabilite intrarile si iesirile din masini pentru a micsora si mai mult traseul de parcurs al robotului pe axa 7. Intrarile in masini au fost marcate cu verde, reprezentand conveiorul pentru buffer de 1 tavita. Iesirile au fost marcate cu maro, de asemenea avand conveior de buffer de 1 tavita. In acest fel robotul din pozitia afisata in poza poate ajunge sa preia tavite de pe cele 3 conveioare si sa le depuna pe cele doua masini orbit apropiate fara a efectua miscare de translatie la baza. Acest lucru mareste viteza de manipulare a pieselor pentru incarcarea pieselor in cele doua masini si scade uzura axei de translatie.

Versiunea 8 :

Fig. Versiunea 8 K-roset

De la aceasta versiune a sistemului s-a inceput dezvoltarea si testarea programului pentru simulare .

Versiunea 9 :

Fig. Versiunea 9 K-roset

Au fost introduse tavite pentru a simula miscarea lor in program.

Versiunea 10 :

Fig. Versiunea 10 K-roset

S-a inceput optimizarea traseului robotului pentru ca in timpul miscarii sa nu loveasca masinile.

Versiunea 11 :

Fig. Versiunea 11 K-roset

S-au salvat punctele pentru preluare si depunere tavite.

Versiunea 12 :

Fig. Versiunea 12 K-roset

Au fost adaugate notatii pentru masini, pentru a putea identifica si in program fiecare masina in parte

Versiunea 13 :

Fig. Versiunea 13 K-roset

A fost efectuata o prima simulare in care s-a putut observa ca traiectoriile nu sunt optime si se pierde mult timp in timpul miscarii pe axa 7.

Versiunea 14 :

Fig. Versiunea 14 K-roset

In versiunea finala punctele de preluare si de depunere au fost salvate in asa fel incat robotul sa efectueze cat mai putine deplasari pe axa 7. Pentru acest lucru au fost alese 5 puncte pe axa 7 de unde robotul poate ajunge la mai multe masini odata. De exemplu din punctul 1 pe axa 7, robotul poate ajunge si la masina A si la masina 3, din punctul 3 robotul poate ajunge la cele 3 conveioare si cele 4 masini 1,2,B,C.

Pentru a verifica daca pe traiectoria robotului loveste vreo masina, a fost folosit plug-in-ul colision check cu distanta coliziune setata la 10mm. In acest fel s-a putut observa foarte usor daca robotul, pe parcursul celor 23 de manipulari ale tavitelor sau a miscarilor fara tavita, se apropie la mai putin de 10mm de alte obiecte.

A fost observat in timpul testarilor ca robotul pierde timp daca intr-o miscare are puncte intermediare pentru a putea, de exemplu, sa efectueze o miscare de la iesirea masinii 1 la intrarea masinii D, care este pe partea opusa. Intr-un astfel de punct robotul incetineste pentru a atinge punctul si apoi accelereaza pentru a ajunge la urmatorul punct. Pentru a optimiza aceste miscari a fost folosita comanda de setare a acuratetii prin care robotul confirma ca atinge punctul respectiv chiar daca se afla la o anumita distanta de acesta. Am folosit comanda „ACCURACY 100 ALWAYS” prin care robotul confirma ca atinge toate punctele din timpul miscarii la o distanta de 100mm. S-a mai folosit si activarea functiei „continous path „ cu ajutorul careia robotul se misca fluid atunci cand are de atins mai multe puncte, fara opriri. Atunci cand robotul trebuie sa preia sau sa depuna tavita, a fost folosita comanda „ACCURACY 1 FINE” care seteaza acuratetea robotului doar pentru urmatoarea miscare, cea de preluare, la 1mm.

Tot pentru optimizarea traseului a fost realizata o prioritizare a miscarilor intre masini. Astfel robotul verifica prima data daca masina 1, 2,3 (in aceasta ordine) poate primi tavita. Daca masinile respective pot fi alimentate acestea sunt alimentate tot in ordinea 1,2,3. Apoi sunt verificate iesirile din masinile 1,2,3. Daca exista piese prelucrate, acestea sunt luate din masinile respective si duse catre cea mai apropiata masina libera care efectueaza a cea de-a doua prelucrare. Pentru acest lucru a fost efectuata urmatoarea prioritizare:

Cand exista piesa prelucrata in masina 1, se virifica in urmatoarea ordine masinile : E,D,C,B,A

Cand exista piesa prelucrata in masina 2, se verifica in urmatoarea ordine masinile : B,A,C,D,E

Cand exista piesa prelucrata in masina 3, se verifica in urmatoarea ordine masinile: A,B,C,D,E

In acest fel sunt evitate traseele mai lungi precum 1-A sau 2-E si rezulta o economie de timp prin reducerea distantei de deplasare a robotului.

Concluzie asupra simularii

Au fost in total 21 de versiuni, in unele dintre ele nu se pot observa diferente in modelul 3D pentru ca diferentele constau in modificarile aduse programului de simulare.

Astfel s-a ajuns la varianta finala in care am putut face simularea completa si am avut un rezultat pozitiv in ceea ce priveste productivitatea :

Fig. Layout final

In versiunea finala au fost adaugate pentru fiecare masina conveioare suplimentare pentru a fi folosite pe post de buffer, masinile au fost pozitionate optim si intrarile lor exemplificate pentru a fi executat un traseu cat mai scurt. In poza conveioarele verzi reprezinta partea de intrare in masina, iar celelalte partea de iesire.

De asemenea in aceasta versiune dupa cum se poate vedea s-a determinat marimea minima necesara pentru cursa translatiei la baza ( banda neagra) si partea transparenta reprezinta dimensiunea de gabarit a echipamentului care arata asa :

Fig. Dimensiuni axa de translatie la baza

Fig. Prinderea robotului pe axa de translatie

Fig. Vedere laterala axa de translatie

Fig. Vedere frontala axa de translatie

Acest echipament este produs de catre Tiesse Robot, special conceput pentru a fi compatibil cu robotii kawasaki.

De asemenea in simulare am numerotat masinile, s-a constatat din calcule ca productivitatea ce mai mica o au cele 3 masini orbit fata de cele 5 duoflex, asa ca in program a fost prioritizata alimentarea celor trei masini pentru a nu ajunge in situatia ca acele masini sa ramana in repaus din cauza robotului.

Fig. Vedere k-roset, teach pendant virtual

Pentru verificarea programului de simulare a fost realizata o interfata pe teach pendantul virtual din K-roset. Aceasta interfata cuprinde :

Cu rosu intrarile si iesirile din masinile ORBIT 1,2,3 asa cum sunt ele marcate in program, m11i (intrare masina 1 ), m11o (iesire/output masina 1), etc

Intrarile si iesirile din cele 5 masini DUO-FLEX , m21i/m21o (intrare/iesire masina A), etc.

Numarul de piese evacuate catre laser de la fiecare masina DUO-FLEX in parte, e1,e2,e3,e4,e5

Numarul total de piese intrate in sistem „i”

Buffer pentru masinile ORBIT (a fost folosit pentru test)

Timpul de lucru al masinilor ORBIT SI DUO-FLEX t1,t2

Ecran pe care am afisat timpul de simulare si un ceas cu timpul real

Simularea in K-roset nu ruleaza la viteza de 1 la 1 fata de timpul real, ci ruleaza in functie de puterea procesorului si de resursele disponibile pe calculatorul unde ruleaza simularea. Acest lucru inseamna ca pe un calculator performant o simulare de 2 ore poate dura cateva minute, sau pe un calculator slab mai mult de 2 ore. Chiar si aplicatiile deschise pe langa k-roset poate influenta viteza de simulare. De aceea am adaugat acest ecran galben cu timpul de simulare si cu timpul real. K-roset la sfarsitul simularii calculeaza timpul real de simulare si poate afisa timpul real exact pentru fiecare miscare efectuata in parte.

Fig. Teach pendant virtual

Crearea programului pentru simulare

Pentru realizarea simularii este nevoie a fi creat programul pentru robot. Dar in acest caz a fost nevoie ca in interiorul programului robotului sa se introduca si functionarea masinilor pentru a putea simula corect. Asadar s-a inceput prin a fi creata o schita a programului dupa care sa ma ghidez si care sa o transform ulterior in program AS.

Am continuat prin verificarea programului scris si rezolvarea problemelor pentru a fi sigur ca simularea este 100% reala. Pentru aceasta am introdus pe teachpendantul virtual o serie de variabile prin care am putut sa verific productivitatea si mai ales functionarea corecta a programului. Am adaugat un cronometru prin care sa pot vedea timpul de simulare ( timpul de simulare nu corespunde cu timpul real, el depinzand de puterea de procesare a calculatorului si de resursele disponibile, iar la finalul simularii este calculat timpul de simulare real pe baza timpului de procesare, dar pentru a putea vedea in timp real cronometru a fost nevoie de aceasta solutie cu afisarea lui pe teachpendant printr-un program suplimentar).

Pozitiile de preluare ale robotului au fost si ele optimizate si realizat un program corezpunzator pentru a micsora timpul de deplasare intre masini. Au fost folosite doar 5 pozitii pe axa 7, cea care ar putea incetinii robotul. De exemplu pentru preluarea de pe conveioarele de intrare, si punerea pe piesei pe primele 2 masini s-a folosit o singura pozitie pe axa 7. Asa ca cand este executata o preluare de pe conveior si depunere pe masina robotul nu se misca si pe axa 7 ci doar pe cele 6 axe principale ale lui, ceea ce mareste timpul de deplasare considerabil.

Principiul de functionare al programului

Programul functioneaza porneste prin resetarea tuturor celor 34 de variabile folosite si a celor 30 de semnale interne. Apoi programul intra intr-o bucla continua in care verifica mereu semnale (virtuale) atribuite fiecarei masini. Cand un semnal este activ robotul porneste programul de miscare si realizeaza miscarea corespunzatoare semnalelor primite. De exemplu daca semnalul de la intrare masina orbit 1 este activ, robotul pleaca si preia piesa de pe conveiorul de intrare si se duce sa depuna pe masina ORBIT 1.

Pentru intelegerea usoara a principiului de functionarea a programului am realizat schema bloc a acestuia :

Fig. Schema logică a programului de simulare

Dupa pornirea programului pe robot, acesta ramane intr-o bucla continua unde verifica mereu semnale de la masinile deservite (bucla este verificata odata la cateva fractiuni de secunda) . Cand una din masini este libera, robotul primeste un semnal si executa programul de miscare necesar. Daca nici o masina nu este libera sau are piesa terminata de prelucrat robotul ramane in bucla si verifica la fiecare 4us cate o linie de program.

Programul final pentru simulare :

Programul utilizat pentru simulare este realizat din 3 programe care sunt aratate mai jos.

Programul principal este programul in care robotul ramane in bucla si verifica semnalele de la masini.

Programul autostart este un program care se executa automat si functioneaza in paralel cu programul principal. Acesta functioneaza pe acelasi principiiu de bucla, doar ca acum acesta simuleaza timpii de prelucrare pentru fiecare masina in parte . Acest tip de program “autostart” nu poate realiza miscari pentru robot ci doar calcule si temoporizari pentru a ajuta programul principal.

Urmatorul program este programul de miscare care realizeaza toate miscarile robotului in functie de cum este acesta chemat din programul principal “move(#iesire12,#intrare24)” .

Programul principal :

.PROGRAM principal() #17

PCABORT 1:

PCABORT 2:

TWAIT 0.1

PCEXECUTE 1: autostart.pc

TWAIT 0.1

PCEXECUTE 2: testare3

; SPEED 70 ALWAYS

ACCEL 50 ALWAYS

DECEL 50 ALWAYS

ACCURACY 100 ALWAYS

SIGNAL -2001,-2002,-2003,-2004,-2005,-2006,-2007,-2008,-2009,-2010,-2011,-2012

SIGNAL -2013,-2014,-2015,-2016,2030,2031,2032,-2090,-2091,-2092,-2093,-2094,-2095,-2096,-2097

SIGNAL -9,10

i = 0

m11i = 0

m12i = 0

m13i = 0

m21i = 0

m22i = 0

m23i = 0

m24i = 0

m25i = 0

m11o = 0

m12o = 0

m13o = 0

m21o = 0

m22o = 0

m23o = 0

m24o = 0

m25o = 0

e1 = 0

e2 = 0

e3 = 0

e4 = 0

e5 = 0

UTIMER @piesa11 = 0

UTIMER @piesa12 = 0

UTIMER @piesa13 = 0

UTIMER @piesa21 = 0

UTIMER @piesa22 = 0

UTIMER @piesa23 = 0

UTIMER @piesa24 = 0

UTIMER @piesa25 = 0

flag1 = 0

flag2 = 0

flag3 = 0

flag4 = 0

flag5 = 0

10;HOME

CALL intrare11

i = i+1

UTIMER @piesa11 = 0

; DLYSIG 2004,t1

m11i = m11i+1

TYPE "Prima piesa M11 in lucru."

CALL intrare12

i = i+1

; DLYSIG -2002,t1

; DLYSIG 2005,t1

; DLYSIG 2031,t1

m12i = m12i+1

UTIMER @piesa12 = 0

TYPE "Prima piesa M12 in lucru."

CALL intrare13

i = i+1

; DLYSIG -2003,t1

; DLYSIG 2005,t1

; DLYSIG 2032,t1

m13i = m13i+1

UTIMER @piesa13 = 0

TYPE "Prima piesa M13 in lucru."

; END

load:

; IF SIG(-2001) THEN

; CALL intrare11

; m11i= m11i+1

; END

; IF SIG(-2002) THEN

; CALL intrare12

; m12i=m12i+1

; END

; IF SIG(-2003) THEN

; CALL intrare13

; m13i=m13i+1

; END

begin:

SIGNAL 1

IF (m11i<b1) THEN

CALL intrare11

i = i+1

SIGNAL 2001

m11i = m11i+1

END

BREAK

IF (m12i<b1) THEN

CALL intrare12

i = i+1

SIGNAL 2002

m12i = m12i+1

GOTO begin

END

IF (m13i<b1) THEN

CALL intrare13

i = i+1

SIGNAL 2003

m13i = m13i+1

GOTO begin

END

BREAK

IF (m11o>0 AND (m21i==0 OR m22i==0 OR m23i==0 OR m24i==0 OR m25i==0)) THEN

IF m25i==0 THEN

IF flag5==0 THEN

UTIMER @piesa25 = 0

flag5 = 1

END

CALL move1125

BREAK

SIGNAL -2004

SIGNAL 2015

m25i = m25i+1

m11o = m11o-1

TYPE UTIMER(@piesa11)

GOTO begin

END

IF m24i==0 THEN

IF flag4==0 THEN

UTIMER @piesa24 = 0

flag4 = 1

END

CALL move(#iesire11,#intrare24)

SIGNAL -2004

SIGNAL 2013

m24i = m24i+1

m11o = m11o-1

GOTO begin

END

IF m23i==0 THEN

IF flag3==0 THEN

UTIMER @piesa23 = 0

flag3 = 1

END

CALL move(#iesire11,#intrare23)

SIGNAL -2004

SIGNAL 2011

m23i = m23i+1

m11o = m11o-1

GOTO begin

END

IF m22i==0 THEN

IF flag2==0 THEN

UTIMER @piesa22 = 0

flag2 = 1

END

CALL move(#iesire11,#intrare22)

SIGNAL -2004

SIGNAL 2009

m22i = m22i+1

m11o = m11o-1

GOTO begin

END

IF m21i==0 THEN

IF flag1==0 THEN

UTIMER @piesa21 = 0

flag1 = 1

END

CALL move(#iesire11,#intrare21)

SIGNAL -2004

SIGNAL 2007

m21i = m21i+1

m11o = m11o-1

GOTO begin

END

END

IF (m12o>0 AND (m21i==0 OR m22i==0 OR m23i==0 OR m24i==0 OR m25i==0)) THEN

IF m22i==0 THEN

IF flag2==0 THEN

UTIMER @piesa22 = 0

flag2 = 1

END

CALL move(#iesire12,#intrare22)

SIGNAL -2005

SIGNAL 2009

m22i = m22i+1

m12o = m12o-1

GOTO begin

END

IF m21i==0 THEN

IF flag1==0 THEN

UTIMER @piesa21 = 0

flag1 = 1

END

CALL move1221

SIGNAL -2005

SIGNAL 2007

m21i = m21i+1

m12o = m12o-1

GOTO begin

END

IF m23i==0 THEN

IF flag3==0 THEN

UTIMER @piesa23 = 0

flag3 = 1

END

CALL move(#iesire12,#intrare23)

SIGNAL -2005

SIGNAL 2011

m23i = m23i+1

m12o = m12o-1

GOTO begin

END

IF m24i==0 THEN

IF flag4==0 THEN

UTIMER @piesa24 = 0

flag4 = 1

END

CALL move(#iesire12,#intrare24)

SIGNAL -2005

SIGNAL 2013

m24i = m24i+1

m12o = m12o-1

GOTO begin

END

IF m25i==0 THEN

IF flag5==0 THEN

UTIMER @piesa25 = 0

flag5 = 1

END

CALL move(#iesire12,#intrare25)

SIGNAL -2005

SIGNAL 2015

m25i = m25i+1

m12o = m12o-1

GOTO begin

END

END

IF (m13o>0 AND (m21i==0 OR m22i==0 OR m23i==0 OR m24i==0 OR m25i==0)) THEN

IF m21i==0 THEN

IF flag1==0 THEN

UTIMER @piesa21 = 0

flag1 = 1

END

CALL move(#iesire13,#intrare21)

SIGNAL -2006

SIGNAL 2007

m21i = m21i+1

m13o = m13o-1

GOTO begin

END

IF m22i==0 THEN

IF flag2==0 THEN

UTIMER @piesa22 = 0

flag2 = 1

END

CALL move(#iesire13,#intrare22)

SIGNAL -2006

SIGNAL 2009

m22i = m22i+1

m13o = m13o-1

GOTO begin

END

IF m23i==0 THEN

IF flag3==0 THEN

UTIMER @piesa23 = 0

flag3 = 1

END

CALL move(#iesire13,#intrare23)

SIGNAL -2006

SIGNAL 2011

m23i = m23i+1

m13o = m13o-1

GOTO begin

END

IF m24i==0 THEN

IF flag4==0 THEN

UTIMER @piesa24 = 0

flag4 = 1

END

CALL move(#iesire13,#intrare24)

SIGNAL -2006

SIGNAL 2013

m24i = m24i+1

m13o = m13o-1

GOTO begin

END

IF m25i==0 THEN

IF flag5==0 THEN

UTIMER @piesa25 = 0

flag5 = 1

END

CALL move(#iesire13,#intrare25)

SIGNAL -2006

SIGNAL 2015

m25i = m25i+1

m13o = m13o-1

GOTO begin

END

END

IF (m21o>0 OR m22o>0 OR m23o>0 OR m24o>0 OR m25o>0) THEN

IF m21o>0 THEN

CALL move(#iesire21,#evacuare)

SIGNAL (-2008)

m21o = m21o-1

e1 = e1+1

TYPE "Piesa M21 evacuata"

END

IF m22o>0 THEN

CALL move22e

SIGNAL (-2010)

m22o = m22o-1

e2 = e2+1

TYPE "Piesa M22 evacuata"

END

IF m23o>0 THEN

CALL move23e

SIGNAL (-2012)

m23o = m23o-1

e3 = e3+1

TYPE "Piesa M23 evacuata"

END

IF m24o>0 THEN

CALL move(#iesire24,#evacuare)

SIGNAL (-2014)

m24o = m24o-1

e4 = e4+1

TYPE "Piesa M24 evacuata"

END

IF m25o>0 THEN

CALL move(#iesire25,#evacuare)

SIGNAL (-2016)

m25o = m25o-1

e5 = e5+1

TYPE UTIMER(@piesa25)

TYPE "Piesa M25 evacuata"

END

END

GOTO begin

30

.END

Programul de miscare parametrizat:

.

PROGRAM move(.#prel,.#dep) #1109

DECOMPOSE a[1] = #HERE

DECOMPOSE b[1] = .#prel

DECOMPOSE d[1] = .#dep

DECOMPOSE h[1] = #h ;home

ACCURACY 100 ALWAYS

; point #

xtrail = b[7]-a[7]

drive1 = b[1]-a[1]

; DRIVE 7,xtrail

IF (ABS(a[1])>=140 OR ABS(b[1])>=140) THEN

CP ON

JMOVE #PPOINT(a[1],h[2],h[3],h[4],h[5],h[6],a[7])

JMOVE #PPOINT(h[1],h[2],h[3],h[4],h[5],h[6],b[7])

; JMOVE #PPOINT(b[1],h[2],h[3],h[4],h[5],h[6],b[7])

JAPPRO .#prel,500

CP OFF

ELSE

JAPPRO .#prel,500

END

SPEED 20

ACCURACY 1 FINE

JMOVE .#prel

BREAK

SIGNAL 9,-10

TWAIT 0.6

JDEPART 500

;JMOVE #PPOINT(h[1],h[2],h[3],h[4],h[5],h[6],b[7])

DECOMPOSE a[1] = #HERE

; DECOMPOSE b[1] = .#dep

xtrail = d[7]-a[7]

; DRIVE 7,xtrail

drive1 = d[1]-a[1]

IF (ABS(a[1])>=140 OR ABS(d[1])>=140) THEN

CP ON

JMOVE #PPOINT(a[1],h[2],h[3],h[4],h[5],h[6],a[7])

JMOVE #PPOINT(h[1],h[2],h[3],h[4],h[5],h[6],d[7])

JMOVE #PPOINT(d[1],h[2],h[3],h[4],h[5],h[6],d[7])

JAPPRO .#dep,500

TYPE ABS(d[1]),ABS(b[1])

CP OFF

ELSE

JAPPRO .#dep,500

END

; JAPPRO .#dep,100

SPEED 20

ACCURACY 1 FINE

JMOVE .#dep

BREAK

SIGNAL -9,10

TWAIT 0.6

; SIGNAL 2001

JDEPART 500

;JMOVE #PPOINT(h[1],h[2],h[3],h[4],h[5],h[6],b[7])

RETURN

.END

Programul autostart care simuleaza functionarea masinilor

.PROGRAM autostart.pc() #0

UTIMER @piesa11 = 0

10 IF (UTIMER(@piesa11)>t1 AND (m11i>0)) THEN

DLYSIG (2004),t1

SIGNAL -2001

m11i = m11i-1

TWAIT 0.01

m11o = m11o+1

TYPE "Piesa M11 gata"

TYPE UTIMER(@piesa11)

UTIMER @piesa11 = 0

END

IF (UTIMER(@piesa12)>t1 AND (m12i>0)) THEN

DLYSIG (2005),t1

SIGNAL -2002

m12i = m12i-1

TWAIT 0.01

m12o = m12o+1

TYPE "Piesa M12 gata"

TYPE UTIMER(@piesa12)

UTIMER @piesa12 = 0

END

IF (UTIMER(@piesa13)>t1 AND (m13i>0)) THEN

DLYSIG 2006,t1

SIGNAL -2003

m13i = m13i-1

TWAIT 0.01

m13o = m13o+1

TYPE "Piesa M13 gata"

TYPE UTIMER(@piesa13)

UTIMER @piesa13 = 0

END

IF (UTIMER(@piesa21)>t2 AND (m21i>0)) THEN

; DLYSIG 2008,t2

SIGNAL -2007

;PULSE 2093,t2

m21i = m21i-1

TWAIT 0.01

m21o = m21o+1

TYPE "Piesa M21 gata"

TYPE UTIMER(@piesa21)

UTIMER @piesa21 = 0

END

IF (UTIMER(@piesa22)>t2 AND (m22i>0)) THEN

SIGNAL -2009

m22i = m22i-1

TWAIT 0.01

m22o = m22o+1

TYPE "Piesa M22 gata"

TYPE UTIMER(@piesa22)

UTIMER @piesa22 = 0

END

IF (UTIMER(@piesa23)>t2 AND (m23i>0)) THEN

SIGNAL -2011

m23i = m23i-1

TWAIT 0.01

m23o = m23o+1

TYPE "Piesa M23 gata"

TYPE UTIMER(@piesa23)

UTIMER @piesa23 = 0

END

IF (UTIMER(@piesa24)>t2 AND (m24i>0)) THEN

SIGNAL -2013

m24i = m24i-1

TWAIT 0.01

m24o = m24o+1

TYPE "Piesa M24 gata"

TYPE UTIMER(@piesa24)

UTIMER @piesa24 = 0

END

IF (UTIMER(@piesa25)>t2 AND (m25i>0)) THEN

SIGNAL -2015

m25i = m25i-1

TYPE UTIMER(@piesa25)

TWAIT 0.01

m25o = m25o+1

TYPE "Piesa M25 gata"

TYPE UTIMER(@piesa25)

UTIMER @piesa25 = 0

END

GOTO 10

.END

Rezultate Simulare :

Prima data s-a simulat robotul la viteza de 50% si am avut urmatoarele rezultate :

Fig. Viteza 50%, timp scurs 1803 secunde

Fig. Viteza 50%, timp scurs 3603 secunde

Fig. Viteza 50%, timp scurs 5401 secunde

Fig. Viteza 50%, timp scurs 7200 secunde

Se observa ca dupa 2 ore de simulare au fost evacuate 122 de piese, dar au ramas acumulate pe traseu alte 32 de piese.

Pentru ca nu s-a atins obiectivul la aceasta viteza, a mai fost facuta o simulare la viteza de 60%:

Fig. Viteza 60%, timp scurs 1802 secunde

Fig. Viteza 60%, timp scurs 3697 secunde

Fig. Viteza 60%, timp scurs 7208 secunde

Se poate observa ca au fost evacuate dupa 2 ore spre laser 151 de piese si nu s-a mai produs acumulare de piese pe traseu. Pentru asigurarea productivitatii era nevoie de o medie de 75 de piese/ora asa ca se poate spune ca productivitatea ceruta a sistemului este atinsa la o viteza de 60%.

Programul folosit in simularea ofline poate fi folosit si la aplicatia reala prin modificarea semnalelor virtuale cu semnale reale de la senzorii amplasati in punctele de preluare si depunere a tavitelor.

Bibliografie

Home

https://robotics.kawasaki.com/

http://www.rollven.com

Startseite

Similar Posts