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:

Populate a tombstone via Macro


Guest
 Share

Recommended Posts

I am wondering....as I do mostly production programming for the HMC's here and quantities can vary wildly....

I am thinking that saving set up time proving out a single position and then using a macro to populate the rest of the positions would be beneficial...just not sure if anyone is doing it in this manner....

or am I out in left field on this one?

Link to comment
Share on other sites

I used to do that at a previous employer.  Not near as many parts as you but same principle.  I can probably find my 840D macros I wrote.  I also had probe routines to set the macro up so that it would figure out what ops/holds had parts in it.

Link to comment
Share on other sites
1 hour ago, newbeeee said:

Question...

How do you handle the toolchanges doing this?

I'm assuming make one part complete, then next part complete etc ie it isn't as efficient as a pallet load, although more efficient if you're running only a few?

I will be looking at doing this at the tool level so that there are no unnecessary tool changes...

I wouldn't just rerun the entire program in a different location each time...that would very much be against "production" level programming

Edited by Guest
Link to comment
Share on other sites

John easily done using Mastercam and the Transform process. At the Macro Level is would could be done, but at some point you have to map each position and by mapping it with Translate in a Mastercam file you can in all reality make that template. Then import a proven program for the mapped tombstone into that file. Pick all the mapped postilion and process all worked out using Transform and then should just be a matter of regenerate the operations post code and done.

Macro would be pretty much be the same way. You have all your positions mapped and do it with a G10 method where you know each positions is called every time a certain place is run to allow you the ability to stop mid stream on a program run and then come back and pick it up once you could get back to it. Many ways to think about this and approach it. I would probably map my tombstones and make artifact on them to quality them with a probe every time they are loaded. The Macro needs to have the original data where it was and the new data to what it is in the logic of the Macro. Then it needs to compare them and make the adjustments needed to the base matrix. Once that bases matrix checks out you off and running if it doesn't check out you can either have it stop and alert the operator there is an issue or if within a certain tolerance make the adjustments needed to all G10 places and good to go. This is really where going back to a product like Verisurf would take manufacturing to a whole new level for your company. By capturing the data and ensuring everything is where it suppose to be then you insure your process is repeatable. Problem is many shops assume it repeats then realize after running 100's of not 1000's of part oh well it didn't.

Quality must be part of the process upfront and by creating a process that looks at the exact place of where everything else before you are off the races createS the method to eliminate scrap and waste.

Link to comment
Share on other sites

This is definitely reasonable. I program the same type of stuff - mostly HMCs, high production. I've been taught to do it with loop logic and registers counting how many parts have been ran. When we design and create our fixturing we know exactly where each part will be. Then we program one of the parts (top part, left part, whatever we pick to be the "seed" part) and then use the loop logic to jump to G52 lines where we shift the work offset to each new part. This also helps because I program for a lot of forged parts so it makes it possible to shift everything around to line up to the forging and make small tweaks to get things in print. This way, we can run just one part, all parts, or any number of parts and everything happens at each tool change, so there's no time wasted running one part completely through, and then another. 

We've also figured out how to get all of the logic to post out nicely in Mastercam with manual entries and Point toolpaths. It takes some upfront work, but once it is done it makes everything very nice and no hand editing code, either. 

I recently tweaked the logic to use both block delete and registers (i.e. #700= # number of parts to run) for a dual rotary setup in a haas with multiple parts on each rotary. I really like doing it with logic because the possibilities are endless.

  • Like 1
Link to comment
Share on other sites
On 12/21/2017 at 6:29 AM, JParis said:

I am wondering....as I do mostly production programming for the HMC's here and quantities can vary wildly....

I am thinking that saving set up time proving out a single position and then using a macro to populate the rest of the positions would be beneficial...just not sure if anyone is doing it in this manner....

or am I out in left field on this one?

If you have consistent grid pattern you can do this with transform/translate inside mastercam.

The trick is to use each tools "operations" as a tool group. Ie

Tool 9 does 4 different operations or toolpaths - make this tool "group 9"

Tool 47 does 9 operations - make this tool "group 47"

etc etc

After all your tool groups have been made, make another tool group for all your "translate" operations. Simply create a translate for each of your previous tool groups, but keep all of these new translates in this new group called "translate". This will give you efficient tool use on one face of the tombstone.

If you need to rotate, now make a different tool group called "transform", and create a transform operation for your previous translate group, and then you will be able to use your original efficient tool pathing on whatever specified rotations.

  • Like 1
Link to comment
Share on other sites

I already do this...I know

I also already use macro based skip checks to control which faces run....

I am trying to gain part level on/off ability based on a variable....

I am likely going to wind up just writing the macro skips down to the part level instead of the face level

My programs already go out like this...minus the noted about the skips

(TOOLS)
(T1 1/2 ENDMILL / MILL AOUND PART / Z-.5 )
(T2 1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105 )
(T3 .159 DRILL / TAP DRILL FOR 10-32 / Z-.75 )
(T4 10-32 TAP / TAP HOLES / Z-.625 )
 
(SAMPLE IS FOR A SIX SIDED TOMBSTONE)
(EACH SETTING CONTROLS IF A FACE RUNS
(OR NOT 0=NO, 1=YES)

#900=1(PLATE 1)
#901=0(PLATE 2)
#902=0(PLATE 3)
#903=0(PLATE 4)
#904=0(PLATE 5)
#905=0(PLATE 6)

(THESE ARE CHECKS TO VERIFY A SETTING)
(IS EITHER A 0 OR A 1 - ANY OTHER VALUE)
(WILL CAUSE IT JUMP TO THE ERROR SECTION RIGHT BEFORE THE M30)

IF[#900LT0]GOTO99993
IF[#900GT1]GOTO99993
IF[#901LT0]GOTO99994
IF[#901GT1]GOTO99994
IF[#902LT0]GOTO99995
IF[#902GT1]GOTO99995
IF[#903LT0]GOTO99996
IF[#903GT1]GOTO99996
IF[#904LT0]GOTO99997
IF[#904GT1]GOTO99997
IF[#905LT0]GOTO99998
IF[#905GT1]GOTO99998
 
 
G20
G0G40G80G90G94G98G17
G0G28G91Z0.
M00
(1/2 3FL DESTINY VIPER .625 LOC #V33210S TOOL - 1 DIA. OFF. - 51999 LEN. - 51999 DIA. - .5)
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
(MAX Z DEPTH - Z1.)
(MIN Z DEPTH - Z-.5)
(OPERATION #1)
N1000
T1M6
G90G10L10P#51999R0
G90G10L12P#51999R0(THE 1ST CHECK HAPPENS AFTER THE OFFSET CALL BUT BEFORE ANY MOTION)
()
IF[#900EQ1]GOTO10101(THESE LINES ARE CHECKING THE #900 VARIABLE - PLATE 1)
IF[#900EQ0]GOTO30101(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10101(THIS IS THE "JUMP TO" LINE IF PLATE 1 IS GOING TO RUN)
()
G0G90B0.
G0G54.1P1G90X-.2121Y1.9104S15000M3
T2
G43H#51999Z1.M8
M98H40001
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
G0G90Z7. (SKIP CHECK INSERTED AFTER Z CLEARANCE MOVE)
()
N30101(THIS IS THE "JUMP TO" LINE IF PLATE 1 IS NOT GOING TO RUN)
IF[#901EQ1]GOTO10102(THESE LINES ARE CHECKING THE #901 VARIABLE - PLATE 2)
IF[#901EQ0]GOTO30102(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10102(THIS IS THE "JUMP TO" LINE IF PLATE 2 IS GOING TO RUN)
()
G0G90B60.
G54.1P2X-.2121Y1.9104S15000M3(TOOL START UP INFO MUST BE COPIED DOW TO ALLOW TO TO START IF NECESSARY)
T2
G43H#51999Z1.M8
M98H40001
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
G0G90Z7.
()
N30102(THIS IS THE "JUMP TO" LINE IF PLATE 2 IS NOT GOING TO RUN)
IF[#902EQ1]GOTO10103(THESE LINES ARE CHECKING THE #902 VARIABLE - PLATE 3)
IF[#902EQ0]GOTO30103(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10103(THIS IS THE "JUMP TO" LINE IF PLATE 3 IS GOING TO RUN)
()
G0G90B120.
G54.1P3X-.2121Y1.9104S15000M3(TOOL START UP INFO MUST BE COPIED DOW TO ALLOW TO TO START IF NECESSARY)
T2
G43H#51999Z1.M8
M98H40001
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
G0G90Z7.
()
N30103(THIS IS THE "JUMP TO" LINE IF PLATE 3 IS NOT GOING TO RUN)
IF[#903EQ1]GOTO10104(THESE LINES ARE CHECKING THE #903 VARIABLE - PLATE 4)
IF[#903EQ0]GOTO30104(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10104(THIS IS THE "JUMP TO" LINE IF PLATE 4 IS GOING TO RUN)
()
G0G90B180.
G54.1P4X-.2121Y1.9104S15000M3(TOOL START UP INFO MUST BE COPIED DOW TO ALLOW TO TO START IF NECESSARY)
T2
G43H#51999Z1.M8
M98H40001
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
G0G90Z7.
()
N30104(THIS IS THE "JUMP TO" LINE IF PLATE 4 IS NOT GOING TO RUN)
IF[#904EQ1]GOTO10105(THESE LINES ARE CHECKING THE #904 VARIABLE - PLATE 5)
IF[#904EQ0]GOTO30105(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10105(THIS IS THE "JUMP TO" LINE IF PLATE 5 IS GOING TO RUN)
()
G0G90B240.
G54.1P5X-.2121Y1.9104S15000M3(TOOL START UP INFO MUST BE COPIED DOW TO ALLOW TO TO START IF NECESSARY)
T2
G43H#51999Z1.M8
M98H40001
(1/2 ENDMILL / MILL AOUND PART / Z-.5)
G0G90Z7.
()
N30105(THIS IS THE "JUMP TO" LINE IF PLATE 5 IS NOT GOING TO RUN)
IF[#905EQ1]GOTO10106(THESE LINES ARE CHECKING THE #905 VARIABLE - PLATE 6)
IF[#905EQ0]GOTO30100(TO VERIFY IF IT WILL RUN OR BE SKIPPED)
N10106(THIS IS THE "JUMP TO" LINE IF PLATE 6 IS GOING TO RUN)
()
G0G90B300.
G54.1P6X-.2121Y1.9104S15000M3(TOOL START UP INFO MUST BE COPIED DOW TO ALLOW TO TO START IF NECESSARY)
T2
G43H#51999Z1.M8
Z1.
M98H40001
()
N30100(THIS IS THE "JUMP TO" LINE IF PLATE 6 IS GOING TO RUN AND THE END OF THIS TOOL)
()
M9
M5
G0G28G91Z0.
G90G10L10P#51999R0
G90G10L12P#51999R0
M01
G0G17G40G80G90G94G98
G0G28G91Z0.
(1/4 X 90 DEGREE SPOT DRILL TOOL - 2 DIA. OFF. - 51999 LEN. - 51999 DIA. - .25)
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
(MAX Z DEPTH - Z1.)
(MIN Z DEPTH - Z-.105)
(OPERATION #3)
N1100
T2M6
G90G10L10P#51999R0
G90G10L12P#51999R0
()
IF[#900EQ1]GOTO10201
IF[#900EQ0]GOTO30201
N10201
()
G0G90B0.
G0G54.1P1G90X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
G0G90Z7.
()
N30201
IF[#901EQ1]GOTO10202
IF[#901EQ0]GOTO30202
N10202
()
G0G90B60.
G54.1P2X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
G0G90Z7.
()
N30202
IF[#902EQ1]GOTO10203
IF[#902EQ0]GOTO30203
N10203
()
G0G90B120.
G54.1P3X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
G0G90Z7.
()
N30203
IF[#903EQ1]GOTO10204
IF[#903EQ0]GOTO30204
N10204
()
G0G90B180.
G54.1P4X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
G0G90Z7.
()
N30204
IF[#904EQ1]GOTO10205
IF[#904EQ0]GOTO30205
N10205
()
G0G90B240.
G54.1P5X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
(1/4 X 90 DEG SPOT / SPOT 10-32 HOLES / Z-.105)
G0G90Z7.
()
N30205
IF[#905EQ1]GOTO10206
IF[#905EQ0]GOTO30200
N10206
()
G0G90B300.
G54.1P6X-1.25Y1.25S8000M3
T3
G43H#51999Z1.M8
M98H40002
()
N30200
()
M9
M5
G0G28G91Z0.
G90G10L10P#51999R0
G90G10L12P#51999R0
M01
G0G17G40G80G90G94G98
G0G28G91Z0.
(NO. 21 JOBBER DRILL TOOL - 3 DIA. OFF. - 51999 LEN. - 51999 DIA. - .159)
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
(MAX Z DEPTH - Z1.)
(MIN Z DEPTH - Z-.7)
(OPERATION #5)
N1200
T3M6
G90G10L10P#51999R0
G90G10L12P#51999R0
()
IF[#900EQ1]GOTO10301
IF[#900EQ0]GOTO30301
N10301
()
G0G90B0.
G0G54.1P1G90X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
G0G90Z7.
()
N30301
IF[#901EQ1]GOTO10302
IF[#901EQ0]GOTO30302
N10302
()
G0G90B60.
G54.1P2X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
G0G90Z7.
()
N30302
IF[#902EQ1]GOTO10303
IF[#902EQ0]GOTO30303
N10303
()
G0G90B120.
G54.1P3X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
G0G90Z7.
()
N30303
IF[#903EQ1]GOTO10304
IF[#903EQ0]GOTO30304
N10304
()
G0G90B180.
G54.1P4X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
G0G90Z7.
()
N30304
IF[#904EQ1]GOTO10305
IF[#904EQ0]GOTO30305
N10305
()
G0G90B240.
G54.1P5X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
(.159 DRILL / TAP DRILL FOR 10-32 / Z-.75)
G0G90Z7.
()
N30305
IF[#905EQ1]GOTO10306
IF[#905EQ0]GOTO30300
N10306
()
G0G90B300.
G54.1P6X-1.25Y1.25S2650M3
T4
G43H#51999Z1.M8
M98H40003
()
N30300
()
M9
M5
G0G28G91Z0.
G90G10L10P#51999R0
G90G10L12P#51999R0
M01
G0G17G40G80G90G94G98
G0G28G91Z0.
(10-32 CUTTING TAP RH TOOL - 4 DIA. OFF. - 51999 LEN. - 51999 DIA. - .19)
(10-32 TAP / TAP HOLES / Z-.625)
(MAX Z DEPTH - Z1.)
(MIN Z DEPTH - Z-.625)
(OPERATION #7)
N1300
T4M6
G90G10L10P#51999R0
G90G10L12P#51999R0
()
IF[#900EQ1]GOTO10401
IF[#900EQ0]GOTO30401
N10401
()
G0G90B0.
G0G54.1P1G90X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
(10-32 TAP / TAP HOLES / Z-.625)
G0G90Z7.
()
N30401
IF[#901EQ1]GOTO10402
IF[#901EQ0]GOTO30402
N10402
()
G0G90B60.
G54.1P2X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
(10-32 TAP / TAP HOLES / Z-.625)
G0G90Z7.
()
N30402
IF[#902EQ1]GOTO10403
IF[#902EQ0]GOTO30403
N10403
()
G0G90B120.
G54.1P3X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
(10-32 TAP / TAP HOLES / Z-.625)
G0G90Z7.
()
N30403
IF[#903EQ1]GOTO10404
IF[#903EQ0]GOTO30404
N10404
()
G0G90B180.
G54.1P4X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
(10-32 TAP / TAP HOLES / Z-.625)
G0G90Z7.
()
N30404
IF[#904EQ1]GOTO10405
IF[#904EQ0]GOTO30405
N10405
()
G0G90B240.
G54.1P5X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
(10-32 TAP / TAP HOLES / Z-.625)
G0G90Z7.
()
N30405
IF[#905EQ1]GOTO10406
IF[#905EQ0]GOTO30400
N10406
()
G0G90B300.
G54.1P6X-1.25Y1.25S320M3
T1
G43H#51999Z1.M8
M98H40004
()
N30400
()
M9
M5
G0G28G91Z0.
G90G10L10P#51999R0
G90G10L12P#51999R0
G0G28
()
(END OF PROGRAM)
GOTO99999(THIS LINE IS TO SKIP THE CHECKS IF THE PROGRAM RAN THIS FAR)
N99993#3000=99(INVALID SETTING #900) 
N99994#3000=99(INVALID SETTING #901) 
N99995#3000=99(INVALID SETTING #902)  
N99996#3000=99(INVALID SETTING #903) 
N99997#3000=99(INVALID SETTING #904) 
N99998#3000=99(INVALID SETTING #905)
N99999(LANDING SPOT FOR JUMP OVER CHECKS)
()
M30

In a 50 or 60 tool program.....it can get to be a bit of a chore.... :)

So the more I think on it...I am just not sure a macro will get me to where I want to be....it would almost have to be tailored for each program

Edited by Guest
Link to comment
Share on other sites

One thing worth mentioning - we used to do skips, but don't any longer, too many tools got busted when empty fixtures didn't have all the clamping elements removed. Loose screws, even with spring under them would tend to walk out. We ended up just making it shop policy to run full tombstones only. It was easier and cheaper to manage raw materials than fixture whoopsies.

  • Like 1
Link to comment
Share on other sites

The way I do this is to give a separate variable to every part and then use the variables as on/off switches. We base this for 64 parts max on each pallet. On pallet A the variables are #601, #602, #603, #604 --- #664. On pallet B they are #665, #666, #667 --- #728.  We also use a macro program to turn on/off the variables if needed.

  • Like 1
Link to comment
Share on other sites

Here's how I create My work offsets and G-code after. We always use a probe to find offsets the first time around and then store them for future use on each machine. Work_vari is a variable for using either a 48 or 300 max_offset dependent on the machine_def.

p36_5502 # two sided tombstone router

      sub_prg_no$ = 5502
      " ", e$
      sub_prg_no$ , "(WORK OFFSET CREATOR)",e$
      "#1=0", e$ # accumulated X distance between parts per fixture
      "#2=0", e$ # accumulated y distance between parts per fixture
      "#11=", no_spc$, *work_vari, no_spc$, "-19", e$ # X fixture variable
      "#12=", no_spc$, *work_vari, no_spc$, "-18", e$ # y fixture variable
      "#13=", no_spc$, *work_vari, no_spc$, "-17", e$ # z fixture variable
      "#14=", no_spc$, *work_vari, no_spc$, "-16", e$ # b fixture variable
      "#15=0", e$ # B Work Axis
      "#16=0", e$ # parts counter
      "#17=0", e$ # fixture counter
      "#18=0", e$ # vertical parts counter
      "#19=" no_spc$, *multi_offset_no, e$ # vertical parts counter

      "N1WHILE[#15LE270]DO1", e$
      "#[#11+[#539*20]]=#1", e$
      "#[#12+[#539*20]]=#2", e$
      "#[#13+[#539*20]]=#921", e$
      "#[#14+[#539*20]]=#15", e$
      "#16=#16+1", e$
      "#18=#18+1", e$
      "#11=#11+[#19*20]", e$
      "#12=#12+[#19*20]", e$
      "#13=#13+[#19*20]", e$
      "#14=#14+[#19*20]", e$
      "IF[#155GT#18]THEN#2=#2+#156", e$
      "IF[#155EQ#18]GOTO2", e$
      "END1",e$

      "N2WHILE[#18EQ#155]DO1" e$
      "IF[#154GT#16]THEN#1=#1+#157", e$
      "IF[#154EQ#16]GOTO3", e$
      "#2=0", e$
      "#18=0", e$
      "IF[#15LE270]GOTO1", e$
      "END1", e$

      "N3WHILE[#16EQ#154]DO1", e$
      "#1=0", e$
      "#2=0", e$
      "#15=#15+180", e$
      "#16=0", e$
      "#18=0", e$
      "IF[#15GT180]GOTO4", e$
      "GOTO1",e$
      "END1", e$
      "N4", e$


O5502 (WORK OFFSET CLEARING)
#1=0
#2=0
#11=7000-19
#12=7000-18
#13=7000-17
#14=7000-16
#15=0
#16=0
#17=0
#18=0
#19=1
N1WHILE[#15LE270]DO1
#[#11+[#539*20]]=#1
#[#12+[#539*20]]=#2
#[#13+[#539*20]]=#921
#[#14+[#539*20]]=#15
#16=#16+1
#18=#18+1
#11=#11+[#19*20]
#12=#12+[#19*20]
#13=#13+[#19*20]
#14=#14+[#19*20]
IF[#155GT#18]THEN#2=#2+#156
IF[#155EQ#18]GOTO2
END1
N2WHILE[#18EQ#155]DO1
IF[#154GT#16]THEN#1=#1+#157
IF[#154EQ#16]GOTO3
#2=0
#18=0
IF[#15LE270]GOTO1
END1
N3WHILE[#16EQ#154]DO1
#1=0
#2=0
#15=#15+180
#16=0
#18=0
IF[#15GT180]GOTO4
GOTO1
END1
N4
M99

Edit: Adding first tool (probe)

N1 G91 G30 X0 Y0 Z0
G00 G17 G20 G40 G49 G64 G69 G80 G90 G94 M28
#153=1
WHILE[#910EQ1]DO1
IF[#1001NE1]GOTO99003
GOTO601
END1
WHILE[#910EQ2]DO1
IF[#1000NE1]GOTO99003
GOTO601
END1
N601
M06 T4 (OMP400 PROBE WITH 6MM X 100MM STYLUS)
M117
T06
#154=1
#155=1
#156=0.
#157=0.
#170=4010
#172=5202
#173=98
#174=0
#198=0
#199=0
M98P5502(work offset creation sub call)
M98P5036(parts router call)
M05
G91 G30 X0 Y0 Z0
#153=#0
M01
 

 

  • Like 1
Link to comment
Share on other sites
  • 2 weeks later...

Do guys think something like this would work? Right now it would only do 1 straight line but the logic could be written for vertical rows too.

O0001(MAIN PGM)
T1M06
G65P0002STX
X0Y0
T2M06
G65P0002STX
Y0Y0
T3M06
G65P0002STX
Y0Y0
ECT...

O0002(POPULATE TOMBSTONE IN ONE STRAIGHT LINE)
(FORMAT G65STX)
(S = #19 - SUB PROGRAM #)
(T = #20 - TOTAL # OF PARTS)
(X = #24 - INCREMENTAL X POSITION)
(********************************)
#100=#20
#101=0
WHILE[#100GE1]DO1
#101=#101+1
M98P#19
IF[#20EQ1]GOTO100
G91G0X#24
(COUNTER)#100=#100-1
N100
END1

(PG#19 SUB POSTED IN INCREMENTAL)
GOTO#101
N1(INCREMENTALLY POSTED PGM FOR TOOL 1)

Link to comment
Share on other sites

Only thing I can think of is Values for the G65 line you don't have in there in your example. You have the letters, but I would normally show in an example something like so.

G65P0002S0.00T0.00X0.00

You have S as the sub program number. Not sure what your thought it there. I see your P98#19, but what are you controlling with that? If you want to shift the part then you could easily do a shift with a While Do using an Incremental process. You could use a G52 process, but using the sub Program process it is not working in my brain. Normally on a control a sub program has to be a fixed number and you are going to program the program number through a Marco variable and have it adjustable who will the machine be able to search for it is the number is not in the program list? How will the program populate your active programs using this process?

Maybe I just can't see it and someone else will chime it telling mow I am thinking all wrong.

Link to comment
Share on other sites

What I posted up will create multiple part work offsets vertically and horizontally. I just saw that I forgot to show the related variables needed to populate the work offsets. You will see the variables in the probe call. (last window)

#154  MR4$ (NUMBER OF PARTS PER FIXTURE)

#155  MR5$ (NUMBER OF PARTS PER COLUMN)

#156  MR6$ (MULTIPLE PARTS SPACING AMOUNT Y)

#157  MR7$ (MULTIPLE PARTS SPACING AMOUNT X)

#539  FIRST OFFSET NUMBER EACH PALLET (1 for pallet A, 25 or 65 for pallet B.

#921  Z DISTANCE FROM SPINDLE END TO CENTER LINE OF PALLET)

What I posted was for a two sided tombstone but I also have one for square tombstones.

 

 

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