Скрипт быстрой смены инструмента
Что это и зачем нужно?
На IDEX принтерах физически возможно двигать печатающими головами независимо друг от друга. Если прошивка принтера это поддерживает, то становится возможным прочищать неактивную печатающую голову пока активная еще печатает. Это убирает необходимость печати черновой башенки, сокращая время смены инструмента с ~5 до 0.5-0.7 секунд.
Но так как слайсеры не поддерживают работу с экспериментальной веткой прошивки, где реализовано независимое управление печатающими головами, приходится сначала генерировать G-код как обычно, а потом обрабатывать его с помощью специального скрипта постпроцессинга.
Кроме этого, скрипт еще управляет температурами хотэндов. Если для этого есть время, то неактивная печатающая голова сбросит температуры, чтобы пластик из неё не натекал. И потом заранее нагреется до целевой температуры перед прочисткой.
Установка скрипта
Этот скрипт работает только с экспериментальной веткой Klipper от Дмитрия Бутюгина. На других ветках, в том числе mainline Klipper будет работать неправильно
- Для работы скриптов достаточно Python 3.6 или новее. Установите его как обычно, загрузив установщик с python.org;
- Скачайте скрипт быстрой смены инструмента (
fast_tool_swaps.py) и фикс первого переключения инструмента (fix_toolchange.py) из репозитория конфигурации VOSTOK; - Положите их в любую удобную вам папку на компьютере. Лучше всего подобрать папку так, чтобы вы потом случайно не удалили эти файлы, а также чтобы путь к ним был коротким и не содержал киррилицу. К примеру
C:/postprocessing/; -
-
Скопируйте в это поле следующий текст:
C:/путь_к_папке_питона/python3.exe C:/путь_к_папке_со_скриптами/fast_tool_swaps.py --tool_shutoff_time=90 --long_preheat_time=40 --long_preheat_purge_length=10 --inactive_tool_temp_reduction=0.75 --min_preheat_time=10 --min_purge_length=3 --t0=xc:extruder:+ --t1=wc:extruder1:- --tool_wipe_z_hop=0.4 --tool_wipe_dist=25 --tool_wipe_speed=500 --tool_wipe_accel=20000 --tool_swap_speed=1000 --tool_swap_accel=10000 --tool_fast_change_gcode="T{next_tool} X{xpos} Y{ypos}" --extra_gcode_axis=W --confirm_on_error; C:/путь_к_папке_питона/python3.exe C:/путь_к_папке_со_скриптами/fix_toolchange.py --long_deretract_length=2;
В профиле печати перейдите во вкладку
Прочееи найдите полеСкрипты постобработкии заполните его:- Укажите корректный
путь_к_папке_питона; - Укажите корректный
путь_к_папке_скриптов; - Убедитесь, что прописали правильные пути для обоих скриптов;
- Для
fix_toolchange.pyукажите значениеlong_deretract_lengthравным значению параметраДлинаизПрофиль принтера->Экструдер 1->Откат при смене материала. Если указать значение этого параметра неправильно, или переопределить в профиле материала, то на каждой печати при первой смене инструмента может быть пере\недоэкструзия. При последующих её не будет;
-
-
Сохраните профиль печати.
Эта часть инструкции создана нейросетью. Относитесь к ней с осторожностью. Если найдёте проблемы, то сообщите @dmitry_sorkin. Если воспользуетесь этой инструкцией и всё пройдёт успешно, то тоже сообщите - уберём это предупреждение
-
Убедитесь, что в системе установлен Python 3.6 или новее. Проверить это можно командой
python3 --versionв Терминале. Если Python не установлен или его версия ниже 3.6, установите его:brew install python -
Скачайте скрипт быстрой смены инструмента (
fast_tool_swaps.py) и фикс первого переключения инструмента (fix_toolchange.py) из репозитория конфигурации VOSTOK; - Положите их в любую удобную вам папку на компьютере. Лучше всего подобрать папку так, чтобы вы потом случайно не удалили эти файлы, а также чтобы путь к ним был коротким. К примеру
~/postprocessing/. Помните, что macOS по умолчанию использует регистрозависимую файловую систему, поэтому в дальнейших командах соблюдайте регистр; -
-
Скопируйте в это поле следующий текст:
/usr/bin/env python3 ~/postprocessing/fast_tool_swaps.py --tool_shutoff_time=90 --long_preheat_time=40 --long_preheat_purge_length=10 --inactive_tool_temp_reduction=0.75 --min_preheat_time=10 --min_purge_length=3 --t0=xc:extruder:+ --t1=wc:extruder1:- --tool_wipe_z_hop=0.4 --tool_wipe_dist=25 --tool_wipe_speed=500 --tool_wipe_accel=20000 --tool_swap_speed=1000 --tool_swap_accel=10000 --tool_fast_change_gcode="T{next_tool} X{xpos} Y{ypos}" --extra_gcode_axis=W --confirm_on_error; /usr/bin/env python3 ~/postprocessing/fix_toolchange.py --long_deretract_length=2;
В профиле печати перейдите во вкладку
Прочееи найдите полеСкрипты постобработкии заполните его:- Укажите корректный путь к папке со скриптами, если вы положили их в другое место, отличное от
~/postprocessing/; - Для
fix_toolchange.pyукажите значениеlong_deretract_lengthравным значению параметраДлинаизПрофиль принтера->Экструдер 1->Откат при смене материала. Если указать значение этого параметра неправильно, или переопределить в профиле материала, то на каждой печати при первой смене инструмента может быть пере\недоэкструзия. При последующих её не будет;
-
-
Сохраните профиль печати.
Эта часть инструкции создана нейросетью. Относитесь к ней с осторожностью. Если найдёте проблемы, то сообщите @dmitry_sorkin. Если воспользуетесь этой инструкцией и всё пройдёт успешно, то тоже сообщите - уберём это предупреждение
-
Убедитесь, что в хост-системе установлен Python 3.6 или новее. Проверить это можно командой
python3 --versionв Терминале. Если Python не установлен или его версия ниже 3.6, установите его командой, подходящей для вашего дистрибутива:sudo apt update && sudo apt install python3sudo dnf install python3sudo pacman -S python -
Скачайте скрипт быстрой смены инструмента (
fast_tool_swaps.py) и фикс первого переключения инструмента (fix_toolchange.py) из репозитория конфигурации VOSTOK; - Положите их в любую удобную вам папку в вашей домашней директории. К примеру
~/postprocessing/. Песочница Flatpak имеет доступ только к~/,/media/,/mnt/и/run/media/, поэтому в другие места класть скрипты нельзя; -
-
Скопируйте в это поле следующий текст:
flatpak-spawn --host python3 ~/postprocessing/fast_tool_swaps.py --tool_shutoff_time=90 --long_preheat_time=40 --long_preheat_purge_length=10 --inactive_tool_temp_reduction=0.75 --min_preheat_time=10 --min_purge_length=3 --t0=xc:extruder:+ --t1=wc:extruder1:- --tool_wipe_z_hop=0.4 --tool_wipe_dist=25 --tool_wipe_speed=500 --tool_wipe_accel=20000 --tool_swap_speed=1000 --tool_swap_accel=10000 --tool_fast_change_gcode="T{next_tool} X{xpos} Y{ypos}" --extra_gcode_axis=W --confirm_on_error; flatpak-spawn --host python3 ~/postprocessing/fix_toolchange.py --long_deretract_length=2;Команда
flatpak-spawn --hostзапускает указанную после неё программу из хост-системы, в обход песочницы Flatpak. Поэтому в обеих строках используется именноflatpak-spawn --host python3, а не/usr/bin/env python3;
В профиле печати перейдите во вкладку
Прочееи найдите полеСкрипты постобработкии заполните его:- Укажите корректный путь к папке со скриптами, если вы положили их в другое место, отличное от
~/postprocessing/; - Для
fix_toolchange.pyукажите значениеlong_deretract_lengthравным значению параметраДлинаизПрофиль принтера->Экструдер 1->Откат при смене материала. Если указать значение этого параметра неправильно, или переопределить в профиле материала, то на каждой печати при первой смене инструмента может быть пере\недоэкструзия. При последующих её не будет;
-
-
Сохраните профиль печати.
Эта часть инструкции создана нейросетью. Относитесь к ней с осторожностью. Если найдёте проблемы, то сообщите @dmitry_sorkin. Если воспользуетесь этой инструкцией и всё пройдёт успешно, то тоже сообщите - уберём это предупреждение
-
Убедитесь, что в системе установлен Python 3.6 или новее. Проверить это можно командой
python3 --versionв Терминале. Если Python не установлен или его версия ниже 3.6, установите его командой, подходящей для вашего дистрибутива:sudo apt update && sudo apt install python3sudo dnf install python3sudo pacman -S python -
Скачайте скрипт быстрой смены инструмента (
fast_tool_swaps.py) и фикс первого переключения инструмента (fix_toolchange.py) из репозитория конфигурации VOSTOK; - Положите их в любую удобную вам папку на компьютере. Лучше всего подобрать папку так, чтобы вы потом случайно не удалили эти файлы, а также чтобы путь к ним был коротким. К примеру
~/postprocessing/; -
-
Скопируйте в это поле следующий текст:
/usr/bin/env python3 ~/postprocessing/fast_tool_swaps.py --tool_shutoff_time=90 --long_preheat_time=40 --long_preheat_purge_length=10 --inactive_tool_temp_reduction=0.75 --min_preheat_time=10 --min_purge_length=3 --t0=xc:extruder:+ --t1=wc:extruder1:- --tool_wipe_z_hop=0.4 --tool_wipe_dist=25 --tool_wipe_speed=500 --tool_wipe_accel=20000 --tool_swap_speed=1000 --tool_swap_accel=10000 --tool_fast_change_gcode="T{next_tool} X{xpos} Y{ypos}" --extra_gcode_axis=W --confirm_on_error; /usr/bin/env python3 ~/postprocessing/fix_toolchange.py --long_deretract_length=2;
В профиле печати перейдите во вкладку
Прочееи найдите полеСкрипты постобработкии заполните его:- Укажите корректный путь к папке со скриптами, если вы положили их в другое место, отличное от
~/postprocessing/; - Для
fix_toolchange.pyукажите значениеlong_deretract_lengthравным значению параметраДлинаизПрофиль принтера->Экструдер 1->Откат при смене материала. Если указать значение этого параметра неправильно, или переопределить в профиле материала, то на каждой печати при первой смене инструмента может быть пере\недоэкструзия. При последующих её не будет;
-
-
Сохраните профиль печати.
Настройки скрипта
Все параметры передаются скрипту через аргументы командной строки. Числовые параметры, влияющие на конкретный инструмент, могут задаваться либо одним числом (применяется ко всем инструментам), либо списком чисел через запятую — по одному на каждый инструмент.
| Параметр | Тип / единицы | Базовое значение | Описание |
|---|---|---|---|
-o, --output |
строка (путь) | — | Имя выходного файла. Без флага скрипт правит входной файл на месте |
-n, --num_tools |
целое | — | Количество инструментов |
--inactive_tool_temp_reduction |
дробь 0..1 |
0.75 |
Доля снижения температуры неактивной печатающей головы. Одно число или список через запятую по числу инструментов. 1 — без снижения, 0.5 - снижение вдвое |
-t, --min_preheat_time |
секунды | 10 |
Минимальное время, необходимое на прогрев печатающей головы перед активацией. Одно число или список через запятую |
-l, --min_purge_length |
миллиметры | 3 |
Минимальное количество филамента для прочистки хотэнда перед активацией. Одно число или список через запятую |
--tool_shutoff_time |
секунды | 90 |
Время простоя инструмента, после которого он выключается. 0 — не выполнять авто-выключение. Одно число или список через запятую |
--long_preheat_time |
секунды | 40 |
Минимальное время преднагрева хотэнда после длительного простоя. Одно число или список через запятую |
--long_preheat_purge_length |
миллиметры | 10 |
Минимальное количество филамента на прочистку после длительного простоя. Одно число или список через запятую |
--t0 |
строка | xc:extruder:+ |
Настройки инструмента T0 в формате каретка:экструдер:[+\|-]. Знак задаёт направление движения протирки вдоль оси каретки |
--t1 |
строка | wc:extruder1:- |
Настройки инструмента T1 в том же формате |
--t2 ... --t9 |
строка | — | Настройки инструментов T2..T9 в том же формате. Должны быть указаны, если значение --num_tools превышает соответствующий номер |
--extra_gcode_axis |
строка | W |
Ось второй печатающей головы в G-коде |
--tool_wipe_dist |
миллиметры | 25 |
Длина движений во время чистки хотэнда. Одно число или список через запятую |
--tool_wipe_speed |
мм/с | 500 |
Скорость движений при чистке хотэнда. Одно число или список через запятую |
--tool_wipe_accel |
мм/с² | 20000 |
Ускорение движений при чистке хотэнда. Одно число или список через запятую |
--tool_fast_change_gcode |
строка (шаблон) | "T{next_tool} X{xpos} Y{ypos}" |
Шаблон G-code, который вызывается для смены инструмента. Доступны подстановки {next_tool}, {xpos}, {ypos}. {next_tool} обязателен |
--tool_swap_speed |
мм/с | 1000 |
Скорость перемещения инструмента к его целевой позиции (используется, только если в шаблоне выше есть {xpos} / {ypos}). Одно число или список через запятую |
--tool_swap_accel |
мм/с² | 10000 |
Ускорение при перемещении инструмента к его целевой позиции (используется, только если в шаблоне выше есть {xpos} / {ypos}). Одно число или список через запятую |
--tool_wipe_z_hop |
миллиметры | 0.4 |
Подъём сопла по Z во время протирки. Без этого параметра Z-hop не выполняется. Одно число или список через запятую |
--confirm_on_error |
флаг | включён | Если включен, то при ошибке скрипт выводит сообщение об ошибке. Если выключен, то при ошибке скрипт просто не сделает ничего |
Настройка профилей для СБСИ
Ниже перечислены настройки слайсера, которые необходимо выставить для корректной работы скрипта быстрой смены инструмента. Подробнее эти и другие настройки описаны в статье «Конфигурация слайсера».
При неправильных значениях некоторых параметров скрипт выдаст ошибку. При неправильных значениях других он может просто не включиться. Поэтому убедитесь, что все из перечисленных параметров выставлены верно
| Параметр | Требуемое значение | Комментарий |
|---|---|---|
Профиль принтера → Экструдер → Откат при смене слоя |
вкл | |
Профиль принтера → Экструдер → Очистка сопла при откате |
вкл | |
Профиль принтера → Экструдер → Длина движения очистки |
\(2 \times d_{сопла}\) | Можно больше |
Профиль принтера → Экструдер → Откат при смене материала → длина |
2 | Если будете изменять, то надо будет скорректировать значение --long_retract_length при вызове fix_toolchange.py |
Профиль принтера → Многоцвет → Время смены инструмента |
0.7 с | Для корректного расчёта времени печати |
Профиль печати → Предотвращение течи материала |
выкл | Эта функция реализуется самим скриптом |
Профиль принтера → Вставка G-кода → G-код перед началом печати |
;fast_tool_swaps_start |
Скрипт быстрой смены инструмента начинает работать только после этой команды в стартовом G-коде. Всё до неё скриптом не обрабатывается. Если этой команды нет, то скрипт не будет обрабатывать ничего, то есть будет отключен |
Частые проблемы
No such file or directory
Проверьте правильность путей к файлам скриптов.
Linux/macOS: Permission denied
- Откройте терминал в папке со скриптами;
- Выполните команду
chmod +x fast_tool_swaps.py fix_toolchange.py; - Проверьте, что права установились, командой
ls -l fast_tool_swaps.py fix_toolchange.py— в начале строки должно быть-rwxr-xr-x.
Скрипт ничего не делает
Чаще всего это происходит из-за отсутствия команды ;fast_tool_swaps_start в стартовом G-коде. Убедитесь, что она есть, и нет никаких условий (if или тернарных операторов), которые могли бы скрыть её
No annotated WIPE found before the tool change
Чистка неактивной печатающей головы происходит во время того, как активная выполняет вытирание сопла (wipe). Если вытирание сопла выключено, то скрипт не знает куда добавлять прочистку неактивной печатающей головы и падает с ошибкой.
- Проверьте, что во всех
профиль принтера→Экструдер ...включены галочкиОткат при смене слояиОчистка сопла при откате; - Проверьте, что во всех используемых профилях материала в разделе
Замещение настроекне переопределено значение параметровОткат при смене слояиОчистка сопла при откате.
Версии СБСИ
Разработчиком оригинального СБСИ является Дмитрий Бутюгин. Оригинальный скрипт распространяется в его репозитории.
Версия, которая предоставлена в репозитории с конфигурацией VOSTOK, модифицирована. Оригинальный скрипт обрабатывает весь предоставляемый ему G-код целиком. Модифицированный скрипт, рекомендуемый к применению на VOSTOK'е, обрабатывает G-код только начиная с команды ;fast_tool_swaps_start. Это позволяет реализовывать более сложные стартовые скрипты без обходных путей, а также проще включать\отключать СБСИ на уровне слайсера.
