586,898 active members*
3,816 visitors online*
Register for free
Login
IndustryArena Forum > MetalWorking Machines > Haas Machines > Haas Mills > Haas mill multiple vise question (programming)
Results 1 to 15 of 15
  1. #1
    Join Date
    Jan 2007
    Posts
    46

    Haas mill multiple vise question (programming)

    I have a new vf2 and I am getting ready to do my first job where I will use more than one vise.

    I plan to have 3 vises setup. There will be 8 or 9 toolchanges.

    I plan to program g54, g55, and g56 for each vises.

    This is to machine three identical parts at one time.

    Is the SIMPLEST way to write my program using M97's?

    Or should I use M98's (I have never used M98)

    Thanks for any advice.

    Joe Simmers

  2. #2
    Join Date
    Oct 2006
    Posts
    586
    I dont use sub programs what i do it just copy and paste get the first part programed then copy and paste the rest and change G54 to your G55 G56 and set get your locations to me it is simpler but that is just me, get your first vise on and indicated in then set your other two up and take a peice of good flat stock and clamp the first then the second then the third that will get you real close to being in line
    individual who perceives a solution and is willing to take command. Very often, that individual is crazy.

  3. #3
    Join Date
    Jun 2006
    Posts
    478
    I'm with Jackson on the cut and paste thing. Also it's more efficiant as opposed to machining one complete, then the next, and so on.
    A.J.L.

  4. #4
    Join Date
    Jun 2003
    Posts
    205

    Multiple Part Programming

    Just my opinions :

    (1) Best programming practice is to use the G54 - G59 work offsets ... Why? ... adds independancy to each location so each is easily adjusted without effecting the others ... hit the vise, bump the vise, easy to re-adjust one without changing the others and no programming change, just an offset change.

    (2) Best to use sub-programming instead of copy and paste ... Why? ... Let's face it, there's always some adjustments that need to be made once the chips start flying ... and should be, that's how the most optimized programs get created. If you use sub programs, you'll be using one program so if you need to make a program adjustment, you'll only have to do it in one place. Also, first part is correct, all parts will be correct. If you copy and paste, you'll need to make multiple changes in multiple locations or keep going back and forth from the PC to the machine for editing if you need big changes. Also, if you need to change the machining order due to cutting conditions, just change one place or change the sub program calls.

    Now the drawbacks of sub programming :

    (1) If you complete one part then move to the next vise and complete the second etc., easy program as below but longer run times as tool changes are not optimized. The best way is to machine all vises with the tool while it is in the spindle ... harder to do with sub programs ( see below ). It's your call, easier programming or most optimized ... depends on what's more important to you.

    (2) Headache when saving the programs for future use ... you need to save all the sub programs as well ... in your case 7 or 8.

    Some programming examples :

    ( Machine parts complete at each vise )
    O0001
    G54 ( establish vise #1 work offset )
    M98 P1111 ( call your machining program O1111 )
    G55 ( establish vise #2 work offset )
    M98 P1111 ( call your machining program O1111 )
    G56 ( establish vise #3 work offset )
    M98 P1111 ( call your machining program O1111 )
    M30

    ( Optimized to cut all parts while the tool is in the spindle )
    O0001
    N0001
    G00 G91 G28 Z0
    T01 M06
    G90 S3000 M03
    G54 ( establish vise #1 work offset )
    M98 P1111 ( program to machine part for tool #1 )
    G55 ( establish vise #2 work offset )
    M98 P1111 ( call your machining program for tool #1 )
    G56 ( establish vise #3 work offset )
    M98 P1111 ( call your machining program for tool #1 )
    G00 G91 G28 Z0 M09
    M01
    N0002
    G00 G91 G28 Z0
    T02 M06
    G90 S3000 M03
    G56 ( establish vise #3 work offset - working your way back now )
    M98 P1112 ( program to machine part for tool #2 )
    G55 ( establish vise #2 work offset )
    M98 P1112 ( call your machining program for tool #2 )
    G54 ( establish vise #1 work offset )
    M98 P1112 ( call your machining program for tool #2 )
    G00 G91 G28 Z0 M09
    M01
    etc.
    etc.
    M30

    Just some thoughts ... hope it adds some fuel for thought.

    Real World Machine Shop Software at www.KentechInc.com

  5. #5
    Join Date
    Jun 2006
    Posts
    478
    Well Chip, your correct on the ease of programming thing, but if he's making three at a time, then it's probably safe to assume that it's a lot of pieces he's making and there for efficincy is paramount. Also if you take a program that is proven to make one piece, and make it efficiantly, and cut and paste it, the "multiple changes" should be minimal at worst.
    A.J.L.

  6. #6
    Join Date
    Jun 2003
    Posts
    205

    Another thought

    One more thought / plan ... make one part complete on one vise, prove it all out and optimize the toolpath ... then break it up and cut and paste or sub it out to make multiple parts / locations.

    Real World Machine Shop Software ... www.KentechInc.com

  7. #7
    Join Date
    Jul 2005
    Posts
    12177
    Do it with subroutines for each tool. This puts everything in a single program so it is easy to find lines in the program if you need to edit.

    The main program selects the first work zero then goes to the subroutine for the first tool, selects the second work zero then goes to the the first tool subroutine again then third work zero, subroutine again.

    All the tool change commands are in the subroutines so when the program goes back to the first work zero and calls the second subroutine this initiates a tool change to tool two and the machine cycles through the three work zeroes like before.

    This continues for however many tools there are and then the program changes back to tool one, parks the vises convenient for unloading and reloading and stops.

    With this system there are some real advantages.

    When you are writing the program you treat each tool subroutine as a separate program. Write it in the Clipboard and run it from the Clipboard. Then when that tool sub routine is correct paste it into the correct place at the end of the main program and change the M30 needed to run it to an M99 because now it is a subroutine.

    When you want to edit CUT a tool subroutine back to the clipboard, edit and run it there to prove the changes then paste it back into the program. NOTE I always make a copy of the program as backup before doing this just in case I screwup and lose something.

    When a program has many tools doing a lot of work it is sometimes tedious to go through all the tools when setting up and proving the program. With this method it is possible to put a Block Delete in front of all the work zero subroutine calls except for G54. This way you prove and finish the program on only one part; quicker and less waste if you make a mistake.

    I have written hundreds of programs using this method with some of them using up to 32 work zeroes and 10 or 11 tools. A really nice thing is that if you move the program to a larger or smaller machine all that is needed are a few more or less work zero/subroutine calls. Another thing is that if the format is kept consistent anyone familiar with it can edit a program as easily as the person who wrote it.

    I can post an example next week if you like.

  8. #8
    Join Date
    Jun 2006
    Posts
    478
    All I can say is, it's to bad your not doing this on a Mazak. Multi-pieces are a snap with Mazatrol.
    A.J.L.

  9. #9
    Join Date
    Jun 2006
    Posts
    478
    Remember to keep it as simple as possible.
    A.J.L.

  10. #10
    Join Date
    Mar 2005
    Posts
    1498
    070325-1052 EST USA

    joesimmers:

    Following is a sample program that provides a solution to some of the above comments. This requires MACRO capability, uses G52 in combination with a fixed G54, provides a means to do one or more parts with the same subroutines for each part, and minimizes tool changes.

    Note: using a subroutine for your position information greatly reduces errors for multiple parts. Either all parts are OK or none are.

    We have our own tool change subroutine that simpifies the code in the main program. Note: HAAS has a mode that functionally ignores a tool change if that tool is already loaded. Thus, multiple tool changes on the same tool do not affect cycle time.

    Part programming is in absolute in contrast to incremental. This is possible because of the use of G52.

    The theory of this program is thet G54 defines a base coordinate. This might be the left vise rear jaw left and front edges. G52 is used to create the base coordinate for each part relative to G54. G54 is never changed only G52 is.

    Two #-variables (#151 and #152) are preset to define the starting and ending parts. There is a table of G52 values at N1500 that defines the position of each part. #150 contains the ordinal number of the current part being processed minus 1.

    #150 is initially set to the value in #152 - 1 at the beginning of each loop in the program. In the main program a tool is picked. One or more subroutines are executed. #150 is incremented to the next part position and the subroutines are repeated until #150 equals the last part defined by #151.

    The next tool is selected and the same kind of process is repeated.

    Each part is 2.1 inches from the previous part in the X-axis. This could be expanded to work in both the X and Y directions.

    Works without change between my 1993 and 2000 machines.


    %
    O3004
    (SAMPLE.CNS 070325-1029)
    (Beta prog 981226-1009 )


    (******** You must set value for number of parts ****)

    #151= 1 ( replace 1 with 1 thru 11 for number of last part. )
    ( #150 is used for loop counter )

    #152= 1 ( This #152 value minus 1 is loaded into #150 throughout the )
    ( program to determine the starting part position)
    ( for loop counter initialization )

    IF [ [ #151 GT 11 ] OR [ #151 LT 1 ] ] GOTO1000
    IF [ [ #152 GT 11 ] OR [ #152 LT 1 ] ] GOTO1000


    #153= 1.7500 + [ #151 * 2.1 ] (#153 is used for length in P20)

    (************************************************* **)

    G52 X0. Y0.
    G53 G00 Z0.

    (**** TOOL Change to Mill Finishing **** -->1 IDM15F HAAS TL # 6 )
    ( rough face to set top of surface )
    (in the called sub N20 is the only place #153 is used)

    G65 P6901 E54 R2.05 S3000 T6 D06 ( call tool chg sub )

    G00 X-1.5 Y1.500
    Z0.1

    G01 F40. M97 P20 Z0.
    G90 G00 Z0.1




    (Do tool 12 work)

    #150= #152 - 1 ( initialize loop counter )

    N250 (************* LOOP POINT --A-- ************* note this loop only uses tool #12)
    ( In this loop the tool diameter definition remains constant. )
    M97 P1500 ( sets G52 for this pass, #150 incremented in N1500 )


    (**** TOOL Change to Mill Finishing **** -->2 IDM14F HAAS TL # 12 )

    G65 P6901 E54 R0.25 S5000 T12 D12 ( call tool ch sub )

    G00 X1.825 Y1.1375

    Z0.1
    F60. G01 M97 P13 Z-0.125
    G90 G00 Z0.1


    G00 X1.825 Y1.1375
    Z0.1
    F60. G01 M97 P13 Z-0.25
    G90 G00 Z0.1




    (**** TOOL Change to Mill Finishing **** ->3 IDM15F HAAS TL # 12 )

    G65 P6901 E54 R0.25 S5000 T12 D12 ( call tool chg sub )

    G00 X1.825 Y-1.4375
    Z0.1
    F60. G01 M97 P12 Z-0.125
    G90 G00 Z0.1


    G00 X1.825 Y-1.4375
    Z0.1
    F60. G01 M97 P12 Z-0.25
    G90 G00 Z0.1


    IF [ #150 LT #151 ] GOTO250

    (************************* END of LOOP --A-- **********************)

    G52 X0. Y0.




    (Do tool 11 work)

    #150= #152 - 1 ( initialize loop counter )

    N251 (************* LOOP POINT --B-- ************** note this loop only uses tool #11)
    ( In this loop the tool diameter definition changes. )

    M97 P1500 ( sets G52 for this pass, 150 incremented in N1500 )


    (**** TOOL Change to Mll Roughing **** --->9 IDM20R HAAS TL # 11 )
    ( rough the outside )

    G65 P6901 E54 R0.19 S5000 T11 D11 ( call tool chg sub )

    G00 X0.1943 Y1.8648
    Z0.1
    F40. G01 M97 P21 Z-0.25
    G90 G00 Z0.1

    G00 X0.1943 Y1.8648
    Z0.1
    F40. G01 M97 P21 Z-0.37
    G90 G00 Z0.1




    (**** TOOL Change to Mill Finishing **** -->10 IDM20F HAAS TL # 11 )
    ( finish the outside )

    G65 P6901 E54 R0.187 S5000 T11 D11 ( call tool chg sub )

    G00 X0.1943 Y1.8648
    Z0.1
    F40. G01 M97 P21 Z-0.37
    G90 G00 Z0.1


    IF [ #150 LT #151 ] GOTO251

    (************************* END of LOOP --B-- **********************)

    G52 X0. Y0.




    M09
    M05
    G90 G00 G53 Z0
    G53 X-16. Y0
    M30


    (subroutines)

    N20 (this is only place #153 is used)
    G01 G40 X-1.5 Y0.9475
    G01 X#153 Y0.9475
    G01 X#153 Y-1.0525
    G01 G40 X-1.5 Y-1.0525
    M99


    N12
    G01 G40 X1.825 Y-1.1375
    G01 X1.075 Y-1.1375
    G01 X1.075 Y-1.4375
    G01 X1.7833 Y-1.4375
    G01 X1.7833 Y-1.3043
    G01 X1.1101 Y-1.3043
    G01 G40 X1.1101 Y-1.2504
    M99


    N11
    G01 G40 X2.05 Y1.0375
    G01 X1.81 Y1.0375
    G01 X1.81 Y-1.0375
    G01 X1.57 Y-1.0375
    G01 X1.57 Y1.0375
    G01 X1.33 Y1.0375
    G01 X1.33 Y-1.0375
    G01 X1.09 Y-1.0375
    G01 X1.09 Y1.0375
    G01 X0.85 Y1.0375
    G01 X0.85 Y-1.0375
    G01 G40 X0.9824 Y-1.0375
    M99



    N1500

    ( #150 IS INITIALIZED BEFORE CALL TO SUBROUTINE )

    IF [ #150 EQ 0 ] GOTO200
    IF [ #150 EQ 1 ] GOTO201
    IF [ #150 EQ 2 ] GOTO202
    IF [ #150 EQ 3 ] GOTO203
    IF [ #150 EQ 4 ] GOTO204
    IF [ #150 EQ 5 ] GOTO205
    IF [ #150 EQ 6 ] GOTO206
    IF [ #150 EQ 7 ] GOTO207
    IF [ #150 EQ 8 ] GOTO208
    IF [ #150 EQ 9 ] GOTO209
    IF [ #150 EQ 10 ] GOTO210
    IF [ #150 EQ 11 ] GOTO211
    #3000= 15 (N1500 - #150 OUT OF RANGE)

    N200 G52 X0.
    GOTO300
    N201 G52 X-2.1
    GOTO300
    N202 G52 X-4.2
    GOTO300
    N203 G52 X-6.3
    GOTO300
    N204 G52 X-8.4
    GOTO300
    N205 G52 X-10.5
    GOTO300
    N206 G52 X-12.6
    GOTO300
    N207 G52 X-14.7
    GOTO300
    N208 G52 X-16.8
    GOTO300
    N209 G52 X-18.9
    GOTO300
    N210 G52 X-21.
    GOTO300
    N211 G52 X-23.
    GOTO300

    N300
    #150= #150 + 1
    M99



    %

  11. #11
    Join Date
    Mar 2007
    Posts
    15
    Sorry to diagree with the m98 m99 but cut copy past is the quickest and easiest way to program I feel especially with haas easy search function its easy to fine tune each vise. Keep it simple

    Dadeslot

  12. #12
    Join Date
    Jul 2005
    Posts
    12177
    Quote Originally Posted by Dadeslot View Post
    Sorry to diagree with the m98 m99 but cut copy past is the quickest and easiest way to program I feel especially with haas easy search function its easy to fine tune each vise. Keep it simple

    Dadeslot
    If I have a program using 10 tools on 32 different locations you are saying it is simple to copy each tool routine 32 times for each location? More simple than having one tool routine in a sub and calling it 32 times after selecting the different locations?

  13. #13
    Join Date
    Mar 2003
    Posts
    4826
    I've found Geof's method (post#7) to be very workable. I came up with pretty much exactly the same solution when I was looking for a way to make OneCNC post a program with work offsets and subroutines, and no further hand editing required to make a successful "sub call" program.

    Of course, running a Haas maybe makes this a little less painful, as the Haas can be set to ignore the re-reading of the tool change commands if the current tool is still modal.

    Putting the tool change lines in the sub also makes it fairly quick and easy to search for the beginning of each sub by looking for its tool number, instead of trying to recall a sequence number.
    First you get good, then you get fast. Then grouchiness sets in.

    (Note: The opinions expressed in this post are my own and are not necessarily those of CNCzone and its management)

  14. #14
    Join Date
    Jan 2007
    Posts
    46
    Many thanks to everyone for their help, I ended up using M97's as Geof stated and wrote a sepearte subproram for each tool.

    This worked very well and was very easy to edit to fine tune
    the program.


    Joe Simmers

  15. #15
    Join Date
    Jan 2007
    Posts
    46
    "seperate subprogram" bad spelling!


    Joe Simmers[/QUOTE]

Similar Threads

  1. Kurt Vise & Haas Minimill Fit
    By Motivator-1 in forum Haas Mills
    Replies: 8
    Last Post: 01-01-2007, 03:13 AM
  2. programming multiple double vises
    By bink in forum G-Code Programing
    Replies: 12
    Last Post: 10-27-2006, 03:07 AM
  3. Haas Mini Mill Programming Question
    By CuttingTools in forum Haas Mills
    Replies: 41
    Last Post: 05-24-2006, 02:44 PM
  4. What Vise for IH mill ?
    By Roy Norris in forum Charter Oak Automation Support Forum
    Replies: 8
    Last Post: 07-24-2005, 03:43 AM
  5. Haas vs. Mazatrol 640 Programming
    By fuzz5150 in forum Haas Mills
    Replies: 1
    Last Post: 04-11-2005, 05:11 AM

Posting Permissions

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