THE PAST MASTER CLUB
   
MANUFACTURING SYSTEM SIMULATION ANIMATION.HTM

mfssqb.gif
' ** 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
Hosted by www.Geocities.ws

1