# G-code

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/G-code
> Markdown URL: https://mediated.wiki/source/G-code.md
> Source: https://en.wikipedia.org/wiki/G-code
> Source revision: 1337231891
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

{{Short description|Programming language used in CNC and 3D printing}}
{{other uses|G-code (disambiguation)|G programming language (disambiguation)}}
{{redirect|RS-274|the photoplotter format|Gerber format}}
{{More footnotes needed|date=January 2025}}
{{Ambox
| name  = G-code
| issue = This article may require restoring an older revision.
| talk  = RfC:_Partially_Reversing_Thumperward's_deletions
| date  = May 13, 2025
}}

{{Infobox programming language
| name = G-code
| file ext = .gcode, .mpt, .mpf, .nc and several others
| paradigm = [Procedural](/source/Procedural_programming), [imperative](/source/Imperative_programming)
| released = {{Start date|1963}} (RS-274)
| designer = [Massachusetts Institute of Technology](/source/Massachusetts_Institute_of_Technology)
| developer = [Electronic Industries Association](/source/Electronic_Industries_Alliance) (RS-274), [International Organization for Standardization](/source/International_Organization_for_Standardization) (ISO-6983)
| implementations = Numerous; mainly [Siemens](/source/Siemens) Sinumerik, [FANUC](/source/FANUC), [Haas](/source/Haas_Automation), [Heidenhain](/source/Heidenhain), [Mazak](/source/Yamazaki_Mazak_Corporation), [Okuma](/source/Okuma_Corporation)
| dialects =
| influenced by =
| influenced =
| programming language =
| platform =
| operating system =
| license =
| website =
| wikibooks =
}}

'''G-code''' (abbreviation for '''geometric code'''; also called<ref>{{cite tech report |editor1-last=Barkmeyer |editor1-first=Edward J. |editor2-last=Hopp |editor2-first=Theodore H. |editor3-last=Michael J. |editor3-first=Pratt |editor4-last=Gaylen R. |editor4-first=Rinaudot |title=Background Study: Requisite Elements, Rationale, and Technology Overview for the Systems Integration for Manufacturing Applications (SIMA) Program |date=1995 |publisher=NIST Technical Series Publications |location=Gaithersburg, MD, USA |pages=45 |edition=NIST Interagency/Internal Report (NISTIR) 5662 |url=https://nvlpubs.nist.gov/nistpubs/Legacy/IR/nistir5662.pdf}}</ref> '''RS-274''',<ref>{{cite book |title=EIA Standard RS-274-D Interchangeable Variable Block Data Format for Positioning, Contouring, and Contouring/Positioning Numerically Controlled Machines |date=February 1979 |publisher=Electronic Industries Association |location=2001 Eye Street, NW, Washington, D.C. 20006 |url=https://search.worldcat.org/de/title/11135300 |ref=RS-274-D}}</ref> standardized today in '''ISO 6983-1'''<ref>{{cite tech report |editor1-last=Technical Committee ISO/TC 184/SC 1 |title=ISO 6983-1:2009 Automation systems and integration — Numerical control of machines — Program format and definitions of address words; Part 1: Data format for positioning, line motion and contouring control systems |date=December 2009 |publisher=International Standards Organization |location=Geneva, Switzerland |url=https://www.iso.org/standard/34608.html |ref=ISO 6983:2009}}</ref>) is the most widely used [computer numerical control](/source/computer_numerical_control) (CNC) and [3D printing](/source/3D_printing) [programming language](/source/programming_language). It is used mainly in [computer-aided manufacturing](/source/computer-aided_manufacturing) to control automated [machine tool](/source/machine_tool)s, as well as for [3D-printer slicer applications](/source/Slicer_(3D_printing)). G-code has many variants.

G-code instructions are provided to a [machine controller](/source/Programmable_logic_controller) (industrial computer) that tells the motors where to move, how fast to move, and what path to follow. The two most common situations are that, within a machine tool such as a [lathe](/source/Metal_lathe) or [mill](/source/Milling_(machining)), a [cutting tool](/source/cutting_tool_(machining)) is moved according to these instructions through a toolpath cutting away material to leave only the finished workpiece and/or an unfinished workpiece is precisely positioned in any of up to nine axes<ref>Karlo Apro (2008). ''[https://books.google.com/books?id=Ws228Aht0bcC Secrets of 5-Axis Machining]''. Industrial Press Inc. {{ISBN|0-8311-3375-9}}.</ref> around the three dimensions relative to a toolpath and, either or both can move relative to each other. The same concept also extends to noncutting tools such as [forming](/source/Forming_(metalworking)) or [burnishing](/source/Burnishing_(metal)) tools, [photoplotting](/source/Gerber_format), additive methods such as 3D printing, and measuring instruments.

== History ==

The first implementation of a numerical control programming language was developed at the [MIT Servomechanisms Laboratory](/source/MIT_Servomechanisms_Laboratory) in the 1950s. In the decades that followed, many implementations were developed by numerous organizations, both commercial and noncommercial. Elements of G-code had often been used in these implementations.<ref>{{cite book | last=Xu | first=Xun | date=2009 | url=https://books.google.com/books?id=habcATPQWJ4C | title=Integrating Advanced Computer-aided Design, Manufacturing, and Numerical Control: Principles and Implementations | publisher=Information Science Reference | page=166 | isbn=978-1-59904-716-4 | via=Google Books}}</ref><ref>{{cite book | last=Harik | first=Ramy | author2=Thorsten Wuest | date=2019 | url=https://books.google.com/books?id=O3h0EAAAQBAJ | title=Introduction to Advanced Manufacturing | publisher=SAE International | page=116 | isbn=978-0-7680-9096-3 | via=Google Books}}</ref> The first [standardized](/source/Technical_standard) version of G-code used in the United States, ''RS-274'', was published in 1963 by the [Electronic Industries Alliance](/source/Electronic_Industries_Alliance) (EIA; then known as Electronic Industries Association).<ref>{{cite book | last=Evans | first=John M. Jr. | date=1976 | url=https://www.govinfo.gov/content/pkg/GOVPUB-C13-2ef4aaa5a150eedcb85a1e6985e90bfa/pdf/GOVPUB-C13-2ef4aaa5a150eedcb85a1e6985e90bfa.pdf | title=National Bureau of Standards Information Report (NBSIR) 76-1094 (R): Standards for Computer Aided Manufacturing | publisher=National Bureau of Standards | page=43}}</ref> In 1974, EIA approved ''RS-274-C'', which merged ''RS-273'' (variable block for positioning and straight cut) and ''RS-274-B'' (variable block for contouring and contouring/positioning). A final revision of ''RS-274'' was approved in 1979, as ''RS-274-D''.<ref>{{cite journal | last=Schenck | first=John P. | date=January 1, 1998 | url=https://link.gale.com/apps/doc/A20429590/GPS?sid=wikipedia | title=Understanding common CNC protocols | journal=Wood & Wood Products | publisher=Vance Publishing | volume=103 | issue=1 | page=43 | via=Gale}}</ref><ref>{{citation| title = EIA Standard RS-274-D Interchangeable Variable Block Data Format for Positioning, Contouring, and Contouring/Positioning Numerically Controlled Machines |publisher = Electronic Industries Association |location= Washington D.C. |date=February 1979}}</ref> In other countries, the standard ''[ISO](/source/International_Organization_for_Standardization) 6983'' (finalized in 1982) is often used, but many European countries use other standards.<ref>{{cite book | last=Stark | first=J. | author2=V.&nbsp;K. Nguyen | date=2009 | url=https://books.google.com/books?id=RIgLRe12RD4C | chapter=STEP-compliant CNC Systems, Present and Future Directions | title=Advanced Design and Manufacturing Based on STEP | editor-last=Xu | editor-first=Xun | editor2=Andrew Yeh Ching Nee | publisher=Springer London | page=216 | isbn=978-1-84882-739-4 | via=Google Books}}</ref>  For example, ''[DIN](/source/Deutsches_Institut_f%C3%BCr_Normung) 66025'' is used in Germany, and PN-73M-55256 and PN-93/M-55251 were formerly used in Poland.

From the 1970s to 1990s, many CNC machine tool builders attempted to overcome compatibility difficulties by standardizing on machine tool controllers built by [Fanuc](/source/Fanuc). [Siemens](/source/Siemens) was another market dominator in CNC controls, especially in Europe. In the 2010s, controller differences and incompatibility were mitigated with the widespread adoption of [CAD](/source/CAD)/[CAM](/source/Computer-aided_manufacturing) applications that could output the appropriate G-code to operate a specific machine through a software tool called a [post-processor](/source/post-processor) (sometimes shortened to "post").

== Syntax ==

G-code began as a limited language that lacked constructs such as loops, conditional operators, and programmer-declared variables with [natural](/source/Natural_language)-word-including names (or the expressions in which to use them). It was unable to encode logic but was just a way to "connect the dots" where the programmer figured out many of the dots' locations longhand. The latest implementations of G-code include macro language capabilities somewhat closer to a [high-level programming language](/source/high-level_programming_language). Additionally, all primary manufacturers (e.g., [Fanuc](/source/Fanuc), [Siemens Digital Industries Software](/source/Siemens_Digital_Industries_Software), [Heidenhain](/source/Heidenhain)) provide access to [programmable logic controller](/source/programmable_logic_controller) (PLC) data, such as axis positioning data and tool data,<ref>{{cite web  |archive-date=2014-05-03 |url=http://www.machinetoolhelp.com/Applications/macro/system_variables.html |title=Fanuc macro system variables|year=2006|url-status=live|publisher=Machinetoolhelp|archive-url=https://web.archive.org/web/20140503030834/http://www.machinetoolhelp.com/Applications/macro/system_variables.html }}</ref> via variables used by NC programs. These constructs make it easier to develop automation applications.

== Extensions and variations ==

Extensions and variations have been added independently by control manufacturers and machine tool manufacturers, and operators of a specific controller must be aware of the differences between each manufacturer's product.

One standardized version of G-code, known as ''BCL'' (Binary Cutter Language), is used only on very few machines. Developed at MIT, BCL was developed to control CNC machines in terms of straight lines and arcs.<ref>{{Cite book|url=https://books.google.com/books?id=GE8vBQAAQBAJ&q=binary+cutter+language+gcode&pg=PA321|title=Information Technology Standards: Quest for the Common Byte|last=Libicki|first=Martin|date=1995|publisher=Elsevier Science|isbn=978-1-4832-9248-9|location=Burlington|page=321|oclc=895436474}}</ref>

Some CNC machines use "conversational" programming, which is a [wizard](/source/wizard_(software))-like programming mode that either hides G-code or completely bypasses the use of G-code. Some popular examples are Okuma's Advanced One Touch (AOT), Southwestern Industries' ProtoTRAK, Mazak's Mazatrol, Hurco's Ultimax and Winmax, Haas' Intuitive Programming System (IPS), and Mori Seiki's CAPS conversational software.

== See also ==
* [Canned cycle](/source/Canned_cycle)
* [Direct Numerical Control](/source/Direct_Numerical_Control)
* [LinuxCNC](/source/LinuxCNC)
* [List of computer-aided manufacturing software](/source/List_of_computer-aided_manufacturing_software)
* [3D printing](/source/3D_printing)
* [Slicer (3D printing)](/source/Slicer_(3D_printing))

== References ==
{{Reflist}}

== Bibliography ==
* {{MachinerysHandbook25e}}
* {{Smid2008}}
* {{Smid2010}}
* {{Citation |last=Smid |first=Peter |year=2004 |title=Fanuc CNC Custom Macros |publisher=Industrial Press |url=https://books.google.com/books?id=YKvH-zYd3VwC&pg=PR11 |isbn=978-0-8311-3157-9 |postscript=.}}

== External links ==
* [http://carlsonmfg.com/cnc-g-code-m-code-programming CNC G-Code and M-Code Programming]
* {{Citation |last1=Kramer |first1=T. R. |last2=Proctor |first2=F. M. |last3=Messina |first3=E. R. |title=The NIST RS274NGC Interpreter – Version 3 |date=1 Aug 2000 |id=NISTIR 6556 |journal=[NIST](/source/NIST) |url=https://www.nist.gov/manuscript-publication-search.cfm?pub_id=823374 |ref=none}}
* http://museum.mit.edu/150/86 {{Webarchive|url=https://web.archive.org/web/20160319102859/http://museum.mit.edu/150/86 |date=2016-03-19 }} Has several links (including history of MIT Servo Lab)
* [http://reprap.org/wiki/G-code Complete list of G-code used by most 3D printers] at reprap.org
* [http://www.cnccookbook.com/CCCNCGCodeList.html Fanuc and Haas G-code Reference]
* [http://www.cnccookbook.com/CCCNCGCodeCourse.htm Fanuc and Haas G-code Tutorial]
* [https://www.haascnc.com/content/dam/haascnc/en/service/manual/operator/english---mill-ngc---operator's-manual---2017.pdf Haas Milling Manual]
* [https://www.cncknowledge.in/2020/05/haas-cnc-g-code-list-for-lathe-milling.html G Code For Lathe & Milling]
* [https://www.cncknowledge.in/2020/05/haas-cnc-m-code-list-for-lathe-milling.html M Code for Lathe & Milling]

{{Metalworking navbox|machopen}}

Category:Computer-aided engineering
Category:Domain-specific programming languages
Category:Encodings
Category:Metalworking

---
Adapted from the Wikipedia article [G-code](https://en.wikipedia.org/wiki/G-code) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/G-code?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
