Если посмотреть в словарь компьютерной терминологии, то макрос (или макрокоманда) - это программный алгоритм действий, записанный пользователем. То есть по определению компьютер должен повторять действия человека. Но в 3D-печати данный термин имеет другой смысл. Вместо записи и повторении действий человека, 3D-принтер также будет исполнять команды, но теперь они будут написаны вручную, а не с помощью слайсера. Это позволяет напрямую управлять действиями принтера, обходить стандартный путь нарезки модели слайсером. Посмотрев файл GCODE через блокнот или любой другой текстовый редактор, можно будет увидеть тысячи и даже десятки тысяч строк с сочетанием букв и цифр. Это может напугать, но на самом деле почти любой макрос можно будет записать в 5-10 строчек. Главное - понять порядок написания отдельной команды.
Структура G-code файлов
Каждый файл GCODE можно разделить на 2 части: комментарий, встречающийся в начале программы и после команд, и сами команды. Рассмотрим на примере модели, нарезанной с помощью PrusaSlicer (Версия 2.3.0).
В первой строчке нас встречает название слайсера, его версия, дата и время слайсинга:
; generated by PrusaSlicer 2.3.0+win64 on 2021-04-22 at 12:31:50 UTC
Обратите внимание, что в самом начале строки стоит знак “точка с запятой”, он обозначает комментарий. Всё что находится в строке до него читает принтер, а на то что после он не обращает внимание.
Далее мы видим несколько строк, в которых нам показываются настройки ширины линии, которые слайсер использовал для нарезки модели. Все они являются комментариями.
; external perimeters extrusion width = 0.45mm
; perimeters extrusion width = 0.45mm
; infill extrusion width = 0.45mm
; solid infill extrusion width = 0.45mm
; top infill extrusion width = 0.40mm
; first layer extrusion width = 0.40mm
После идут строчки, в которых описываются начальные температуры, команда нахождения нулевой точки координат и команды перемещения. Все команды, которые участвуют в начале и процессе печати будут рассмотрены далее.
Совет: Многие слайсеры, при нарезке GCODE для принтера оставляют в файле комментарии, указывающие на смену слоя и/или его номер. Это поможет в ориентировании в командах при ручном редактировании.
Gcode команды
Многие заблуждаются, называя данный язык для работы 3D-принтера языком программирования. На самом деле это общепринятый формат работы с ЧПУ станками, в том числе и с 3D-принтерами. Каждая команда находится в отдельной строчке и представляет собой название команды (буква и число) и её параметры (также буквы и числа). Например, команда перемещения сопла к определенной координате с выдавливанием пластика:
G1 X101.912 Y136.607 E2.04825
G1 - название команды
X101.912 - координата по оси X
Y136.607 - координата по оси Y
E2.04825 - количество экструдируемого пластика
Все команды подразделяются на два основных типа:
G-команды
M-команды
Есть и другие малочисленные типы, но в 3D-принтерах они не используются, поэтому в данной статье мы их опустим.
G-команды
Все команды данной группы предназначены для перемещения или калибровки. 3D-принтер использует не все из них, при этом не каждый 3D-принтер использует те же команды, что и другой. Например есть команда для автокалибровки стола. Очевидно, если в вашем принтере данная функция не предусмотрена конструкцией, то и исполняться данная команда не будет. Далее таблица самых популярных G-команд:
Команда
Параметры
Описание
G0
X - координаты по X
Y - координаты по Y
Z - координаты по Z
Перемещение без выдавливания пластика
G1
X - координаты по X
Y - координаты по Y
Z - координаты по Z
E - количество вдавливаемого пластика (мм)
Перемещение с выдавливанием пластика
G4
S - время в секундах
P - время в миллисекундах
Пауза
G28
X - ось X
Y - ось Y
Z - ось Z
Перемещение к нулевым координатам.
Если указаны параметры, то парковка только по указанным осям
G29
Параметры отличаются в зависимости от прошивки.
Автоматическое построение карты высот стола
G90
-
Переход в абсолютную систему координат (все координаты относительно нуля)
G91
-
Переход в относительную систему координат (все координаты относительно нынешнего положения сопла)
G92
X - координаты по X
Y - координаты по Y
Z - координаты по Z
E0 - координаты экструдера №0 (количество выдавленного пластика)
Установить позицию без перемещения и выдавливания
M-команды
Данные команды являются вспомогательными. В основном они связаны с настройкой и калибровкой температур, работой с файлами и настройками параметров перемещения.
Команда
Параметры
Описание
M17
X - моторы по X
Y - моторы по Y
Z - моторы по Z
E0 - мотор экструдера №0
Подача питания на все моторы, если не указано параметров. Иначе включаются только указанные
M18
X - моторы по X
Y - моторы по Y
Z - моторы по Z
E0 - мотор экструдера №0
Отключение питания на двигателях
Команда обратна M17
M20
-
Вывод списка файлов с SD-карты
M21
-
Инициализация карты памяти
M22
-
Отключение карты памяти
M23
После команды вводится названия файла
Выбор файла с SD-карты
M24
-
Начало исполнения файла, выбранного с помощью M37
M25
-
Пауза печати с SD-карты
M28
После команды вводится названия файла
Создается или перезаписывается файл с указанным названием, в него будут записываться все команды, которые вводятся в принтер через проводное соединение
M29
После команды вводится названия файла
Файл с указанным названием сохраняется. Все дальнейшие команды исполняются как обычно.
M30
После команды вводится названия файла
Удаление файла с указанным названием
M82
-
Переход в абсолютные режим для экструдера
M83
-
Переход в относительный режим для экструдера
M92
X - значение на X
Y - моторы по Y
Z - моторы по Z
E0 - мотор экструдера №0
Установка количество шагов на миллиметр для каждого указанного мотора
M104
S - температура сопла
Установить температуру сопла без ожидания нагрева до заданной температуры
M105
-
Вывести в консоль температуру сопла
M106
S - скорость вращения (от 0 до 255)
Включить вентилятор с указанием скорости
M107
-
Выключить вентилятор
M108
-
Отмена ожидания нагрева сопла, на указанную в M109 и M190 температуру
M109
S - температура сопла
Установить температуру сопла и ждать нагрева до заданной температуры
M112
-
Экстренная остановка:
Все нагреватели отключаются
Моторы обесточиваются
M119
Xn (1/0) - концевик оси X
1 - инвертировать значение
0 - не инвертировать значение
Получить статус концевиков по осям, если не указаны параметры
M140
S - температура стола
Установить температуру стола без ожидания нагрева до заданной температуры
M190
S - температура стола
Установить температуру стола и ждать нагрева до заданной температуры
M200
D - диаметр (в миллиметрах)
T - номер экструдера
Установить диаметр филамента
M201
X - ускорение для оси X
Y - ускорение для оси Y
Z - ускорение для оси Z
E - ускорение экструдера
Установка ускорений по осям
M205
X - рывок для оси X
Y - рывок для оси Y
Z - рывок для оси Z
E - рывок экструдера
Установка рывка по осям
M206
X - смещение по оси X
Y - смещение по оси Y
Z - смещение по оси Z
Установка смещения относительно концевиков
M300
S - частота в Герцах
P - длительность в миллисекундах
Издает звуковой сигнал с заданной частотой на протяжении указанного времени
M301
H - номер нагревателя
P - коэффициент P
I - коэффициент I
D - коэффициент D
Установить значение параметров PID для заданного нагревателя
Некоторые из вышеуказанных команд можно использовать перед печатью для оценки состояния принтера, например M20 и M119. Но многие остальные команды используются для создания макросов, которые мы опишем далее.
Виды макросов для 3D-принтеров
Как и любой другой текстовый документ, файлы GCODE можно редактировать в блокноте. Но для этого нужно каждый раз открывать файл, находить нужный участок и вписывать свои макросы. Вместо этого многие слайсеры предлагают вручную вписать макросы, которые потом будут автоматически вписаны в начале, конце или середине GCODE файла. Наибольшей гибкостью обладает PrusaSlicer - в нём можно добавить макрос в начале, в конце, до и после смены слоя, во время паузы и между объектами в последовательной печати. Далее мы рассмотрим самые популярные и удобные макросы.
Начальные
Все макросы данного типа предназначены для подготовки принтера перед печатью. Например, с помощью одной команды M301 можно настроить PID на принтере для разной температуры. Это может быть очень важно, так как PID зависит не только от характеристик принтера и его конструкции, но и от температуры печати. Если хотенд очень инертный, то значение PID для разных температур будут слабо отличаться, поэтому нет смысла каждый раз изменять их. Но если хотенд имеет малую инертность, то разница коэффициентов PID для разных температур достаточно велика, чтобы испортить модель из-за скачков температур. Подробнее о настройке PID вы можете прочитать в статье о выборе температуры печати на нашем сайте. Как только вы найдете значение параметров PID для температур, которыми вы чаще всего печатаете, их можно подставить в начальный GCode. В PrusaSlicer это можно сделать в окне “Настройка принтера”, внутри вкладки “Пользовательский Gcode”.
Для удобства можно создать сразу несколько профилей принтеров для разных температур.
Заправка филамента
Если при каждой печати вы меняете пластик, то для удобства можно использовать небольшой макрос для смены/заправки филамента перед печатью:
G91; установка начала координат относительно последней позиции
G92 E0; Установка координаты экструдера на значение ноль
Значение параметра E в двух командах G1 необходимо подобрать для вашего принтера. Если у вас боуден экструдер, то измерьте длину трубки в миллеметрах и прибавьте 30-50 миллиметров, затем полученное значение вставьте в параметр E. Если же у вас директ экструдер, то можете вставить значение 50-70мм. Весь полученный код вставьте в окно “Стартовый G-код” после стандартных команд.
Внимание: после каждого изменения не забывайте сохранять профиль!
Между слоями
В данной группе находятся макросы, прямо влияющие на процесс печати. Зачастую они вызывают наибольшую сложность из-за необходимости ручного редактирования файла GCode в блокноте или другом текстовом редакторе. Но на самом деле в этом нет ничего сложного, ведь в каждом таком файле есть комментарии, по которым можно легко найти нужный участок кода. Например можно добавить звуковой сигнал при смене слоя. Для этого необходимо использовать команду M300:
M300 S500 P800
Стоит учитывать, что в принтере установлен простейший спикер, поэтому не стоит указывать частоту ниже 500 Гц, так как звук будет тише и сильно искажен. Для подбора частоты можно использовать этот сайт. Квадратная форма волны наиболее сильно похожа на звук спикера. Как только вы выберите подходящую частоту и время, полученную строку можно вставить в окно “G-код, выполняемый при смене слоя”.
Смена филамента
Данный макрос позволяет печатать одну модель несколькими цветами на принтере, имеющим один экструдер. Есть всего 2 ограничения: цвет будет меняться ровно на границе между слоями и при каждой смене слоя нужно вручную менять филамент.
В начале нужно определить место смены слоя. Для этого рассчитайте высоту, на которой находится граница между слоями. Это легко сделать по формуле:
Высота смены слоя = номер слоя * высоту слоя (в миллиметрах).
После того, как вы найдёте высоту, необходимо открыть файл Gcode и найти в нём первую строку, в которой находится параметр Z с искомой высотой слоя. Например, нам нужно изменить цвет калибровочного кубика на десятом слое, при этом мы печатаем с высотой слоя в 0.2 мм. Значит в файле Gcode нужно найти первую строчку, где есть Z5. Затем, после комментариев, который поставил слайсер, нужно вставить следующий макрос:
G91; переход в относительную систему координат
G1 Z5; поднятие сопла на 5 мм
G90; переход в абсолютную систему координат
G1 Y10 X10 F1000; перемещение к краю стола
G4 S60; пауза 60 секунд (в это время нужно вставить пластик)
G91; переход в относительную систему координат
G1 E100 F100; заправка пластика
G92 E0; обнуление координат экструдера
G90; переход в абсолютную систему координат
В итоге ваш файл должен выглядеть примерно как на изображении ниже:
Если перевести эти команды на человеческий язык: как только начнется следующий слой, принтер поднимает сопло и отодвигает его на край стола. Затем он ждёт 60 секунд, за которые вы должны заменить пластик. После этого принтер выдавит 100 мм заправленного пластика, чтобы стабилизировать поток, и продолжит печать. Данную команду можно вставлять несколько раз, но учтите: каждая смена слоя добавляет к общему времени печати 1-2 минуты и требует ваших активных действий.
Конечные
Все слайсеры в конце печати оставляют стандартные команды: поднятие сопла, выключение нагревателей и обдува. Но если идет печать нескольких моделей друг за другом, то на повторный нагрев сопла и стола будет уходить большое количество времени. Чтобы принтер не отключал нагрев, необходимо убрать команду M104 S0 из окна “Завершающий G-код”. Также увеличить удобство работы с 3D-принтером можно путем добавления макроса воспроизведения звукового сигнала в конце печати.
Звуковое оповещение
Для воспроизведения мелодии, обозначающей конец печати, необходимо добавить одну или несколько команд M300 после стандартных команд в окне “Завершающий G-код”. Например, можно вставить три последовательных писка:
M300 S1000 P100
M300 S1000 P100
M300 S1000 P100
Или начальную тему из Марио:
M300 S2637 P150
M300 S2637 P150
M300 S0 P75
M300 S2637 P300
M300 S2093 P150
M300 S2637 P300
M300 S3135 P300
M300 S0 P300
M300 S1567 P300
Звёздные войны:
M300 S1396 P166
M300 S1396 P166
M300 S1396 P166
M300 S932 P1000
M300 S2793 P1000
M300 S2489 P166
M300 S2349 P166
M300 S2093 P166
M300 S1864 P1000
Симпсоны:
M300 S2093 P562
M300 S2637 P375
M300 S2959 P375
M300 S1760 P187
M300 S3135 P562
M300 S2637 P375
M300 S2093 P375
M300 S880 P187
M300 S1479 P187
M300 S1479 P187
M300 S1479 P187
M300 S1567 P750
И даже музыку из Индианы Джонса:
M300 S1318 P240
M300 S0 P120
M300 S1396 P120
M300 S1567 P120
M300 S0 P120
M300 S2093 P960
M300 S0 P180
M300 S1174 P240
M300 S0 P120
M300 S1318 P120
M300 S1396 P960
M300 S0 P360
M300 S1567 P240
M300 S0 P120
Простор для фантазии огромен, так что можете придумать свою композицию и записать её в виде последовательностей команд M300.
Интересный факт: автор канала Make Anything сыграл мелодию из сервиса Nintendo используя 3D-принтер. Изюминкой данного видео является использование не только спикера на плате принтера, но и звука моторов и даже своеобразного маракаса, напечатанного на этом же принтере.
Особые
В данную группу макросов относятся исключительные макросы, которые зачастую неприменимы, но в некоторых ситуациях они могут сильно упростить печать. Например, макрос для последовательной печати моделей. То есть принтер печатает модель, затем либо сам принтер, либо человек отделяет деталь от стола, и принтер начинает печатать следующую модель. Данный процесс имеет множество ограничений и его крайне сложно настроить именно под ваш принтер. Пример исполнения данной идеи можно увидеть в данном видео.
Очистка сопла
Если сопло быстро пачкается и вы устали его чистить, а силиконового чехла на хотенд у вас нет, то можно чистить сопло перед каждой печатью с помощью металлической щетки. Для этого необходимо закрепить в дальнем углу стола металлическую щётку, а в начальный G-код, после команд нагрева сопла, добавить данные строки:
G28; Движение к началу координат
G90; переход в абсолютную систему координат
G0 Z10; поднятие сопла на “Высоту очистки”
G0 Xnnn Ynnn; перемещение к дальнему краю щётки
G0 X(nnn-10) Ynnn; перемещение к ближнему краю щётки
G0 Xnnn Ymmm
G0 X(nnn-10) Ynnn
G0 Xnnn Ymmm
G0 X(nnn-10) Ynnn
G0 Xnnn Ymmm
G0 X(nnn-10) Ynnn
G28; возвращение в начало координат
Здесь вместо Xnnn и Ynnn должны находится координаты, в которых находится дальний край щетки. Например, для стола размером 200х200мм команды передвижения будут выглядеть так:
G0 X195 Y195
G0 X185 Y195
Высоту, на которой будет находится сопло, необходимо подобрать экспериментальным путем. Желательно, чтобы щетина щетки полностью покрывала сопло, но не мешала его передвижению.
Внимание: щетка должна быть крепко зафиксирована, иначе при ее отделении от стола она может заблокировать механику передвижения и сломать двигатели!
Макросы в Cura
Относительно недавно слайсер Cura обзавелся возможностью редактирования Gcode в самой программе. Отличительным преимуществом данного способа является обратная связь между слайсером и этой функцией, что позволяет, например, выводить оставшееся время печати прямо на экране принтера.
Для начала работы с макросами необходимо открыть окно пост-обработки. Для этого выберите в тулбаре вкладку “расширения”, затем “постобработка” и нажмите “Изменить G-код”.
Перед вами откроется окно постобработки. В левой половине будет список плагинов, справа настройки выбранного плагина. Работа с несколькими плагинами похожа на работу со слоями в фотошопе. Скрипты будут редактировать файл Gcode по порядку, то есть скрипт может влиять на вышестоящие скрипты, но не наоборот.
Далее список скриптов и их краткое описание:
Change at Z
Данный скрипт позволяет изменять скорость, температуру, поток и мощность обдува на определенной высоте. Значения применяются на все последующие слои. Также можно включить отображение изменений на экране принтера. В основном скрипт используется для печати тестовых моделей.
Color mix
Этот скрипт предназначен для экструдеров смешивания (например, A10M от компании Geeetech). В отличии от просто двухцветной печати, в данном экструдере возможно смешивание двух пластиков, что позволяет создавать переходные оттенки.
Create Thumbnail
Создание значков для файлов Ultimaker Format Package (.ufp). Используется при внедрении слайсера в Octoprint.
Display filename and layer on LCD
Название говорит само за себя: отображение названия файла и номера слоя на экране.
Display progress on LCD
Отображение оставшегося времени печати на экране принтера
Filament Change
Автоматизация процесса редактирования Gcode для смены филамента.
Insert at layer change
Является аналогом окон вставки Gcode при смене слоя в PrusaSlicer
Retract Continue
Позволяет добавить откат во время движения сопла между частями модели
Search and Replace
Удаляет указанные символы и заменяет их. Если заменять на символ “пробела”, то данный скрипт просто удаляет указанные символы
Time Lapse
Данный скрипт помогает в создании высококачественных таймлапсов при помощи камеры. На каждом слое принтер будет убирать каретку в сторону и отправлять команду, которая может активировать камеру.
Use Previous Probe Measurements
Если в вашем принтере есть возможность постройки карты высот стола, то данный скрипт будет заменять повторное измерение высот на результат предыдущих измерений.
Самыми часто используемыми и полезными плагинами являются Change At Z и Search and Replace. Они покрывают 80% всех необходимых изменений в Gcode. Поэтому, даже если вы не собираетесь в ближайшее время их использовать, всё равно лучше их изучить хотя бы на поверхностном уровне.
Таблицы основных команд
При обслуживании принтера финальным этапом проверки и настройки является самодиагностика принтера и проверка его в действии. Но не все действия можно сделать из меню принтера. Для удобства мы собрали все необходимые команды в одной маленькой таблице, которую вы можете быстро открыть и использовать.
Команда
Параметры
Описание
G28
X - ось X
Y - ось Y
Z - ось Z
Перемещение к нулевым координатам.
Если указаны параметры, то парковка только по указанным осям
M92
X - значение на X
Y - моторы по Y
Z - моторы по Z
E0 - мотор экструдера №0
Установка количество шагов на миллиметр для каждого указанного мотора
M303
S - температура
C - количество циклов
Команда автонастройки PID. Чем больше циклов, тем выше точность
M301
H - номер нагревателя
P - коэффициент P
I - коэффициент I
D - коэффициент D
Установить значение параметров PID для заданного нагревателя
M112
-
Экстренная остановка:
Все нагреватели отключаются
Моторы обесточиваются
ВНИМАНИЕ! Если принтер выдает ошибку нагрева экструдера или стола, то команда M112 может не исправить проблему, так как зачастую данная ошибка возникает при “заклинивании” транзисторов/реле или при коротком замыкании! Лучше сразу отключить питание принтера, а затем выяснять причину ошибки.