FLORESCU I. Bogdan -Gabriel [607623]

FLORESCU I. Bogdan -Gabriel
34
1.3 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 tra nsform ulterior in program AS.
Am continuat prin verificarea programului scris si rezolvarea problemelor pentru a fi
sigur ca simularea este 100% reala. Pentru aceasta a m introdus pe teachpendantul virtua l
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 puter ea 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 teachpend ant printr -un
program supliment ar).
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 acti v 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 :

FLORESCU I. Bogdan -Gabriel

35

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 termi nata
de prelucrat robotul ramane in bucla si verifica la fiecare 4us cate o linie de program.

2. 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 est e programul de miscare care realizeaza toate miscarile
robotului in functie de cum este acesta chemat din programul principal
“move(#iesire12,#intrare24)” .

FLORESCU I. Bogdan -Gabriel
36
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

FLORESCU I. Bogdan -Gabriel

37
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,#intrare2
4)
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,#intrare2
3)
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,#intrare2
2)
SIGNAL -2004
SIGNAL 2009
m22i = m22i+1
m11o = m11o -1
GOTO begin END
IF m21i==0 THEN
IF flag1==0 THEN
UTIMER @p iesa21
= 0
flag1 = 1
END
CALL
move(#iesire11,#intrare2
1)
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,#intrare2
2)
SIGNAL -2005
SIGNAL 2009
m22i = m22 i+1
m12o = m12o -1
GOTO begin
END
IF m21i==0 THEN
IF flag1==0 THEN

FLORESCU I. Bogdan -Gabriel
38
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,#intrare2
3)
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 TH EN
IF flag5==0 THEN
UTIMER @piesa25
= 0
flag5 = 1
END
CALL
move(#iesire12,#intrare2
5)
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,#intrare2
1)
SIGNAL -2006
SIGNAL 2007
m21i = m21 i+1
m13o = m13o -1
GOTO begin
END
IF m22i==0 THEN
IF flag2==0 THEN UTIMER @piesa22
= 0
flag2 = 1
END
CALL
move(#iesire13,#intrare2
2)
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,#intrare2
3)
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,#intrare2
4)
SIGNAL -2006
SIGNAL 2013

FLORESCU I. Bogdan -Gabriel

39
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,#intrare2
5)
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,#evacuar
e)
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,#evacuar
e)
SIGNAL ( -2014)
m24o = m24o -1
e4 = e4+1
TYPE "Piesa M24
evacuata"
END
IF m25o>0 THEN
CALL
move(#iesire25,#evacuar
e)
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])

FLORESCU I. Bogdan -Gabriel
40
; 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 O N 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 fun ctionarea 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

FLORESCU I. Bogdan -Gabriel

41
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)
UTIME R @piesa25 = 0
END
GOTO 10
.END

Similar Posts