TITLE: :T1 = { MACH3 CNC Milling Controller Copyright (c) 2003 Dolphin CADCAM Ltd Works in INC arc moves. } END: WORDS: :TMP = {DDDDDD.dd} :BLOCK = {"N"DDDD} :XAXIS = {"X"DDDDD.ddd} {"X"DDD.dddd} :YAXIS = {"Y"DDDDD.ddd} {"Y"DDD.dddd} :ZAXIS = {"Z"DDDDD.ddd} {"Z"DDD.dddd} :XARC = {"I"DDDDD.ddd} {"I"DDD.dddd} :YARC = {"J"DDDDD.ddd} {"J"DDD.dddd} :DELAY = {"G04X"DDDDD.ddd} :DWELL = {"P"DDDD.ddd} :PECK = {"Q"DDDDD.ddd} {"Q"DDD.dddd} :RPLANE = {"R"DDDDD.ddd} {"R"DDD.dddd} :FEED = {"F"DDDDD.dddI} {"F"DDD.dddd} :SPIN = {"S"DDDD} :TOOL = {"T"DD} :SUBPR = {"P"DDDD} :REPEAT = {"L"DDDD} :CRC = {"D"DD} :TLC = {"H"DD} :INDEX = {"INDEX"DDD.ddd} :PROGNO = {"O"DDDDD} END: GROUPS: :G1 = { G00 G01 G02 G03 } :G8 = { G73 G74 G76 G80 G81 G82 G83 G84 G85 G86 G87 G88 G89 } :G2 = { G17 G18 G19 } :G3 = { G90 G91 } :G4 = { G94 G95 } :G5 = { G20 G21 } :G6 = { G40 G41 G42 } :G7 = { G43 G44 G49 } :G9 = { G98 G99 } :G10 = { G54 G55 G56 G57 G58 G59 } :M1 = { M00 M01 M03 M04 M05 M06 } :M2 = { M98 M99 } END: CYCLES: DRILL CANNED DRILLDWELL CANNED DEEPDRILL EXPAND NDEEP CANNED NPECK CANNED PECKDRILL EXPAND NPECK CANNED REAM CANNED BORE CANNED TAP CANNED TAPNOREV EXPAND LHTAP EXPAND LHTAPNOREV EXPAND HELIX VECTOR ARC QUADRANT END: MACROS: #N = { $BLOCK:BLOCK IF ($BLOCK EQ 9995) THEN SET $BLOCK = 5 ENDIF } #L = { [RAPID ? (G01) / (G00)] } #FTYPE = { [FEEDTYPE ? (G94) / (G95) ] } #X = { ($X:XAXIS) } #Y = { ($Y:YAXIS) } #Z = { ($Z:ZAXIS) } #I = { $XCEN:XARC } #J = { $YCEN:YARC } #R = { ($CCLDIST:RPLANE) } #P = { if ( $CDELAY ne 0 ) then ($CDELAY:DWELL) endif } #F = { [RAPID ? [FEEDTYPE ? ($FPM:FEED) / ($FPR:FEED) ] ] } #DWELL = { if ($CDELAY ne 0) then (G82) else (G81) endif } #DWREM = { if ($CDELAY ne 0) then (G89) else (G85) endif } #DWBOR = { if ($CDELAY ne 0) then (G88) else (G86) endif } #RAPID = { SET [RAPID] = 2 } #FEED = { SET [RAPID] = 1 } #IPLANE = { if ( [CRETRACT] eq 2 ) then (G99) else (G98) endif } #CRCX = { [CUTCOM ? (G40) / (G41) / (G42)] } #CRCNOX = { [CUTCOM ? NULL / ($CRCNO:CRC) / ($CRCNO:CRC) ] } #CRC = { NULL } #CRCNO = { NULL } #Q = { (ABS($CD1):PECK) } END: RULES: :INIT = { SET $USR1 = 0 SET $USR5 = 2.5 SET $BLOCK = 1 set $INCR = 1 set $RAPIDFEED = 10000 ; rapid feedrate } :PARTNO = { "( Produced :- " $TIME " " $DATE " )" EOB "( CNC File :- " $CNCNAME " )" EOB "( Post Processor :- " $POST " )" EOB "( Part Number ID :- " $JOBTEXT " )" EOB } :XPROGNO = { "%" EOB $PROGNO:PROGNO EOB } :UNITS = { #N (G00) [UNITS ? (G21) / (G20)] (G17) (G90) (G40) (G49) (G80) EOB IF ([UNITS] EQ 1) THEN SET $USR2 = 0.0005 set $PRECISION = 0.001 ELSE SET $USR2 = 0.00005 set $PRECISION = 0.0001 ENDIF } :STOP = { UNSETALL #N (M00) EOB } :OPSTOP = { UNSETALL #N (M01) EOB } :PPRINT = { #N $JOBTEXT EOB } :RETRACT = { #N (G00) #Z eob } :GOTO = { SET $USR3 = 0 IF ((ABS($DELTAX) GE $USR2) OR (ABS($DELTAY) GE $USR2)) THEN SET $USR3 = 1 ENDIF IF (($USR3 EQ 1) OR (ABS($DELTAZ) GE $USR2)) THEN #N #L #CRC IF ((ABS($DELTAX) GE $USR2) OR (ABS($DELTAY) GE $USR2)) THEN $X:XAXIS $Y:YAXIS ENDIF IF (ABS($DELTAZ) GE $USR2) THEN #Z ENDIF #CRCNO #F EOB ENDIF } :GOCLW = { #N (G02) #CRC #X #Y #Z #I #J #CRCNO #F eob } :GOACLW = { #N (G03) #CRC #X #Y #Z #I #J #CRCNO #F eob } :DELAY = { #N $DELAY:DELAY eob } :SPINDLE = { #N $SPINDLE:SPIN [SPIN ? NULL / (M03) / (M04) ] eob #N #FTYPE EOB } :FINISH = { #N (M09) EOB #N (M30) EOB "%" EOB } :SELCTL = { IF ($USR1 EQ 1) THEN #N (M09) EOB ENDIF SET $USR1 = 1 UNSETALL set $CYCLETIME = $CYCLETIME + 0.5 ; 30 seconds for a tool change if ( $Z ne $ZTLOAD ) then #N (G00) (G28) $ZTLOAD:ZAXIS eob #N (G49) EOB endif #N (G49) eob #N $TOOLNO:TOOL (M06) " ( " $JOBTEXT " )" eob #N (G00) (G43) $CLEARP:ZAXIS $TLCNO:TLC eob } :DRILL = { #N #IPLANE #DWELL #X #Y #Z #R IF ($CDELAY NE 0) THEN ($CDELAY:DWELL) ENDIF #F eob } :BORE = { #N #IPLANE #DWBOR #X #Y #Z #R IF ($CDELAY EQ 0) THEN ($USR5:DWELL) ELSE ($CDELAY:DWELL) ENDIF #F eob } :REAM = { #N #IPLANE #DWREM #X #Y #Z #R #F EOB } :TAP = {#N #IPLANE (G84) #X #Y #Z #R #F EOB } :NPECK = { #N #IPLANE (G83) #X #Y #Z #Q #R #F EOB } :NDEEP = { #N #IPLANE (G83) #X #Y #Z #Q #R #F EOB } :DRILLDWELL = :DRILL :COOLANT = {IF ([COOLANT] EQ 1) THEN #N (M09) EOB ENDIF IF ([COOLANT] EQ 2) THEN #N (M08) EOB ENDIF } :CYCLEOFF = { #N (G80) EOB UNSET (G8) unset :RPLANE unset :PECK UNSET (G9) UNSET :FEED UNSET :ZAXIS UNSET :DWELL } :GOHOME = { if ( $Z lt $CLEARP ) then #N (G00) (G80) $CLEARP:ZAXIS eob endif #N (G00) $XSAFPOS:XAXIS $YSAFPOS:YAXIS EOB #N (G00) (G28) $ZSAFPOS:ZAXIS eob #N (G49) EOB } :CLEARP = { if ($CLEARP lt $CLDIST) then ERRMSG "Clear plane is below Wsurf - DANGER" endif } END: