You are on page 1of 19

Specific codes

G-codes are also called preparatory codes, and are any word in a CNC program that begins with the letter "G". Generally it is a code telling the machine tool what type of action to perform, such as:      Rapid move (transport the tool through space to the place where it is needed for cutting; do this as quickly as possible) Controlled feed move in a straight line or arc Series of controlled feed moves that would result in a hole being bored, a workpiece cut (routed) to a specific dimension, or a profile (contour) shape added to the edge of a workpiece Set tool information such as offset Switch coordinate systems

There are other codes; the type codes can be thought of like registers in a computer. [edit]Letter

addresses

Some letter addresses are used only in milling or only in turning; most are used in both. Bold below are the letters seen most frequently throughout a program. Sources: Smid[1]; Green et al.[2] Variable Description Corollary info

A

Absolute or incremental position of A axis (rotational axis around X axis)

B

Absolute or incremental position of B axis (rotational axis around Y axis)

C

Absolute or incremental position of C axis (rotational axis around Z axis)

D

Defines diameter or radial offset used for cutter compensation. D is used for depth of cut on lathes.

g. H Defines tool length offset.E Precision feedrate for threading on lathes F Defines feed rate G Address for preparatory commands G commands often tell the control what kind of motion is wanted (e. J Defines arc size in Y axis for G02or G03 arc commands. Sometimes the K address is . Also used as a parameter within some fixed cycles. L Fixed cycle loop count. on a turn-mill) I Defines arc size in X axis for G02or G03 arc commands. Also used as a parameter within some fixed cycles. Incremental axis corresponding to C axis (e. fixed cycle) or what offset value to use.. linear feed. Assumed to be 1 unless programmed with another integer. Also used as a parameter within some fixed cycles.. K Defines arc size in Z axis for G02or G03 arc commands. circular feed. rapid positioning. equal to Laddress.g. Specification of what register to edit using G10 Fixed cycle loop count: Defines number of repetitions ("loops") of a fixed cycle at each position.

a series of equally spaced holes can be programmed as a loop rather than as individual positions. although it was not intended to. N numbering need not increment by 1 (for example. it specifies which subprogram to call. descriptions vary. like a PC does. it can increment by 10.) Q R Peck increment in canned cycles Defines size of arc radius or defines retract height in canned cycles For example. (With M98. For many years it was common for CNC control displays to use slashed zero glyphs to ensure effortless distinction of letter "O" from digit "0". tool radius offsets. With incremental positioning (G91). N Line (block) number in program. O4501. System parameter number to be changed using G10 Line (block) numbers: Optional. Necessary for certain tasks. such as M99 P address (to tell the control which block of the program to return to if not the default one) or GoTo statements (if the control supports those). representing dwell times or other variables.  Also used in the calling and termination of subprograms.used instead of L. auxiliary command. System parameter number: G10 allows changing of system parameters under program control. which is why people often say that the "M" stands for "machine". etc.). with M99. tool length offsets. Today's GUI controls often have a choice of fonts. defines dwell time value. G10 use: Specification of what register to edit (work offsets. G73. so often omitted. Many M-codes call for machine functions. it specifies which block number of the main program to return to. G83 (peck drilling cycles) . M Miscellaneous function Action code. P   Serves as parameter address for various G and M codes With G04. 20. O Program name For example. Also serves as a parameter in some canned cycles. or 1000) and can be used on every block or only in certain spots throughout a program.

such as lathe turret programming. X and U obviate G90 and G91. ATC fixed tool selection. On (typically only lathe group A these lathes. Also defines dwell time on some machines (instead of "P" or "U"). an integer after S is interpreted as a number of rev/min (rpm). Ways of obtaining this training are mentioned in the comments for M06. an integer after S is interpreted as surface speed—sfm (G20) or m/min (G21). either spindle speed or surface speed depending on mode Data type = integer. one must study the various methods. although the proliferation of live lathe tooling and turn-mill machining has made V address usage less rare than it used to be (Smid 2008[1] shows an example). G90 is instead a fixed cycle address for roughing. the concept of "next tool waiting". V Incremental axis corresponding to Y axis W Incremental axis corresponding to Z axis In these controls. respectively. so they didn't use V. ATC random memory tool selection. X Y Z . Until the 2000s. On multifunction (turn-mill or mill-turn) machines. To understand how the T address works and how it interacts (or not) with M06. because most lathes that used U and W didn't have a Y-axis. Also defines dwell time on some machines (instead of "P" or "X"). Z and W obviate G90 and G91. Programming on any particular machine tool requires knowing which method that machine uses. respectively. On controls) these lathes.) That is still often the case. Absolute or incremental position of Y axis Absolute or incremental position of Z axis The main spindle's axis of rotation often determines which axis of a machine tool is labeled as Z. In G96 mode (CSS). In G97 mode (which is usually the default). T Tool selection U Incremental axis corresponding to X axis (typically only lathe group A In these controls. G90 is instead a fixed cycle address for roughing. controls) Absolute or incremental position of X axis. the V address was very rarely used.S Defines speed. See also Speeds and feeds. and empty tools. which spindle gets the input (main spindle or subspindles) is determined by other M codes. (Green et al 1996[2] did not even list V in their table of addresses. See also G18.

to avoid a crash.or 3-axis moves. which the programmer needs to consider depending on what obstacles are nearby. the control interpolates intermediate points and commands the servo. Green et al. The control then calculates the angular velocities at which to turn the axis leadscrews via their servomotors or stepper motors. G00 (unlike G01) traditionally does not necessarily move in a single straight line between start point and end point. and the control automatically calculates (interpolates) the intermediate points to pass through that will yield a straight line (hence "linear").[2] Milling Turning (M) (T) Code Description Corollary info G00 Rapid positioning M T On 2. Again. It moves each axis at its max speed until its vector is achieved.or stepper motors to rotate the amount needed for the leadscrew to translate the motion to the correct tool tip positioning. and the motors react quickly to each input. G02 Circular interpolation. Some machines offer interpolated rapids as a feature for ease of programming (safe to assume a straight line). This process repeated thousands of . G01 Linear interpolation M T The most common workhorse code for feeding during a cut. Shorter vector usually finishes first (given similar axis speeds). Thus the actual toolpath of the machining takes place with the given feedrate on a path that is accurately linear to within very small limits. The program specs the start and end points. This matters because it may yield a dog-leg or hockey-stick motion.[edit]List of G-codes commonly found on Fanuc and similarly designed controls Sources: Smid[1]. The computer performs thousands of calculations per second. clockwise M T Very similar in concept to G01.

G05P10000 High-precision contour control (HPCC) M Uses a deep look-ahead buffer and simulation processing to provide better axis movement acceleration and deceleration during contour milling G05. and often even fine boring. U. You must already have compensated in an earlier G01 block.1 Q1. the circle-cutting. On most controls you cannot start G41 or G42 in G02 or G03 modes. Ai Nano contour control M Uses a deep look-ahead buffer and simulation processing to provide better axis movement acceleration and deceleration during contour milling G07 Imaginary axis designation M . merely to allow cutter compensation before the main event. or P). G04 Dwell M T Takes an address for dwell period (may be X. counterclockwise M T Same corollary info as for G02. the interpolation generates a circle rather than a line. G03 Circular interpolation. In the case of G02. the actual toolpath of the machining takes place with the given feedrate on a path that accurately matches the ideal (in G02's case. In fact.times per minute generates the desired toolpath. begins. Often a short linear lead-in movement will be programmed. The dwell period is specified in milliseconds. a circle) to within very small limits. the interpolation is so precise (when all conditions are correct) that milling an interpolated circle can obviate operations such as drilling. As with G01.

The usual minimum increment in G20 is one ten-thousandth of an inch (0. competence with both G20 and G21 always stands some chance of being necessary at any time. G17 XY plane selection M G18 ZX plane selection M T On most CNC lathes (built 1960s to 2000s). so no G17 to G19 codes are used. G19 YZ plane selection M G20 Programming ininches M T Somewhat uncommon except in USA and (to lesser extent) Canada and UK. and mill-turn/turn-mill gradually become the "new normal". See also V address.G09 Exact stop check M T G10 Programmable data input M T G11 Data write cancel M T G12 Full-circle interpolation. which is a larger distance than .0001"). multitask/multifunction. traditional form factor will probably not disappear—just move over to make room for the newer configurations. G13 Full-circle interpolation. But the simpler. Not standard on Fanuc controls. Not standard on Fanuc controls. However. clockwise M Fixed cycle for ease of programming 360° circular interpolation with blend-radius lead-in and lead-out. ZX is the only available plane. in the global marketplace. This is now changing as the era begins in which live tooling. counterclockwise M Fixed cycle for ease of programming 360° circular interpolation with blend-radius lead-in and lead-out.

G76) T Similar to G01 linear interpolation. They are in terms of part zero (aka program zero). one micrometre). G21 Programming inmillimeters (mm) M T Prevalent worldwide. G31 Skip function (used for probes and tool length measurement systems) M G32 Single-point threading. in the global marketplace. G33 Constant-pitchthreading M G33 Single-point threading.001 mm.. . except with automatic spindle synchronization for singlepoint threading. They are in terms of part zero (aka program zero). aka M machine reference point) T Takes X Y Z addresses which define the intermediate point that the tool tip will pass through on its way home to machine zero. e.g. G28 Return to home position (machine zero. Takes X Y Z addresses which define the intermediate point that the tool tip will pass through on its way home to machine zero. if the machine has several secondary points (P1 to P4). However. longhand style (if not using a cycle.the usual minimum increment in G21 (one thousandth of a millimeter. NOT machine zero. This physical difference sometimes favors G21 programming. competence with both G20 and G21 always stands some chance of being necessary at any time. aka machine reference point) M T Takes a P address specifying which machine zero point is desired. that is. G30 Return to secondary home position (machine zero. T Some lathe controls assign this mode to G33 . NOT machine zero.

the human does not choreograph the toolpath with conscious. because whatever tool is active automatically calls its geometry offsets with it. G76) rather than G32. that the surface produced will be distance R away from the cutter center). See also the comments for G41. painstaking attention to G41. e.longhand style (if not using a cycle. . but the programming mindset is different. Tool radius compensation left G42 Tool radius compensation right M T Similar corollary info as for G41.e. (Each turret station is bound to its geometry offset register. Given righthand-helix cutter and M03 spindle direction... because the CAM software takes care of it. Takes an address (D or H) that calls an offset register value for radius. CAM systems allow the user to program as if with a zero-diameter cutter. and G40. G42 corresponds to conventional milling (up milling). Turning: Often needs no D or H address on lathes.) G41 and G42 for milling has become less M T frequently used since CAM programming has become more common. G41 Milling: Given righthand-helix cutter and M03 spindle direction. The fundamental concept of cutter radius compensation is still in play (i.g. G41 corresponds to climb milling (down milling). G42. G34 Variable-pitch threading M G40 Tool radius compensation off M T Cancels G41 or G42.

Y.G43 Tool height offset compensation negative M Takes an address. G44 Tool height offset compensation positive M G45 G46 G47 G48 G49 G50 Axis offset single increase Axis offset single decrease Axis offset double increase Axis offset double decrease Tool length offset compensation cancel Define the maximum spindle speed M M M M M Cancels G43 or G44. T G50 Scaling function cancel M Position register is one of the original methods to relate the part (program) coordinate system to the tool position. Those G addresses also have alternate meanings (which see).Z. G44 is the seldom-used version (vs G43). Temporarily shifts program zero to a new location.A. The value is negative because it will be added to the gauge line position.C) with G50 Position register (programming of vector from part zero to tool tip) T G52 Local coordinate system M (LCS) Machine coordinate M G53 . Position register can still be useful for datum shift programming. Without this feature. newer method. Takes an S address integer which is interpreted as rpm. which indirectly relates it to the machine coordinate system. G92 for milling. This simplifies programming in some cases. usually H.B. G96 mode (CSS) would rev the spindle to "wide open throttle" when closely approaching the axis of rotation. the only position the control really "knows". Called via G50 for turning. T Takes absolute coordinates (X. to call the tool length offset register value. to call the tool length offset register value. Takes an address. Not commonly programmed anymore because G54 to G59 (WCSs) are a better. G43 is the commonly used version (vs G44). The value is positive because it will be subtracted from the gauge line position. usually H.

g. for finishing (including contours) Fixed cycle. Have largely replaced position register (G50 and G92). but chip clogging of flutes is not.1 P1 to P48. Other examples have also evolved (e. For when chipbreaking is the main concern. with pattern repetition Peck drilling cycle for milling . Up to 48 more WCSs besides the 6 provided as standard by G54 to G59. multiple repetitive cycle.1 P1 to P48 Extended work coordinate systems M T G70 Fixed cycle.system reference to machine zero rather than program zero. T G74 G74 . G84. Each tuple of axis offsets relates program zero directly to machine zero. multiple repetitive cycle. multiple repetitive cycle.2). for roughing (Z-axis emphasis) Fixed cycle. Nonmodal and absolute only.high-speed (NO M full retraction from pecks) Peck drilling cycle for turning Tapping cycle for milling. M04 spindle direction M T G71 T G72 T G73 T G73 Retracts only as far as a clearance increment (system parameter). Subsequent blocks are interpreted as "back to G54" even if it is not explicitly programmed. for roughing.. for roughing (X-axis emphasis) Fixed cycle. lefthand thread. Standard is 6 tuples (G54 to G59). Can be helpful for tool changes. Note floating-point extension of G-code data type (formerly all integers). G54 to G59 Work coordinate systems M (WCSs) T G54. multiple repetitive cycle. Modern controls have the hardware to handle it. with optional extensibility to 48 more via G54.

Milling: Always as above.2 Tapping cycle. but on most lathes (Fanuc group type A and similarly designed). Good for when hole bottom finish matters. No dwell built in Dwells at hole bottom (Z-depth) for the number of milliseconds specified by the P address.M03 spindle M direction. respectively). Z-axis returns either to Z-initial level or R-level. G90/G91 are not used for absolute/incremental modes. G88.G75 G76 Peck grooving cycle for turning Fine boring cycle for milling Threading cycle for turning. U and W are the incremental addresses and X and Z are the absolute addresses. Turning: Sometimes as above (Fanuc group type B and similarly designed). etc. righthand thread. as programmed (G98 or G99. Turning: Usually not needed on lathes. for roughing (Z-axis emphasis) T (A) . multiple repetitive cycle M T G76 G80 T Milling: Cancels all cycles such as G73. because a new group-1 G address (G00 to G03) cancels whatever cycle was active. Cancel canned cycle M T G81 G82 Simple drilling cycle Drilling cycle with dwell M M G83 G84 Peck drilling cycle (full retraction from pecks) Tapping cycle.righthand thread.M03 spindle direction M M G84. On these lathes. G83. Good for clearing flutes of chips. Returns to R-level after each peck. rigid toolholder Positioning defined with reference to part zero. When not serving for absolute programming (above) G90 Absolute programming M T (B) G90 Fixed cycle. G90 is instead a fixed cycle address for roughing. simple cycle. Instead.

but on most lathes (Fanuc group type A and similarly designed). On these lathes. simple cycle. The default speed mode per system parameter if no mode is programmed. G98 G99 . but on most lathes (Fanuc group type A and similarly designed). feedrate per minute is G98. position register is G50. Takes an S address integer. G90 is a fixed cycle address for roughing. Turning: Sometimes as above (Fanuc group type B and similarly designed). Same corollary info as at G50 position register. which is interpreted as rev/min (rpm). G92 Position register (programming of vector M from part zero to tool tip) T (B) G92 G94 Threading cycle. See speeds and feeds. Turning: Sometimes as above (Fanuc group type B and similarly designed). feedrate per revolution is G99. Instead. When not serving for feedrate per minute (above) On group type A lathes. simple cycle Feedrate per minute Fixed cycle. for roughing (X-axis emphasis) Feedrate per revolution M M T (A) T (B) On group type A lathes. which is interpreted as sfmin G20 mode or as m/min in G21 mode. Takes an S address integer. Milling: Always as above. Milling: Always as above. Varies spindle speed automatically to achieve a constant surface speed. G94 G95 G96 T (A) T (B) Constant surface speed (CSS) T G97 Constant spindle speed M T G98 Return to initial Z level in M canned cycle Feedrate per minute (group type A) Return to R level in M T (A) Feedrate per minute is G94 on group type B. G90/G91 are not used for absolute/incremental modes.G91 Incremental programming M T (B) Positioning defined with reference to previous position. U and W are the incremental addresses and X and Z are the absolute addresses.

[2] Milling Turning (M) (T) Code Description Corollary info M00 Compulsory stop M T Non-optional—machine will always stop upon reaching M00 in the program execution. default) or surface feet per minute or [surface] meters per minute (G96 mode [CSS] under either G20 or G21). The M03 direction is always M03 regardless of local vantage point and local CW/CCW distinction. of M-codes commonly found on Fanuc and similarly designed controls Sources: Smid[1]. may or may not reset register values. M03 Spindle on (clockwise M rotation) The speed of the spindle is determined by the address S. . T Right-hand-helix screws moving in the tightening direction (and right-hand-helix flutes spinning in the cutting direction) are defined as moving in the M03 direction. M04 Spindle on (counterclockwise rotation) M T See comment above at M03. in either revolutions per minute (G97 mode. The right-hand rule can be used to determine which direction is clockwise and which direction is counterclockwise.canned cycle G99 [edit]List Feedrate per revolution (group type A) T (A) Feedrate per revolution is G95 on group type B. M01 Optional stop M T Machine will only stop at M01 if operator has pushed the optional stop button. and are labeled "clockwise" by convention. M02 End of program M T No return to program top. Green et al.

Although 4. before the advent of widespread live tooling and mill-turn/turn-mill systems. These concepts are taught in textbooks such as Smid.M05 M06 Spindle stop M T Many lathes do not use M06 because the T address itself indexes the turret. ATC fixed T (sometool selection. both on-site and remotely (e.[1] and online multimedia (videos. all of these teaching resources are usually paywalled to pay back the costs of their development.and 5-axis contour milling and CNC single-pointing have depended on spindle position encoders for decades. etc).g. ATC random memory tool selection. and empty tools. which make for shorter. simulators. the times) concept of "next tool waiting". Tooling University). it was seldom relevant in "regular" (non-"special") machining for the operator (as opposed to the machine) to know the angular orientation of a spindle except for within a few restricted contexts (such Automatic tool change (ATC) M M07 M08 M09 M10 M11 M13 Coolant on (mist) Coolant on (flood) Coolant off Pallet clamp on Pallet clamp off M M M M M Spindle on (clockwise rotation) and coolant M on (flood) Spindle orientation M M19 . They are used in training classes for operators. T Spindle orientation is more often called within cycles (automatically) or during setup (manually). To understand how the T address works and how it interacts (or not) with M06. Programming on any particular machine tool requires knowing which method that machine uses. It is not unusual for specific machine models to have such combined commands.. more quickly written programs. but it is also available under program control via M19. one must study the various methods. T T T For machining centers with pallet changers For machining centers with pallet changers This one M-code does the work of both M03 and M08. such as lathe turret programming. The relevance of spindle orientation has increased as technology has advanced. The abbreviation OSS (oriented spindle stop) may be seen in reference to an oriented stop within cycles.

or G76 fine boring cycles with choreographed tool retraction). even for "regular" (non-"special") applications. where feed is precisely correlated to speed. X-axis Tailstock forward Mirror. Most milling of features indexed around a turned workpiece was accomplished with separate operations on indexing head setups. which could provide precise spindle orientation in a world where it otherwise mostly didn't exist (and didn't need to).gear 3 Gear select . Also empty spindle.gear 2 Gear select . But as CAD/CAM and multiaxis CNC machining with multiple rotary-cutter axes becomes the norm.as tool change. M T M T Unload Last tool from M T .gear 4 Feedrate override allowed M M T T T T T T T T This rule is also called (automatically) within tapping cycles or single-point threading cycles. indexing heads were invented as separate pieces of equipment. machinists now frequently care about stepping just about any spindle through its 360° with precision. Y-axis Tailstock backward Mirror OFF Thread gradual pullout ON Thread gradual pullout OFF End of program with M return to program top Gear select .gear 1 Gear select . in a sense. Same with spindle speed override and feed hold button. M21 M21 M22 M22 M23 M23 M24 M30 M41 M42 M43 M44 M48 M49 Feedrate override NOT allowed M52 M T Mirror. to be used in separate operations.

for example. "M98 P8979" calls subprogram O8979. M99 can also be used in main program with block skip for endless loop of main program on bar work on lathes (until operator toggles block skip). (Caution: This is generic. Usually placed at end of subprogram. The default is that control returns to the block following the M98 call in the main program.spindle M60 M98 Subprogram call M99 M T Automatic pallet change (APC) M For machining centers with pallet changers Takes an address P to specify which subprogram to call. it might not work on any real machine! Pay particular attention to point 5 below.) Sample Line Code Description % . Assume that a bar of material is in the machine and that the bar is slightly oversized in length and diameter and that the bar protrudes by more than 1" from the face of the chuck. Return to a different block number can be specified by a P address. Subprogram end M T [edit]Example program Tool Path for program This is a generic program that demonstrates the use of G-Code to turn a 1" diameter X 1" long part. where it returns execution control to the main program.

Call work offset values. thus facing the end of the bar) N10 G00 Z1. select spindle gear.0 F.005" or 0.1 Z1.1" away from the end of the bar .preparing for G96 CSS coming soon) N04 M01 (Optional stop) N05 T0300 (Index turret to tool 3.05 (Feed in horizontally until the tool is standing 1" from the datum i. program Z-zero) N09 X-0.e.O4968 (Sample face and turn program) N01 M216 (Turn on load monitor) N02 G20 G90 G54 D200 G40 (Inch units.) N03 G50 S2000 (Set maximum spindle speed rev/min . Moving coordinate system to the location specified in the register D200. turn on the coolant flood) N07 G41 G00 X1.100" from the end of the bar [not counting 0.002 (Feed down until the tool is slightly past center.006" that the bar-pull-and-stop sequence is set up to leave as a stock allowance for facing off] and 0. Absolute mode. Call tool wear offset. Clear wear offset (00).clear the part) N11 X1.1 (Rapid feed 0. 854 sfm. Cancel any existing tool radius offset.1 T0303 (Call tool radius offset. Rapid feed to a point about 0. start spindle CW rotation.050" from the side) N08 G01 Z1.0 (Rapid feed up until the tool is standing at the finished OD) .) N06 G96 S854 M42 M03 M08 (Constant surface speed [automatically varies the spindle speed].

turn off the coolant) N14 G91 G28 X0 (Home X axis .return to machine Z-zero passing through no intermediate Z point [incremental Z0]) N16 G90 M215 (Return to absolute mode. Turn off load monitor) N17 M30 (Program stop.0 F.050" per revolution) N13 G00 X1.1 M05 M09 (Clear the part. stop the spindle.return to machine X-zero passing through no intermediate X point [incremental X0]) N15 G91 G28 Z0 (Home Z axis .05 (Feed in horizontally cutting the bar to 1" diameter all the way to the datum. feeding at 0. rewind to beginning of program) % Several points to note: .N12 G01 Z0.