G-Code, or preparatory code or function, are functions in the Numerical control programming language. The G-codes are the codes that position the tool and do the actual work, as opposed to M-codes, that manages the machine; T for tool-related codes. S and F are tool-Speed and tool-Feed, and finally D-codes for tool compensation. The programming language of Numerical Control (NC) is sometimes informally called G-code. But in actuality, G-codes are only a part of the NC-programming language that controls NC and CNC machine tools. The term Numerical Control was coined at the MIT Servomechanisms Laboratory, and several versions of NC were and are still developed independently by CNC-machine manufacturers. The main standardized version used in the United States was settled by the Electronic Industries Alliance in the early 1960s. A final revision was approved in February 1980 as RS274D. In Europe, the ISO standard DIN 66025 is often used instead.
Due to the lack of further development, the immense variety of machine tool configurations, and little demand for interoperability, few machine tool controllers (CNCs) adhere to this standard. Extensions and variations have been added independently by manufacturers, and operators of a specific controller must be aware of differences of each manufacturers' product. When initially introduced, CAM systems were limited in the configurations of tools supported.
Today, the main manufacturers of CNC control systems are GE Fanuc Automation (joint venture of General Electric and Fanuc), Siemens, Mitsubishi, and Heidenhain, but there still exist many smaller and/or older controller systems.
Some CNC machine manufacturers attempted to overcome compatibility difficulties by standardizing on a machine tool controller built by Fanuc. Unfortunately, Fanuc does not remain consistent with RS-274 or its own previous versions, and has been slow at adding new features, as well as exploiting increases in computing power. For example, they changed G70/G71 to G20/G21; they used parentheses for comments which caused difficulty when they introduced mathematical calculations so they use square parentheses for macro calculations; they now have nano technology recently in 32-bit mode but in the Fanuc 15MB control they introduced HPCC (high-precision contour control) which uses a 64-bit RISC (reduced instruction set computer) processor and this now has a 500 block buffer for look-ahead for correct shape contouring and surfacing of small block programs and 5-axis continuous machining.
This is also used for NURBS to be able to work closely with industrial designers and the systems that are used to design flowing surfaces. The NURBS has its origins from the ship building industry and is described by using a knot and a weight as for bending steamed wooden planks and beams.
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:
There are other codes; the type codes can be thought of like registers in a computer
(*) M codes control the overall machine, causing it to stop, start, turn on coolant, etc., whereas other codes pertain to the path traversed by cutting tools. Different machine tools may use the same code to perform different functions; even machines that use the same CNC control.
| Code | Description |
|---|---|
| G00 | Rapid positioning |
| G01 | Linear interpolation |
| G02 | CW circular interpolation |
| G03 | CCW circular interpolation |
| G04 | Dwell |
| G05.1 Q1. | Ai Nano contour control |
| G05 P10000 | HPCC |
| G10/G11 | Programmable Data input/Data write cancel |
| G17 | X-Y plane selection |
| G18 | X-Z plane selection |
| G19 | Y-Z plane selection |
| G20 | Programming in inches |
| G21 | Programming in mm |
| G28 | Return to home position |
| G30 | 2nd reference point return |
| G31 | Skip function (used for probes and tool length measurement systems) |
| G33 | Constant pitch threading |
| G34 | Variable pitch threading |
| G40 | Tool radius compensation off |
| G41 | Tool radius compensation left |
| G42 | Tool radius compensation right |
| G43 | Tool offset compensation positive |
| G44 | Tool offset compensation negative |
| G45 | Axis offset single increase |
| G46 | Axis offset single decrease |
| G47 | Axis offset double increase |
| G48 | Axis offset double decrease |
| G49 | Tool offset compensation cancel |
| G53 | Machine coordinate system |
| G54 to G59 | Work coordinate systems |
| G54.1 P1 to P48 | Extended work coordinate systems |
| G73 | High speed drilling canned cycle |
| G74 | Left hand tapping canned cycle |
| G76 | Fine boring canned cycle |
| G80 | Cancel canned cycle |
| G81 | Simple drilling cycle |
| G82 | Drilling cycle with dwell |
| G83 | Peck drilling cycle |
| G84 | Tapping cycle |
| G84.2 | Direct right hand tapping canned cycle |
| G90 | Absolute programming (type B and C systems) |
| G91 | Incremental programming (type B and C systems) |
| G92 | Programming of absolute zero point |
| G94/G95 | Inch per minute/Inch per revolution feed (type A system) |
| G98/G99 | Inch per minute/Inch per revolution feed (type B and C systems) |
| G96/G97 | Constant cutting speed (Constant surface speed)/Constant rotation speed (constant RPM) |
A standardized version of G-code known as BCL is used, but only on very few machines.
G-code files may be generated by Computer-aided manufacturing software. Those applications typically use translators called post-processors to output code optimized for a particular machine type or family. Post-processors are often user-editable to enable further customization, if necessary. G-code is also output by specialized CAD systems used to design printed circuit boards. Such software must be customized for each type of machine tool that it will be used to program. Some G-code is written by hand for volume production jobs. In this environment, the inherent inefficiency of CAM-generated G-code is unacceptable.
Some CNC machines use "conversational" programming, which is a wizard-like programming mode that either hides G-code or completely bypasses the use of G-code. Some popular examples are Southwestern Industries' ProtoTRAK, Mazak's Mazatrol, Hurco's Ultimax and Mori Seiki's CAPS conversational software.
This is a generic program that demonstrates the use of G-Code to turn a 1" diameter X 1" long part. 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. (Caution: This is generic, it might not work on any real machine! Pay particular attention to point 5 below.)
| Line | Code | Description |
|---|---|---|
| N01 | M216 | Turn on load monitor |
| N02 | G00 X20 Z20 | Rapid move away from the part, to ensure the starting position of the tool |
| N03 | G50 S2000 | Set Maximum spindle speed |
| N04 | M01 | Optional stop |
| N05 | T0303 M6 | Select tool #3 from the carousel, use tool offset values located in line 3 of the program table, index the turret to select new tool |
| N06 | G96 S854 M42 M03 M08 | Variable speed cutting, 854 ft/min, High spindle gear, Start spindle CW rotation, Turn the flood coolant on |
| N07 | G00 X1.1 Z1.1 | Rapid feed to a point 0.1" from the end of the bar and 0.05" from the side |
| N08 | G01 Z1.0 F.05 | Feed in horizontally until the tool is standing 1" from the datum |
| N09 | X0.0 | Feed down until the tool is on center - Face the end of the bar |
| N10 | G00 Z1.1 | Rapid feed 0.1" away from the end of the bar |
| N11 | X1.0 | Rapid feed up until the tool is standing at the finished OD |
| N12 | G01 Z0.0 F.05 | Feed in horizontally cutting the bar to 1" diameter all the way to the datum |
| N13 | M05 M09 | Stop the spindle, Turn off the coolant |
| N14 | G28 G91 X0 | Home X axis in the machine coordinate system, then home all other axes |
| N15 | M215 | Turn the load monitor off |
| N16 | M30 | Program stop, pallet change if applicable, rewind to beginning of the program |
Several points to note: