lathe post processor help for kmotion cnc
trying to get my lathe cutting but need the dolphin to spit out some code to play with kmotion cnc
i see an incremental I J PPR in the PPR editor but for the life of me i cant use it from the dolphing cam
is this going to work out?
HTML Code:
TITLE:
:T1 = {
MACH3 CNC Milling Controller
Copyright (c) 2003 Dolphin CADCAM Ltd
Modified to remove quadrant splitting in Arcs. nov 2013 mmm.
}
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
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) }
#IINC = { ($XCEN-$OLDX):XARC }
#JINC = { ($YCEN-$OLDY):YARC }
#IABS = { $XCEN:XARC }
#JABS = { $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 #IINC #JINC #CRCNO #F eob }
:GOACLW = { #N (G03) #CRC #X #Y #Z #IINC #JINC #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:
Re: lathe post processor help for kmotion cnc
so my main issue here is the arc's are backwards
pretty sure there must be a simple fix?
CAM is this.......
https://imagizer.imageshack.com/v2/1...924/BXkGqW.jpg
and the output in kmotioncnc looks like this up close.......
https://imagizer.imageshack.com/v2/1...923/xzYPeD.jpg
Re: lathe post processor help for kmotion cnc
well i figured it out in about 12 hours.
now free to anyone who may need it.
HTML Code:
TITLE:
:T1 = {
CNC Lathe
Mach3 Radius Mode Post
G32 type threading
Modified by Steve Blackmore 06/04/05
}
:T2 = {
Added Mach3 Constant surface speed support 30/01/05
Added G83 peck drilling 02/03/05
New tool format support added 27/07/05
Altered M6 to follow tool select 24/12/05
Modified by Steve Blackmore
}
END:
VERSION:
FILEVERSION 11.0 TURNING turbo modified!!!!!
END:
WORDS:
:TMP = {DDDDDD.dd}
:BLOCK = {"N"DDDD" "}
:XAXIS = {"Z"DDDDD.ddd" "} {"Z"DDD.dddd" "}
:YAXIS = {"X"DDDDD.ddd" "} {"X"DDD.dddd" "}
:XARC = {"K"DDDDD.ddd" "} {"K"DDD.dddd" "}
:YARC = {"I"DDDDD.ddd" "} {"I"DDD.dddd" "}
:ARAD = {"R"DDDDD.ddd" "} {"R"DDD.dddd" "}
:DELAY = {"G04 P"DDD" "}
:DWELL = {"P"DDDD.dddd" "}
:PECK = {"Q"DDDDD.ddd" "} {"Q"DDD.dddd" "}
:NDEEP = {"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"ZDD}
:SUBPR = {"P"DDDD" "}
:REPEAT = {"L"DDDD" "}
:CRC = {"D"DD" "}
:TLC = {""ZDD" "}
:SURF = {"S"DDDD" "}
:SRAD = {"R"DDDD.ddI} {"R"DD.ddddI}
:INDEX = {"INDEX"DDD.ddd" "}
:PROGNO = {"O"DDDDD" "}
:NUM1 = {" "DDDD.dddd" "}
:ROT = {" "DD" "}
:TOOLD = {DDDDD.ddd} {DDD.dddd}
END:
AXES:
YSCALE 1
XSCALE 1
TURRET
END:
GROUPS:
:G1 = {G00_ G01_ G02_ G03_ G80_ G81_ G82_ G83_ G83.1_ G84_ G85_ G86_ G87_ G88_ G89_}
:G2 = {G17_ G18_ G19_}
:G3 = {G90_ G91_ G90.1_ G91.1_}
:G5 = {G48_ G93_ G94_ G95_ G96_ G97_}
:G6 = {G20_ G21_}
:G7 = {G40_ G41_ G42_}
:G8 = {G43_ G49_}
:G10 = {G98_ G99_}
:G12 = {G50_ G51_ G54_ G55_ G56_ G57_ G58_ G59_ G59.1_ G59.2_ G59.3_}
:G13 = {G61_ G61.1_ G64_}
:G4 = {M00_ M01_ M02_}
:G7 = {M03_ M04_ M05_}
:G8 = {M07_ M08_ M09_}
:G9 = {M48_ M49_}
END:
CYCLES:
NPECK CANNED
NDEEP CANNED
TURN EXPAND
FACE EXPAND
THREAD EXPAND
END:
MACROS:
#N = {
$BLOCK:BLOCK
; If the block number reaches the max (according to RD274) start over
; Note: 'N' has no meaning in processing and is there for readability ONLY
IF ($BLOCK EQ 99990) THEN
SET $BLOCK = 5
ENDIF
}
#L = { [RAPID ? (G01_) / (G00_)] }
#FTYPE = { [FEEDTYPE ? (G94_) / (G95_) ] }
#X = { $X:XAXIS }
#Y = { $Y:YAXIS }
#I = { $XCEN:XARC }
#K = { $YCEN:YARC }
#AR = { $ARCRAD:ARAD }
#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 }
#RAPID = { SET [RAPID] = 2 }
#FEED = { SET [RAPID] = 1 }
#SPIN = { ($SPINDLE:SPIN) [SPIN ? (M05_) / (M03_) / (M04_) ] }
#SURF = { IF ( $SURF GT 1) THEN
$SURF:SURF
ELSE "S525"
ENDIF
}
#GCLW = {
IF ($USR11 EQ 0) THEN
(G03_)
ELSE
(G02_)
ENDIF
}
#GACLW = {
IF ($USR11 EQ 0) THEN
(G02_)
ELSE
(G03_)
ENDIF
}
#IPLANE = {
IF ([CRETRACT] EQ 2) THEN
(G99_)
ELSE
(G98_)
ENDIF
}
#CRC = {
; Only output G41/G42 if part surface is requested (PSPROG=2) which means the CNC
; has to offset the tool
IF ([PSPROG] EQ 2) THEN
[CUTCOM ? (G40_) / (G41_) / (G42_) ]
ENDIF
}
#CRCNO = {
IF ([PSPROG] EQ 2) THEN
($CRCNO:CRC)
ENDIF
}
#Q = { ABS($CDEPTH/$CNDEPTH):NDEEP }
#Q = { ABS($CDEPTH/$CNDEPTH):NPECK }
#UNSET = {
IF ((ABS($DELTAX) LT $USR8) AND (ABS($DELTAY) LT $USR8)) THEN
UNSETALL
ENDIF
}
END:
RULES:
:INIT = {
set $RAPIDFEED = 100 ; rapid feedrate
SET $USR11 = 0 ; Set to 1 if Proturn Arcs to be negated (dependant on tool)
SET $USR12 = 0 ; set for Arc direction fix for FRONT turret and TURN cycles.
SET $USR13 = 1.0 ; SCALE FACTOR TO COMPENSATE FOR ANGLES BEING WRONGLY SCALED IN INCH.
SET $USR14 = 0.0
}
:START = {
; start with N10, increment in 1s
SET $BLOCK = 1
set $INCR = 1
}
:ORIGIN = {
;#N (G92_) $ORIGINY:YAXIS $ORIGINX:XAXIS EOB
;unset :XAXIS
;unset :YAXIS
}
:RETRACT = { #N #L #Y #X EOB }
:UNITS = {
; G20/G21 = Inch/MM units
; G18 = XZ Plane
; G64 = Constant velocity mode (G61 = exact stop)
; G80 = Cancel modal motion (deactivates all move modalities)
; G90 = Absolute mode (G91 = Incremental mode)
; M49 = Disable speed/feed overrides
#N [UNITS ? (G21_) / (G20_)] (G18_) (G64_) (G80_) (G90_) (M49_) "G90.1 "
; KAA - changed order to default IN so that the set is not needed 2x for each IN
; Sets MIN change in move for a program block to be written
SET $USR8 = 0.00005 ; default IN scale
set $usr13 = 25.4
IF ([UNITS] EQ 1) THEN
SET $USR8 = 0.0005 ; set MM scale
SET $USR13 = 1.0
ENDIF
(G40_) (G49_) (G80_) EOB
#N #FTYPE #F EOB
}
:CUTCOM = {
IF (0 NE 0) THEN
; Only output G41/G42 if part surface is requested (PSPROG=2) which means the CNC
; has to offset the tool
IF ([PSPROG] EQ 2) THEN
[CUTCOM ? (G40_) / (G41_) / (G42_) ]
ELSE
(G40_)
ENDIF
#CRCNO EOB
ENDIF
}
:GOTO =
{
NULL ; "DISTANCE : " $DISTANCE:NUM1 EOB
IF ($DISTANCE GE $USR8) THEN
#N #CRC #CRCNO EOB
#N #L #Y #X #FTYPE #F EOB
ENDIF
}
:GOCLW = {
#UNSET
IF (([PSPROG] NE 2) OR ([CUTCOM] LT 2)) THEN
#N #CRC EOB
#N #GCLW #Y #X #AR #F EOB
ELSE
#N #CRC #CRCNO EOB
#N #GCLW #Y #X #AR #F EOB
ENDIF
}
:GOACLW = {
#UNSET
IF (([PSPROG] NE 2) OR ([CUTCOM] LT 2)) THEN
#N #CRC EOB
#N #GACLW #Y #X #AR #F EOB
ELSE
#N #CRC #CRCNO EOB
#N #GACLW #Y #X #AR #F EOB
ENDIF
}
:DELAY = { #N $DELAY:DELAY EOB }
:NDEEP = { #N (G83) #Y #X #R #Q #IPLANE #F EOB }
:NPECK = { #N (G83.1) #Y #X #R #Q #IPLANE #F EOB }
:SCREWING = { #N "G32 " #Y #X #F EOB
UNSET (G5)
UNSET :FEED
}
:SCRCUT = {
UNSET :FEED
#N #FTYPE #F EOB
#N (G0_) #X #Y EOB
#N (G1_) $CXSTART:XAXIS $CYSTART:YAXIS EOB
#N (G76_) ($CYEND-$CDEPTH):YAXIS $XEND:XAXIS ""$FEEDANGLE:PA " "$PITCH:FS " "$ROUGHCUTS:DS " "$FINISHCUTS:PF " T0 " $SPINDLE:SPIN ""$CLDIST:PO eob
#N (G94_)eob
UNSET :FEED
}
:SPINDLE = {UNSET (G5)
IF ( [SPIN] eq 1) then
#N (M05) eob
ENDIF
IF ([SPINTYPE] EQ 2 ) THEN
#N [SPIN ? NULL / (M03_) / (M04_) ] #FTYPE #F EOB
#N (G48_) $MAXSPIN:SPIN " " EOB
#N (G96_) $SURF:SURF EOB
ELSE
#N [SPIN ? NULL / (M03_) / (M04_) ] #FTYPE #F EOB
#N (G97_) $SPINDLE:SPIN " " EOB
ENDIF }
:FINISH = { #N (M05_) (M09_) EOB
#N (M30_) EOB " " EOB }
:SELCTL = {
SET $USR11 = 0
IF ([TURRET] EQ 2) THEN
SET $USR12 = 1 ; Front Turret, set $USR12 for TURN cycles arc direction
else
SET $USR12 = 0
ENDIF
set $CYCLETIME = $CYCLETIME + 0.5 ; 30 seconds for a tool change
#N (M09_) EOB
#N "G00"" " $YSAFPOS:YAXIS $XSAFPOS:XAXIS (M05_) EOB
IF ($X NE $XTLOAD ) THEN
#N (G28_) $XTLOAD:XAXIS EOB
#N (G49_) EOB
ELSE
IF ($Y NE $YTLOAD ) THEN
#N (G28_) $YTLOAD:YAXIS EOB
#N (G49_) EOB
ENDIF
ENDIF
EOB
#N (G49_) EOB
}
:CYCLEOFF = {
#N (G80_) EOB
unset :G1
UNSET(M08_)
UNSET:RPLANE
UNSET(M09_)
UNSET :FEED
UNSET:YAXIS
UNSET:XAXIS
UNSET (G5)
UNSET :SPIN
UNSET :PECK
UNSET :DWELL
}
:GOHOME = {
UNSET (G5)
UNSET :FEED
UNSET :SPIN
#N "G00" " " $YSAFPOS:YAXIS $XSAFPOS:XAXIS #FTYPE #F EOB
}
END:
Re: lathe post processor help for kmotion cnc
As far as I can see the post is configured to output IJ values as Incremental.
Re: lathe post processor help for kmotion cnc
Best advice I can give is to send me a few sample cnc programs which you know will run on your machine tool and I will see what I can do, send to [email protected]