lathe post processor help for kmotion cnc


Results 1 to 3 of 3

Thread: lathe post processor help for kmotion cnc

  1. #1
    Member turbothis's Avatar
    Join Date
    Oct 2009
    Location
    usa/oregon
    Posts
    194
    Downloads
    0
    Uploads
    0

    Default 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:


    Similar Threads:
    shizuoka an-s knee mill=kflop/kanalog running nema 34 dc brushed servos
    cincinnati sabre 750=kflop/kanalog building now with ac brushless servos


  2. #2
    Member turbothis's Avatar
    Join Date
    Oct 2009
    Location
    usa/oregon
    Posts
    194
    Downloads
    0
    Uploads
    0

    Default 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.......



    and the output in kmotioncnc looks like this up close.......



    shizuoka an-s knee mill=kflop/kanalog running nema 34 dc brushed servos
    cincinnati sabre 750=kflop/kanalog building now with ac brushless servos


  3. #3
    Member turbothis's Avatar
    Join Date
    Oct 2009
    Location
    usa/oregon
    Posts
    194
    Downloads
    0
    Uploads
    0

    Default 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:


    shizuoka an-s knee mill=kflop/kanalog running nema 34 dc brushed servos
    cincinnati sabre 750=kflop/kanalog building now with ac brushless servos


Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


About CNCzone.com

    We are the largest and most active discussion forum for manufacturing industry. The site is 100% free to join and use, so join today!

Follow us on


Our Brands

lathe post processor help for kmotion cnc

lathe post processor help for kmotion cnc