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:

Simple Mpmaster post help


Lars Christensen
 Share

Recommended Posts

Just one of these that I have never been able to figure out, and doing some stuff to our Haas post it is eating me up I can not get it right.

 

I would like this:

code:

 N86 M08

N88 G04 P1.

N90 T3 ( NEXT TOOL )

N92 G99 G73 Z-.4688 R1.35 Q.05 F14.75

N94 X-12.509

N96 X-10.259

N98 X-8.009

N100 X-5.759

N102 X-3.509

N104 Y-10.2277

N106 X-5.759

N108 X-8.009

N110 X-10.259

N112 X-12.509

N114 X-14.759

N116 G80

N118 M05

N120 M09

N122 G00 G53 Z0.

N123 <---------Toolbreakage check here

N124 M01

(STD-T-10A REAMER TOOL - 3)

N126 G00 G53 Z0.

N128 G00 G53 X-28. Y0.

N130 T3 M06

N132 G00 G90 G54 X-14.759 Y-.2245

N134 A270. F650.

N136 S940 M03

N138 G43 H3 Z1.35

N140 M08

N142 G04 P1.

N144 T5 ( NEXT TOOL )

I got this:

code:

 fmt    2 mi1

fmt 2 mi3

fmt 2 mi4

fmt 2 mr1

fmt 2 mr4

and this:

code:

 pprobecheck   #check tool on probe

if mi4 = one,

[

pbld, n, "G251", *t, "H", *mr4, e

]

I can not figure out where to put "pprobecheck", the only thing I have been able to do is either but it right after the G80, or it is using the next tools information.

 

Any help would be greatly appreciated.

 

Thank you

Lars

Link to comment
Share on other sites

John,

 

Then it gives me this:

code:

 N158 X-5.759                                                pdrill_2

N160 X-8.009 pdrill_2

N162 X-10.259 pdrill_2

N164 X-12.509 pdrill_2

N166 X-14.759 pdrill_2

N168 G80 pcanceldc

N170 M05 ptlchg1002 pretract

N172 M09 ptlchg1002 pretract

N174 G00 G53 Z0. ptlchg1002 pretract

N176 G251 T5 H.005 <---Should be in line N231 ptlchg1002 p__126:2645

N178 M01 ptlchg

(M20 X 1.5 TAP TOOL - 5) ptlchg ptoolcomm

N180 G00 G53 Z0. ptlchg ptlchg_com

N182 G00 G53 X-28. Y0. ptlchg ptlchg_com

N184 T5 M06 ptlchg ptlchg_com

N186 G00 G90 G54 X-14.759 Y-.2245 ptlchg ptlchg_com

N188 A270. F650. ptlchg ptlchg_com

N190 S800 M03 ptlchg ptlchg_com

N192 G43 H5 Z1.35 ptlchg ptlchg_com

N194 M08 ptlchg ptlchg_com

N196 G04 P1. ptlchg ptlchg_com

N198 T15 ( NEXT TOOL ) ptlchg ptlchg_com

N200 G99 G84 Z.51 R1.35 F47.24 ptap p__65:1805

N202 X-12.509 ptap_2 pdrill_2

N204 X-10.259 ptap_2 pdrill_2

N206 X-8.009 ptap_2 pdrill_2

N208 X-5.759 ptap_2 pdrill_2

N210 X-3.509 ptap_2 pdrill_2

N212 Y-10.2277 ptap_2 pdrill_2

N214 X-5.759 ptap_2 pdrill_2

N216 X-8.009 ptap_2 pdrill_2

N218 X-10.259 ptap_2 pdrill_2

N220 X-12.509 ptap_2 pdrill_2

N222 X-14.759 ptap_2 pdrill_2

N224 G80 pcanceldc

N226 M05 ptlchg1002 pretract

N228 M09 ptlchg1002 pretract

N230 G00 G53 Z0.

N231 <---Should be here ptlchg1002 pretract

N232 M01 ptlchg

(27/64 COOLANT DRILL TOOL - 15)

It is the right tool number but it posts in a operation to early.

Link to comment
Share on other sites

Ron,

Well this post is for a Haas that I am only using for drilling, I was kind of hoping I could get it figured out, so I could use it in other posts for machines that also do milling. Up until now I have always used "Manual Entry" for this.

But since my project right now is this Haas, I went ahead and followed your suggestion.

 

This is now my code:

code:

 N198 G99 G84 Z.51 R1.35 F47.24                              ptap p__65:1804

N200 X-12.509 ptap_2 pdrill_2

N202 X-10.259 ptap_2 pdrill_2

N204 X-8.009 ptap_2 pdrill_2

N206 X-5.759 ptap_2 pdrill_2

N208 X-3.509 ptap_2 pdrill_2

N210 Y-10.2277 ptap_2 pdrill_2

N212 X-5.759 ptap_2 pdrill_2

N214 X-8.009 ptap_2 pdrill_2

N216 X-10.259 ptap_2 pdrill_2

N218 X-12.509 ptap_2 pdrill_2

N220 X-14.759 ptap_2 pdrill_2

N222 G80 pcanceldc

N224 M05 pcanceldc p__126:2647

N226 M09 pcanceldc p__126:2647

N228 G00 G53 Z0. pcanceldc p__126:2647

N230 G251 T5 H.005 pcanceldc p__126:2647

N232 M05 <----- Can I get rid of this? ptlchg1002 pretract

N234 G00 G53 Z0. ptlchg1002 pretract

N236 M01 ptlchg

(27/64 COOLANT DRILL TOOL - 15) ptlchg ptoolcomm

N238 G00 G53 Z0. ptlchg ptlchg_com

N240 G00 G53 X-28. Y0. ptlchg ptlchg_com

N242 T15 M06 ptlchg ptlchg_com

N244 G00 G90 G54 X-14.759 Y-.375

using this:

code:

 pprobecheck   #check tool on probe

sav_coolant = coolant

coolant = zero

if mi4 = one,

[

pbld, n, *sm05, e

pbld, n, scoolant, e

pbld, n, "G00", "G53", "Z0.", e

pbld, n, "G251", *t, "H", *mr4, e

]

with "pprobecheck" here:

code:

 pcanceldc       #Cancel canned drill cycle

result = newfs (three, zinc)

z = initht

if cuttype = one, prv_zia = initht + (rotdia/two)

else, prv_zia = initht

pxyzcout

!zabs, !zinc

prv_gcode = zero

if cool_zmove = yes & (nextop=1003 | (nextop=1011 & t<>abs(nexttool))), coolant = zero

pcan

if drillcyc <> 8, pcan1, pbld, n, "G80", scoolant, strcantext, e

preverse

if use_pitch & tapflg = 1, pbld, n, "G94", e

pcan2

tapflg = 0

pprobecheck

Is there a way to get rid of that second M05? I know it dosent hurt anything, but I just hate this clutter in NC outputs, maybe I am going over boards here and is getting to picky.

 

Thank you

Lars

Link to comment
Share on other sites

well that can be a couple things. One there is a * in front of it in the pretract. Now if you take it out then you may not get it for milling operations. So what I would do is put a condition statement in my post in the pretract maybe something like so again this is from MPMFAN V9 so change for your needs.

 

code:

pretract        #End of tool path, toolchange              

sav_absinc = absinc

absinc = one

sav_coolant = coolant

coolant = zero

#cc_pos is reset in the toolchange here

cc_pos = zero

gcode = zero

if mi4 = one, pbld, n, sccomp, sm05, psub_end_mny, e #<-- the if statement takes out the force or you can take at the sm05 all together , but I would leave it in for saftey

else, pbld, n, sccomp, sm05, psub_end_mny, e

pbld, n, sgabsinc, sgcode, *sg28ref, "Z0.", scoolant, e

pbld, n, *sg28ref, "X0.", "Y0.", protretinc, e

absinc = sav_absinc

coolant = sav_coolant

And to me you can never be to picky about your code. To me that seperates those of us who care and those of use who just get by.

 

HTH

Link to comment
Share on other sites

I know I must be missing something somewhere, but here is what I got now.

 

I got this:

code:

 N148 X-10.259                                               pdrill_2

N150 X-8.009 pdrill_2

N152 X-5.759 pdrill_2

N154 X-3.509 pdrill_2

N156 Y-10.2277 pdrill_2

N158 X-5.759 pdrill_2

N160 X-8.009 pdrill_2

N162 X-10.259 pdrill_2

N164 X-12.509 pdrill_2

N166 X-14.759 pdrill_2

N168 G80 pcanceldc

N170 M05 ptlchg1002 pretract

N172 M09 ptlchg1002 pretract

N174 G00 G53 Z0. ptlchg1002 pretract

N176 G251 T5 H.005<-- Perfect, excapt it is one operation early ptlchg1002 p__126:2649

N178 M01 ptlchg

(M20 X 1.5 TAP TOOL - 5) ptlchg ptoolcomm

N180 G00 G53 Z0. ptlchg ptlchg_com

N182 G00 G53 X-28. Y0. ptlchg ptlchg_com

N184 T5 M06 ptlchg ptlchg_com

N186 G00 G90 G54 X-14.759 Y-.2245 ptlchg ptlchg_com

N188 A270. F650. ptlchg ptlchg_com

N190 S800 M03 ptlchg ptlchg_com

N192 G43 H5 Z1.35 ptlchg ptlchg_com

N194 M08 ptlchg ptlchg_com

N196 G04 P1. ptlchg ptlchg_com

N198 T15 ( NEXT TOOL ) ptlchg ptlchg_com

N200 G99 G84 Z.51 R1.35 F47.24

This is my edit in pretract:

code:

 pretract        #End of tool path, toolchange              

sav_absinc = absinc

absinc = one

sav_coolant = coolant

coolant = zero

#cc_pos is reset in the toolchange here

cc_pos = zero

gcode = zero

pcan

if mi4=one, pbld, n, sccomp, sm05, psub_end_mny, e <------ I did this

else, pbld, n, sccomp, *sm05, psub_end_mny, e

pbld, n, scoolant, e

pbld, n, "G00", "G53", "Z0.", e

pprobecheck <------ I did this

#pcan1, pbld, n, sgabsinc, sgcode, "G53", "Z0.", scoolant, e

#if lock_codes = 1 & rot_on_x, pbld, n, *sunlock, "(UNLOCK)", e

#pbld, n, "G28", "X0.", "Y0.", protretinc, e

#if lock_codes = 1 & rot_on_x & cuttype = 0, pbld, n, *slock, "(LOCK)", e

if abs(cabs) > 360 & nextop <> 1003,

[

if lock_codes = 1, pbld, n, *sunlock, "(UNLOCK)", e

pbld, n, 'G28', protretinc, e

if lock_codes = 1 & cuttype = 0, pbld, n, *slock, "(LOCK)", e

]

pcan2

absinc = sav_absinc

coolant = sav_coolant

And my pprobecheck:

code:

 pprobecheck   #check tool on probe

if mi4 = one,

[

pbld, n, "G251", *t, "H", *mr4, e

]

See it almost looks like "pretract" is actually the beginning of that operation headscratch.gif

 

I verily appreciate you helping me with this

 

Thank you

Lars

Link to comment
Share on other sites

Lars, nope pretract is not early.

 

I think I See what is going on.

 

Under what condition do you want to run the tool check, not after all tool correect but after which tools?

 

I am thinking you might need to add a verifiacation check, I am trying to figure out under what circumstances.

Link to comment
Share on other sites

Good morning John, cheers.gif

 

Here is a screen shot of my operation manager.

p><p>The "ghost

 

<a  href=Miscvalues1.jpg' alt='Miscvalues1.jpg'>

 

In the ideal world you can set the Misc. value for either drill or mill, and for what ever tool you need.

The probe macro (G251) is right before M01 at the end of the specific tool operation.

 

Thanks

Lars

 

PS. How do you guy's who have a table probe on your mill do this?

Link to comment
Share on other sites

I think you have 2 things you'll need to do.

p the check of mi4$first thing I would do would be to dump the check of mi4 and create a variable called sav_mi4 and I would set that in the ptlchg section

 

sav_mi4 = mi4

prev_t = t in the same section. I am pretty sure that by the time you get to the pretract it will have already read the next_tool variable in to t so you should be able to check for that.

 

if sav_mi4 & prev_t <> t,

[

do this

]

else,

[

do that

]

 

I think you'll beed the double check an not just a single as you have done.

 

This is how I set a particular output in the same section of a post

 

code:

 if prev_t = 30,                                            ######  ADDED CODE FOR M98 OUTPUT

[ ### JMP 08/03/05

pbld, n$, sccomp, psub_end_mny, e$ ###

pbld, "M98 P8098", e$ ###

pbld, n$, sgabsinc, sgcode, "G28", "Z0.", scoolant, e$ ###

] ### POST ONLY IF TOOL 30 IS IN SPINDLE

else, ###

[

if sav_opcode <> 3, phsmoff ###

pbld, n$, sccomp, *sm05, psub_end_mny, e$ ###

pbld, n$, sgabsinc, sgcode, "G28", "Z0.", scoolant, e$ ###

] ##### THRU TO HERE

Link to comment
Share on other sites

quote:

Almost like it would work if a set my Misc. value in the operation (Mastercam Operation manager)after the one I need it in.

Lars,

You're on the right logic track. Even if you don't know it. banghead.gif

 

If I've read this thread correctly...

You're wanting to program an 'output trigger flag' using a Misc Integer

and with what you're doing now, the code is 'good' except the desired code outputs one operation too early.

 

If so... This is fairly easy to correct.

You need to declare a variable to be the 'trigger flag' and capture state of the 'mi4'.

Then you check the state of your variable, instead of 'mi4' in your pprobecheck.

 

"Somewhere" in your PST declare a varaible to be used as the 'output triger flag'

 

code:

doprobecheck : no

(If 'yes' and 'no' are not defined in your PST, you can use '1' and '0' to represent them)

 

Now in the psof and ptlchg postblocks (or whatever postblocks in your PST does these functions) you check 'mi4' and set your trigger flag.

 

Example:

 

code:

ptlchg  # In YOUR Post

if mi4 = one,

doprobecheck = yes

else,

doprobecheck = no

code:

pprobecheck   #check tool on probe

if doprobecheck = yes,

[

pbld, n, "G251", *t, "H", *mr4, e

]

BTW, Nice toolbar! Are those your favorite functions? wink.gif

Link to comment
Share on other sites

quote:

Lars,

You're on the right logic track. Even if you don't know it

I had no idea eek.gifbiggrin.gif

 

I did both of your guy's suggestions, with the same result in the NC Code.

 

code:

 N176 M01                                                    ptlchg

(M20 X 1.5 TAP TOOL - 5) ptlchg ptoolcomm

N178 G00 G53 Z0. ptlchg ptlchg_com

N180 G00 G53 X-28. Y0. ptlchg ptlchg_com

N182 T5 M06 ptlchg ptlchg_com

N184 G00 G90 G54 X-14.759 Y-.2245 ptlchg ptlchg_com

N186 A270. F650. ptlchg ptlchg_com

N188 S800 M03 ptlchg ptlchg_com

N190 G43 H5 Z1.35 ptlchg ptlchg_com

N192 M08 ptlchg ptlchg_com

N194 G04 P1. ptlchg ptlchg_com

N196 T15 ( NEXT TOOL ) ptlchg ptlchg_com

N198 G99 G84 Z.51 R1.35 F47.24 ptap p__66:1811

N200 X-12.509 ptap_2 pdrill_2

N202 X-10.259 ptap_2 pdrill_2

N204 X-8.009 ptap_2 pdrill_2

N206 X-5.759 ptap_2 pdrill_2

N208 X-3.509 ptap_2 pdrill_2

N210 Y-10.2277 ptap_2 pdrill_2

N212 X-5.759 ptap_2 pdrill_2

N214 X-8.009 ptap_2 pdrill_2

N216 X-10.259 ptap_2 pdrill_2

N218 X-12.509 ptap_2 pdrill_2

N220 X-14.759 ptap_2 pdrill_2

N222 G80 pcanceldc

N224 M05 ptlchg1002 pretract

N226 M09 ptlchg1002 pretract

N228 G00 G53 Z0. ptlchg1002 pretract

N230 G251 T5 H0. ptlchg1002 p__38:1335

N232 M01 ptlchg

(27/64 COOLANT DRILL TOOL - 15) ptlchg ptoolcomm

N234 G00 G53 Z0. ptlchg ptlchg_com

N236 G00 G53 X-28. Y0. ptlchg ptlchg_com

N238 T15 M06

This was what I did with Johns suggestion.

code:

 #Misc variables

tcnt : 0 # Count the number of tool changes

toolcount : 1 # Tool counter for logic control

toolcountn : 0 # Next tool counter for logic control

toolcountp : 0 # Previous tool counter for logic control

tooltotal : 0 # Tool tool count

nexttool : 0 # Next actual tool

nexttp : 0 # Next tool plane

prvtp : 0 # Previous tool plane

counter : 0 # Counter

nstrlen : 0 # Length of string

last_op_id : 0 # Previous internal operation id

last_cuttype : 0 # Previous cuttype

stock_typ : 0 # Predator Stock Type

cyl_typ : 0 # Predator Cyl Stock Type

z_min : 99999 # Min Z

z_tmin : 99999 # Overall min Z

z_max : -99999# Max Z

z_tmax : -99999# Overall max Z

tapflg : 0 # Flag for tap cycle

sav_mi4 : 0 #Saved mi4 probecheck <------

sav_mi9 : 0 # Saved mi9 value

code:

 ptlchg          #Tool change 

sav_mi4=mi4 <------ John

prv_t=t <------ John

pcuttype

toolchng = one

toolcount = toolcount + 1

if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)

else, nexttool = first_tool

if wcstype = one, #Work coordinate system

[

pfbld, n, "G28", "X0.", "Y0.", e

pfbld, n, "G92", *xh, *yh, *zh, e

]

pbld, n, *sm01, e

if mi10=one, n, *sm00, e

ptlchg_com

 

pretract #End of tool path, toolchange

sav_absinc = absinc

absinc = one

sav_coolant = coolant

coolant = zero

#cc_pos is reset in the toolchange here

cc_pos = zero

gcode = zero

pcan

pbld, n, sccomp, *sm05, psub_end_mny, e

pbld, n, scoolant, e

pbld, n, "G00", "G53", "Z0.", e

if sav_mi4 & prv_t<>t, <-------John

[ <-------John

pbld, n, "G251", prv_t, "H", *mr4, e <-------John

] <-------John

#pprobecheck

#pcan1, pbld, n, sgabsinc, sgcode, "G53", "Z0.", scoolant, e

#if lock_codes = 1 & rot_on_x, pbld, n, *sunlock, "(UNLOCK)", e

#pbld, n, "G28", "X0.", "Y0.", protretinc, e

#if lock_codes = 1 & rot_on_x & cuttype = 0, pbld, n, *slock, "(LOCK)", e

if abs(cabs) > 360 & nextop <> 1003,

[

if lock_codes = 1, pbld, n, *sunlock, "(UNLOCK)", e

pbld, n, 'G28', protretinc, e

if lock_codes = 1 & cuttype = 0, pbld, n, *slock, "(LOCK)", e

]

pcan2

absinc = sav_absinc

coolant = sav_coolant

cheers.gifcheers.gif

Now for Roger.

 

code:

 #Misc variables

tcnt : 0 # Count the number of tool changes

toolcount : 1 # Tool counter for logic control

toolcountn : 0 # Next tool counter for logic control

toolcountp : 0 # Previous tool counter for logic control

tooltotal : 0 # Tool tool count

nexttool : 0 # Next actual tool

nexttp : 0 # Next tool plane

prvtp : 0 # Previous tool plane

counter : 0 # Counter

nstrlen : 0 # Length of string

last_op_id : 0 # Previous internal operation id

last_cuttype : 0 # Previous cuttype

stock_typ : 0 # Predator Stock Type

cyl_typ : 0 # Predator Cyl Stock Type

z_min : 99999 # Min Z

z_tmin : 99999 # Overall min Z

z_max : -99999# Max Z

z_tmax : -99999# Overall max Z

tapflg : 0 # Flag for tap cycle

#sav_mi4 : 0 #Saved mi4 probecheck

sav_mi9 : 0 # Saved mi9 value

doprobecheck : no <------------------------

code:

 ptlchg          #Tool change 

#sav_mi4=mi4 #John

#prv_t=t #John

if mi4=one, #Roger

doprobecheck = yes #Roger

else, #Roger

doprobecheck = no #Roger

pcuttype

toolchng = one

toolcount = toolcount + 1

if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)

else, nexttool = first_tool

if wcstype = one, #Work coordinate system

[

pfbld, n, "G28", "X0.", "Y0.", e

pfbld, n, "G92", *xh, *yh, *zh, e

]

pbld, n, *sm01, e

if mi10=one, n, *sm00, e

ptlchg_com

code:

 pprobecheck   #check tool on probe

#if mi4 = one,

if doprobecheck = yes,

[

pbld, n, "G251", prv_t, "H", *mr4, e

]


cheers.gifcheers.gif

 

I am extremely happy with both of them except that the mr4 is now the next operation value, I tried to play around with sav_mr4 and prv_mr4 but I could not figure out how to get the "H" value.

 

quote:

BTW, Nice toolbar! Are those your favorite functions?

I have the C-HOOK for mouse scroll to zoom and un-zoom, but for some reason I can not stop clicking on her lower torso and legs cool.gif

Link to comment
Share on other sites

Lars,

 

Are you looking to output that mr4 as

 

H.005?

 

 

if you are a couple of way s but the easiest would be

 

fmt H 2 mr4

 

then you could change your output line to this

code:

pbld, n, "G251", prv_t, *mr4, e

Link to comment
Share on other sites

quote:

Kid up all night long sick, coffee will be the fuel of the day

John,

Did not think you still would be awake biggrin.gif

 

I have retired post modifications until Monday morning, but would that differer much from what I already got, except from keeping my post more in order?:

code:

  fmt    2 mi1

fmt 2 mi3

fmt 2 mi4

fmt 2 mr1

fmt 2 mr4

code:

  pprobecheck   #check tool on probe

#if mi4 = one,

if doprobecheck = yes,

[

pbld, n, "G251", prv_t, "H", *mr4, e

]

Thank you

Lars

Link to comment
Share on other sites

quote:

Did not think you still would be awake

Heck, I took a 250 mile round trip today too

 

wink.gif

 

I "assumed" the output you were getting was incorrect because of the way those variables are grouped in the post.

 

Maybe I am blind or just need to reread this whole thread to see where you are at.

 

BTW, I'll sleep well tonight

 

wink.gif

Link to comment
Share on other sites

quote:

I am extremely happy with both of them
except that the mr4 is now the next operation value

code:

pprobecheck   #check tool on probe

#if mi4 = one,

if doprobecheck = yes,

[

pbld, n, "G251", prv_t, "H", *mr4, e

]

Sorry, I never noticed that you where outputting mr4 in this routine,

otherwise I would have explained this a bit more...

 

"Almost like it would work if a set my Misc. value in the operation (Mastercam Operation manager)after the one I need it in."

 

When ptlchg gets called this initiates the call to pretract.

Also when processing gets to the ptlchg postlock, the Misc Values programmed for the 'new' operation have been read.

End result is...

In pretract, all the Misc Values variables ('mi#' & 'mr#') are loaded with the values of the 'new' tool (operation),

not the tool (operation) that is ending.

So, for any 'mi#' and/or 'mr#' programmed on your tool (operation) that you want to use 'at the very end' (e.g. pretract),

you need to "capture" that value into another variable, so that it does not get overwritten by the settings of the 'new' tool.

Got it?

John's method of using a 'sav_mi4' will work as well as my 'doprobecheck'. (As you've discovered)

It's just I pefer to use variable names that "mean" something, just by their name.

 

The result of all this is ->

You've captured mi4, you also need to do the same for the mr4 and assign an output format to this variable that holds the captured value from mr4.

 

code:

fmt  H  2 hvalue 

code:

ptlchg  # In YOUR Post       

if mi4 = one,

doprobecheck = yes

else,

doprobecheck = no

hvalue = mr4

code:

        if doprobecheck = yes,

[

#pbld, n, "G251", *t, "H", *mr4, e

pbld, n, "G251", *t, *hvalue, e

]

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