Unknown command G3 в Klipper: почему возникает ошибка и как её исправить

Ошибка Unknown command: G3 в Klipper появляется потому, что прошивка по умолчанию не поддерживает дуговые команды G2 и G3 — в отличие от Marlin, где они часто включены. Когда слайсер вставляет в G-код дуговое движение по часовой стрелке (G3 — против часовой), Klipper останавливает печать и выводит это сообщение в консоли интерфейса Fluidd, Mainsail или OctoPrint.

Проблема решается двумя путями: либо включить штатный модуль gcode_arcs в конфигурации принтера, либо отключить генерацию дуг в настройках слайсера. Оба варианта безопасны, обратимы и не требуют перепрошивки микроконтроллера — достаточно отредактировать файл printer.cfg или профиль печати.

Почему Klipper не понимает команду G3

Команды G2 (дуга по часовой стрелке) и G3 (дуга против часовой стрелки) описывают движение по окружности с заданным радиусом или координатами центра. В классических прошивках вроде Marlin их поддержка включается опцией ARC_SUPPORT при компиляции. В Klipper архитектура другая: вся логика G-кода работает на хосте (Raspberry Pi или аналог), а поддержка дуг реализована отдельным необязательным модулем.

Если секция [gcode_arcs] отсутствует в конфигурации, интерпретатор просто не знает такой команды и выдаёт ошибку. Это не сбой и не повреждение файла — принтер корректно сообщает, что встретил неизвестную инструкцию. Тот же механизм срабатывает для любой неподдерживаемой команды, поэтому текст ошибки всегда содержит имя конкретной команды после двоеточия.

⚠️ Внимание: после ошибки Unknown command Klipper обычно переходит в состояние остановки печати. Не отправляйте тот же G-код повторно, не устранив причину, — печать прервётся в той же точке.

Как убедиться, что дело именно в дугах

Прежде чем менять конфигурацию, проверьте, что в файле действительно есть команды G2/G3. Откройте G-код в текстовом редакторе и выполните поиск по строке G3. Если виновник — слайсер, дуговые команды будут встречаться многократно, чаще всего на криволинейных периметрах и отверстиях.

Также посмотрите лог Klipper. Строка с ошибкой обычно дублируется в файле klippy.log, доступном через интерфейс Fluidd или Mainsail в разделе с логами. Там видно, на какой команде остановилась печать и какие параметры ей передавались.

  • 🔍 Найдите в G-коде строки, начинающиеся с G2 или G3
  • 📄 Проверьте klippy.log на наличие записи «Unknown command»
  • 🖥️ Убедитесь, что в слайсере включена опция дугов (например, Arc Welder или аналог)
  • 🧩 Откройте printer.cfg и проверьте наличие секции [gcode_arcs]
📊 Откуда в вашем G-коде появились команды G2/G3?
Плагин Arc Welder в слайсере
Встроенная опция дуг в PrusaSlicer/OrcaSlicer
Готовый G-код из интернета
Постпроцессор или скрипт

Способ 1: включить модуль gcode_arcs

Самый правильный вариант — научить Klipper понимать дуги. Для этого в файл printer.cfg добавляется секция модуля. Откройте конфигурацию через веб-интерфейс и вставьте следующий блок:

[gcode_arcs]

resolution: 1.0

Параметр resolution задаёт максимальную длину сегмента в миллиметрах, на которые разбивается дуга: Klipper аппроксимирует окружность короткими прямыми отрезками. Значение 1.0 мм — разумный старт; меньшие значения дают более гладкую дугу, но увеличивают количество сегментов. После сохранения файла нажмите кнопку перезапуска (RESTART или FIRMWARE_RESTART не требуется — достаточно обычного рестарта хоста Klipper).

Чтобы проверить результат, отправьте в консоли тестовую команду, например небольшую дугу на безопасной высоте:

G3 X20 Y20 I10 J0 F1500

Если ошибка не появилась и каретка выполнила движение по дуге, модуль работает. Дальше можно печатать прежние файлы без перенастройки слайсера.

☑️ Включение поддержки дуг в Klipper

Выполнено: 0 / 5

Способ 2: отключить дуги в слайсере

Альтернатива — не генерировать G2/G3 вовсе. В PrusaSlicer и его форках вроде OrcaSlicer за это отвечает опция дуг в настройках принтера или печати; в OctoPrint дуги часто добавляет популярный плагин Arc Welder. Отключите соответствующую опцию, пересохраните G-код — и файл будет содержать только обычные линейные перемещения G1.

У этого подхода есть плюс и минус. Плюс — совместимость с любой прошивкой без правки конфигурации. Минус — файлы становятся заметно крупнее, потому что каждая дуга заменяется множеством коротких отрезков, а на моделях с большим количеством окружностей размер G-кода может вырасти в разы.

ПодходЧто меняетсяПлюсыМинусы
Модуль gcode_arcsprinter.cfgКомпактные файлы, гладкие дугиНужно редактировать конфигурацию
Отключение дуг в слайсереПрофиль печатиНе трогаем прошивкуБольшие файлы G-кода
Удаление Arc WelderOctoPrintПростая отменаТеряется сжатие дуг
Макрос-заглушка G3printer.cfgБыстрый обход ошибкиДуги не выполняются корректно

Макрос-заглушка и её ограничения

Встречается совет создать пустой макрос [gcode_macro G3], чтобы подавить ошибку. Технически это сработает — Klipper перестанет ругаться. Но макрос-заглушка не выполняет движение: принтер просто пропустит дугу, и на модели останется пропуск экструзии, дефект стенки или смещённая геометрия. Использовать такой приём для реальной печати нельзя — только как временную диагностику.

Если хотите реализовать дуги через макрос полноценно, придётся вручную программировать разбиение на сегменты на языке шаблонов Jinja2, что заметно сложнее и медленнее штатного модуля. Практического смысла в этом нет: [gcode_arcs] делает то же самое одной строкой.

⚠️ Внимание: не копируйте чужие макросы G2/G3 из форумов без проверки логики. Ошибка в формуле разбиения дуги приведёт к движению каретки за пределы стола или к удару сопла о модель.

Другие команды, вызывающие похожую ошибку

Та же ошибка Unknown command возникает и с другими инструкциями, которые Klipper не поддерживает или обрабатывает иначе. Типичные примеры — специфичные для Marlin команды вроде M600 (смена филамента) без соответствующего макроса, а также G29 в привычном марлиновском смысле: в Klipper выравнивание стола выполняется через BED_MESH_CALIBRATE.

Общий принцип диагностики одинаков: смотрите имя команды в тексте ошибки, проверяйте, есть ли для неё штатный модуль или макрос, и при необходимости адаптируйте стартовый G-код слайсера под Klipper. Большинство готовых профилей для популярных принтеров уже учитывают эти различия.

Почему слайсеры вообще генерируют G2/G3

Дуговые команды позволяют описать окружность одной строкой вместо десятков линейных сегментов. Это уменьшает размер G-кода и снижает нагрузку на последовательный порт в старых прошивках. В Klipper, где G-код обрабатывается на полноценном компьютере, выигрыш менее критичен, поэтому поддержка дуг сделана опциональной.

Что делать, если ошибка осталась

Если после добавления [gcode_arcs] и перезапуска ошибка сохраняется, проверьте три момента. Первое — нет ли опечатки в имени секции: конфигурация чувствительна к регистру и скобкам. Второе — действительно ли Klipper перезапустился: при синтаксической ошибке в файле он может не подняться, и тогда в интерфейсе появится отдельное сообщение о проблеме конфигурации.

Третье — убедитесь, что вы редактируете тот файл, который реально загружается. На некоторых установках с несколькими конфигурациями или при использовании [include] правка может попасть не в тот файл. Проверьте начало klippy.log: там перечислены все подключённые конфигурационные файлы.

  • ✅ Проверьте синтаксис секции [gcode_arcs] — без лишних пробелов и опечаток
  • 🔄 Убедитесь, что Klipper успешно перезапустился после сохранения
  • 📂 Сверьте путь редактируемого файла с загруженными конфигурациями в логе
  • 🧪 Протестируйте команду G3 вручную из консоли до запуска печати

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

Почему в Marlin команда G3 работала, а в Klipper нет?

В Marlin поддержка дуг включается на этапе компиляции прошивки и часто активна по умолчанию в готовых сборках. В Klipper дуги реализованы опциональным модулем [gcode_arcs], который нужно явно добавить в конфигурацию.

Чем отличаются команды G2 и G3?

Обе описывают движение по дуге: G2 — по часовой стрелке, G3 — против часовой. Модуль gcode_arcs включает поддержку обеих команд одновременно.

Нужно ли перепрошивать плату принтера для включения G3?

Нет. Модуль gcode_arcs работает на стороне хоста (Raspberry Pi или другого компьютера с Klipper). Достаточно отредактировать printer.cfg и перезапустить сервис Klipper — прошивка микроконтроллера не меняется.

Какое значение resolution выбрать для gcode_arcs?

Значение 1.0 мм — разумная отправная точка для большинства моделей. Уменьшение параметра делает дугу глаже, но увеличивает число сегментов; увеличение ускоряет обработку ценой заметных граней на малых радиусах.

Можно ли просто игнорировать ошибку и печатать дальше?

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