top of page

How to Program a Bar Puller

There are three categories of turning work: chucking work, shaft work, and bar work. Turning centers vary when it comes to what kind of turning work they do best. There are turning centers that have been specifically designed for but one of these three categories.

  • CNC chuckers commonly have a three-jaw chuck for workholding and short beds (short Z axis travel).

  • CNC shaft machines have a tailstock to support the right end of long workpieces. They may also have a steady-rest to provide support in the middle of long workpieces. Most shaft machines have a three-jaw chuck to provide workholding. And they commonly have long beds with long Z axes.

  • CNC bar machines have a bar feeder to support and feed very long bars through the spindle. Bars up to twelve or fifteen feet long can be supported and fed. These machines commonly have a collet chuck to clamp the bar during machining.

While there are specifically designed turning centers that perform but one of these applications exclusively, the vast majority of CNC turning centers being used today are more universal. That is, they're designed to perform at least two applications. While compromises must be made (compared to having a machine specifically designed for a given turning application), this provides great flexibility to the machine's owner when it comes to the kind of work they can do.


Universal CNC turning centers commonly come with a three-jaw chuck for workholding. This will allow chucking work to be done. They'll also have a tailstock to support long workpieces - which of course allows shaft work to be done. But most universal turning centers don't come with anything that allows them to perform bar work. These machines provide no way to advance the bar during the machining cycle.


How a bar puller works

This device is mounted in the turret of the turning center and uses axis motion to engage and advance the bar. The bar being used as raw material is placed in the spindle. This means, of course, that the turning center must have a hole all the way through the spindle. Note that some turning centers have a draw bar (as opposed to a draw tube) to open and close the chuck. Machines with draw bars cannot be used for bar work (without replacing the workholding device with one that uses a draw tube). The entire bar must be surrounded by the spindle. Under no circumstances should the bar be allowed to extend past the back end of the spindle. This means that the bar must be cut to a length that will fit in the spindle, commonly about three feet long.


There are many different styles of bar pullers. Some engage the bar from the Z axis (from the bar end) and others engage the bar from the X axis (from above the bar). Some are adjustable, allowing a range of bars to be pulled. Others used fixed grippers designed for a specific bar size. For our examples, well be using the fixed gripper style of bar puller that engages the bar from its end. This is the bar puller made by The Dunham Tool Company. We market this bar puller from this website.


Here are the general steps required for bar pulling:


For initial setup:

  • Load the bar puller in a turret station. This involves placing the bar puller shank in a boring bar station and mounting a gripper and/or adapter to the shank.

  • Load the bar in the spindle. Remember, the bar must not extend past the back end of the spindle, meaning it must first be cut a length of about three feet long.

  • Manually set the bar end to extend from the chuck jaws. The setup person must ensure that the bar end is extending the correct amount from the chuck jaws. This distance must be specified by the programmer on the setup sheet. This setting is not extremely critical, since most applications require that the bar be faced before other machining operations will be performed. Normally a six-inch scale can be used. Most CNC users prefer to set the bar in such a way that the first workpiece can be machined. That is, bar pulling will not occur until after the first workpiece is machined. And when bar pulling is done, the bar end will be nice and square due to the parting (cut off) operation.

  • Determine the program zero assignment values (geometry offsets for Fanuc) for the bar puller. Note that the X value will remain consistent for every time the bar puller is used. For the X axis program zero assignment value (with machines that have a turret), this will be the same value used for any center cutting tool (like a drill). In Z, the program zero assignment value may change from setup to setup. If you use the distance from the tool tip to program zero in Z as the program zero assignment value (as many CNC users do), the setup person can manually measure the distance from program zero to the extreme Z axis end of the bar puller (end of gripper) while the machine is at the zero return position. This will be the Z axis program zero assignment value.

  • For the next bar, only steps 2 and 3 must be done.

In the program for each bar pull:

  • Machine the workpiece. Again, the operator has initially set the bar to a length that allows the first workpiece to be machined. So bar pulling will not occur until the end of the CNC cycle.Stop the spindle. The spindle must be stopped for the bar pulling operation.

  • Index to the bar puller station. With our example bar puller, this will be a boring bar station.

  • Rapid the bar puller to its approach position. For our bar puller, in X, this is spindle center (X0). In Z it is a position 0.1" from the bar end. We'll describe how to calculate this Z position a little later.

  • Engage the bar. For our bar puller, this is done by feeding (using G01) the gripper onto the bar along the Z axis. Engage by 0.25". We'll describe how to calculate this Z position a little later.

  • Open the jaws. An M code is used for this purpose. You'll have to confirm this M code's number in your machine tool builder's programming manual.

  • Advance the bar. Using G01, feed out the bar (now attached to the gripper) along the Z axis to its required position. We'll describe how to calculate this Z position a little later.

  • Close the jaws. An M code is used for this purpose. You'll have to confirm this M code's number in your machine tool builder's programming manual.

  • Disengage the bar. For our bar puller, this is done by feeding (using G01) the gripper off the bar along the Z axis. A movement of 0.35 in the plus Z direction is enough.

  • Rapid the turret to its tool change position. The bar is now advanced, so the turret can be sent to its index position for indexing to the first tool to be used in the program.


Calculating Z positions for the bar pulling operation

The following drawing will be used to explain how Z positions are calculated for bar pulling.


The drawing shows how the setup person will initially set the bar in the chuck. The setup person must be told how far to extend the bar from the chuck jaws in the setup documentation. In our case, they will be told to set the bar a distance of 1.405" from the jaws (0.25 extension after cutoff plus 0.125 cutoff tool width plus 1.0 workpiece length plus 0.03 facing stock). Notice that the program zero point (origin for all absolute Z motions in the program) is selected as the right end of the finished workpiece (not the end of the bar). Remember that we're programming the left side of the gripper in Z. Also remember that when the bar pulling operation begins, the bar will only be protruding from the chuck jaws by 0.25".

  • The Z approach position (step four above)

  • This position is calculated by adding the workpiece length (1.0") to the cutoff tool width (0.125") and then subtracting the desired clearance amount (0.1"). For our example, this renders a value of 1.025. But since this position is on the negative side of program zero in Z, the position Z-1.025 will be used in the program.

  • Bar engagement position (step five above)

  • This position is calculated by adding the workpiece length (1.0") plus the cutoff tool width (0.125") plus the engagement amount (0.25" for our bar puller). In our example, this totals 1.375. But since this position is on the negative side of program zero in Z, the position Z-1.375 will be used in the program.

  • Bar advance position (step seven above)

  • This position is calculated by subtracting the engagement amount (0.25" for our bar puller) from the facing stock amount (0.03" in our example). The result is minus (negative) 0.22, programmed as Z-0.22.

  • Bar disengage position (step nine above)

  • This position is calculated by Adding the facing stock amount (0.03" in our example) to the clearance amount (0.1"). A position of Z0.13 will be programmed.


Calculating the number of workpieces you can machine per bar

With bar pullers, you must determine how many workpieces can be machined per bar. Your programmer will be specifying this number in the program. This is a very important point. Bar pullers have no "end of bar" signal like those found on fully interfaced bar feeders. With a bar feeder, the bar feeder will stop the CNC cycle at the end of the bar. A bar puller has no such cycle-stopping capability.


If more than one bar will be required to complete the production run, it is very important that they be cut to consistent lengths. A short bar thrown into the mix could result in disaster - there may not be sufficient gripping for the last workpiece/s to be machined.


Calculating the number of workpieces that can be machined from a bar involves knowing the workpiece length, the amount of facing stock being removed from each workpiece, and the width of the cutoff tool. You must also know the minimum gripping length required to secure the bar for machining. And you must know how far the bar will extend from the chuck jaws after cutoff. Here is a simple formula for the calculation:


  • Number of workpieces per bar=(total bar length - minimum gripping length - bar extension after cutoff) divided by (workpiece length plus facing stock plus cutoff tool width)

Say you have cut all bars to 36" long (three feet). The minimum gripping length you're comfortable with is 2". The bar will extend 0.25" from the chuck jaws after cutoff. Your workpiece is 1" long, the cutoff tool is 0.125" wide and you'll be facing 0.03 from every workpiece.


First subtract 2.25" (gripping length and bar extension after cutoff) from 36". The result is 33.75". Add 1" to 0.03" and 0.125" (workpiece length, facing stock, and cutoff tool width. The result is 1.155". Divide 33.75" (workable material on bar) by 1.155". The result is 29.220. Round your result down. We can machine 29 workpieces from this bar.


Minimizing redundant bar pulling commands

As you have probably figured out by now, bar pulling commands will be quite similar from one job to the next. In reality, only the four Z coordinates discussed above will change from program to program. You can use a subprogram to minimize the number of commands you need for the various jobs being run. Simply store the bar pulling commands in a subprogram. This subprogram must, of course, be modified for each bar pulling job. Here is the bar pulling subprogram shown in Fanuc format. Note that sequence numbers match the step numbers shown above.

  • O1000 (Bar pulling subprogram)

  • N02 M05 (Stop spindle)

  • N03 T1212 (Index turret to bar puller station)

  • N04 G00 X0 Z-1.025 (Rapid to approach position)

  • N05 G98 G01 Z-1.375 F20.0 (Select ipm mode, engage bar at 20.0 ipm)

  • N06 M15 (Open jaws, M codes vary - you must look-up this M code)G04 Z1.0 (Pause to allow jaws to open)

  • N07 Z-0.22 F30.0 (Advance bar at 30 ipm)

  • N08 M14 (Close jaws , M codes vary - you must look-up this M code)G04 X2.0 (Pause to allow jaws to close)

  • N09 Z0.13 F20.0 (Disengage bar at 20.0 ipm)

  • N10 G99 G00 X6.0 Z4.0 (Reselect ipr mode, rapid to tool change position)

  • N11 M01 (Optional stop)

  • N12 M99 (End of subprogram)

Again, this subprogram will only work for the workpiece shown in the example drawing above. For every new job, the Z coordinates in lines N04, N05, N07, and N09 must be changed.


Why the dwell commands? These commands may not be necessary. But many CNC turning center manufacturers do not fully interface the jaw open and close functions. If they're not fully interfaced, the Z axis will begin moving (in the next command) before the jaws are fully opened/closed. If your machine has these functions fully interfaced, the machine will automatically wait until the jaws are fully opened or closed before proceeding to the next command. In this case, of course, you can eliminate the G04 commands.


An example bar pulling program

We're using the workpiece shown in the drawing above for this example. Note that we're not showing the portion of the program that actually machines the workpiece - we're only showing the bar pulling operation.


Remember that we need to execute this program a specific number of times (the number of workpieces that can be machined from the bar). In our example, we need 29 executions (cycles) of the program. This is easily accomplished with sub programming techniques. The main program (which is the one you actually execute when the cycle start button is pressed), will include a calling command (M98 for Fanuc) to the program that actually machines the workpiece. This machining program will machine a workpiece and then call the subprogram to perform the bar pulling operation (shown earlier). This machining program is also a subprogram and must end with M99 (again, for Fanuc).


Main program:

  • O0001 (Main program for example)

  • N005 M98 P500 L29 (Call machining program and execute it 29 times)

  • N010 M30 (End of program)

In line N005, notice the L word that specifies the number of executions for program O500. For some Fanuc controls, this is actually part of the P word. P029500 for these controls will execute program O500 twenty-nine times.


Subprogram to machine one workpiece and perform bar pulling operation:

  • O500 (Machine one workpiece and pull bar)

  • ...

  • (Commands to machine and part off one workpiece)

  • ...

  • N340 M98 P1000 (Execute bar pulling program)

  • N345 M99 (End of subprogram)

Does your machine have custom macro B?

As stated, the bar pulling subprogram must be changed in four places for each new job based upon the workpiece length. However, if your machine has custom macro B (or any version of parametric programming), you can create a universal bar pulling subprogram (the custom macro) that will work for every workpiece you run. In essence, you can "pass" variables from the machining program to the bar pulling custom macro. Here is the modified program that machines one workpiece and performs the bar pulling operation:

  • O500 (Machine one workpiece and pull bar)

  • ...

  • (Commands to machine and part off one workpiece)

  • ...

  • N340 G65 P1000 F0.03 W1.0 C0.125 (Execute bar pulling program)

  • N345 M99 (End of subprogram)

In line N340, we've modified the M98 command, making it a G65 (call to a custom macro). The P word still specifies the program (custom macro) being called. What follows are variables that specify the criteria for the current workpiece. F specifies the amount of facing stock, W specifies the workpiece length, and C specifies the cutoff tool width. We're assuming a clearance position of 0.1", but if you'll be changing this value from job to job (possibly to minimize cycle time), you could make this an input variable as well.


Before we show the modified bar pulling program (the custom macro), you must understand how the letter addresses F, W, and C must be represented in the body of the custom macro. The local variable #9 must be used to reference the value specified with F. Local variable #23 is used to reference the value specified by W. And #3 is used to reference the value specified by C. Here is the bar pulling custom macro:

  • O1000 (Bar pulling subprogram)

  • N02 M05 (Stop spindle)

  • N03 T1212 (Index turret to bar puller station)

  • N04 G00 X0 Z-[#23 + #3 + - 0.1] (Rapid to approach position)

  • N05 G98 G01 Z-[#23 + #3 + 0.25] F20.0 (Select ipm mode, engage bar at 20.0 ipm)

  • N06 M15 (Open jaws, M codes vary - you must look-up this M code)

  • G04 Z1.0 (Pause to allow jaws to open)

  • N07 Z[#9 - 0.25] F30.0 (Advance bar at 30 ipm)

  • N08 M14 (Close jaws , M codes vary - you must look-up this M code)

  • G04 X2.0 (Pause to allow jaws to close)

  • N09 Z[#9 + 0.1] F20.0 (Disengage bar at 20.0 ipm)

  • N10 G99 G00 X6.0 Z4.0 (Reselect ipr mode, rapid to tool change position)

  • N11 M01 (Optional stop)N12 M99 (End of subprogram)

Notice that this technique has also simplified programming. There is no need to perform calculations to determine Z positions. Instead, we're specifying the workpiece length, the facing stock, and the cutoff tool width. The custom macro does the needed calculations!

6,149 views0 comments

Recent Posts

See All

Tapping on a turning center (without canned cycles)

Unless your Fanuc controlled turning center came with live tooling, it’s likely that you don’t have canned cycles (G80-G89) like those you find on machining centers. You might have G74 and G75, the mu

Can you speed up your tool change time?

Machining centers, of course, have automatic tool changing devices to automate the tool changing process. Current models boast very fast tool changing times and you may be quite satisfied with tool ch

bottom of page