Jump to content

Welcome to eMastercam

Register now to participate in the forums, access the download area, buy Mastercam training materials, post processors and more. This message will be removed once you have signed in.

Use your display name or email address to sign in:

M9, COOLANT X style


Recommended Posts

Hello everyone,
   I am trying to put coolant at the right place for the new GERMANY machine of which 5AXIS, it demands the censor to be DRIED so the M9 has to be certain place.  This is what it wants...

PS: I asked before and I didn't have a good reason to ask, now I do because of the new machine has AUTOMATIC TOOL CHECK MACRO with BUTTON on CONTROL as if TURNED ON.

DMU MORI

==================================

N1( 2.0000, 2"  FACE MILL, HSS, USED TOOL,)
(2FLTS 1.575LOC, 2.000RLF, 2.10STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(TOOLPATH ZCLEARANCE= .20 MIN.)
T1 M6(SKIM TOP OF SURFACE, CUT#1)
G90 G54 S6500 M3
X6.6 Y-.015 M8 T2(NEXT TOOL)
G43 H1 Z1.(DOC= Z0.)
Z.2
G1 Z0. F50.
X4.6
X-4.6
X-6.6


G0 Z1. M9 ================> IT WANTS M9 HERE, so the spindle get dry (SHRINK MASTER HOLDER)

(We have automatic background macro to check if tool is broken or wear and tear by using laser if button on control is turned on.)


G91 G28 Z0. M9 ==========> My post does it here....
/G28 Y0. M5
G0 G90 G54 X0.
M1

=====================================

 

MY CODES----

Under... 

pRetract
 

      sav_coolant = coolant$
      coolant$ = zero

#      if nextop$ = 1003, #Uncomment this line to leave coolant on until eof unless
#        [                 #  explicitely turned off through a canned text edit
        if all_cool_off,
          [
          #all coolant off with a single off code here
          if coolant_on, pbld, n$, *sall_cool_off, e$
          coolant_on = zero
          ]
        else,
          [
          local_int = zero
          coolantx = zero
          while local_int < 20,
            [
            coolantx = and(2^local_int, coolant_on)
            local_int = local_int + one
            if coolantx > zero,
              [
              coolantx = local_int
              pbld, n$, scoolantx, e$ #COOLANT AFTER OFF  =================== here it is...
              ]
            coolantx = zero
            ]
          coolant_on = zero
          ]
#        ]


      coolant$ = sav_coolant
      coolant_on = zero
      e$
      [if mr1$ < 5 & mr3$ = 0 & stoolplname = swcsplname, "/G28 Y0.", sm05, e$]#Prototype Mode

Untitled.png

Link to comment
Share on other sites

I don't think that is not going to happen in the preretract.

pretract        #End of tool path, toolchange
      phsm_off
      sav_absinc = absinc$
      absinc$ = one
      sav_coolant = coolant$
      coolant$ = zero

#      if nextop$ = 1003, #Uncomment this line to leave coolant on until eof unless
#        [                 #  explicitely turned off through a canned text edit
        if all_cool_off,
          [
          #all coolant off with a single off code here
          if coolant_on, pbld, n$, *sall_cool_off, e$
          coolant_on = zero
          ]
        else,
          [
          local_int = zero
          coolantx = zero
          while local_int < 20,
            [
            coolantx = and(2^local_int, coolant_on)
            local_int = local_int + one
            if coolantx > zero,
              [
              coolantx = local_int
              pbld, n$, scoolantx, e$
              ]
            coolantx = zero
            ]
          coolant_on = zero
          ]
#        ]

      #cc_pos is reset in the toolchange here
      cc_pos$ = zero
      if convert_rpd$ = one,
        [
        gcode$ = one
        feed = maxfeedpm
        ipr_type = zero
        ]
      else, gcode$ = zero
      pbld, n$, sccomp, *sm05, psub_end_mny, e$
      pbld, n$, sgabsinc, sgcode, [if gcode$ = 1, sgfeed], *sg28, "Z0.", [if gcode$ = 1, feed], scoolant, e$
#      if lock_codes = one & rot_on_x, pbld, n$, *sunlock, sunlockcomm, e$
#      pbld, n$, *sg28, "X0.", "Y0.", protretinc, e$
#      if lock_codes = one & rot_on_x & cuttype = 0, pbld, n$, *slock, slockcomm, e$
      if abs(fmtrnd(cabs)) > 360 & nextop$ <> 1003 & not(index),
        [
        if lock_codes = one, pbld, n$, *sunlock, sunlockcomm, e$
        rotretflg = 1
        pbld, n$, `sg28, protretinc, e$
        rotretflg = 0
        if lock_codes = one & cuttype = 0, pbld, n$, *slock, slockcomm, e$
        ]
      absinc$ = sav_absinc
      coolant$ = sav_coolant
      uninhibit_probe$

That is happening in the prapidout here:

prapidout       #Output to NC of linear movement - rapid 
      sav_gcode = gcode$
      if convert_rpd$ = one,
        [
        gcode$ = one
        feed = maxfeedpm
        ipr_type = zero
        ]
      pcan1, pbld, n$, sgplane, `sgcode, [if gcode$ = 1, sgfeed], sgabsinc, pccdia,
        pxout, pyout, pzout, pcout, [if gcode$ = 1, `feed], strcantext, scoolant, e$
      gcode$ = sav_gcode

You need to use the before option instead of the with and it should output correctly back at the G0Z.1. Have you tired that? Might have to use the new coolant process tied to Cantext and not the old school process to get it working correctly.

Link to comment
Share on other sites

That said I tried using the Cantext with toolpath editor and got posting errors using MPMASTER. Here is what I got for code.

%
O0000 (T-2)
(MPMASTER GENERIC 3/4-AXIS VERTICAL)
(T-1)
(MCX FILE  - T)
(PROGRAM   - T-2.NC)
(DATE      - AUG-03-2018)
(TIME      - 6:17 PM)
(T239 -  1/2 FLAT ENDMILL    - H239 - D239 - D0.5000")
N100 G00 G17 G20 G40 G80 G90
N110 G91 G28 Z0.
N120 (COMPENSATION TYPE - COMPUTER)
N130 T239 M06 ( 1/2 FLAT ENDMILL)
N140 (MAX - Z.1)
N150 (MIN - Z0.)
N160 G00 G17 G90 G54 X-2.5078 Y1.8607 S1069 M03
N170 G43 H239 Z.1
N180 G94 G01 Z0. F6.42
N190 X-2.4821 Y1.3614
N200 G03 X-1.9571 Y.8877 I.4993 J.0257
N210 G01 X1.8767 Y1.0849
N220 G03 X2.3503 Y1.6099 I-.0257 J.4993
N230 G01 X2.3246 Y2.1092
N240 M09
N250 Z.1
N260 M07
N270 M09
N280 M08
N290 M09
N300 M08
N310 M09
N320 M08
N330 M09
N340 M08
N350 M09
N360 M08
N370 M09
N380 M08
N390 M09
N400 M08
N410 M09
N420 M08
N430 M09
N440 M08
N450 M05
N460 G91 G00 G28 Z0.
N470 G28 Y0.
N480 G90
N490 M30
%

Here is what I got using the Generic 3 Axis post and Cantext using the Toolpath editor, Exactly what you were asking for no post mods needed what so ever.

%
O0
(T-2)
(DATE=DD-MM-YY - 03-08-18 TIME=HH:MM - 18:20)
(MCX FILE - T)
(NC FILE - C:\USERS\RON\DOCUMENTS\MY MCAM2018\MILL\NC\T-2.NC)
(MATERIAL - ALUMINUM INCH - 2024)
(T239| 1/2 FLAT ENDMILL|H239|D239|TOOL DIA. - .5)
N100 G20
N110 G0 G17 G40 G49 G80 G90
N120 T239 M6
N130 G0 G90 G54 X-2.5078 Y1.8607 S1069 M3
N140 G43 H239 Z.1
N150 G1 Z0. F6.4
N160 X-2.4821 Y1.3614
N170 G3 X-1.9828 Y.8871 I.4993 J.0257
N180 X-1.9571 Y.8877 I0. J.5
N190 G1 X1.8767 Y1.0849
N200 G3 X2.351 Y1.5842 I-.0257 J.4993
N210 X2.3503 Y1.6099 I-.5 J0.
N220 G1 X2.3246 Y2.1092
N230 G0 Z.1 M09
N240 M5
N250 G91 G0 G28 Z0.
N260 G28 X0. Y0.
N270 M30
%

 

  • Like 1
Link to comment
Share on other sites
16 hours ago, C^Millman said:

That said I tried using the Cantext with toolpath editor and got posting errors using MPMASTER. Here is what I got for code.

Here is what I got using the Generic 3 Axis post and Cantext using the Toolpath editor, Exactly what you were asking for no post mods needed what so ever.


%
O0
(T-2)
(DATE=DD-MM-YY - 03-08-18 TIME=HH:MM - 18:20)
(MCX FILE - T)
(NC FILE - C:\USERS\RON\DOCUMENTS\MY MCAM2018\MILL\NC\T-2.NC)
(MATERIAL - ALUMINUM INCH - 2024)
(T239| 1/2 FLAT ENDMILL|H239|D239|TOOL DIA. - .5)
N100 G20
N110 G0 G17 G40 G49 G80 G90
N120 T239 M6
N130 G0 G90 G54 X-2.5078 Y1.8607 S1069 M3
N140 G43 H239 Z.1
N150 G1 Z0. F6.4
N160 X-2.4821 Y1.3614
N170 G3 X-1.9828 Y.8871 I.4993 J.0257
N180 X-1.9571 Y.8877 I0. J.5
N190 G1 X1.8767 Y1.0849
N200 G3 X2.351 Y1.5842 I-.0257 J.4993
N210 X2.3503 Y1.6099 I-.5 J0.
N220 G1 X2.3246 Y2.1092
N230 G0 Z.1 M09
N240 M5
N250 G91 G0 G28 Z0.
N260 G28 X0. Y0.
N270 M30
%

 

 

I have tried the way like your (Orvie) suggested and I got the same error as  the C^Millman had.  Would you please give me more tips to start on, Orvie.  Thank you.

G-CODE OUT PUT...

N1( 2.0000, 2"  FACE MILL, HSS, USED TOOL,)
(2FLTS 1.575LOC, 2.000RLF, 2.10STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(TOOLPATH ZCLEARANCE= .20 MIN.)
T1 M6(SKIM TOP OF SURFACE, CUT#1)
G90 G54 S6500 M3
X6.6 Y-.015
G43 H1 Z1. M8(DOC= Z0.)
M9 ========================> it outputs here
Z.2
G1 Z0. F50.
X4.6
X-4.6
X-6.6
G0 Z1. M9 ========================> Here is best....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M30
%

This is what I did...
 

pncoutput       #Movement output
      pcom_moveb
      comment$
      if coolant$ <> 0 & coolant$ <> sav_coolant,
        [
        pbld, n$, sm09, e$
        sav_coolant = coolant$
        ]
      if coolant$ = 1, sm09 = sm09_0
      if coolant$ = 2, sm09 = sm09_1
      if coolant$ = 3, sm09 = sm09_2
      #if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), coolant$ = zero, pcan, pcan1, pcan2
      if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), pcan, pcan1, pcan2
      if cuttype = zero, ppos_cax_lin #Toolplane rotary positioning
      if gcode$ = zero, prapidout # Feed plane outputs here
      if gcode$ = one, plinout
      if gcode$ > one & gcode$ < four, pcirout
      #"DEBUG:", ~opcode$, e$
      if sPoint <> snull,
        [
        pbld, no_spc$, *sPoint, no_spc$ , "(AGAINST STOCK TO PIN STOP HERE)", e$
        sPoint = snull
        ]
      if mr_rt_actv, #Restore absolute/incremental for G51/G68
        [
        absinc$ = sav_absinc
        mr_rt_actv = zero
        ]
      pcom_movea
#EndRegion  Motion preparation routines


 

Link to comment
Share on other sites
18 hours ago, Orvie said:

I have seen those errors before, but in my case it was user error.

For me this has only happened when I accidentally turned on M08 & M09  at the same time.

 

Hi Orvie,
   Here is what I found and somehow I didn't do right on the PSCOOL (coppied from DEFAULT MASTERCAM post C^MillMan suggested).


++++++++++++++++++++++++++++++++++

%
O2291(0020-02298 REV01 - OP1.NC)
(SOURCE = 0020-02298 REV01.MCAM)
N1( 2.0000, 2"  FACE MILL, HSS, USED TOOL,)
(2FLTS 1.575LOC, 2.000RLF, 2.10STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(TOOLPATH ZCLEARANCE= .20 MIN.)
T1 M6(SKIM TOP OF SURFACE, CUT#1)
G90 G54 S6500 M3
X6.6 Y-.015 T2(NEXT TOOL)
G43 H1 Z1. COOLANT ON(DOC= Z0.) =================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
Z.2
G1 Z0. F50.
X4.6
X-4.6
X-6.6
COOLANT OFF G0 Z1.  =================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N2( .3750, 3/8 EM, CB, USED TOOL,)
(3FLTS .750LOC, 1.10STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19(XY STK= .005)
/G28 Y0.(.0375R-.0375R STEPOVER)
T2 M6(ROUGH OUT 5X .625DIA THRU, CUT#2)
G90 G54 S6000 M3(.0075XY ROUGH, 2PERC TDIA.)
X-1.7689 Y-.0359 T3(NEXT TOOL)
G43 H2 Z.25 COOLANT ON(DOC= Z-.25)=================> PSCOOL DO NOT NEED HERE
Z.1
G3 X-1.7689 Y-.0359 Z.0877 I-.0312 J.0209 F50.
X-1.7689 Y-.0359 Z.0753 I-.0312 J.0209
(CUTTING....)
X1.86
G3 X1.8 Y.105 R.06
X1.8 Y.105 J-.12
X1.74 Y.045 R.06
G1 X1.8
Y-.015
G0 Z.25
(*)
N202(ROUGH OUT 5X .813 C'BORES, CUT#3)
T3(XY STK= .005)
G0 G90 G54 S6000 M3(PROGRAM JUMPS HERE)
X-1.791 Y-.1271(.1125R-.1125R STEPOVER)
G43 H2 Z3.(DOC= Z-.206) =================> NO COOLANT HERE????
Z.125
G1 Z.0625 F50.
G3 X-1.791 Y-.1271 Z.0502 I-.009 J.1121
X-1.791 Y-.1271 Z.0378 I-.009 J.1121
(CUTTING...)
X1.693 Y.092 R.107
G1 X1.8
Y-.015
G0 Z.25
COOLANT OFF Z3.  =================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N3( .3750, 3/8 SPOTDRILL, HSS, 90.DEGS,)
(4FLTS 1.500LOC, 2.00STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T3 M6(SPOT 20X 10-32 THRU, CUT#4)
G90 G54 S3500 M3
X-2.2854 Y.4704 T4(NEXT TOOL)
G43 H3 Z3. COOLANT ON(DOC= Z-.095) =================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
Z.0625
G99 G81 Z-.095 R.0625 F10.
X-1.3146
(CUTTING...)
X-2.2854
G80
COOLANT OFF Z3. =================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N4( .1590, NO. 21 .159 STUB DRILL, HSS, 118.DEGS,)
(2FLTS 1.200LOC, 1.50STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T4 M6(DRILL 20X 10-32 THRU, CUT#5)
G90 G54 S3500 M3
X-2.2854 Y.4704 T8(NEXT TOOL)
G43 H4 Z3. COOLANT ON(DOC= Z-.25)=================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
Z.0625
(5 PECKS, -.2978 PIN DEPTH)
G99 G83 Z-.25 R.0625 Q.053 F11.13
X-1.3146
X-.4854
X.4854
X1.3146
X2.2854
Y-.5004
X1.3146
X.4854
X-.4854
X-1.3146
X-2.2854
G80
COOLANT OFF Z3.=================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N8( .0938, 3/32 EM, CB, USED TOOL,)
(2FLTS .188LOC, .38STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(.0281R-.0281R STEPOVER)
T8 M6(FINISH 4X .159 THRU HOLES, CUT#6)
G90 G54 S7500 M3
X-2.2854 Y.4704 T5(NEXT TOOL)
G43 ( D8 ) H8 Z3. COOLANT ON(DOC= Z-.25)=================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
Z.125
G1 Z-.25 F5.
Y.4842
G41 D8 X-2.2716
G3 X-2.2854 Y.498 R.0138
(CUTTING)
G1 G40 X2.2854
Y.4704
G0 Z.25
COOLANT OFF Z3.=================> PSCOOL DOES NOT SHOW,  ONLY TEXT WORKS....
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
M1
T1 M6(FIRST PROGRAMMED TOOL)
M30
%(25,545 CHARACTERS = 25.63KB)


==============================================

ptlchg_com      #Tool change common blocks
         pbld, no_spc$, "G43", [if comp_type = two & tool_typ$ > 9 | CompensationForFinishPasses = 2, "(",*tloffno$,")"], *tlngno$,
         pfzout, pscool, "COOLANT ON", no_spc$ # Coolant After #Second G43 HORIZONTAL
         comp_type = one

 

ptlchg0$
         if retractflg = 0, pbld, no_spc$, "G43", [if comp_type = two & tool_typ$ > 9 | CompensationForFinishPasses = 2, spaces$ = 0, "(",*tloffno$,")"], *tlngno$, spaces$ = sav_spc, #No Tool Change
         pfzout, next_tool$, no_spc$, pscool, no_spc$, #No tool change G43


prapidout       #Output to NC of linear movement - rapid
      sav_gcode = gcode$
      if convert_rpd$ = one,
        [
        gcode$ = one
        feed = maxfeedpm
        ipr_type = zero
        ]
    #"DEBUG: ", ~mr3$, ~nextop$, e$
      if tool_op$ = 19, "M0(AGAINST PIN STOP HERE)", e$
      if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), pscool, "COOLANT OFF"
      pcan1, pbld, n$, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if plane$ > 0, plane$ = 1, sgabsinc], pccdia, [if gcode$ = 1, sgfeed]
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], [if gcode$ = 1, `feed], strcantext, e$
      gcode$ = sav_gcode

plinout         #Output to NC of linear movement - feed
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if sgplane     <> sgplane, sgabsinc], pccdia, #, n$, sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], `feed, strcantext, pscool, e$

pcirout         #Output to NC of circular interpolation
      if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn
      if full_arc_flg$,
        [
        if plane$ = zero, result = force(xabs,yabs)   #force coordinate on full arc
        if plane$ = one,  result = force(yabs,zabs)   #force coordinate on full arc
        if plane$ = two,
          [
          result = force(xabs,xabs)   #force coordinate on full arc
          result = force(zabs,zabs)   #force coordinate on full arc
          ]
        ]
      if hel_2100 = one, pcirout2
      else, pcirout1

pcirout1        #Output to NC of circular interpolation
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane     <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, pscool, e$

pcirout2        #Output to NC of circular interpolation
      if (plane$ = zero & fmtrnd(zinc)<>0)
       | (plane$ =  one & fmtrnd(xinc)<>0)
       | (plane$ =  two & fmtrnd(yinc)<>0), phelout
      else, pcirout1

phelout         #Output to NC of helical interpolation
      if errorcheck = one, [if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn]
      if plane$ = zero,
        [
        result = nwadrs(strk, lead)
        lead = abs(zinc/sweep$*360)
        ]
      if plane$ = one,
        [
        result = nwadrs(stri, lead)
        lead = abs(xinc/sweep$*360)
        ]
      if plane$ = two,
        [
        result = nwadrs(strj, lead)
        lead = abs(yinc/sweep$*360)
        ]
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane     <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, *lead, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, pscool, e$

 

pscool          #Coolant output
      scoolant   #Old style coolant - based on NCI variable "coolant$"
      pcan1_cool #X style coolant - based on Canned Text coolant

 

pcan1_cool      #Canned text Coolant - with move
      strcantext = sblank
      if cant_no$ > zero,
        [
        if cant_pos1$  = four, pcant_1
        if cant_pos2$  = four, pcant_2
        if cant_pos3$  = four, pcant_3
        if cant_pos4$  = four, pcant_4
        if cant_pos5$  = four, pcant_5
        if cant_pos6$  = four, pcant_6
        if cant_pos7$  = four, pcant_7
        if cant_pos8$  = four, pcant_8
        if cant_pos9$  = four, pcant_9
        if cant_pos10$ = four, pcant_10
        if cant_pos11$ = four, pcant_11
        if cant_pos12$ = four, pcant_12
        if cant_pos13$ = four, pcant_13
        if cant_pos14$ = four, pcant_14
        if cant_pos15$ = four, pcant_15
        if cant_pos16$ = four, pcant_16
        if cant_pos17$ = four, pcant_17
        if cant_pos18$ = four, pcant_18
        if cant_pos19$ = four, pcant_19
        if cant_pos20$ = four, pcant_20
        ]
  • Huh? 1
Link to comment
Share on other sites
Quote

Hi Orvie,
   Here is what I found and somehow I didn't do right on the PSCOOL (coppied from DEFAULT MASTERCAM post C^MillMan suggested).

I didn't say copy from default Mastercam. I was showing you what it did.

I am thinking you have gotten your post do far out of whack with everything you have added to it just to debug the simplest things can take you 10X to 20X longer than it should. If you tell it before and after you get completely different output. I pointed you in the right direction as like always you will keep working as best you can to bend it to your will.

All the best and hope your able to get it solved. 

  • Thanks 1
Link to comment
Share on other sites
On 8/6/2018 at 8:10 AM, PcRobotic said:

What should I do?

You're going to have to move it to prapidout like Ron suggested.  You're going to have to add the default logic to trigger it but you're also going to have to add at least one variable to track where you are in Z, using the clearance or retract, to find the first and last Z moves and then trigger the default logic on the last Z move before it jumps out of prapidout and into pretract.  The pretract will always be the home move that you do not want it on.  The Z move you want it on is in prapidout.  I get the output you want with this:

Capture.png

but that will ONLY work if you ALWAYS use clearance, only use clearance at beginning and end, and never use ref points.  I just wanted to show that it is possible and with very little editing.

  • Like 2
Link to comment
Share on other sites

or you could use ALWAYS use ref points and set the Z in the ref point at like .1 above clearance.  I imagine then in a few weeks you'd be wanting to write logic to make sure ref points are used.  I have done that as well for a head/head I preposition with ref points.  Any way, deeper down the rabbit hole we go.

  • Haha 1
Link to comment
Share on other sites
On 8/7/2018 at 7:43 PM, jlw™ said:

You're going to have to move it to prapidout like Ron suggested.  You're going to have to add the default logic to trigger it but you're also going to have to add at least one variable to track where you are in Z, using the clearance or retract, to find the first and last Z moves and then trigger the default logic on the last Z move before it jumps out of prapidout and into pretract.  The pretract will always be the home move that you do not want it on.  The Z move you want it on is in prapidout.  I get the output you want with this:

Capture.png

but that will ONLY work if you ALWAYS use clearance, only use clearance at beginning and end, and never use ref points.  I just wanted to show that it is possible and with very little editing.

 

Hi JLW,
   First of all, a BIG thankful to your heart that you have spent much time to give me good tips and it works.  Here is what I've done base on your tips.

 

PS: If you think I my defines are not right, I am welcome for any valuable inputs. 

 

Once again, thank you JLW.

 

#Region Motion NC output
# --------------------------------------------------------------------------
# Motion NC output
# --------------------------------------------------------------------------
#The variables for absolute output are xabs, yabs, zabs.
#The variables for incremental output are xinc, yinc, zinc.
# --------------------------------------------------------------------------
prapidout       #Output to NC of linear movement - rapid
      sav_gcode = gcode$
      if convert_rpd$ = one,
        [
        gcode$ = one
        feed = maxfeedpm
        ipr_type = zero
        ]

      if nextop$ = 1003, #Uncomment this line to leave coolant on until eof unless
#        [                 #  explicitely turned off through a canned text edit
        if all_cool_off,
          [
          #all coolant off with a single off code here
          if coolant_on, pbld, n$, *sall_cool_off, e$
          coolant_on = zero
          ]
        else,
          [
          local_int = zero
          coolantx = zero
          while local_int < 20,
            [
            coolantx = and(2^local_int, coolant_on)
            local_int = local_int + one
            if coolantx > zero,
              [
              coolantx = local_int
              pbld, n$, scoolant, e$#COOLANT AFTER OFF
              ]
            coolantx = zero
            ]
          coolant_on = zero
          ]
	scoolant
    #"DEBUG: ", ~mr3$, ~nextop$, e$
      if tool_op$ = 19, "M0(AGAINST PIN STOP HERE)"
      pcan1, pbld, n$, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if plane$ > 0, plane$ = 1, sgabsinc], pccdia, [if gcode$ = 1, sgfeed]
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], [if gcode$ = 1, `feed], strcantext, 
	[if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), *scoolant, else, scoolant], e$
      gcode$ = sav_gcode
	  
plinout         #Output to NC of linear movement - feed
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if sgplane <> sgplane, sgabsinc], pccdia, #, n$, sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], `feed, strcantext, scoolant, e$

pcirout         #Output to NC of circular interpolation
      if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn
      if full_arc_flg$,
        [
        if plane$ = zero, result = force(xabs,yabs)   #force coordinate on full arc
        if plane$ = one,  result = force(yabs,zabs)   #force coordinate on full arc
        if plane$ = two,
          [
          result = force(xabs,xabs)   #force coordinate on full arc
          result = force(zabs,zabs)   #force coordinate on full arc
          ]
        ]
      if hel_2100 = one, pcirout2
      else, pcirout1

pcirout1        #Output to NC of circular interpolation
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane     <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, scoolant, e$

pcirout2        #Output to NC of circular interpolation
      if (plane$ = zero & fmtrnd(zinc)<>0)
       | (plane$ =  one & fmtrnd(xinc)<>0)
       | (plane$ =  two & fmtrnd(yinc)<>0), phelout
      else, pcirout1

phelout         #Output to NC of helical interpolation
      if errorcheck = one, [if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn]
      if plane$ = zero,
        [
        result = nwadrs(strk, lead)
        lead = abs(zinc/sweep$*360)
        ]
      if plane$ = one,
        [
        result = nwadrs(stri, lead)
        lead = abs(xinc/sweep$*360)
        ]
      if plane$ = two,
        [
        result = nwadrs(strj, lead)
        lead = abs(yinc/sweep$*360)
        ]
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, *lead, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, scoolant, e$
#EndRegion prapidout


#Region pcanceldc$
pcanceldc$       #Cancel canned drill cycle
      result = newfs (three, zinc)
      z$ = initht$
      prv_zia = initht$
      pxyzcout
      !zabs, !zinc
      prv_gcode$ = zero
      pcan
      #if sav_mi1 <> zero & sav_mi2 <> zero,
        #[
         #*sav_mi2, e$
         #sav_mi1 = zero
         #]
      pcan1, pbld, no_spc$, [if drillcyc$ < 12, sg80], strcantext, [if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), *scoolant, no_spc$, " ", else, scoolant], e$
      result = newfs(15, feed)  #Reset the output format for 'feed'

      if drillcyc$ = 7 & retr$ > 0, #Used for "Before Gcode"
        [
        result = newfs(4, retr$) #Output as Integer
        result = nwadrs("G",retr$) #Change output string to "G"
        pbld, no_spc$, *retr$, no_spc$, "(ENDING TAP CYCLE G-CODE)", e$
        ]
      #pcan2 #COOLANT AFTER
      #initht_a, "(RETRACT)", e$
      #if HorizontalCellSystem = 2 & opcode$ = 3, "G5.1 Q1", e$
#EndRegion pcanceldc$

========================================= NC OUT COMES ========================
%
O1701(0042-03701 REV04 - OP1.NC)
(SOURCE = 0042-03701 REV04.MCAM)
(PART NAME= 0042-03701 R04)
(PROGRAMMED BY ANH NGUYEN)
(*)
(POSTED ON AUG.11.2018 AT 15*29PM)
(LUONG, STEVEN = BEI\LUONGS)
(*)
(VERTICAL INDEXCNC MILL ONLY)
(TOTAL TOOLS FOR OP1 ARE: 3 TOOLS)
(*)
(WORK OFFSET LIST)
(G54)
(XY0= CENTER)
(Z0= TOP OF PART)
(*)
(*)
N1( .2500, 1/4-90 DEG SPOTDRILL, HSS, 90.DEGS,)
(2FLTS 2.000LOC, 2.500RLF, 3.00STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T1 M6(SPOT 8X .201 HOLES FOR 10-32 SCREW, CUT#2)
G90 G54 S2037 M3
X-2.61 Y4.5206 T2(NEXT TOOL)
G43 H1 Z2. M8(DOC= Z-.1005) ==================== GOOD CODE
G98 G82 Z-.1005 R.1 P2. F10.
(CUTTING..)
X.5288 Y-1.1876
G80 M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N2( .2010, #7 STUB DRILL, HSS, 118.DEGS,)
(2FLTS 1.500LOC, 2.00STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T2 M6(DRILL 8X .201 HOLES FOR 10-32 SCREW, CUT#3)
G90 G54 S4561 M3
X-2.61 Y4.5206 T3(NEXT TOOL)
G43 H2 Z2. M8(DOC= Z-.8554)  ==================== GOOD CODE
(15 PECKS, W.0704 THRU, -.8554 PIN DEPTH)
G98 G83 Z-.8554 R.1 Q.0603 F15.
X2.61 Y4.5207
(CUTTING..)
X.5288 Y-1.1876
G80 M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N3( .1875, 3/16-.5 LOC, 3FL, .85 OOH FLAT EM-ROUGH, HSS, USED TOOL,)
(3FLTS .438LOC, .500RLF, 2.38STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(.0187R-.0844R STOV)
T3 M6(8X .35 C.BORE-.35 DP, CUT#4)
G90 G54 S6112 M3(.0938XY ROUGH, 50PERC TDIA.)
X-2.6483 Y4.5923 T1(NEXT TOOL)
G43 H3 Z1. M8(DOC= Z-.35) ==================== GOOD CODE
Z.1
G1 Z.05 F20.
G3 X-2.6483 Y4.5923 Z.0366 I.0383 J-.0717
X-2.6483 Y4.5923 Z.0233 I.0383 J-.0717
(CUTTING...)
X-2.61 Y4.6019
G3 X-2.61 Y4.6019 J-.0812
X-2.6507 Y4.5613 R.0406
G1 X-2.61
Y4.5206
G0 Z1.
X2.5717 Y4.5923
Z.1
G1 Z.05
G3 X2.5717 Y4.5923 Z.0366 I.0383 J-.0716
X2.5717 Y4.5923 Z.0233 I.0383 J-.0716
(CUTTING..)
Y4.5207
G0 Z1.
X5.1817 Y.0717
Z.1
G1 Z.05
G3 X5.1817 Y.0717 Z.0366 I.0383 J-.0717
X5.1817 Y.0717 Z.0233 I.0383 J-.0717
(CUTTING..)
X5.22
Y0.
G0 Z1.
X2.5717 Y-4.449
Z.1
G1 Z.05
G3 X2.5717 Y-4.449 Z.0366 I.0383 J-.0717
(CUTTING..)
Y-4.5206
G0 Z1.
X-2.6483 Y-4.449
Z.1
G1 Z.05
G3 X-2.6483 Y-4.449 Z.0366 I.0383 J-.0717
X-2.6483 Y-4.449 Z.0233 I.0383 J-.0717
(CUTTING..)
Y-4.5207
G0 Z1.
X-5.2583 Y.0717
Z.1
G1 Z.05
G3 X-5.2583 Y.0717 Z.0366 I.0383 J-.0717
(CUTTING..)
X-5.2606 Y.0406 R.0406
G1 X-5.22
Y0.
G0 Z1.
X-.5671 Y1.2593
Z.1
G1 Z.05
G3 X-.5671 Y1.2593 Z.0366 I.0383 J-.0716
X-.5671 Y1.2593 Z.0233 I.0383 J-.0716
(CUTTING..)
X-.5694 Y1.2282 R.0406
G1 X-.5288
Y1.1876
G0 Z1.
X.4905 Y-1.1159
Z.1
G1 Z.05
G3 X.4905 Y-1.1159 Z.0366 I.0383 J-.0717
(CUTTING..)
Y-1.1876
G0 Z1. M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
T1 M6(FIRST PROGRAMMED TOOL)
M30
%(13,985 CHARACTERS = 14.03KB)

  • Like 1
Link to comment
Share on other sites
2 hours ago, PcRobotic said:

 

Hi JLW,
   First of all, a BIG thankful to your heart that you have spent much time to give me good tips and it works.  Here is what I've done base on your tips.

 

PS: If you think I my defines are not right, I am welcome for any valuable inputs. 

 

Once again, thank you JLW.

 


#Region Motion NC output
# --------------------------------------------------------------------------
# Motion NC output
# --------------------------------------------------------------------------
#The variables for absolute output are xabs, yabs, zabs.
#The variables for incremental output are xinc, yinc, zinc.
# --------------------------------------------------------------------------
prapidout       #Output to NC of linear movement - rapid
      sav_gcode = gcode$
      if convert_rpd$ = one,
        [
        gcode$ = one
        feed = maxfeedpm
        ipr_type = zero
        ]

      if nextop$ = 1003, #Uncomment this line to leave coolant on until eof unless
#        [                 #  explicitely turned off through a canned text edit
        if all_cool_off,
          [
          #all coolant off with a single off code here
          if coolant_on, pbld, n$, *sall_cool_off, e$
          coolant_on = zero
          ]
        else,
          [
          local_int = zero
          coolantx = zero
          while local_int < 20,
            [
            coolantx = and(2^local_int, coolant_on)
            local_int = local_int + one
            if coolantx > zero,
              [
              coolantx = local_int
              pbld, n$, scoolant, e$#COOLANT AFTER OFF
              ]
            coolantx = zero
            ]
          coolant_on = zero
          ]
	scoolant
    #"DEBUG: ", ~mr3$, ~nextop$, e$
      if tool_op$ = 19, "M0(AGAINST PIN STOP HERE)"
      pcan1, pbld, n$, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if plane$ > 0, plane$ = 1, sgabsinc], pccdia, [if gcode$ = 1, sgfeed]
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], [if gcode$ = 1, `feed], strcantext, 
	[if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), *scoolant, else, scoolant], e$
      gcode$ = sav_gcode
	  
plinout         #Output to NC of linear movement - feed
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], `sgcode, [if sgplane <> sgplane, sgabsinc], pccdia, #, n$, sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], `feed, strcantext, scoolant, e$

pcirout         #Output to NC of circular interpolation
      if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn
      if full_arc_flg$,
        [
        if plane$ = zero, result = force(xabs,yabs)   #force coordinate on full arc
        if plane$ = one,  result = force(yabs,zabs)   #force coordinate on full arc
        if plane$ = two,
          [
          result = force(xabs,xabs)   #force coordinate on full arc
          result = force(zabs,zabs)   #force coordinate on full arc
          ]
        ]
      if hel_2100 = one, pcirout2
      else, pcirout1

pcirout1        #Output to NC of circular interpolation
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane     <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, scoolant, e$

pcirout2        #Output to NC of circular interpolation
      if (plane$ = zero & fmtrnd(zinc)<>0)
       | (plane$ =  one & fmtrnd(xinc)<>0)
       | (plane$ =  two & fmtrnd(yinc)<>0), phelout
      else, pcirout1

phelout         #Output to NC of helical interpolation
      if errorcheck = one, [if not(arccomp), pcompwarn, pCircleMillCutterCompAlarm, pHelixBoreCompWarn]
      if plane$ = zero,
        [
        result = nwadrs(strk, lead)
        lead = abs(zinc/sweep$*360)
        ]
      if plane$ = one,
        [
        result = nwadrs(stri, lead)
        lead = abs(xinc/sweep$*360)
        ]
      if plane$ = two,
        [
        result = nwadrs(strj, lead)
        lead = abs(yinc/sweep$*360)
        ]
      pcan1, pbld, [if plane$ > 0, plane$ = 1, sgplane], sgcode, [if sgplane <> sgplane, sgabsinc], pccdia, #, n$, `sgfeed
        pxout, pyout, pzout, *lead, [if HorizontalCellSystem <> 2, pcout], parc, feed, strcantext, scoolant, e$
#EndRegion prapidout



#Region pcanceldc$
pcanceldc$       #Cancel canned drill cycle
      result = newfs (three, zinc)
      z$ = initht$
      prv_zia = initht$
      pxyzcout
      !zabs, !zinc
      prv_gcode$ = zero
      pcan
      #if sav_mi1 <> zero & sav_mi2 <> zero,
        #[
         #*sav_mi2, e$
         #sav_mi1 = zero
         #]
      pcan1, pbld, no_spc$, [if drillcyc$ < 12, sg80], strcantext, [if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))), *scoolant, no_spc$, " ", else, scoolant], e$
      result = newfs(15, feed)  #Reset the output format for 'feed'

      if drillcyc$ = 7 & retr$ > 0, #Used for "Before Gcode"
        [
        result = newfs(4, retr$) #Output as Integer
        result = nwadrs("G",retr$) #Change output string to "G"
        pbld, no_spc$, *retr$, no_spc$, "(ENDING TAP CYCLE G-CODE)", e$
        ]
      #pcan2 #COOLANT AFTER
      #initht_a, "(RETRACT)", e$
      #if HorizontalCellSystem = 2 & opcode$ = 3, "G5.1 Q1", e$
#EndRegion pcanceldc$

========================================= NC OUT COMES ========================
%
O1701(0042-03701 REV04 - OP1.NC)
(SOURCE = 0042-03701 REV04.MCAM)
(PART NAME= 0042-03701 R04)
(PROGRAMMED BY ANH NGUYEN)
(*)
(POSTED ON AUG.11.2018 AT 15*29PM)
(LUONG, STEVEN = BEI\LUONGS)
(*)
(VERTICAL INDEXCNC MILL ONLY)
(TOTAL TOOLS FOR OP1 ARE: 3 TOOLS)
(*)
(WORK OFFSET LIST)
(G54)
(XY0= CENTER)
(Z0= TOP OF PART)
(*)
(*)
N1( .2500, 1/4-90 DEG SPOTDRILL, HSS, 90.DEGS,)
(2FLTS 2.000LOC, 2.500RLF, 3.00STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T1 M6(SPOT 8X .201 HOLES FOR 10-32 SCREW, CUT#2)
G90 G54 S2037 M3
X-2.61 Y4.5206 T2(NEXT TOOL)
G43 H1 Z2. M8(DOC= Z-.1005) ==================== GOOD CODE
G98 G82 Z-.1005 R.1 P2. F10.
(CUTTING..)
X.5288 Y-1.1876
G80 M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N2( .2010, #7 STUB DRILL, HSS, 118.DEGS,)
(2FLTS 1.500LOC, 2.00STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.
T2 M6(DRILL 8X .201 HOLES FOR 10-32 SCREW, CUT#3)
G90 G54 S4561 M3
X-2.61 Y4.5206 T3(NEXT TOOL)
G43 H2 Z2. M8(DOC= Z-.8554)  ==================== GOOD CODE
(15 PECKS, W.0704 THRU, -.8554 PIN DEPTH)
G98 G83 Z-.8554 R.1 Q.0603 F15.
X2.61 Y4.5207
(CUTTING..)
X.5288 Y-1.1876
G80 M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
(*)
N3( .1875, 3/16-.5 LOC, 3FL, .85 OOH FLAT EM-ROUGH, HSS, USED TOOL,)
(3FLTS .438LOC, .500RLF, 2.38STO)
G0 G17 G40 G49 G80 G90
G91 G28 Z0 M19
/G28 Y0.(.0187R-.0844R STOV)
T3 M6(8X .35 C.BORE-.35 DP, CUT#4)
G90 G54 S6112 M3(.0938XY ROUGH, 50PERC TDIA.)
X-2.6483 Y4.5923 T1(NEXT TOOL)
G43 H3 Z1. M8(DOC= Z-.35) ==================== GOOD CODE
Z.1
G1 Z.05 F20.
G3 X-2.6483 Y4.5923 Z.0366 I.0383 J-.0717
X-2.6483 Y4.5923 Z.0233 I.0383 J-.0717
(CUTTING...)
X-2.61 Y4.6019
G3 X-2.61 Y4.6019 J-.0812
X-2.6507 Y4.5613 R.0406
G1 X-2.61
Y4.5206
G0 Z1.
X2.5717 Y4.5923
Z.1
G1 Z.05
G3 X2.5717 Y4.5923 Z.0366 I.0383 J-.0716
X2.5717 Y4.5923 Z.0233 I.0383 J-.0716
(CUTTING..)
Y4.5207
G0 Z1.
X5.1817 Y.0717
Z.1
G1 Z.05
G3 X5.1817 Y.0717 Z.0366 I.0383 J-.0717
X5.1817 Y.0717 Z.0233 I.0383 J-.0717
(CUTTING..)
X5.22
Y0.
G0 Z1.
X2.5717 Y-4.449
Z.1
G1 Z.05
G3 X2.5717 Y-4.449 Z.0366 I.0383 J-.0717
(CUTTING..)
Y-4.5206
G0 Z1.
X-2.6483 Y-4.449
Z.1
G1 Z.05
G3 X-2.6483 Y-4.449 Z.0366 I.0383 J-.0717
X-2.6483 Y-4.449 Z.0233 I.0383 J-.0717
(CUTTING..)
Y-4.5207
G0 Z1.
X-5.2583 Y.0717
Z.1
G1 Z.05
G3 X-5.2583 Y.0717 Z.0366 I.0383 J-.0717
(CUTTING..)
X-5.2606 Y.0406 R.0406
G1 X-5.22
Y0.
G0 Z1.
X-.5671 Y1.2593
Z.1
G1 Z.05
G3 X-.5671 Y1.2593 Z.0366 I.0383 J-.0716
X-.5671 Y1.2593 Z.0233 I.0383 J-.0716
(CUTTING..)
X-.5694 Y1.2282 R.0406
G1 X-.5288
Y1.1876
G0 Z1.
X.4905 Y-1.1159
Z.1
G1 Z.05
G3 X.4905 Y-1.1159 Z.0366 I.0383 J-.0717
(CUTTING..)
Y-1.1876
G0 Z1. M9 (==================== GOOD CODE, END OF TOOLPATH)
G91 G28 Z0.
/G28 Y0. M5
G0 G90 G54 X0.
M1
T1 M6(FIRST PROGRAMMED TOOL)
M30
%(13,985 CHARACTERS = 14.03KB)

Excellent work and as long as it gives you what you need the way you need it it is all good. You went about it the right way in my humble option and added the logic where I thought it would be needed and in doing so hopefully now see the difference in where you thought it needed to be and where it really needed to be. MP is good stuff and would love to have had an official post class or worked at CNC like Colin did, but neither have happened and doubt they ever will. We all do our best to get the work done and glad you sorted out and came up with the way to get what you needed. My hats off to you for coming with the solution you needed. 🤗🤗

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

Join us!

eMastercam - your online source for all things Mastercam.

Together, we are the strongest Mastercam community on the web with over 56,000 members, and our online store offers a wide selection of training materials for all applications and skill levels.

Follow us

×
×
  • Create New...