Макросы Klipper: PRINT_START, PRINT_END и полезные примеры

16 октября 2026 Настройка и программы 4 мин чтения
Макросы Klipper: PRINT_START, PRINT_END и полезные примеры

Как устроены макросы Klipper: секция gcode_macro, параметры, переменные, шаблоны Jinja2 и доступ к состоянию принтера. Пишем PRINT_START и PRINT_END, разбираем макросы паузы, смены пластика, загрузки и выгрузки, подключаем их в Orca Slicer, Cura и PrusaSlicer, и избегаем типичных ошибок.

Коротко: макрос Klipper — это своя G-code-команда, описанная в printer.cfg секцией [gcode_macro ИМЯ]. Внутри — обычные команды плюс шаблоны Jinja2: параметры (params), переменные (variable_), условия и доступ к состоянию принтера (printer). Главные макросы — PRINT_START и PRINT_END: вся логика старта и окончания печати переносится из слайсера в принтер, а слайсер передаёт только температуры. Ещё полезны пауза и смена пластика (M600), загрузка и выгрузка нити, парковка. Ниже — синтаксис, рабочие примеры и подключение в слайсерах.

Зачем нужны макросы

В Marlin стартовый код живёт в слайсере, и в каждом слайсере он свой. В Klipper логику удобно держать в принтере: слайсер вызывает PRINT_START с температурами, а что именно делать — хоминг, сетка стола, прогрев, очистка — решает макрос. Поменяли процедуру — правите одно место, а не профили в трёх слайсерах. Макросы также дают кнопки в Mainsail и Fluidd для частых действий. Klipper или Marlin, Mainsail и Fluidd.

Синтаксис

Из чего состоит макрос Klipper
Элементы макроса.

Минимальный макрос:

[gcode_macro PARK]
description: Парковка головы
gcode:
    G90
    G1 X10 Y10 Z30 F6000

Команды внутри gcode: пишутся с отступом. Всё, что в фигурных скобках, — шаблон: Klipper подставляет значения перед выполнением. Параметры, переданные при вызове (PARK Z=50), доступны как params.Z. Обязательно задавайте значение по умолчанию и тип: {params.Z|default(30)|float}.

PRINT_START

Пример для принтера с датчиком стола:

[gcode_macro PRINT_START]
gcode:
    {% set BED = params.BED|default(60)|float %}
    {% set EXTRUDER = params.EXTRUDER|default(210)|float %}
    M140 S{BED}
    M104 S150
    G28
    M190 S{BED}
    BED_MESH_CALIBRATE
    M109 S{EXTRUDER}
    G92 E0
    G1 X5 Y20 Z0.3 F5000
    G1 Y150 E15 F1500
    G92 E0

Логика: стол начинает греться сразу, сопло — до 150 °C (чтобы не текло при калибровке и не пачкало датчик), затем хоминг, прогрев стола, сетка, нагрев сопла до рабочей и полоса очистки. Адаптируйте координаты полосы под свой стол. Автокалибровка стола.

PRINT_END

[gcode_macro PRINT_END]
gcode:
    {% set max_z = printer.toolhead.axis_maximum.z|float %}
    {% set z = [printer.toolhead.position.z + 10, max_z]|min %}
    G91
    G1 E-2 F2700
    G90
    G1 Z{z} F3000
    G1 X10 Y200 F6000
    M104 S0
    M140 S0
    M107
    M84

Здесь используется состояние принтера: голова поднимается на 10 мм, но не выше максимума оси Z.

Подключение в слайсере

Как вызвать PRINT_START из слайсера
Стартовый G-code для разных слайсеров.

Конечный G-code во всех слайсерах — просто PRINT_END. Важно: если слайсер видит в стартовом коде свои команды нагрева, он не добавит их сам; если не видит — может добавить M190/M109 до вашего макроса. В Orca и PrusaSlicer это обычно решается автоматически, в Cura иногда нужно отключить вставку температур. Профиль принтера.

Переменные

Переменные хранят значения между вызовами или служат настройками:

[gcode_macro LOAD_FILAMENT]
variable_load_distance: 80
gcode:
    M109 S{params.TEMP|default(220)|float}
    M83
    G1 E{printer["gcode_macro LOAD_FILAMENT"].load_distance} F300
    G1 E20 F150

Менять переменную во время работы — командой SET_GCODE_VARIABLE MACRO=LOAD_FILAMENT VARIABLE=load_distance VALUE=100.

Пауза и смена пластика

Для паузы Klipper нужна секция [pause_resume]; готовые макросы PAUSE, RESUME и CANCEL_PRINT идут в комплекте конфигов Mainsail и Fluidd — подключите их через [include mainsail.cfg]. Смену пластика M600 делают макросом, который вызывает PAUSE, паркует голову и выгружает нить; Klipper сам M600 не знает. Слайсеры вставляют M600 на нужном слое для смены цвета. Многоцветная печать.

Переопределение команд

rename_existing позволяет расширить существующую команду: например, переименовать встроенную M109 и добавить в новую ожидание стабилизации. Используйте осторожно и не переопределяйте команды безопасности.

Типичные ошибки

  • Нет отступа у строк в gcode: — Klipper не загрузит конфиг.
  • Параметры без default — макрос падает при вызове без значения.
  • Строка вместо числа — забыли |float, сравнение работает неверно.
  • Шаблон вычисляется один раз — значения printer.* берутся на момент запуска макроса, а не после каждой строки. Для «свежих» данных разбейте логику на два макроса.
  • Двойной нагрев — слайсер добавил свои команды температуры перед макросом.

Справочник команд — в официальной документации Klipper (разделы Command Templates и G-Codes). G-code.

Частые вопросы

Что такое макрос Klipper?

Своя команда G-code из секции gcode_macro в printer.cfg.

Как передать температуру из слайсера?

Вызвать PRINT_START BED=… EXTRUDER=… с переменными слайсера.

Как задать значение по умолчанию?

Фильтр default: {params.BED|default(60)|float}.

Почему не работает M600?

В Klipper его нет — нужен свой макрос и секция pause_resume.

Где взять готовые макросы?

В конфигах Mainsail и Fluidd и в официальных примерах Klipper.

Как применить изменения?

Сохранить printer.cfg и выполнить FIRMWARE_RESTART или RESTART.

Нужна 3D-печать на заказ?Студия Universe3D в Тюмени: фотополимерная печать, моделирование, покраска. Доставка по России и СНГ.

Оставить заявку