' "**************************************************************" ' "* CNC KORDINATNA BUSILICA 'ISEL' *" ' "* Verzija: 2.0 6.11.1991. *" ' "* Copyright (C) 1991. by: Goran Stankovic dipl.ing.el. *" ' "* www.qsl.net/yt2fsg goranstank@email.com *" ' "* *" ' "* Dimenzija radnog prostora: Rezolucija: *" ' "* X = 280 mm => 11200 koraka X = 0.025 mm *" ' "* Y = 415 mm => 16600 koraka Y = 0.025 mm *" ' "* Z = 70 mm => 7000 koraka Z = 0.01 mm *" ' "**************************************************************" OUT 888, 255 kom% = 16 DIM b$(kom%), b1%(kom%) GOSUB displej GOSUB init GOSUB displej X1% = 0: Y1% = 0 X% = 0: Y% = 0: Z% = 0: Z2% = Z% Xmax% = 11200: Ymax% = 16600 Zmax% = 7000: Z1% = Zmax%: H% = Zmax% cw4% = 192: cw3% = cw4% + 48 Fmin% = 100: Fmax% = 5000: F% = 500: Fz% = F% * 1.5 GOSUB displej2 tool1% = 0: tool2% = 1: tool3% = 1 rip11: DO tool4% = 0: tool5% = 0 LOCATE 23, 1 PRINT " "; LOCATE 23, 1 LINE INPUT "> "; red$ red$ = UCASE$(red$) duz% = LEN(red$) IF duz% > 0 THEN IF LEFT$(red$, 1) = "(" THEN GOTO rip1 IF LEFT$(red$, 4) = "FILE" THEN GOSUB alatup GOTO sadiska END IF j% = 1: b1$ = "" FOR i% = 1 TO duz% a$ = MID$(red$, i%, 1) IF a$ >= "A" AND a$ <= "Z" THEN b$(j%) = a$: b1%(j% - 1) = VAL(b1$): b1$ = "" j% = j% + 1 END IF IF a$ >= "0" AND a$ <= "9" THEN b1$ = b1$ + a$ END IF NEXT i% b1%(j% - 1) = VAL(b1$) FOR i% = 1 TO j% - 1 IF b$(i%) = "X" THEN X% = ABS(b1%(i%)) IF X% > Xmax% THEN X% = X1%: GOTO rip3 tool4% = 1 GOTO rip2 END IF IF b$(i%) = "Y" THEN Y% = ABS(b1%(i%)) IF Y% > Ymax% THEN Y% = Y1%: GOTO rip3 tool4% = 1 GOTO rip2 END IF IF b$(i%) = "F" THEN F% = ABS(b1%(i%)) IF F% > Fmax% THEN F% = Fmax% IF F% < Fmin% THEN F% = Fmin% Fz% = F% * 1.5 LOCATE 14, 35 PRINT "F="; F%; " "; GOTO rip2 END IF IF b$(i%) = "M" THEN M% = ABS(b1%(i%)) IF M% > 99 THEN M% = 0: GOTO rip3 GOTO rip2 END IF IF b$(i%) = "G" THEN G% = ABS(b1%(i%)) IF G% > 99 THEN G% = 0: GOTO rip3 GOTO rip2 END IF IF b$(i%) = "Z" THEN Z% = ABS(b1%(i%)) IF Z% > H% THEN Z% = H% Z2% = Z% LOCATE 16, 5 PRINT "Z="; Z%; " "; GOTO rip2 END IF IF b$(i%) = "H" THEN H% = ABS(b1%(i%)) IF H% > Zmax% THEN H% = Zmax% IF H% < Z% THEN H% = Z% LOCATE 16, 20 PRINT "H="; H%; " "; tool5% = 1 GOTO rip2 END IF IF b$(i%) = "T" THEN T2% = T% T% = ABS(b1%(i%)) IF T% > 99 THEN T% = 99: GOTO rip3 IF T% = 0 AND tool4% = 1 THEN IF tool2% = 1 THEN tool2% = 0: tool3% = 0 ELSE tool2% = 1: tool3% = 0 END IF T% = T2% END IF IF T% = 99 THEN IF tool1% = 1 THEN tool1% = 0 LOCATE 16, 35 PRINT "T= OFF "; ELSE tool1% = 1 LOCATE 16, 35 PRINT "T="; T2%; " "; END IF T% = T2% END IF IF T% > 0 AND tool1% = 1 AND tool3% = 1 THEN LOCATE 16, 35 PRINT "T="; T%; " "; END IF GOTO rip2 END IF red$ = red$ + "<= * E R R O R * Nepoznata naredba !" tt3% = 0 EXIT FOR rip3: red$ = red$ + "<= * E R R O R * Prekoracena Max vrednost !" tt3% = 0 EXIT FOR rip2: NEXT i% LOCATE 21, 1 PRINT " "; LOCATE 21, 1 PRINT ": "; red$; IF tool5% = 1 THEN Z% = H% GOSUB zosa Z% = Z2% END IF IF tool4% = 1 THEN GOSUB bresenham IF tool1% = 1 AND tool3% = 1 THEN GOSUB zosa Z% = H% GOSUB zosa Z% = Z2% END IF IF tool3% = 0 THEN IF tool2% = 0 THEN GOSUB zosa ELSE tool3% = 1 Z% = H% GOSUB zosa Z% = Z2% END IF END IF END IF END IF rip1: LOOP '-------------------- SA DISKA ----------------------- sadiska: CLOSE #1 imef$ = RIGHT$(red$, duz% - 5) 'PRINT imef$ IF LEN(imef$) > 4 THEN LOCATE 12, 5: PRINT "FILE : "; imef$; " - Izlaz" OPEN "I", #1, imef$ brred% = 0: fleg1% = 0 DO tool4% = 0 LINE INPUT #1, red$ red$ = UCASE$(red$) brred% = brred% + 1 duz% = LEN(red$) IF duz% > 0 THEN IF LEFT$(red$, 1) = "(" THEN GOTO rip21 'IF LEFT$(red$, 1) = "%" THEN fleg1% = 1: GOTO rip21 'IF fleg1% = 1 THEN j% = 1: b1$ = "" FOR i% = 1 TO duz% a$ = MID$(red$, i%, 1) IF a$ >= "A" AND a$ <= "Z" THEN b$(j%) = a$: b1%(j% - 1) = VAL(b1$): b1$ = "" j% = j% + 1 END IF IF a$ >= "0" AND a$ <= "9" THEN b1$ = b1$ + a$ END IF NEXT i% b1%(j% - 1) = VAL(b1$) FOR i% = 1 TO j% - 1 IF b$(i%) = "X" THEN X% = ABS(b1%(i%)) / 2.5 IF X% > Xmax% THEN X% = X1%: GOTO rip23 tool4% = 1 GOTO rip22 END IF IF b$(i%) = "Y" THEN Y% = ABS(b1%(i%)) / 2.5 IF Y% > Ymax% THEN Y% = Y1%: GOTO rip23 tool4% = 1 GOTO rip22 END IF IF b$(i%) = "T" THEN T2% = T% T% = ABS(b1%(i%)) IF T% > 99 THEN T% = 99: GOTO rip23 IF T% > 0 AND tool1% = 1 THEN LOCATE 16, 35 PRINT "T="; T%; " "; END IF GOTO rip22 END IF IF b$(i%) = "M" THEN M% = ABS(b1%(i%)) IF M% > 99 THEN M% = 0: GOTO rip23 GOTO rip22 END IF red$ = red$ + "<= * E R R O R * Nepoznata naredba !" tt3% = 0 EXIT FOR rip23: red$ = red$ + "<= * E R R O R * Prekoracena Max vrednost !" tt3% = 0 EXIT FOR rip22: NEXT i% LOCATE 21, 1 PRINT " "; LOCATE 21, 1 PRINT "BLOK"; brred%; ": "; red$; IF tool4% = 1 THEN GOSUB bresenham IF tool1% = 1 THEN GOSUB zosa Z% = H% GOSUB zosa Z% = Z2% END IF END IF END IF rip21: IF EOF(1) OR INKEY$ = "q" OR INKEY$ = "Q" THEN EXIT DO LOOP CLOSE #1 END IF LOCATE 12, 5: PRINT " "; GOSUB alatup GOTO rip11 '---------------------------------------------------------- ' Rutina BRESENHAM '---------------------------------------------------------- bresenham: bit01% = 0 bit1% = 0 bit21% = 0 bit3% = 0 dX% = X% - X1% dY% = Y% - Y1% IF dX% < 0 THEN bit1% = 2 dX% = ABS(dX%) END IF IF dY% < 0 THEN bit3% = 8 dY% = ABS(dY%) END IF IF dX% >= dY% THEN bit21% = 4 ELSE bit01% = 1 dd% = dX% dX% = dY% dY% = dd% END IF steps% = dX% + dY% ee% = -dX% dX% = 2 * dX% dY% = 2 * dY% WHILE steps% > 0 ee% = ee% + dY% IF ee% <= 0 THEN bit0% = bit01% bit2% = bit21% ELSE ee% = ee% - dX% bit0% = 0 bit2% = 0 steps% = steps% - 1 END IF steps% = steps% - 1 GOSUB element WEND RETURN ' --------------------------------------------------------- ' Elementarna rutina ' --------------------------------------------------------- element: IF bit0% = 0 THEN IF bit1% = 0 THEN X1% = X1% + 1 ELSE X1% = X1% - 1 END IF END IF IF bit2% = 0 THEN IF bit3% = 0 THEN Y1% = Y1% + 1 ELSE Y1% = Y1% - 1 END IF END IF cw1% = cw3% + bit3% + bit2% + bit1% + bit0% cw2% = cw3% + bit3% + bit1% + 5 OUT 888, cw1% GOSUB brzina OUT 888, cw2% GOSUB brzina LOCATE 14, 5 PRINT "X="; X1%; " "; LOCATE 14, 20 PRINT "Y="; Y1%; " "; RETURN '--------------------------------------------------------- ' Z osa '--------------------------------------------------------- zosa: bit4% = 0 bit5% = 0 dZ% = Z1% - Z% IF dZ% < 0 THEN bit5% = 32 dZ% = ABS(dZ%) END IF WHILE dZ% > 0 dZ% = dZ% - 1 IF bit5% = 0 THEN Z1% = Z1% - 1 ELSE Z1% = Z1% + 1 END IF cw1% = cw4% + bit5% + 15 cw2% = cw4% + bit5% + 31 OUT 888, cw1% GOSUB brzinaz OUT 888, cw2% GOSUB brzinaz LOCATE 16, 50 PRINT "z="; Z1%; " "; WEND RETURN '--------------------- Digni alat ------------------------- alatup: IF tool2% = 0 THEN tool3% = 1 Z% = H% GOSUB zosa Z% = Z2% END IF RETURN '---------------------------------------------------------- ' INICIJALIZAJA '---------------------------------------------------------- init: X1% = 0: Y1% = 0: Z1% = 0 ' Step motori sa punim korakom Xmax% = 11200: Ymax% = 16600: Zmax% = 7000 F% = 1000: Fz% = F% * 1.5 greska% = 0 OUT 888, 63 GOSUB brzina OUT 888, 255 ' Reverenz taster = bit5 sr% = INP(889) sr% = sr% AND 32 IF sr% = 0 THEN PRINT "INICIJALIZACIJA MASINE:" PRINT PRINT " 1. RUCNO IZVUCI MASINU IZ KORDINATNOG POCETKA !" PRINT " 2. PRITISNI TASTER 'Clear' NA MASINI." DO sr% = INP(889) sr% = sr% AND 32 IF sr% = 32 THEN GOTO hop1 LOOP ELSE '--------------- X osa ---------------------- hop1: OUT 888, 254 GOSUB brzina OUT 888, 255 GOSUB brzina X1% = X1% + 1 IF X1% > Xmax% + 200 THEN GOTO hop31 sr% = INP(889) sr% = sr% AND 32 IF sr% = 32 THEN GOTO hop1 X1% = 0 hop2: OUT 888, 252 GOSUB brzina OUT 888, 253 GOSUB brzina X1% = X1% + 1 IF X1% > 200 THEN GOTO hop31 sr% = INP(889) sr% = sr% AND 32 IF sr% = 0 THEN GOTO hop2 GOTO hop3 hop31: PRINT " * E R R O R * Greska u X-osi (drajver, kabl, motor, mikro-prekidac)" greska% = 1 '--------------- Y osa ------------------------ hop3: OUT 888, 251 GOSUB brzina OUT 888, 255 GOSUB brzina Y1% = Y1% + 1 IF Y1% > Ymax% + 200 THEN GOTO hop51 sr% = INP(889) sr% = sr% AND 32 IF sr% = 32 THEN GOTO hop3 Y1% = 0 hop4: OUT 888, 243 GOSUB brzina OUT 888, 247 GOSUB brzina Y1% = Y1% + 1 IF Y1% > 200 THEN GOTO hop51 sr% = INP(889) sr% = sr% AND 32 IF sr% = 0 THEN GOTO hop4 GOTO hop5 hop51: PRINT " * E R R O R * Greska u Y-osi (drajver, kabl, motor, mikro-prekidac)" greska% = 1 '--------------- Z osa -------------------------- hop5: 'GOTO hop10 OUT 888, 239 GOSUB brzinaz OUT 888, 255 GOSUB brzinaz Z1% = Z1% + 1 IF Z1% > Zmax% + 400 THEN GOTO hop11 sr% = INP(889) sr% = sr% AND 32 IF sr% = 32 THEN GOTO hop5 Z1% = 0 hop6: OUT 888, 207 GOSUB brzinaz OUT 888, 223 GOSUB brzinaz Z1% = Z1% + 1 IF Z1% > 400 THEN GOTO hop11 sr% = INP(889) sr% = sr% AND 32 IF sr% = 0 THEN GOTO hop6 GOTO hop10 hop11: PRINT " * E R R O R * Greska u Z-osi (drajver, kabl, motor, mikro-prekidac)" greska% = 1 hop10: IF greska% = 1 THEN DO IF INKEY$ <> "" THEN EXIT DO LOOP 'END END IF END IF hop20: PRINT INPUT "U glavi masine nalazi se alat broj T="; T% T% = ABS(T%) IF T% < 1 AND T% > 98 THEN GOTO hop20 RETURN '-------------------- BRZINA ------------------------------ brzina: FOR i% = 0 TO F% NEXT i% RETURN brzinaz: FOR i% = 0 TO Fz% NEXT i% RETURN '-------------------- DISPLEJ ------------------------------ displej: CLS PRINT "**************************************************************" PRINT "* CNC KORDINATNA BUSILICA 'ISEL' *" PRINT "* Verzija: 2.0 6.11.1991. *" PRINT "* Copyright (C) 1991. by: Goran Stankovic dipl.ing.el. *" PRINT "* *" PRINT "* Dimenzija radnog prostora: Rezolucija: *" PRINT "* X = 280 mm => 11200 koraka X = 0.025 mm *" PRINT "* Y = 415 mm => 16600 koraka Y = 0.025 mm *" PRINT "* Z = 70 mm => 7000 koraka Z = 0.01 mm *" PRINT "**************************************************************" PRINT PRINT PRINT RETURN displej2: LOCATE 14, 5 PRINT "X="; X1%; " "; LOCATE 14, 20 PRINT "Y="; Y1%; " "; LOCATE 16, 5 PRINT "Z="; Z%; " "; LOCATE 16, 35 PRINT "T= OFF "; LOCATE 16, 20 PRINT "H="; H%; " "; LOCATE 14, 35 PRINT "F="; F%; " "; RETURN