' ** FMSS.BAS VERS 2.3 17june2003 by: NICK K. VAN VLIET
' ** FLEXIBLE MANUFACTURING SYSTEM
'
' ** THE TIME OF EACH SECTION IS 1 INC OR DISTANCE = INC * SPEED =40*.5=20m.
' ** TOTAL DISTANCE IS 20 SECTIOBS * DISTANCE = 20*20m = 400m.
'
' ** ELEMENTS 4-29-30-7 IS THE SAME LENGTH AS ELEMENT 4-5-6-7
' ** TO MAKE ELEMENT 4-7 = 100m. USE AN INC = 33.3 sec. AND A SPEED = 1 m/sec.
'
' ** IN THIS EXAMPLE ONLY AN INC = 40sec AND A SPEED = .5m/sec. IS CON-
' ** SIDERED AND DESIGNED JUST FOR FUN, NO LOOPING OF AGVs ARE NOTICED TO
' ** FIND A FREE MACHINE BUT A QUEQUE OF 2 AGVs IS USED PER MACHINE AND
' ** ACHIEVES A SMOOTH RUNNING OPPERATION
' ** 32 AGVs WERE USED SO THAT THERE WAS THE POSSIBILITY OF 2 SIMILAR JOBS
' ** BEING ON THE FLOOR
'
DECLARE SUB InitRail21 ()
DECLARE SUB move (an#)
DECLARE SUB InitRail1 ()
DECLARE SUB InitRail0 ()
DECLARE SUB InitRail (an#)
DECLARE SUB PrintBuggy (x#)
DECLARE SUB Locations (x#)
DECLARE SUB mach1 (x0#, y0#)
DECLARE SUB mach2 (x0#, y0#)
DECLARE SUB mach3 (x0#, y0#)
DECLARE SUB mach4 (x0#, y0#)
DECLARE SUB Rotation (x0#, y0#, o0#)
DECLARE SUB RevBody (x0#, y0#)
DECLARE SUB Body (dlx#, dly#)
DECLARE SUB Arc (rad#, a0#, B0#, angs#, ange#, clr#)
DECLARE SUB Halo (scale#, a0#, B0#, clr#)
DECLARE SUB InitAGV0 ()
DECLARE SUB initAGV (an#)
DECLARE SUB PaletteChng ()
DECLARE SUB hands ()
DECLARE SUB DrawCircle (radi#, xx#, YY#, zz#)
DECLARE SUB Dial ()
DECLARE FUNCTION LefTest# ()
DEFDBL A-Z 'double
''DEFINT A-O 'integers
TYPE HUES 'XYZpoint 'define the type for hues
RED AS INTEGER 'red component
green AS INTEGER 'green component
blue AS INTEGER 'blue component
END TYPE
TYPE coord
x AS INTEGER
Y AS INTEGER
z AS INTEGER
END TYPE
TYPE Layer 'AGV(20 * 13) abc
id AS INTEGER '1 AN
time AS LONG '2 login time
lp AS INTEGER '3 not done 600*60*speed=dist at mach #i
jbtm AS INTEGER '4 job time 600-2100 min sub time at mach agv().M
' dist AS INTEGER '5 (logintime-realtime)*speed+dist=jmp dist neg=wait
ltr AS STRING * 1 '5 ma/mb id
'total=agv(0).id
m AS INTEGER '6 machine 1/2/3 rnd*100 <35<35+45<35+45+20=100
m1 AS INTEGER '7 next machine 1 15% TRUE/FALSE m1/total*100
m2 AS INTEGER '8 next machine 1 15% TRUE/FALSE m1/total*100
m3 AS INTEGER '9 next machine 1 15% TRUE/FALSE m1/total*100
M4 AS INTEGER '10 mach4 4% = m4/total*100
END TYPE
'
TYPE rails '(23 * 27) 'each node 1-15*n abc
agv AS INTEGER '1 id number of AGV
time AS LONG '2 time at login
flg AS INTEGER '3 done?
' dist AS DOUBLE '4 total distance 'to' cover neg waiting @t. added
m AS INTEGER '5 =random even val for transfer 45%/35%/20%
m1 AS INTEGER '6 =random even val for transfer 15%/10% m1 total
m2 AS INTEGER '7 =random even val for transfer 10% m2 total nb
m3 AS INTEGER '8 =random even val for transfer 10% m2 total nb
END TYPE
CONST true = -1
CONST false = 0 ' NOT true
CONST pi = 3.141592654# 'PI /7 = 0.44880; 4 * ATN(1#); pi=22/7
CONST W = pi / 180 'degree=>radians
CONST maxx = 640 - 1 'full SCREEN 12==640x480 639
CONST maxy = 480 - 1 'full 479
CONST halfx = 640 / 2 - 1 'half width 319 319
CONST halfy = 480 / 2 - 1 'half height 239 239
CONST WHT = 15 'white 15/7 grey
CONST yllw = 14 'yellow 14/brn 6 magenta
CONST prpl = 13 'magenta 5/13 purple PINK
CONST RD = 12 'red 4/12
CONST CYN = 11 'cyan 3/11
CONST grn = 10 'green 2/10
CONST bl = 9 'blue 1/9 -8 delta
CONST GRY = 8 'grey 7/8 + EDGE
CONST blck = 0 'black
CONST SPEED = 1.5 'meters / sec
CONST radius0 = 50 'dial
CONST CLCKX = halfx 'clock co-ordnts
CONST clcky = halfy - 15
'
CONST mach1x = halfx - 97 + 13 'CNC machines #1
CONST mach1y = 0
CONST mach2x = halfx + 50 + 12 ' " " #2
CONST mach2y = 0
CONST mach3x = maxx - 50 + 3 ' " " #3
CONST mach3y = halfy - 50 - 14
CONST mach4x = halfx + 45 ' " " #4
CONST mach4y = maxy - 80
CONST cranex = 78 'transfer crane
CONST craney = 197
'
COMMON SHARED agv() AS Layer, rails() AS rails, q
COMMON SHARED clr, ltr$
COMMON SHARED INC, sc, tmn, mn, thr, hr, day, dhr, tsc
COMMON SHARED xx3, xx4, xx5, xx6, yy3, yy4, yy5, yy6
COMMON SHARED aa, bb, cc, dd, ee, ff, gg, hh, b2, bd, c2
COMMON SHARED x, Y, z, xx, YY, zz, xn, yn, zn, ii, jj, kk
COMMON SHARED flg, RstFlg0, fladagv, craneflg
'DYNAMIC$
CLS
SCREEN 12 'high resolution graphics mode '640x480
PaletteChng 'border trim
'LINE (0, 0)-(MAXX, MAXY), 15, B
CLS
aa = 20
REDIM SHARED c(30 * (30 + aa))
REDIM SHARED B(30 * 15)
REDIM SHARED e(aa * 15)
REDIM SHARED h(aa * 15)
Body 0, aa
GET (0, 0)-(30, 30 + aa), c '(x,y)-(x,y)
GET (0, 0)-(30, 15), B
GET (0, 15)-(30, 15 + aa), e
GET (0, 15 + aa)-(30, 30 + aa), h
CLS
REDIM SHARED d(30 * (30 + aa))
REDIM SHARED F(aa * 15)
REDIM SHARED G(aa * 15)
REDIM SHARED i(aa * 15)
Body aa, 0
GET (0, 0)-(30 + aa, 30), d
GET (15, 0)-(15 + aa, 30), F
GET (0, 0)-(15, 30), G
GET (15 + aa, 0)-(30 + aa, 30), i
CLS
REDIM SHARED j(aa * 15): bb = 6
LINE (400 - 2, 100 - 3)-(430 + aa + 8, 130 + 8), 1, B
PUT (400, 100), d, PSET 'horz
PAINT (400 + 1, 100 + 1), bb, 1
GET (402, 101)-(430 + aa, 129), j:
REDIM SHARED l(aa * 15): bb = 6
LINE (500 - 2, 100 - 2)-(530 + 2, 130 + aa + 2), 1, B
PUT (500, 100), c, PSET 'vert
PAINT (500 + 1, 100 + 1), bb, 1
GET (502, 101)-(529, 129 + aa), l:
RevBody 500, 0
REDIM SHARED k(aa * 15): bb = 6
PUT (500, 0), c, OR 'vert
GET (500, 0)-(530, 30 + aa), k:
'parts top vert bott
PUT (0, 100), c: PUT (0, 200), B: PUT (0, 300), e: PUT (0, 400), h: '(x,y)
'parts left horz right
PUT (100, 0), d: PUT (200, 0), G: PUT (300, 0), F: PUT (400, 0), i:
''parts
'
PUT (100, 100), d, OR: 'buggy 'horz
PUT (100, 115), d, OR:
PUT (100, 115), e, OR: PUT (100 + aa, 115), e, OR: 'sq palette
LINE (108 + 0, 108)-(130 + aa - 10, 130 + aa - 8 - 4), 12, BF 'table
''table
'
LINE (111, 100 + 4 - 1)-(120, 110 + 4 + 1), 0, BF 'wheel top
LINE (111, 102 + aa + 8 - 0)-(120, 112 + aa + 8 + 2), 0, BF 'wheel bot
LINE (130 + aa - 15, 106 + aa / 2 - 1)-(132 + aa - 6, 112 + aa / 2 + 4 + 2), 0, BF 'front
''mirror
REDIM SHARED q(33)
bb = aa + 32 '30
FOR Y = 0 TO bb STEP 2
FOR x = 0 TO bb STEP 2
GET (100 + x, 100 + Y)-(100 + x, 100 + Y), q(0)
PUT (200 + x / 2, 100 + Y / 2), q 'same
PUT (200 - x / 2, 200 + Y / 2), q 'mirror
PUT (300 + Y / 2, 200 + x / 2), q 'upsidedwn
PUT (400 - Y / 2, 200 - x / 2), q 'upsidedwn
Rotation x / 2, Y / 2, 45 'angle needs definition
PUT (100 + xx, 300 + YY), q, PSET 'rot 45
PUT (100 + xx + 1, 300 + YY), q, PSET 'rot 45
Rotation x / 2, Y / 2, 90 + 45
PUT (500 + xx, 300 + YY), q, PSET 'rot 90
PUT (500 + xx + 1, 300 + YY), q, PSET 'rot 90
Rotation x / 2, Y / 2, 180 + 45
PUT (300 + xx, 300 + YY), q, PSET 'rot 90
PUT (300 + xx + 1, 300 + YY), q, PSET 'rot 90
Rotation x / 2, Y / 2, 270 + 45
PUT (200 + xx, 300 + YY), q, PSET 'rot 45
PUT (200 + xx + 1, 300 + YY), q, PSET 'rot 45
NEXT x
NEXT Y
' r x y clr
DrawCircle 2, 502, 452, 10 'clock dots
Halo 4, 605, 455, 9 'erase circle HR
Halo 4.5, 605, 455, 9
Halo 5, 605, 455, 9
PAINT (605, 455), 4, 9
''clock dots
bb = bb / 2:
cc = FIX(SQR(2) * bb + .5): c2 = cc / 2:
dd = cc + 10
DIM r(cc ^ 2)
GET (200, 100)-(200 + bb, 100 + bb), r
PUT (2 * dd, maxy - dd), r, OR
GET (300, 200)-(300 + bb, 200 + bb), r
PUT (4 * dd, maxy - dd), r, OR
GET (200 - bb, 200)-(200, 200 + bb), r
PUT (6 * dd, maxy - dd), r, OR
GET (400, 200)-(400 - bb, 200 - bb), r
PUT (8 * dd, maxy - dd), r, OR
GET (100, 300 - c2)-(100 + cc, 300 + c2), r
PUT (1 * dd, maxy - dd), r, OR
GET (200 - c2, 300)-(200 + c2, 300 + cc), r
PUT (3 * dd, maxy - dd), r, OR
GET (300 - cc, 300 - c2)-(300, 300 + c2), r
PUT (5 * dd, maxy - dd), r, OR
GET (500 - c2, 300 - cc)-(500 + c2, 300), r
PUT (7 * dd, maxy - dd), r, OR
LINE (0, 0)-(maxx, 430), 0, BF 'cls '640x480
mach1 mach1x, mach1y '35% 15%
mach2 mach2x + 20, mach2y '45% 10%
mach3 mach3x, mach3y '20%
mach4 mach4x, mach4y '4%
''Bar 'color chart
REDIM SHARED A(0):
REDIM SHARED B(0): REDIM SHARED c(0): REDIM SHARED d(0)
REDIM SHARED e(bb * bb): REDIM SHARED F(0):
REDIM SHARED G(0): REDIM SHARED h(0): REDIM SHARED i(0):
REDIM SHARED j(0): REDIM SHARED k(0): REDIM SHARED r(0)
REDIM SHARED agv(10 * 19) AS Layer '0-16 buggies
REDIM SHARED rails(9 * 37) AS rails '0-36 railway
RANDOMIZE TIMER 'seed random number generator
COLOR 15
Locations (0) 'rail nodes init
FOR i = 0 TO 8 'crane platform
LINE (cranex - 20 + i, craney - 20 + i)-(cranex + 20 - i, craney + 20 - i), i, B 'sq pad
NEXT i 'base 3D
LINE (cranex - 12, craney - 12)-(cranex + 12, craney + 12), 10, BF 'base grn 'table
LINE (cranex - 5, craney - 5)-(cranex + 25, craney + 5), 13, BF ''pink rec
LINE (cranex + 5, craney - 2)-(cranex + 30, craney + 2), 12, BF ''red rec
REDIM SHARED c(40 * 70)
GET (cranex + 15, craney + 20)-(cranex + 15 + 70, craney - 20), c 'crane erasure
''PUT (10, 360), c, PSET 'display of erasure
hr = 7 '7:30 AM start
mn = 30
sc = 0
Dial
hands: yhr = thr
InitRail0 'reset totals
FOR i = 1 TO 37 'railway nodes init ???
InitRail (i)
rails(i).agv = 0
NEXT i
InitAGV0
FOR i = 1 TO 32
initAGV (i) 'AGVs init ???
NEXT i
FOR i = 0 TO 32: q(i) = 0: NEXT i
craneflg = true
PrintBuggy (0)
InitRail21
''=======================================================================
DO '<<<<<<<< do main loop >>>>>>>>
RANDOMIZE 90000 'seed random number generator
INC = 10 'each segment=inc*speed=10m.
sc = sc + INC
tmn = mn + sc / 60
thr = hr + tmn / 60
day = (thr - 7.5) / 24
IF day >= 15 THEN LOCATE 2, 2: INPUT "15 Days: test done!", u$
dhr = thr - 24 * FIX(thr / 24)
IF FIX(dhr / 12) > 0 THEN pm = true: am = false ELSE pm = false: am = true
IF rails(23).agv <> 0 AND rails(2).agv = 0 THEN
IF rails(1).agv = 0 AND rails(20).agv = 0 THEN
move 0
END IF
END IF
hands
FOR i = 37 TO 1 STEP -1
IF rails(i).agv <> 0 THEN
rails(i).time = rails(i).time + INC
LOCATE 6, 1: PRINT "total "; rails(0).agv; " "
LOCATE 8, 1: PRINT "t "; FIX(rails(21).time / 60); " mn. "
LOCATE 16, 1: PRINT "loop "
LOCATE 17, 1: PRINT agv(0).lp; " "; flg; " "; : IF rails(20).agv <> 0 THEN PRINT agv(rails(20).agv).ltr
LOCATE 19, 1: IF rails(25).agv <> 0 THEN PRINT agv(rails(25).agv).ltr
LOCATE 3, 18: PRINT "m1"
LOCATE 4, 18: PRINT "% "; rails(0).m1; " "; FIX(rails(0).m1 / rails(0).agv * 100)
LOCATE 5, 18: PRINT "t "; rails(6).time; " ";
LOCATE 25, 60: PRINT "% "; agv(0).M4; " "; rails(0).agv; " "; FIX(agv(0).M4 / rails(0).agv * 100); " "
LOCATE 26, 60: PRINT "t "; rails(17).time; " "
LOCATE 27, 60: PRINT "m4"
LOCATE 3, 65: PRINT "m2"
LOCATE 4, 65: PRINT "% "; rails(0).m2; " "; FIX(rails(0).m2 / rails(0).agv * 100); " "
LOCATE 5, 65: PRINT "t "; rails(10).time;
LOCATE 8, 67: PRINT "%ma "; agv(0).m1; " "; FIX(agv(0).m1 / rails(0).m1 * 100)
LOCATE 9, 67: PRINT "%mb "; agv(0).m2; " "; FIX(agv(0).m2 / rails(0).m2 * 100)
'LOCATE 10, 67: PRINT "m3 "; agv(0).m3; " "
LOCATE 18, 67: PRINT "m3"
LOCATE 19, 67: PRINT "% "; rails(0).m3; " "; FIX(rails(0).m3 / rails(0).agv * 100)
LOCATE 20, 67: PRINT "t "; rails(13).time; " ";
LOCATE 21, 67: PRINT "% "; agv(0).m3; " "; FIX(agv(0).m3 / rails(0).agv * 100)
END IF
IF rails(i).time > 0 THEN move i 'animate buggy's motion
NEXT i
'' FOR i = 0 TO 100: FOR ii = 0 TO 60: NEXT: NEXT 'delays display
Stroke$ = INKEY$ 'get any keystroke
IF LEN(Stroke$) THEN keyval = ASC(Stroke$) ELSE keyval = 0
LOOP WHILE keyval <> 27 'keep going until escape is pressed
CLOSE
END
SUB Arc (rad, a0, B0, angs, ange, clr)''''''''''''''''''''''''''''''SUBROUTINES
X1 = rad * COS(angs * W): Y1 = rad * SIN(angs * W)
FOR ii = angs TO ange STEP -1
x2 = rad * COS(ii * W): y2 = rad * SIN(ii * W)
X3 = (rad + 1) * COS(ii * W): y3 = (rad + 1) * SIN(ii * W)
LINE (X1 + a0, Y1 + B0)-(x2 + a0, y2 + B0), clr, BF
X1 = x2: Y1 = y2
NEXT ii
END SUB
SUB Bar
'
cb = 14
LINE (0, 20)-(cb, 30), 0, BF 'color bar
LINE (cb, 20)-(2 * cb, 30), 1, BF
LINE (2 * cb, 20)-(3 * cb, 30), 2, BF
LINE (3 * cb, 20)-(4 * cb, 30), 3, BF
LINE (4 * cb, 20)-(5 * cb, 30), 4, BF
LINE (5 * cb, 20)-(6 * cb, 30), 5, BF
LINE (6 * cb, 20)-(7 * cb, 30), 6, BF
LINE (7 * cb, 20)-(8 * cb, 30), 7, BF
LINE (8 * cb, 20)-(9 * cb, 30), 8, BF
LINE (9 * cb, 20)-(10 * cb, 30), 9, BF
LINE (10 * cb, 20)-(11 * cb, 30), 10, BF
LINE (11 * cb, 20)-(12 * cb, 30), 11, BF
LINE (12 * cb, 20)-(13 * cb, 30), 12, BF
LINE (13 * cb, 20)-(14 * cb, 30), 13, BF
LINE (14 * cb, 20)-(15 * cb, 30), 14, BF
LINE (15 * cb, 20)-(16 * cb, 30), 15, BF
LOCATE 3, 1: PRINT "1 2 3 4 5 6 7|8 9 0 1 2 3 4 5"
LOCATE 4, 1: PRINT "b b g c r m y|y b g c r m y w"
LOCATE 5, 1: PRINT " b c c . . "
'
END SUB
SUB Body (dlx, dly)
x0 = 15: y0 = x0
z = 8: a0 = 14
FOR t = 0 TO a0
LINE (x0, y0 - t)-(x0 + dlx, y0 - t), FIX((a0 - t) / 2 + 1) 'top
Arc t, x0, y0, -90, -180, FIX((a0 - t) / 2 + 1) 'top l
LINE (x0 - t, y0)-(x0 - t, y0 + dly), FIX((a0 - t) / 2 + 1) 'side l
Arc t, x0, y0 + dly, -180, -270, FIX((a0 - t) / 2 + 1) 'bottom l
LINE (x0, y0 + dly + t)-(x0 + dlx, y0 + dly + t), FIX((a0 - t) / 2 + 1)'bottom
Arc t, x0 + dlx, y0 + dly, -270, -360, FIX((a0 - t) / 2 + 1) 'bottom r
LINE (x0 + dlx + t, y0)-(x0 + dlx + t, y0 + dly), FIX((a0 - t) / 2 + 1)'side r
Arc t, x0 + dlx, y0, 0, -90, FIX((a0 - t) / 2 + 1) 'top r
z = z - .5:
NEXT t
END SUB
SUB Border
z = 0: zz = .5 'z=1 'ok
FOR i = 0 TO 31 '12 TO 0 STEP -1
z = z + zz
LINE (210 + i, 1 + i)-(639 - i, yb - i), z, B 'BORDER
IF z > 7 THEN zz = -.5
NEXT i
END SUB
SUB Dial
'
Halo radius0 + 6, CLCKX, clcky, GRY 'CLOCK OUTLINE
PAINT (CLCKX, clcky), bl, GRY
FOR t = 1 TO 48
X1 = radius0 * COS((90 - t * 7.5) * W) '15 MIN.
Y1 = -radius0 * SIN((90 - t * 7.5) * W)
x2 = (radius0 - 5) * COS((90 - t * 7.5) * W)
y2 = -(radius0 - 5) * SIN((90 - t * 7.5) * W)
LINE (CLCKX + X1, clcky + Y1)-(CLCKX + x2, clcky + y2), 14 'TICS
NEXT t
FOR t = 1 TO 12
X1 = radius0 * COS((90 - t * 30) * W) 'HRLY dots
Y1 = -radius0 * SIN((90 - t * 30) * W)
GET (500, 450)-(504, 454), e 'b
PUT (ABS(CLCKX + X1 - 2), ABS(clcky + Y1 - 2)), e, OR
PAINT (CLCKX + X1, clcky + Y1), RD, bl 'RED dots
NEXT t
END SUB
SUB DrawCircle (radi, xx, YY, zz)
FOR ii = 0 TO 89 '60=6 90=4 180=2 360=1 720=.5
x2 = radi * COS(4 * ii * W)
y2 = radi * SIN(4 * ii * W)
LINE (xx, YY)-(x2 + xx, y2 + YY), zz, BF
NEXT ii
END SUB
SUB Edge (a0, B0, dlx, dly, z, zz)
FOR t = 0 TO 10 '
LINE (a0, B0 - t)-(a0 + dlx, B0 - t), FIX(z) 'top
Arc t, a0, B0, -90, -180, FIX(z) 'top l
LINE (a0 - t, B0)-(a0 - t, B0 + dly), FIX(z) 'side l
Arc t, a0, B0 + dly, -180, -270, FIX(z) 'bottom l
LINE (a0, B0 + dly + t)-(a0 + dlx, B0 + dly + t), FIX(z) 'bottom
Arc t, a0 + dlx, B0 + dly, -270, -360, FIX(z) 'bottom r
LINE (a0 + dlx + t, B0)-(a0 + dlx + t, B0 + dly), FIX(z) 'side r
Arc t, a0 + dlx, B0, 0, -90, FIX(z) 'top r
z = z + zz:
NEXT t
END SUB
SUB Halo (scale, a0, B0, clr) 'to erase hr hand OR MAKE CIRCLE ARCS
xx1 = scale * COS(0) + a0
yy1 = scale * SIN(0) + B0
FOR ii = 1 TO 360
xx2 = scale * COS((ii) * W) + a0
yy2 = scale * SIN((ii) * W) + B0
LINE (xx1, yy1)-(xx2, yy2), clr, BF
xx1 = xx2: yy1 = yy2
NEXT ii
END SUB
SUB hands
'
radius1 = radius0 - 8: radius2 = radius1 - 5: CLRH = 0
LINE (CLCKX + xx3, clcky + yy3)-(CLCKX + xx4, clcky + yy4), 9
LINE (CLCKX + xx5, clcky + yy5)-(CLCKX + xx6, clcky + yy6), 9
IF FIX(dhr / 12) > 0 THEN pm = true: am = false ELSE pm = false: am = true
'MINUTE HAND
X3 = radius2 * COS((90 - (tmn * 6)) * W) '360/60=6
y3 = -radius2 * SIN((90 - (tmn * 6)) * W)
x4 = (radius2 - 10) * COS((90 - (tmn * 6)) * W)
y4 = -(radius2 - 10) * SIN((90 - (tmn * 6)) * W)
LINE (CLCKX + X3, clcky + y3)-(CLCKX + x4, clcky + y4), CLRH
xx3 = X3
yy3 = y3
xx4 = x4
yy4 = y4
'SECOND HAND
x5 = radius2 * COS((90 - (sc * 6)) * W)
y5 = -radius2 * SIN((90 - (sc * 6)) * W)
x6 = (radius2 - 10) * COS((90 - (sc * 6)) * W)
y6 = -(radius2 - 10) * SIN((90 - (sc * 6)) * W)
LINE (CLCKX + x5, clcky + y5)-(CLCKX + x6, clcky + y6), CLRH
xx5 = x5
yy5 = y5
xx6 = x6
yy6 = y6
'HOUR HAND
X1 = radius1 * COS((90 - (thr * 30)) * W) '360/12=30
Y1 = -radius1 * SIN((90 - (thr * 30)) * W)
x2 = (radius1 - 10) * COS((90 - (thr * 30)) * W)
y2 = -(radius1 - 10) * SIN((90 - (thr * 30)) * W)
GET (600, 450)-(610, 460), e 'g
PUT (CLCKX + (X1 + x2) / 2 - 3, clcky + (Y1 + y2) / 2 - 3), e, OR 'HR
PAINT (CLCKX + (X1 + x2) / 2, clcky + (Y1 + y2) / 2), 0, 9 '12, 9
'FOR k = 0 TO 6000: NEXT k 'delay
COLOR 14
LOCATE 19, 32: PRINT DATE$; " "; FIX(day); " dys "; : IF am THEN PRINT "am"; ELSE PRINT "pm"; : PRINT " "
'
END SUB
SUB initAGV (an)
'
agv(an).id = an '0 'this AGV
agv(an).time = 0 '1 started yet flg
agv(an).lp = 0 '1 loop
agv(an).jbtm = -FIX(500 + 100 * FIX(an / 2))'3 time for job 600-2100 min
agv(an).m = FIX(RND * 100) '5 machine 1/2/3 rnd*100 <35<35+45<35+45+20=100
agv(an).m1 = FIX(RND * 100) '6 next machine 1 15%/+10% TRUE/FALSE m1/total*100
' agv(an).M4 = FIX(RND * 100) '8 mach4 4% = m4/total*100
m1 = rails(0).m1 / rails(0).agv * 100: IF m1 <= 35 THEN m1 = true ELSE m1 = false
m2 = rails(0).m2 / rails(0).agv * 100: IF m2 <= 45 THEN m2 = true ELSE m2 = false
ma = agv(0).m1 / rails(0).m1 * 100: IF ma <= 15 THEN ma = true ELSE ma = false
mb = agv(0).m2 / rails(0).m2 * 100: IF mb <= 10 THEN mb = true ELSE mb = false
m3 = rails(0).m3 / rails(0).agv * 100: IF m3 <= 20 THEN m3 = true ELSE m3 = false
agv(an).ltr = "2"
IF rails(5).agv = 0 AND m1 THEN 'ok
agv(an).ltr = "1"
ELSEIF rails(9).agv = 0 AND m2 THEN 'ok
agv(an).ltr = "2"
ELSEIF rails(12).agv = 0 AND rails(37).agv = 0 AND m3 THEN 'ok
agv(an).ltr = "3"
ELSEIF rails(5).agv = 0 THEN 'ok
agv(an).ltr = "1"
ELSEIF rails(9).agv = 0 THEN 'ok
agv(an).ltr = "2"
ELSEIF rails(12).agv = 0 AND rails(37).agv = 0 THEN 'ok
agv(an).ltr = "3"
ELSEIF m1 THEN 'eh
agv(an).ltr = "1"
ELSEIF m2 THEN
agv(an).ltr = "2"
ELSEIF m3 THEN
agv(an).ltr = "3"
ELSE
IF RND > .5 THEN 'm2
agv(an).m = FIX(36 + 44 * RND): agv(an).ltr = "2": agv(an).m1 = 200
ELSE 'm3
agv(an).m = FIX(81 + 19 * RND): agv(an).ltr = "3": agv(an).m1 = 200
END IF
END IF
IF agv(an).ltr = "1" AND ma THEN agv(an).ltr = "a"
IF agv(an).ltr = "2" AND mb THEN agv(an).ltr = "b"
IF agv(an).ltr = "1" OR agv(an).ltr = "2" OR agv(an).ltr = "3" THEN agv(an).m1 = 200
IF rails(0).agv = 2 THEN agv(an).ltr = "a"
IF rails(0).agv = 3 THEN agv(an).ltr = "b"
'
END SUB
SUB InitAGV0 'init (0) for totals
'
agv(0).id = 0
agv(0).time = 0
agv(0).lp = 0
agv(0).jbtm = 0
agv(0).m = 0
agv(0).m1 = 0
agv(0).m2 = 0
agv(0).m3 = 0
agv(0).M4 = 0
'
END SUB
SUB InitRail (an) 'total
'
rails(an).agv = 0 'id number of AGV on node 0=none
rails(an).time = 0 'time + move
rails(an).flg = false 'loops
rails(an).m = 0 '35/45/20% 1/2/3
rails(an).m1 = 0 '15%'10%
'
END SUB
SUB InitRail0 'totals
'
rails(0).agv = 1 '0
rails(0).time = thr '1
rails(0).flg = false '2
rails(0).m = 0 '4 '35/45/20% 1/2/3 0=total
rails(0).m1 = 1 '5 15% 0=total
rails(0).m2 = 1 '6
'
END SUB
SUB InitRail1
'
''rails(1).time = -60 + INC
rails(1).flg = true 'start
rails(1).m = 0 '35/45/20% 0=total
rails(1).m1 = 0 '15% 0=total
rails(1).m2 = 0 '10% 0=total
DO
z = FIX(1 + 31 * RND) '2100=500+1600=500+100*16 'job # 1-16
LOOP WHILE q(z) <> 0
LOCATE 5, 1: PRINT "agv "; z; " "
rails(1).agv = z: q(z) = z 'z is moving on the floor
initAGV (z)
'
END SUB
SUB InitRail21
'
rails(21).flg = false
PrintBuggy (21)
z = 33: rails(21).agv = z 'same buggy
agv(z).lp = 0
agv(z).time = thr
'
END SUB
FUNCTION LefTest
LefTest = false
IF A > 90 AND A < 270 AND B > 90 AND B < 270 AND c > 90 AND c < 270 THEN
LefTest = true
END IF
END FUNCTION
SUB Locations (x)
''RAILS may be found thru ,10 red & , 12 pink
''NODES are , 11 cyan
' bb=25 dd=45 cc=35
'mach3x = maxx - 50 =639-50=589
'mach4y = maxy - 80 = 479-80=399
b2 = bb / 2: bd = 2 * bb: c2 = cc / 2
railx = 105 + b2: raily = 105 + b2:
rail1x = railx + b2 + 5 + c2: rail1y = raily + bb + 5
''RAILINE
LINE (railx - b2 - 5, raily - b2 - 5)-(maxx - 87, maxy - 103), 9, BF
'border
LINE (railx - b2, raily - b2)-(maxx - 92, maxy - 108), 0, BF
'outer rail path
''outer rail
'
'LINE (railx, raily)-(maxx - 92 - b2, maxy - 80 - 28 - b2), 12, B'red
'outer rail line RED
''outer rail
LINE (rail1x - c2 - 5, rail1y - b2 - 5)-(maxx - 93 - bb, maxy - 113 - bb + 5), 9, BF
'border
LINE (rail1x - c2, rail1y - b2)-(maxx - 98 - bb, maxy - 113 - bb), 0, BF
'inner rail path
''inner rail
LINE (rail1x, rail1y)-(maxx - 97 - bb - b2, maxy - 113 - bb - b2), 12, B
'inner rail line
''inner rail
LINE (rail1x + b2, rail1y + b2)-(maxx - 99 - bd, maxy - 115 - bd), 9, BF
'border
LINE (rail1x + b2 + 5, rail1y + b2 + 5)-(maxx - 104 - bd, maxy - 120 - bd), 10, BF
'center
''enterance
LINE (0, 103 + bb)-(railx - b2 - 5, rail1y + b2 + 5), 9, BF 'border
LINE (0, 108 + bb)-(railx - b2, rail1y + b2), 0, BF 'path
LINE (0, 110 + bb + b2)-(railx, rail1y), 13 'rail
'enter buggy
''exit
LINE (0, maxy - 113 - bd - 5)-(railx - b2 - 5, maxy - 113 - bb + 5), 9, BF 'border
LINE (0, maxy - 113 - bd)-(rail1x - b2, maxy - 113 - bb), 0, BF'path
LINE (0, maxy - 113 - bb - b2)-(rail1x, maxy - 113 - bb - b2), 13 'red
'exit buggy
''supply AGV centre
LINE (rail1x + b2, halfy - 9 - b2)-(207, halfy + 7 + b2), 9, BF 'gry
LINE (rail1x + b2 - 5, halfy - 4 - b2)-(202, halfy + b2), 0, BF 'blck
LINE (rail1x, halfy)-(202 - b2, halfy), 12, B 'red
'supply AGVs
''crossed lines
LINE (railx, rail1y)-(railx, maxy - 113 - bb - b2), 13 'lft vert
'4-5
LINE (204, rail1y - 6)-(254 - b2, raily), 0, BF'L
LINE (204, rail1y)-(254 - b2, raily), 13 'm1
LINE (205, rail1y)-(255 - b2, raily), 13 'm1
'6-7
LINE (305, rail1y - 6)-(254 + b2 + 1, raily), 0, BF'R
LINE (254 + b2 + 1, raily)-(305, rail1y), 13'm1
LINE (255 + b2 + 1, raily)-(306, rail1y), 13'm1
'5-6
LINE (254 - b2, raily)-(254 + b2, raily + 1), 13, BF'm1 horz
'8-9
LINE (403, rail1y - 6)-(454 - b2, raily), 0, BF'L
LINE (403, rail1y)-(454 - b2, raily), 13 'm2
LINE (404, rail1y)-(455 - b2, raily), 13 'm2
'10-11
LINE (maxx - 97 - bb - b2, rail1y - 6)-(454 + b2, raily), 0, BF'R
LINE (454 + b2, raily)-(maxx - 97 - bb - b2, rail1y), 13'm2
LINE (455 + b2, raily)-(maxx - 96 - bb - b2, rail1y), 13'm2
'9-10
LINE (454 - b2, raily)-(454 + b2, raily + 1), 13, BF'm2 horz
'LINE (509 + bb - 1, 197 - bb - b2 - 1)-(509 + bb + 1, 197 - bb - b2 + 1), 11, BF'#37 m3 T
'11-37
LINE (maxx - 90 - bb - b2, rail1y)-(509 + bb, 197 - bb - b2), 0, BF 'T
LINE (maxx - 97 - bb - b2, rail1y)-(509 + bb, 197 - bb - b2), 13'm3
LINE (maxx - 96 - bb - b2, rail1y)-(510 + bb, 197 - bb - b2), 13'm3
'13-14
LINE (maxx - 90 - bb - b2, halfy)-(509 + bb, 197 + b2), 0, BF 'B
LINE (509 + bb, 197 + b2)-(maxx - 97 - bb - b2, halfy), 13 ' m3 B
LINE (510 + bb, 197 + b2)-(maxx - 96 - bb - b2, halfy), 13 ' m3 B
'37-13
LINE (509 + bb, 197 + b2)-(510 + bb, 197 - bb - b2), 13, BF' m3 vert
'15-16
LINE (503, 333)-(414 + bb, 333 + bb), 0, BF 'R
LINE (503, 327)-(414 + bb, 333 + bb), 13 'm4
LINE (504, 327)-(415 + bb, 333 + bb), 13 'm4
'17-18
LINE (356, 333)-(414, 333 + bb), 0, BF 'L
LINE (356, 327)-(414, 333 + bb), 13 ' m4
LINE (357, 327)-(415, 333 + bb), 13 ' m4
'16-17
LINE (414 + bb, 333 + bb)-(414, 333 + bb + 1), 13, BF'hor m4
''nodes cyan
LINE (202 - b2 - 1, halfy - 1)-(202 - b2 + 1, halfy + 1), 11, B '#0 'origin
LINE (rail1x + 6 - 1, halfy - 6 - 1)-(rail1x + 6 + 1, halfy - 6 + 1), 11, BF'#1
LINE (rail1x - 1 - 5, craney - 1)-(rail1x + 1 - 5, craney + 1), 11, BF'#2 'rght-crn
LINE (rail1x + 6 - 1, rail1y + 6 - 1)-(rail1x + 6 + 1, rail1y + 6 + 1), 11, BF'#3 tl
LINE (204 - 1, rail1y - 1)-(204 + 1, rail1y + 1), 11, BF '#4
LINE (254 - b2 - 1, raily - 1)-(254 - b2 + 1, raily + 1), 11, BF 'm1 L #5
LINE (254 + b2 - 1, raily - 1)-(254 + b2 + 1, raily + 1), 11, BF 'm1 R #6
LINE (303, rail1y - 1)-(305, rail1y + 1), 11, BF '#7
LINE (403, rail1y - 1)-(405, rail1y + 1), 11, BF '#8
LINE (454 - b2 - 1, raily - 1)-(454 - b2 + 1, raily + 1), 11, BF 'm2 L #9
LINE (454 + b2 - 1, raily - 1)-(454 + b2 + 1, raily + 1), 11, BF 'm2 R #10
LINE (maxx - 97 - bb - b2 - 6 - 1, rail1y + 6 - 1)-(maxx - 97 - bb - b2 - 6 + 1, rail1y + 6 + 1), 11, BF'#11 tr
LINE (509 + bb - 1, 197 - b2 - 1)-(509 + bb + 1, 197 - b2 + 1), 11, BF '#12 m3 T
LINE (509 + bb - 1, 197 + b2 - 1)-(509 + bb + 1, 197 + b2 + 1), 11, BF '#13 m3 B
LINE (maxx - 97 - bb - b2 - 1, halfy - 1)-(maxx - 97 - bb - b2 + 1, halfy + 1), 11, BF '#14 'node
LINE (503 - 6 - 1, 327 - 6 - 1)-(503 - 6 + 1, 327 - 6 + 1), 11, BF'#15 'br cornr
LINE (414 + bb - 1, 333 + bb - 1)-(414 + bb + 1, 333 + bb + 1), 11, BF '#16 m4 R
LINE (414 - 1, 333 + bb - 1)-(414 + 1, 333 + bb + 1), 11, BF 'm4 L #17
LINE (356, 327)-(358, 329), 11, BF '#18
LINE (256, 327)-(258, 329), 11, BF '#19
LINE (rail1x + 6 - 1, maxy - 113 - bb - b2 - 6 - 1)-(rail1x + 6 + 1, maxy - 113 - bb - b2 - 6 + 1), 11, BF'#20 'bl
LINE (b2 - 1, rail1y - 1)-(b2 + 1, rail1y + 1), 11, BF '#21 'lft-entry
LINE (railx - 6 - 1, rail1y + 6 - 1)-(railx - 6 + 1, rail1y + 6 + 1), 11, BF'tr #22 'rght
LINE (railx - 1, craney - 1)-(railx + 1, craney + 1), 11, BF '#23 'left-crn
LINE (railx - 6 - 1, maxy - 113 - bb - b2 - 6 - 1)-(railx - 6 + 1, maxy - 113 - bb - b2 - 6 + 1), 11, BF''#24rgt
LINE (b2 - 1, maxy - 113 - bb - b2 - 1)-(b2 + 1, maxy - 113 - bb - b2 + 1), 11, BF' #25 'lft-done-exit
LINE (rail1x + bb + b2 - 1, maxy - 114 - bb - b2 - 1)-(rail1x + bb + b2 + 1, maxy - 114 - bb - b2 + 1), 11, BF'#26
LINE (railx - bb - b2 - 1, maxy - 114 - bb - b2 - 1)-(railx - bb - b2 + 1, maxy - 114 - bb - b2 + 1), 11, BF''#27 rgt
LINE (rail1x - 1, halfy + bb - 1)-(rail1x + 1, halfy + bb + 1), 11, BF '#28
LINE (254 - b2 - 1, rail1y - 1)-(254 - b2 + 1, rail1y + 1), 11, BF'm1 #29
LINE (254 + b2 - 1, rail1y - 1)-(254 + b2 + 1, rail1y + 1), 11, BF'm1 #30
LINE (454 - b2 - 1, rail1y - 1)-(454 - b2 + 1, rail1y + 1), 11, BF'm2 #31
LINE (454 + b2 - 1, rail1y - 1)-(454 + b2 + 1, rail1y + 1), 11, BF'm2 #32
LINE (maxx - 97 - bb - b2 - 1, 197 - b2 - 1)-(maxx - 97 - bb - b2 + 1, 197 - b2 + 1), 11, BF' m3 #33
LINE (maxx - 97 - bb - b2 - 1, 197 + b2 - 1)-(maxx - 97 - bb - b2 + 1, 197 + b2 + 1), 11, BF' m3 #34
LINE (414 - 1, 327 - 1)-(414 + 1, 327 + 1), 11, BF'hor m4 #35
LINE (414 + bb - 1, 327 - 1)-(414 + bb + 1, 327 + 1), 11, BF'hor m4 #36
LINE (509 + bb - 1, 197 - bb - b2 - 1)-(509 + bb + 1, 197 - bb - b2 + 1), 11, BF'#37 m3 T
'
END SUB
SUB mach1 (x0, y0)
'
PUT (x0, y0), d, OR: PUT (x0 + 30 + aa, y0), d, PSET: 'horz top mach1/3
PUT (x0, y0 + 30), d, OR: PUT (x0 + 30 + aa, y0 + 30), d, PSET: 'horz bot
PUT (x0, y0 + 15), e, PSET: PUT (x0, y0 + 15 + 8), e, PSET: 'front vert
PUT (x0 + 30 + aa + aa, y0 + 15), e, PSET: PUT (x0 + 30 + aa + aa, y0 + 15 + 8), e, PSET: 'end vert
PUT (x0 + 15 + aa, y0), F, PSET: PUT (x0 + 30 + aa, y0), F, PSET: 'l mid horz
PUT (x0 + 15 + aa, y0 + 30), F, PSET: PUT (x0 + 30 + aa, y0 + 30), F, PSET: 'r mid horz
LINE (x0 + 15, y0 + 15)-(x0 + 85, y0 + 44), 12, BF 'roof
PUT (x0 + 2 * aa + 20 - 43, y0 + 2 * aa + 6), k, PSET: 'vert
PUT (x0 + 30 + aa / 2 + 10 - 43, y0 - 8 + aa + 58), d, PSET: 'horz
'
END SUB
SUB mach2 (x0, y0)
'
PUT (x0, y0), d, OR: PUT (x0 + 30 + aa, y0), d, PSET: 'horz top mach1/3
PUT (x0, y0 + 30), d, OR: PUT (x0 + 30 + aa, y0 + 30), d, PSET: 'horz bot
PUT (x0, y0 + 15), e, PSET: PUT (x0, y0 + 15 + 8), e, PSET: 'front vert
PUT (x0 + 30 + aa + aa, y0 + 15), e, PSET: PUT (x0 + 30 + aa + aa, y0 + 15 + 8), e, PSET: 'end vert
PUT (x0 + 15 + aa, y0), F, PSET: PUT (x0 + 30 + aa, y0), F, PSET: 'l mid horz
PUT (x0 + 15 + aa, y0 + 30), F, PSET: PUT (x0 + 30 + aa, y0 + 30), F, PSET: 'r mid horz
PUT (x0 + aa + bb + 7, y0 + 2 * aa + 4), l, PSET: 'vert
PUT (x0 + 37 - aa / 2 - 10 + bb, y0 - 8 + aa + 59), d, PSET: 'horz
'
END SUB
SUB mach3 (x0, y0)
'
PUT (x0, y0), c, OR: PUT (x0, y0 + 30 + aa), c, OR: 'vert mach2
PUT (x0 + 15, y0), c, OR: PUT (x0 + 15, y0 + 30 + aa), c, OR:
PUT (x0 + 15, y0), F, PSET: 'top horz
PUT (x0 + 15, y0 + 30 + aa + aa), F, PSET: 'bot horz
PUT (x0, y0 + 15 + aa), e, PSET: PUT (x0, y0 + 30 + aa), e, PSET: 'tp mid vert
PUT (x0 + 15, y0 + 15 + aa), e, PSET: PUT (x0 + 15, y0 + 30 + aa), e, PSET: 'bt mid vert
LINE (x0 + 8 + 4, y0 + 8 + 8)-(x0 + 16 + aa, y0 + 30 + 3 * aa - 8), 6, BF'roof
PUT (x0 - aa - 8, y0 + 30 - aa / 2 - 1), j, PSET: 'horz
PUT (x0 - aa - aa, y0 + 7), c, PSET: 'vert
END SUB
SUB mach4 (x0, y0)
'
PUT (x0 + 2 * aa - 7, y0 - aa - 2), c, PSET: 'vert
PUT (x0, y0), d, OR: PUT (x0 + 30 + aa, y0), d, PSET: 'horz top mach1/3
PUT (x0 + 15 + aa, y0), F, PSET: PUT (x0 + 30 + aa, y0), F, PSET: 'l mid horz
'
END SUB
SUB move (an)
'
SELECT CASE an
CASE 37 '-12
IF rails(12).agv = 0 THEN
rails(12).agv = rails(37).agv
rails(12).flg = rails(37).flg
rails(12).time = thr
PrintBuggy (12):
GOTO movjmp2:
END IF
CASE 36 '-18
IF rails(18).agv = 0 THEN
rails(18).agv = rails(36).agv
rails(18).flg = rails(36).flg
rails(18).time = thr
PrintBuggy (18):
GOTO movjmp2:
END IF
CASE 34 '-14
IF rails(14).agv = 0 THEN
rails(14).agv = rails(34).agv
rails(14).flg = rails(34).flg
rails(14).time = thr
PrintBuggy (14):
GOTO movjmp2:
END IF
CASE 32 '-7
IF rails(11).agv = 0 THEN
rails(11).agv = rails(32).agv
rails(11).flg = rails(32).flg
rails(11).time = thr
PrintBuggy (11):
GOTO movjmp2:
END IF
CASE 30 '-7
IF rails(7).agv = 0 THEN
rails(7).agv = rails(30).agv
rails(7).flg = rails(30).flg
rails(7).time = thr
PrintBuggy (7):
GOTO movjmp2:
END IF
CASE 28 '-2
IF rails(1).agv = 0 AND rails(2).agv = 0 THEN 'rerun
rails(2).flg = rails(28).flg
rails(2).agv = rails(28).agv
rails(2).time = thr
PrintBuggy (2)
craneflg = false 'no crane needed
GOTO movjmp2
END IF
CASE 27 '->25
IF rails(25).agv = 0 THEN
rails(25).agv = rails(27).agv:
rails(25).flg = rails(27).flg
rails(25).time = thr
PrintBuggy (25):
GOTO movjmp2:
END IF
CASE 26 '->27
IF rails(27).agv = 0 AND rails(24).agv = 0 AND rails(20).agv = 0 THEN
GOTO movjmp:
END IF
CASE 25 '->21
IF rails(25).agv = 33 THEN 'element + agv wait
rails(21).time = -(12 + 1 - 2 * RND) * 60 + 5 * INC + 60
rails(21).agv = rails(25).agv:
rails(21).flg = rails(25).flg:
PrintBuggy (21):
GOTO movjmp2:
ELSE
q(rails(25).agv) = 0
GOTO movjmp2:
END IF
CASE 23 '->24 'robot transfer crane
IF rails(24).agv = 0 AND rails(2).agv <> 0 THEN
rails(24).time = thr
rails(an + 1).agv = rails(an).agv
rails(an + 1).flg = rails(an).flg
rails(an + 1).agv = rails(an).agv
rails(an + 1).flg = rails(an).flg
PrintBuggy (an + 1)
PrintBuggy (an)
LINE (cranex + 15, craney - 2)-(cranex + 15 + 45, craney + 2), 12, BF
rails(an).agv = 0
rails(an).time = 0
END IF
CASE 22 '->23 'robot transfer crane
IF rails(23).agv = 0 THEN
rails(23).time = thr
rails(an + 1).agv = rails(an).agv
rails(an + 1).flg = rails(an).flg
PrintBuggy (an + 1)
LINE (cranex + 15, craney - 2)-(cranex + 15 + 45, craney + 2), 12, BF ''over 1st car red
GOTO movjmp2 'erase-old-buggy
END IF
CASE 20 '->28
LOCATE 2, 1: ' INPUT "test", u$
agv(0).lp = agv(0).lp + 1
'LOCATE 16, 1: PRINT "loop "; agv(0).lp ;" "; flg; " "
IF rails(28).agv = 0 THEN
agv(20).lp = agv(20).lp + 1
IF agv(20).lp > flg THEN flg = agv(20).lp
rails(28).agv = rails(20).agv:
rails(28).time = thr
rails(28).flg = true 'reroute
PrintBuggy (28):
GOTO movjmp2:
END IF
CASE 19 '->19/26/20
IF rails(26).agv <> 0 AND rails(20).agv <> 0 THEN 'dont move
ELSEIF rails(26).agv = 0 AND rails(19).flg = false THEN
rails(26).agv = rails(19).agv:
rails(26).time = thr
PrintBuggy (26):
GOTO movjmp2:
ELSEIF rails(20).agv = 0 AND rails(19).flg = true THEN 'reroute
GOTO movjmp0:
END IF
CASE 16
IF rails(17).agv <> 0 THEN 'dont move
ELSEIF rails(17).agv = 0 THEN
''LOCATE 23, 60: PRINT agv(0).m4; " "; " m4 ";
rails(17).time = agv(rails(16).agv).jbtm
GOTO movjmp:
END IF
CASE 15
'LOCATE 26, 60: PRINT rails(17).time; " t"
M4 = agv(0).M4 / rails(0).agv * 100: IF M4 <= 4 THEN M4 = true ELSE M4 = false
IF RND > .5 AND M4 = true THEN agv(rails(15).agv).M4 = 4
''LOCATE 25, 60: PRINT agv(0).m4; " "; rails(0).agv; " "; FIX((agv(0).m4 + 1) / rails(0).agv * 100); " % ";
IF rails(35).agv <> 0 AND rails(15).flg = true THEN 'dont move
ELSEIF rails(16).agv <> 0 AND rails(35).agv <> 0 THEN 'dont move
ELSEIF rails(35).agv = 0 AND rails(15).flg = true THEN
GOTO jmp15:
ELSEIF rails(35).agv = 0 AND rails(16).agv <> 0 THEN
GOTO jmp15:
ELSEIF rails(16).agv = 0 AND M4 = true AND agv(rails(15).agv).M4 <= 4 THEN
agv(0).M4 = agv(0).M4 + 1
rails(15).flg = false 'done
rails(16).time = thr
GOTO movjmp:
ELSEIF rails(35).agv = 0 THEN
jmp15:
rails(35).time = thr
rails(35).agv = rails(15).agv
rails(35).flg = rails(15).flg
PrintBuggy (35):
GOTO movjmp2:
END IF
CASE 12
IF rails(13).agv <> 0 THEN 'dont move
ELSEIF rails(13).agv = 0 THEN
'LOCATE 19, 70: PRINT rails(0).m3; "% "; FIX(rails(0).m3 / rails(0).agv * 100); " ";
LOCATE 17, 67: PRINT agv(rails(an).agv).ltr
rails(13).time = agv(rails(12).agv).jbtm
GOTO movjmp:
END IF
CASE 11
'LOCATE 20, 70: PRINT rails(13).time; " t"
IF agv(rails(11).agv).ltr = "d" OR agv(rails(11).agv).ltr = "c" OR agv(rails(11).agv).ltr = "a" OR agv(rails(11).agv).ltr = "b" OR agv(rails(11).agv).ltr = "3" THEN flg4 = true ELSE flg4 = false
IF rails(33).agv = 0 AND NOT flg4 THEN
GOTO jmp11:
ELSEIF rails(37).agv <> 0 AND rails(33).agv <> 0 THEN
'dont move
ELSEIF rails(33).agv = 0 AND rails(12).agv <> 0 AND rails(13).agv <> 0 AND rails(37).agv <> 0 THEN
GOTO jmp11:
ELSEIF rails(37).agv = 0 AND flg4 THEN
agv(0).m3 = agv(0).m3 + 1 'total m + a + b
IF agv(rails(11).agv).ltr = "3" THEN rails(0).m3 = rails(0).m3 + 1 'total m
IF agv(rails(11).agv).ltr = "c" OR agv(rails(11).agv).ltr = "a" THEN agv(0).m1 = agv(0).m1 + 1 'total a
IF agv(rails(11).agv).ltr = "d" OR agv(rails(11).agv).ltr = "b" THEN agv(0).m2 = agv(0).m2 + 1 'total b
rails(37).agv = rails(11).agv:
rails(37).flg = false
rails(37).time = thr
PrintBuggy (37):
GOTO movjmp2:
ELSEIF rails(33).agv = 0 THEN
jmp11:
IF agv(rails(11).agv).ltr = "a" THEN agv(rails(11).agv).ltr = "c": rails(11).flg = true
IF agv(rails(11).agv).ltr = "b" THEN agv(rails(11).agv).ltr = "d": rails(11).flg = true
rails(33).agv = rails(11).agv:
rails(33).flg = rails(11).flg:
rails(33).time = thr
PrintBuggy (33):
GOTO movjmp2:
END IF
CASE 9
IF rails(10).agv <> 0 THEN 'dont move
ELSEIF rails(10).agv = 0 THEN
'LOCATE 4, 65: PRINT "% "; rails(0).m2; " "; FIX(rails(0).m2 / rails(0).agv * 100); " "
LOCATE 2, 65: PRINT agv(rails(9).agv).ltr
rails(10).time = agv(rails(9).agv).jbtm
GOTO movjmp:
END IF
CASE 8
'LOCATE 5, 65: PRINT "t "; rails(10).time; " "
IF rails(9).agv <> 0 AND rails(11).agv <> 0 THEN 'dont move
ELSEIF rails(31).agv = 0 AND rails(9).agv <> 0 AND rails(10).agv <> 0 THEN
GOTO jmp8:
ELSEIF rails(9).agv = 0 AND (agv(rails(8).agv).ltr = "2" OR agv(rails(8).agv).ltr = "b") THEN
rails(0).m2 = rails(0).m2 + 1
rails(8).flg = false
IF agv(rails(8).agv).ltr = "b" THEN rails(8).flg = true
rails(9).time = thr
GOTO movjmp:
ELSEIF rails(11).agv = 0 THEN
jmp8:
IF agv(rails(8).agv).ltr = "2" OR agv(rails(8).agv).ltr = "b" THEN rails(31).flg = true
rails(31).time = thr
rails(31).agv = rails(8).agv:
rails(31).flg = rails(8).flg:
PrintBuggy (31):
GOTO movjmp2:
END IF
CASE 5
IF rails(6).agv <> 0 THEN 'dont move
ELSEIF rails(6).agv = 0 THEN
'LOCATE 5, 42: PRINT "% "; rails(0).m1; " "; FIX(rails(0).m1 / rails(0).agv * 100); " "
LOCATE 2, 18: PRINT agv(rails(5).agv).ltr
rails(6).time = agv(rails(5).agv).jbtm
GOTO movjmp:
END IF
CASE 4
'LOCATE 6, 42: PRINT "t "; rails(6).time; " "
IF rails(5).agv <> 0 AND rails(7).agv <> 0 THEN 'dont move
ELSEIF rails(29).agv = 0 AND rails(5).agv <> 0 AND rails(6).agv <> 0 THEN
GOTO jmp4:
ELSEIF rails(5).agv = 0 AND (agv(rails(4).agv).ltr = "1" OR agv(rails(4).agv).ltr = "a") THEN
agv(rails(4).agv).m = 200
rails(0).m1 = rails(0).m1 + 1
rails(4).flg = false
IF agv(rails(4).agv).ltr = "a" THEN rails(4).flg = true
rails(5).time = thr
GOTO movjmp:
ELSEIF rails(7).agv = 0 THEN
jmp4:
IF agv(rails(4).agv).ltr = "1" OR agv(rails(4).agv).ltr = "a" THEN rails(29).flg = true
rails(29).time = thr
rails(29).agv = rails(4).agv:
rails(29).flg = true
PrintBuggy (29):
GOTO movjmp2:
END IF
CASE 2 'robot done
IF rails(3).agv = 0 THEN
rails(3).flg = true
rails(3).time = thr
rails(an + 1).agv = rails(an).agv
rails(an + 1).flg = rails(an).flg
IF craneflg THEN
FOR i = 0 TO 10: FOR ii = 0 TO 100: NEXT: NEXT
'pause display crane & 2
END IF
PrintBuggy (an + 1)
PrintBuggy (an)
rails(an).agv = 0
rails(an).time = 0
IF craneflg THEN
PUT (cranex + 15, craney - 20), c, PSET 'erase crane arm
LINE (cranex + 15, craney - 2)-(cranex + 15 + 45, craney + 2), 12, BF
''redraw over 1st car red
PUT (cranex + 15, craney - 20), c, PSET 'erase crane arm
END IF
END IF
CASE 1
IF rails(23).agv <> 0 AND rails(2).agv = 0 THEN
rails(2).flg = true
rails(2).time = thr
rails(an + 1).agv = rails(an).agv:
rails(an + 1).flg = rails(an).flg:
PrintBuggy (an + 1)
LINE (cranex + 15, craney - 2)-(cranex + 15 + 70, craney + 2), 12, BF ''over 1st car red
craneflg = true
PrintBuggy (an)
rails(an).agv = 0
rails(an).time = 0
END IF
'' move 2 too many
CASE 0
IF rails(1).agv = 0 AND rails(23).agv <> 0 THEN
rails(0).flg = true
rails(0).agv = rails(0).agv + 1 'total agv s
rails(0).m = rails(0).m + 1
'LOCATE 7, 1: PRINT "total ";rails(0).agv; " "
rails(1).time = -60 + INC 'wait a minute / makes #23 wait
PrintBuggy (1)
InitRail1
END IF
CASE ELSE
IF rails(an + 1).agv <> 0 THEN 'dont move
ELSEIF rails(an + 1).agv = 0 THEN
movjmp0:
rails(an + 1).time = thr 'diff for machines etc
movjmp:
rails(an + 1).agv = rails(an).agv:
rails(an + 1).flg = rails(an).flg:
PrintBuggy (an + 1):
movjmp2:
PrintBuggy (an):
rails(an).agv = 0
rails(an).time = 0
END IF
END SELECT
'
END SUB
SUB PaletteChng
FOR ii = 1 TO GRY 'do colors 1 to 8 'GREEN
RED = 21 'green intensity value (11 to 63)
green = 28 + 3 * ii
blue = 21
' RED = 28 + 3 * ii 'grey intensity value (11 to 63)
' green = 28 + 3 * ii
' blue = 21
PALETTE ii, 65536 * blue + 256 * green + RED
NEXT
END SUB
SUB PrintBuggy (x)
'
b2 = bb / 2: bd = 2 * bb: c2 = cc / 2
railx = 105 + b2: raily = 105 + b2:
rail1x = railx + b2 + 5 + c2: rail1y = raily + bb + 5
''bb=26 b2=13 c2=18.5
SELECT CASE x
CASE 0
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (202 - bb, halfy - b2), e, OR 'displayed 'bl '#0
CASE 1 'lcm crnr
GET (7 * dd, maxy - dd)-(7 * dd + cc, maxy - dd + cc), e 'r7 cornr
PUT (rail1x + 6 - c2, halfy - 6 - c2), e '#1
CASE 2 'crane reciever
GET (8 * dd, maxy - dd)-(8 * dd + bb, maxy - dd + bb), e ' r8
PUT (rail1x - b2 - 5, craney - b2), e 'tl
CASE 3 'tl
GET (1 * dd, maxy - dd)-(1 * dd + cc, maxy - dd + cc), e 'r1
PUT (rail1x - c2 + 6, rail1y - c2 + 6), e
CASE 4 'check if mach1 is req'd
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (204 - b2, 110 + bb), e
CASE 5 'm1 queque
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (254 - bb, raily - b2), e
CASE 6 'm1
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (254, raily - b2), e '#6
CASE 7 '
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (304 - b2, rail1y - b2), e '#7
CASE 8 'check if mach2 is req'd
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (403 - b2, 110 + bb), e
CASE 9 'm2 queque
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (454 - bb, raily - b2), e
CASE 10 'm2
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (454, raily - b2), e
CASE 11 'tr check if mach3 is req'd
GET (3 * dd, maxy - dd)-(3 * dd + cc, maxy - dd + cc), e 'r3
PUT (maxx - 103 - bb - b2 - c2 - 6, rail1y - c2 + 6), e
CASE 12 'm3 queque
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 92 - bb, 197 - bb), e
CASE 13 'm3
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 92 - bb, 197), e '#13
CASE 14 'r
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 97 - bd, halfy - b2), e
CASE 15 'bl crnr check if mach4 is req'd
GET (5 * dd, maxy - dd)-(5 * dd + cc, maxy - dd + cc), e 'r5
PUT (503 - 6 - c2, 327 - 6 - c2), e '-6 'br '#15
CASE 16 'm4
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (414 + b2, 333 + bb - b2), e
CASE 17 'm4 queque
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (414 - b2, 333 + bb - b2), e
CASE 18
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (357 - b2, 328 - b2), e
CASE 19
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (257 - b2, 328 - b2), e '#19
'COLOR 14:
LOCATE 23, 32: PRINT agv(rails(19).agv).ltr; " ";
IF rails(19).flg THEN PRINT "t " ELSE PRINT "f "
' INPUT u$
CASE 20 'br crnr check if loop is req'd not done
GET (7 * dd, maxy - dd)-(7 * dd + cc, maxy - dd + cc), e 'r5 crnr
PUT (rail1x + 6 - c2, maxy - 113 - bb - b2 - 6 - c2), e '#20 '+-6
CASE 21 'l entry r2
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (0, 105 + bb + 5), e
CASE 22 'r entry crnr r3
GET (3 * dd, maxy - dd)-(3 * dd + cc, maxy - dd + cc), e ' r3
PUT (99 + b2 - c2, 116 + bb + b2 - c2), e 'tr
CASE 23 'crane supplier
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (railx - b2, craney - b2), e 'tr enter
CASE 24 'exit crnr
GET (5 * dd, maxy - dd)-(5 * dd + cc, maxy - dd + cc), e 'r5
PUT (94 + b2 - c2, maxy - 120 - bb - b2 - c2), e 'br
CASE 25 'exit
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (0, 328 - b2), e
CASE 26
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (rail1x + bb, 328 - b2), e '#26
CASE 27
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (railx - bd, 328 - b2), e '#27
CASE 28
GET (8 * dd, maxy - dd)-(8 * dd + bb, maxy - dd + bb), e ' r8
PUT (rail1x - b2, halfy + b2), e '#28
'''''''''''''''''''''''''''
CASE 29
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (254 - bb, rail1y - b2), e 'm1 #29
CASE 30
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (254, rail1y - b2), e 'm1 #30
CASE 31
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (454 - bb, rail1y - b2), e 'm2 #31
CASE 32
GET (2 * dd, maxy - dd)-(2 * dd + bb, maxy - dd + bb), e 'r2
PUT (454, rail1y - b2), e 'm2 #32
CASE 33
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 97 - bd, 197 - bb), e 'm3 #33
CASE 34
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 97 - bd, 197), e 'm3 #34
CASE 35
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (414 + b2, 327 - b2), e 'hor m4 #35
CASE 36
GET (6 * dd, maxy - dd)-(6 * dd + bb, maxy - dd + bb), e 'r6
PUT (414 - b2, 327 - b2), e 'hor m4 #36
CASE 37 'm3 queque extra to minimize loop'g
GET (4 * dd, maxy - dd)-(4 * dd + bb, maxy - dd + bb), e 'r4
PUT (maxx - 92 - bb, 197 - bb - bb), e
'
CASE ELSE
END SELECT
'
END SUB
SUB RevBody (x0, y0)
'
dlx = 34: dly = 30 + aa
z = 1: a0 = 14
FOR t = 0 TO a0 'STEP -1 '
LINE (x0, y0 + t)-(x0 + dlx, y0 + t), FIX((a0 - t) / 2 + 1)'top
LINE (x0, y0 + dly - t)-(x0 + dlx, y0 + dly - t), FIX((a0 - t) / 2 + 1)'bottom
NEXT t
'
END SUB
SUB Rotation (x0, y0, o0)
' 'w=/180*pi
xx = FIX(x0 * COS(o0 * W) + y0 * SIN(o0 * W)) 'rotate z-axis oo z=z
YY = FIX(-x0 * SIN(o0 * W) + y0 * COS(o0 * W))
'
END SUB
RETURN TO TOP
|
PREVIOUS MENU
|
MAIN MENU
|
HOME PAGE