Содержание
- Что такое G-код?
- Зачем 3D печатнику знать G-код?
- Структура и основные команды G-кода.
- Пример программы на G-коде.
- Вывод.
- FAQ.
Что такое G-код?
G-код - это язык программирования для устройств с ЧПУ. В современном понимании представляет собой обычный текстовый файл с командными строками, одна строка - одна команда. Последовательное выполнение команд станком осуществляет изготовление желаемой детали, для 3D принтера аддитивное, для фрезера субтрактивное.
G-код изобретение не новое, в первом приближении он появился задолго до 3D принтеров, еще в 60-х годах прошлого века. В 1980 году он обрел общепризнанную форму и стал официальным международным стандартом. 3D принтер, как типичный представитель семьи станков ЧПУ, естественно, частично унаследовал это изобретение.
Написать программу на G-коде можно вручную, достаточно четко представлять себе как и куда должна двигаться печатающая головка и каким параллельным процессам при этом следует происходить. Однако сложность кода возрастает в прямой зависимости от сложности геометрической формы детали и довольно быстро становится понятно, что вручную запрограммировать что-то сложнее изготовления простейших форм практически невозможно.
Работа по созданию G-кода для 3D принтеров переложена на специальные программы - слайсеры. Задача слайсеров - перевод 3D модели в последовательность движений печатающей головки и сопутствующих действий, например, нагрева сопла, стола, вращения вентиляторов охлаждения и так далее. В результате получается готовый текстовый файл с множеством строк-инструкций, то есть тот самый G-код, который может быть использован принтером как руководство к действию.
Заглянув внутрь полученного кода, мы обнаружим нечитаемую (на первый взгляд) абракадабру. Какие-то буквы и цифры.
Но ничего сложного, если разобраться, в этом тексте нет. В статье мы разберемся со структурой и основными командами G-кода, чтобы не только не бояться его, но и научиться вносить изменения и даже писать собственные куски программы.
Зачем 3D печатнику знать G-код?
Процесс подготовки кода сейчас настолько автоматизирован, что о нем можно вообще ничего не знать, кроме того, что это некий файл с инструкциями, который следует перенести из компьютера в принтер. Однако в некоторых случаях знание того, что именно происходит в недрах принтера и иметь возможность влиять на это, может быть весьма полезно.
Например, в настройках любого слайсера есть раздел “пользовательский G-код”, в котором, как минимум, присутствует еще два подраздела - “Стартовый G-код” и “Завершающий G-код”.
Что-то там появляется автоматически, при выборе шаблона ближайшего подходящего принтера, но все устройства разные, материалы разные, да и вкусы у печатников тоже не всегда совпадают и, возможно, вы захотите более точно подогнать настройки под себя и свой принтер.
Что можно сделать в начальных и конечных настройках? Установить начальное положение головки и стола, обнулить показания датчиков и координат, предварительно нагреть стол (например, для просушки свежего адгезива). Особо терпеливые пользователи даже создают скрипты для гарантированной очистки сопла от остатков пластика перед печатью (к примеру, ловко вытирая его о край стола или отрывая “соплю” резким движением головки). Если говорить о многоэкструдерных моделях, то простор для творчества еще шире, от калибровки и совмещения до очистки сопел при смене слоя и экструдера.
Обычно (по окончании печати) головка встает в начальное положение по осям X и Y, нагрев сопла и стола выключается, моторы обесточиваются. Иногда эти правила можно изменить под собственные нужды, например, убирать стол в крайнее нижнее положение (или головку в верхнее, да еще и в любой угол) для удобства доступа к печатной зоне, не отключать нагрев стола и сопла, чтобы не тратить время при быстром извлечении детали и начале печати следующей, не отключать питание мотора оси Z, если она не самотормозящая и уезжает вниз под собственным весом. Наконец, просто подать звуковой сигнал об окончании печати.
Внутри кода, при некотором опыте и ловкости, тоже иногда можно вносить правки. Увеличить или уменьшить обдув в нужных местах, поменять температуру, сделать паузу для размещения внутри заготовки гайки, болта или грузика, просигналить о ключевом моменте печати и так далее.
Сам код тоже неплохо бы иногда бегло осмотреть перед печатью, особенно если печать предстоит долгая, хотя бы на предмет соответствия заголовка, не всё и не всегда слайсеры прописывают корректно. Бывает, что добавляют свои настройки после пользовательских, тем самым обнуляя их и ваши старания.
Знание основ G-кода - полезный навык для опытного и даже начинающего печатника, может облегчить жизнь, повысить качество печати (или даже спасти ее).
Структура и основные команды G-кода
Перед статьей не стоит задача перечислить и объяснить работу всех существующих команд, а тем более обучить всем премудростям программирования. Цель - показать, что это доступно всем желающим. Понять общий смысл и логику языка, а также научиться самостоятельно выполнять стартовые и конечные действия сможет любой, кому это нужно.
Как уже говорилось выше, G-код представляет собой обычный текстовый файл, имеющий расширение “.gcode”, а значит его легко читать и изменять любым текстовым редактором, даже самым простым типа “блокнота”.
Сам код состоит из построчного списка команд, которые выполняются по очереди сверху вниз. Никаких циклов, переходов на подпрограммы и прочих изменений очередности нет и не надо.
Пневматическое оборудование и механика.
Все, что вам нужно из ЧПУ комплектующих можно купить в нашем онлайн магазине https://3d-diy.ru/catalog/cnc-components/ с оплатой онлайн и доставкой от 1 дня.
Строка состоит из собственно команды и ее аргумента, если он нужен. В текст можно добавлять комментарии, который отделяется от команды точкой с запятой “;”, все, что написано правее до конца строки, будет проигнорировано.
Команды делятся на три основные группы: перемещение рабочих органов (головки, стола и т.д.), управление вспомогательными механизмами и функциями (нагреватели, вентиляторы, питание), и управление системой координат.
Систем координат всего две: абсолютная и относительная. Абсолютная жестко привязана к рабочему столу и строится относительно какой-то ее конкретной точки, обычно это дальний левый угол. Ось влево-вправо называется “Y”, вперед-назад “X”, вверх-вниз - “Z”.
Относительные координаты привязываются к текущему положению печатной головки: где она стоит в начале операции, там нулевое положение ее относительных координат. Слайсер использует относительные координаты для упрощения работы, разбивая большой объект на множество мелких, привязанных к абсолютным точкам.
Команды всего две:
G90 ; переход к абсолютным координатам
G91 ; переход к относительным координатам
Все команды перемещений после этих строк будут выполняться с соответствующей привязкой в пространстве, до тех пор, пока не поступит новая команда смены системы отсчёта.
Для ручной правки данные команды используются редко, но знать о них надо.
Основная группа команд - перемещение рабочих органов. Так называемые “G”-команды, которые дали название всему коду.
G0 ; быстрое перемещение печатной головки (без экструзии)
G1 ; рабочее линейное перемещение (с экструзией).
В качестве аргументов к командам перемещения используются координаты X, Y и Z и скорость F. Подача материала экструдером тоже задается этой командой с аргументом E. Нулевые перемещения не указываются.
G0 X10 Y20 Z5 ; быстрое перемещение в точку с координатами x:10, y:20, z:5
G1 Е5 ; выдавить 5 мм пластика
G1 X100 Y30 E15 ; переместиться на заданную координату, при этом выдавить 15 мм материала
G2 ; криволинейное движение по часовой стрелке
G3 ; криволинейное движение против часовой стрелки. При 3D печати встречаются крайне редко, обычно все криволинейные движения разбиваются слайсерами на короткие отрезки
G4 ; пауза, аргумент: S (в секундах) или P (в микросекундах)
G S2 ; пауза 2 сек
G P2000 ; пауза тоже 2 сек
G20 ; установка единиц измерения в миллиметрах, если нужно в дюймах, то G21, используется при инициализации в начале файла.
G28 ; перемещение в начальную точку по всем трем осям (до концевиков), если с аргументами, то только по указанным осям
G28 X Y ; перемещение в начало только по осям X и Y
G10 ; ректракт (настройки по команде M207)
G11 ; возврат пластика после ретракта (настройки по команде M208)
G92 ; обнуление положения головки и/или экструдера
G92 E0 ; от этого положения начнется отсчет подачи пластика, если этого не сделать перед началом подачи, пруток может уехать в случайное положение после первой же команды.
Команды для управления вспомогательным оборудованием и настройка параметров, так называемые “М” - команды.
M17 ; включить все шаговые двигатели
M19, ; выключить все шаговые двигатели (после чего их можно двигать руками)
С М20 по М30 живут команды для работы с SD картой. Позволяют считывать список файлов, доступных для печати, выбирать нужный для запуска печати с него. Делать паузу выполнения файла, продолжать печать, удалять файлы и так далее. Для ручного редактирования используются крайне редко, как правило служат для связи контроллера принтера с дисплеем и другим оборудованием.
M80 ; включение основного питания принтера (если такая возможность предусмотрена конструкцией)
M81 ; выключение основного питания принтера
M84 Sxxx ; отключение всех шаговых двигателей после xxx секунд простоя
M85 Sxxx ; полное отключение основного питания после xxx секунд простоя. Помогает сохранить электроэнергию и ресурс принтера, автоматически выключая его после завершения печати
M104 Sxxx ; команда на нагрев сопла до температуры xxx без ожидания ее достижения
M109 Sxxx ; нагрев сопла до температуры ххх с ожиданием, пока она будет достигнута и “устаканится”
M140 Sxxx ; команда на нагрев стола до температуры xxx без ожидания ее достижения
M190 Sxxx ; нагрев стола до температуры ххх с ожиданием, пока она будет достигнута и “устаканится”
M106 Sxxx ; включить вентилятор обдува на скорость ххх, скорость задается в восьмибитном формате, то есть принимает значение от 0 до 255, где 255 - 100%.
M107 ; выключить вентилятор
M117 ; вывести на дисплей сообщение.
M117 Hello! ; на экране появится надпись “Hello!”, если такая возможность у принтера имеется.
M200 Dxxx Txxx ; установить реальный диаметр прутка материала. В случае недоэкструзии или переэкструзии измерьте диаметр филамента штангенциркулем, возможно, он больше или меньше заявленного. С помощью этой команды вы можете за несколько секунд внести поправку без повторной нарезки модели. Dxxx - диаметр в мм, Тxxx - номер экструдера, начиная с нуля, если он один, то можно не указывать.
M302 Sxxx ; ограничение минимальной температуры экструдера, при котором будет производиться печать. В случае, если температура снизится меньше заявленного значения, работа остановится. Если в качестве аргумента установить S0, работа продолжится при любой температуре.
M600 ; автоматическая смена филамента
Комплектующие 3D принтера
В нашем магазине 3DIY https://3d-diy.ru/catalog/spare-parts-3d-printer/ вы найдете 3D сканеры, 3D ручки, сушилки для пластика и другие запчасти. Доставляем во все регионы России.
Настроечные команды. Выполняются для всех последующих действий, пока не будет изменений или пока печать не закончится. Параметры можно сохранить в EEPROM контроллера командой М500 и быстро восстановить в нужный момент при помощи команды М501.
M201 Xxxx Yxxx Zxxx Exxx ; установка максимальных ускорений рабочего хода в мм/с2 для каждой оси (если вдруг выяснилось, что параметры из слайсера неправильные)
M203 Xxxx Yxxx Zxxx Exxx ; установка максимальной скорости рабочего хода в мм/с для каждой оси
M205 Xxxx Yxxx Zxxx Exxx ; установка максимального рывка (jerk) рабочего хода в мм/с для каждой оси
M206 Xxxx Yxxx Zxxx ; установка смещения осей относительно нулевого положения концевиков (если концевики сложно или невозможно отрегулировать)
M207 Sxxx Fxxx Zxxx ; установка параметров ретракта:
Sxxx - расстояние ретракта (мм),
Fxxx - скорость ретракта (мм/с),
Zxxx - подъем сопла (опускание стола) при ретракте (мм)
M208 Sxxx Fxxx ; установка возврата прутка после ретракта:
Sxxx - расстояние возврата (мм),
Fxxx - скорость возврата (мм/с).
M300 Sxxx Pxxx ; воспроизведение звукового сигнала частотой Sxxx Гц и длительностью Pxxx мс. Позволит сообщить о готовности, конце печати или другом важном событии. При желании можно даже проигрывать одноголосые мелодии.
M301 Hxxx Pxxx Ixxx Dxxx ; установить PID-параметры нагрева хотэнда. Используется для
ускорение нагрева без “перескоков” за верхний предел с последующим остыванием.
Hxxx – номер экструдера. H1 – первый экструдер (хотэнд),
Pxxx - коэффициент proportional (Kp),
Ixxx - коэффициент integral (Ki),
Dxxx - коэффициент derivative (Kd).
M304 Pxxx Ixxx Dxxx ; установить PID-параметры нагрева стола.
Pxxx - коэффициент proportional (Kp),
Ixxx - коэффициент integral (Ki),
Dxxx - коэффициент derivative (Kd).
M303 Exxx Sxxx Cxxx ; запустить калибровку PID-параметров экструдера или стола. Для наблюдения результатов материнская плата принтера должна быть подключена к терминалу, например, к компьютеру USB-кабелем. Полученные данные следует внести в принтер командами M301 и М304. Произведенная один раз команда позволит сэкономить на нагреве время и электроэнергию, убирая лишние циклы температурной “раскачки”.
M500 ; сохранение параметров в EEPROM
M501 ; восстановление параметров из EEPROM
M502 ; сброс параметров EEPROM
M928 ; запись лога работы на SD-карту, например: M928 test.gcode ; запись лога в файл “test.gcode”
Разумеется, полный список команд длиннее, но бо́льшая часть из них либо используется очень редко, либо не предназначена для работы вручную, либо применяется при обмене данными с внешним устройством, компьютером или дисплеем.
Пример программы на G-коде
Рассмотрим небольшой реальный пример программы на G-коде под условным названием “высмаркивание”. Очистка сопла и всего, что на него налипло путем приклеивания к столу с дальнейшим отрыванием.
Открываем текстовый редактор NotePad++ или блокнот (но не Word), записываем туда сам код:
G21 ; переводим единицы измерения в мм
G90 ; используем абсолютные координаты
M82 ; используем абсолютную длину экструзии
M107 ; выключаем вентиляторы (на всякий случай)
M117 start ; пишем стартовое сообщение
M140 S80 ; запускаем нагрев стола и не дожидаясь этого...
M109 S235 ; запускаем нагрев сопла (оно греется дольше сопла) с ожиданием
M190 S80 ; дожидаемся нагрева стола (таким образам мы нагрели стол и сопло одновременно)
G28 ; выход головки на начальное положение (по концевикам)
G1 Z.4 ; поднимаем головку на 0,4 мм (в примере на принтере сопло диаметром 0,6 мм)
G92 E0 ; обнуляем положение экструдера
G1 E2 F300 ; выдавливаем 2 мм пластика
G92 E0 ; еще раз обнуляем положение, на всякий случай
G1 X100 E15 F1000 ; поехали по оси X в положение 100 мм со скоростью 1000 мм/мин
M106 S255 ; после остановки включаем обдув на 100% чтобы "сопля" застыла
G4 S2 ; ждем пару секунд, чтобы затвердело
G0 X150 Z5 F2000 ; поехали еще на 50 мм со скоростью 2000 без экструзии
M107 ; выключаем обдув
M117 stop ; выводим сообщение
M19 ; выключаем моторы осей
M104 S0 ; выключаем подогрев сопла
M140 S0 ; выключаем подогрев стола
Сохраняем файл с любым названием, но с расширением “.gcode”, например “test.gcode”, записываем на SD или переносим на принтер иным способом.
Запускаем печать, после прогрева видим такой результат. Вроде бы все получилось.
Вывод
Глубоко разбираться в G-коде и уметь вносить в него изменения не является жизненно необходимой обязанностью 3D печатника, многие вполне обходятся без этого знания, всецело полагаясь на слайсеры. В большинстве случаев правильно настроенные слайсеры способны генерировать приемлемый код. Однако выполнить ряд тонких (но зачастую важных) настроек, заставить принтер совершать до, во время и после печати желаемые действия (которые могут облегчить или ускорить работу, помочь автоматизировать ее) без знания G-кода уже не получится. Найти причину ошибки или дефекта печати, оптимизировать скорость и передать некоторую информацию на сопряженное устройство тоже бывает полезным. Да что тут сказать - знаний лишних не бывает, особенно тех, что сопряжены с вашей деятельностью.
FAQ
Есть ли возможность воспользоваться автоуровнем в G-коде?Да. При наличии датчика автоуровня можно его использовать при помощи команды M29. Но конструкции принтеров очень разнообразны и универсальный совет "как это сделать" дать не получится, надо исходить из рекомендации разработчиков, собственных наблюдений и опыта товарищей.
Хочу, чтобы после окончания печати вентиляторы обдува экструдера выключались не сразу, а только когда температура сопла достигнет, скажем, 50 градусов. Каким образом будет выглядеть G-код?
M106 S255
M109 R50
M106 S0
После окончания печати принтер продолжает греть стол, как это отключить?
В окне слайсера “завершающий G-код” добавьте команду отключения нагрева стола “M140 S0”.
Можно ли заставить головку двигаться за пределами нулевых положений?
Можно. При помощи команды “M211 S0”, но сперва убедитесь, что вам это действительно нужно, операция достаточно опасная, может повредить механизмы принтера.
Где посмотреть полный список команд G-кода?
Таких ресурсов много, например здесь. Но имейте в виду, что не все команды не всеми принтерами и не всеми прошивками поддерживаются. Часть команд и вовсе не предназначена для 3D принтеров. Станков ЧПУ великое множество и они сильно отличаются по конструкции, назначению и принципу работы.