G-code

G-код — условное именование языка программирования устройств с числовым программным управлением (ЧПУ). Был создан компанией Electronic Industries Alliance в начале 1960-х. Окончательная доработка была одобрена в феврале 1980 года как стандарт RS274D. Комитет ISO утвердил G-код как стандарт ISO 6983-1:2009, Госкомитет по стандартам СССР — как ГОСТ 20999-83. В советской технической литературе G-код обозначается как код ИСО 7-бит (ISO 7-bit), это вызвано тем, что G-код кодировали на 8-дорожечную перфоленту в коде ISO 7-bit (разработан для представления информации УЧПУ в виде машинного кода так же, как и коды AEG и PC8C), восьмая дорожка использовалась для контроля чётности.

Производители систем УЧПУ (CNC), как правило, используют ПО управления станком, для которого написана (оператором) программа обработки в качестве осмысленных команд управления, используется G-код в качестве базового подмножества языка программирования, расширяя его по своему усмотрению.

G-Code — это также стандартный язык, используемый многими моделями 3D-принтеров для управления процессом печати. Файлы GCODE могут быть открыты с помощью различных программ 3D-печати, например, Simplify3D, GCode Viewer, а также с помощью текстового редактора, поскольку их содержимое представляет собой обычный текст.

Структура программы

Основные требования к структуре 
Программа, написанная с использованием G-кода, имеет жёсткую структуру. Все команды управления объединяются в кадры — группы, состоящие из одной или более команд. Кадр завершается символом перевода строки (CR/LF) и может необязательно иметь явно указанный номер, начинающийся с буквы N, за исключением первого кадра программы и комментариев. Этот номер является по сути меткой кадра и необязательно должен нарастать в программе или представлять собой последовательные целые числа, важно, чтобы номер не повторялся в пределах программы, например, допустимо:
 ...
 N200 G0
 n100 x0
 x5y4
 ...
В большинстве современных интерпретаторов кода допустимо использовать в коде программы строчные и прописные буквы, как в примере.

Пробелы в строке кадра игнорируются, поэтому допустимо слитное написание команд кадра.

Первый (а в некоторых случаях ещё и последний) кадр содержит только один необязательный знак <%>. Завершается программа командами M02 или M30.

Комментарии к программе размещаются в круглых скобках. Комментарий может располагаться как в отдельной строке, так и в любом месте кадра среди команд. Недопустимо оформлять в качестве комментария несколько строк, охваченных парой круглых скобок.

Элементарные команды в каждом кадре выполняются одновременно, поэтому порядок команд в кадре строго не оговаривается, но традиционно предполагается, что первыми указываются подготовительные команды (например, выбор плоскости круговой интерполяции, скоростей перемещений по осям и др.), затем задание координат перемещения, затем выбора режимов обработки и технологические команды.

Максимальное число элементарных команд и заданий координат в одном кадре зависит от конкретного интерпретатора языка управления станками, но для большинства популярных интерпретаторов (стоек управления) не превышает 6.

Координаты задаются указанием оси с последующим числовым значением координаты. Целая и дробная части числа координаты разделяются десятичной точкой. Допустимо опускание незначащих нулей, либо их добавление. Также в подавляющем количестве интерпретаторов допустимо не добавлять десятичную точку к целым числам. Например: Y0.5 и Y.5, Y77, Y77. и Y077.0.

Существуют так называемые модальные и немодальные команды. Модальные команды изменяют некоторый параметр/настройку и эта настройка действует на все далее исполняемые кадры программы до их смены очередной модальной командой либо её отмены. К модальным командам, например, относятся скорости перемещения инструмента, управления скоростью шпинделя, подачи смазочно-охлаждающей жидкости (СОЖ) и др. Немодальные команды действуют только внутри их содержащего кадра. К немодальным командам относятся, например, команды разгона и торможения шпинделя.

Интерпретатор кода (стойка управления) станком запоминает значение введённых параметров и настроек до их смены очередной модальной командой или отмены ранее введённой модальной команды, поэтому необязательно указание в каждом кадре, например, скорости перемещения инструмента.

Описание и вызов подпрограмм 
Язык допускает многократное исполнение однократно записанной последовательности команд и перемещений инструмента, вызываемую из разных частей программы, например, вырезания в листовой заготовке многих отверстий с одинаковым сложным контуром, расположенных в разных местах будущей детали. При этом в теле подпрограммы описывается траектория движения инструмента для вырезания одного отверстия, а в программе производится многократный вызов подпрограммы из разных мест. В теле подпрограммы перемещения инструмента задаются в относительных координатах — координатах, описывающих траекторию инструмента при обработке отверстия, переход к относительной системе координат (иногда такую систему координат называют <инкрементной>) производится командой G91 в начале тела подпрограммы, а возврат к абсолютной системе координат командой G90 — в конце тела подпрограммы. В инкрементной системе команды перемещения инструмента интерпретируются как приращения, например:
 g90 x5 (назначение абсолютной системы координат, после исполнения этого кадра машинная координата по оси X станет равной 5)
 g91 x10 (назначение инкрементной системы координат, после исполнения этого кадра машинная координата по оси X станет равной 15)
 x-15 (после исполнения этого кадра машинная координата по оси X станет равной 0, так как продолжает действовать инкрементная система координат, заданная модальной командой g91)
Тело подпрограммы обязательно должно быть описано до команды конца программы — М30, но допустимо расположение подпрограммы после команды М02 — конца программы и иметь имя, начинающееся с буквы О с цифрами номера подпрограммы, например, О112. В конце тела подпрограммы помещается команда возврата в основную программу — М99.

В программе вызов подпрограммы производится командой М98 с указанием обязательного параметра имени подпрограммы P. Недопустимо совпадение имён подпрограмм в пределах одной программы. Пример вызова подпрограммы O112: M98 P112. Допустимо при вызове подпрограммы указание числа вызовов подпрограммы добавлением необязательного параметра L, например, двукратный вызов подпрограммы 112: M98 P112 L2, что, например, может быть полезно при описании выполнения второго прохода чистовой обработки после первого прохода черновой обработки. При опущенном параметре L подпрограмма вызывается однократно.

Управляющее математическое обеспечение некоторых станков или некоторые интерпретаторы G-кода допускают вызов подпрограмм по номеру строки (кадра) в программе, для этого используется команда M97 с параметром P, указывающем на номер (метку) строки, например, M97 P321 L4 — четырёхкратный вызов подпрограммы начинающейся с меткой N321. Оформленная таким образом подпрограмма как обычно должна заканчиваться командой M99 — возвратом в вызвавшую программу.

Допустимо вложение подпрограмм, то есть из подпрограммы возможен вызов другой подпрограммы. Максимально допустимое число уровней вложения зависит от реализации конкретного интерпретатора G-кода.

Пример программы вырезания 2 прямоугольных отверстий 10 x 20 мм, увеличенных на диаметр торцевой фрезы, с координатами левых нижних углов отверстий x=57, y=62 и x=104, y=76 в листовой заготовке толщиной 5 мм с вызовом подпрограммы описывающей вырезание одного отверстия
 ...
 (Фрагмент программы)
 G00 X57 Y62 (позиционирование по X, Y на 1-е отверстие)
 M98 P112 (вырезание 1-го отверстия)
 G00 X104 Y76 (позиционирование по X, Y на 2-е отверстие)
 M98 P112 (вырезание 2-го отверстия)
 ...
 М02 (Конец программы)
 ...
 (Тело подпрограммы)
 O112 (Метка подпрограммы, номер 112)
 G00 Z1 (Подвод инструмента на высоту 1 мм над поверхностью заготовки со скоростью холостого перемещения)
 G01 F40 Z-5.5 (Врезание инструмента на глубину -5,5 мм в заготовку со скоростью 40 мм/мин) 
 G91 (Переход в относительную систему координат, в этой системе вначале X=0, Y=0) 
 G01 F20 X10 (Вырезание 1-й стороны прямоугольника со скоростью 20 мм/мин) 
 Y20 (Вырезание 2-й стороны прямоугольника со скоростью 20 мм/мин)
 X-10 (Вырезание 3-й стороны прямоугольника со скоростью 20 мм/мин. Так как включена инкрементальная система координат, то возврат инструмента в исходную точку до вызова подпрограммы указывается в виде приращения координаты, здесь -10.)
 Y-20 (Вырезание 4-й стороны прямоугольника со скоростью 20 мм/мин)
 G90 (Переход в абсолютную систему координат, восстановление текущих координат до перехода в относительную систему)
 G00 Z5 (Подъём инструмента на высоту 5 мм над поверхностью заготовки со скоростью холостого перемещения) 
 M99 (Возврат в вызывавшую программу или подпрограмму) 
 ...
 М30 (Конец интерпретируемого кода программы. После исполнения этой команды указатель номера кадра устанавливается на 1-ю строку программы и исполнение программы останавливается)

Сводная таблица кодов 
Основные (называемые в стандарте подготовительными) команды языка начинаются с буквы G (аббревиатура от слова General):

 Перемещение рабочих органов оборудования с заданной скоростью (линейное и круговое)
 Выполнение типовых последовательностей (таких, как обработка отверстий и резьба)
 Управление параметрами инструмента, системами координат, и рабочих плоскостей

Таблица основных команд

Таблица технологических кодов 
Технологические команды языка начинаются с буквы М (аббревиатура от слова Miscellaneous — дополнительный). Включают такие действия, как:
 Сменить инструмент
 Включить/выключить шпиндель
 Включить/выключить охлаждение
 Работа с подпрограммами

Параметры команд 
Параметры команд задаются буквами латинского алфавита

Пример 

Пример гравировка буквы W на глубину 2 мм, вписанной в прямоугольник 40×30 мм, (см. рисунок) на условном вертикально-фрезерном станке с ЧПУ в листовой заготовке. Торцевая фреза диаметром 2 мм:

 % (метка начала программы, необязательна)
 (ось Z настроена так, что при Z=0 инструмент касается поверхности заготовки)
 O200 (метка программы, необязательна)
 G21 G40 G49 G53 G80 G90 G17 (Строка безопасности.)
 (Состояние станка или интерпретатора определяется предысторией, либо устанавливаются в  некоторое исходное состояние при включении питания, и эти настройки могут вызвать нежелательные и непредвиденные действия, поэтому необходимо привести станок в <исходное состояние> с помощью «строки безопасности».)
 (G21 — выбор метрической системы единиц - миллиметры,)
 (G40 — отменяет автоматическую коррекцию на радиус инструмента.)
 (G49 — отменяет автоматическую коррекцию на длину инструмента.)
 (G53 — отменяет возможно введённые ранее дополнительные системы координат, смещённые относительно исходной и переводит станок в основную систему координат.)
 (G80 — отменяет все постоянные циклы, например, циклы сверления и их параметры.)
 (G90 — переводит в абсолютную систему координат.)
 (G17 — выбирается плоскость круговой интерполяции X-Y.)
 G0 F300 (задание скорости холостого перемещения инструмента в мм/мин)
 M3 S500 (включение вращения шпинделя по часовой стрелке и задание его скорости вращения 500 об/мин)
 G4 P2000 (выдержка 2 секунды для раскрутки шпинделя)
 X0 Y30 Z5 (подвод инструмента в точку с координатами X=0 Y=30 Z=5 со скоростью холостого перемещения)
 G1 Z-2 F40 (врезание в заготовку на глубину 2 мм со скоростью 40 мм/мин)
 G1 F20 X10 Y0 (фрезерование 1-го отрезка буквы W со скоростью 20 мм/мин)
 X20 Y30 (фрезерование 2-го отрезка буквы W со скоростью 20 мм/мин)
 X30 Y0 (фрезерование 3-го отрезка буквы W со скоростью 20 мм/мин)
 X40 Y30 (фрезерование 4-го отрезка буквы W со скоростью 20 мм/мин)
 G0 Z5 (отвод инструмента на высоту 5 мм над поверхностью заготовки со скоростью 300 мм/мин)
 M5 (выключение вращения шпинделя)
 M30 (конец программы и конец интерпретируемого кода)

См. также 
 Металлорежущий станок
 Параметрическое программирование
 3D-принтер

Примечания

Ссылки 
 Создание и подготовка управляющих программ (G-кода) в режиме on-line.
 CAM расширение Inkscape для экспорта в G-code
 Симуляция работы программ на G-коде в реальном времени
 Real-Time 3D Graphics Simulation for G-code
 Overview of canonical machining functions
 SIMUL CNC
 Подборка ссылок на сайты редакторов визуализаторов G-кода

Автоматизация производства
Предметно-ориентированные языки программирования
Промышленная автоматика