Пауза при печати
Понадобилось тут недавно при печати делать паузу. В SuperSlicer есть такая опция, вставить паузу. Так вот она почему-то перестала у меня работать. То есть когда-то с пол-года назад точно работала. Даже нашёл файлы, с которых печатал с этой паузой. Выглядит всё так же, но не работает. Версию Марлина давно не менял, прошивку менял, но вроде ничего потенциально связанного с паузой не трогал.Так вот, давай смотреть – а SS в качестве паузы вставляет команду M601. В документации такой команды нет. Где-то попалась инфа, что это внутренняя функция, улучшенная версия M0. Но непонятно чем, и непонятно почему не документирована. Но главное, что теперь эта команда проскакивает, как будто её и нет.
Далее полез в доку по G-code. Сначала нашёл команды M125 – пауза с парковкой головы и M600 –пауза для смены филамента.Первая просто паркует голову и возвращает назад, когда нажмёшь кнопку, а M600 ещё имеет параметры для вытягивания – втягивания филамента. Обе команды умеют парковать голову, если в прошивке включен параметр PARK_HEAD_ON_PAUSE. Но толькоПопробовал их, получилось следующее
- M125 без параметров – не работает. Паркует голову в соответствии с настройками в прошивке, тут же возвращает её назад по XY и принтер зависает, только отключение питания работает.
- M125 с параметрами отрабатывает правильно. Если позиция парковки в прошивке настроена правильно, то минимально надо указать параметр P1 (M125 P1).
- M600 имеет кучу параметров в прошивке и если вы их не настраивали осознанно или даже не знаете их значения, то без параметров использовать не рекомендуется. Как минимум, надо проверять перед реальным использованием. Параметры M600 описаны в документации, если их заполнить, то команда отрабатывает корректно.
Обе команды M125 и M600 имеют один и тот же недостаток, на мой взгляд. По окончании паузы сначала затягивают пруток, потом ожидают нагрева. Потом спрашивают нужно ли ещё загрузить филамент, и только после выбора «Продолжить», возвращают голову в точку печати и продолжают печать. Основная беда, что в таком варианте, пластик уже попал в сопло и пока всё это делаешь и голова перемещается через весь стол, натекает сопля.
После этого посмотрел, как пауза реализована в Cura. Там в плагине Pause AtHeight для этого используется команда M0 – просто пауза без различных дополнительных действий и собственные настройки для этих действий – зона парковки, длина ретракта, температура сопла на паузе. Всё круто, единственное Но – это то, что плагин использует внутренние переменные и в G-code вставляет уже конкретные значения. Выделил их в примере жирным.
M83 ; switch to relative E values for any needed retraction
G1 F1500 E-5
G1 F300 Z3 ; move up a millimeter to get out of the way
G1 F9000 X190 Y190
G1 F300 Z15 ; Тут известно на какой высоте пауза, потому поднимает на минимальную разрешенную высоту
M104 S0 ; standby temperature
M117 It's a Pause
M0 ; Do the actual pause
M109 S250 ; тут он знает температуру печати и возвращает к ней
G1 F1500 E5
G1 F199.998 E5
G1 F1500 E-5
G1 F300 Z3
G1 F9000 X125.7 Y99.4 ; Возвращает в известную позицию по XY
G1 F300 Z2 ; Возвращает на нужную высоту
G1 F1500 E5
G1 F1500 ; restore extrusion feedrate
M82 ; switch back to absolute E values
G92 E123.08903; Возвращает положение экструдера, в абсолютных координатах
Подобное повторить без специального API c доступом к текущим значениям не получится, но попробовал сделать что-то подобное. Нашёл в G-code возможность сохранить и восстановить текущую позицию головы с помощью команд G60/G61. Которые, в свою очередь, требуют, чтобы в прошивке была включен параметр SAVED_POSITIONS. Её обычно отключают для экономии памяти. В итоге получился вот такой скриптик для паузы:
G1 F2400 E-10 ;ретракт 10mm [retract_speed] – вывод пластика из зоны плавления, чтобы не было соплей, относительное позиционирование экструдирования включено в настройках слайсера, и в паузе не нужно заморачиваться с абсолютными значениями
M300 P50 S440 ;Двойной сигнал
G4 P200
M300 P50 S440
G91 ;включить относительное позиционирование
G0 Z10 F240 ;поднять на 10mm относительно текущей точки (тут надо быть осторожней, если вдруг захочется эту паузу вставить в самом верху зоны печати)
G90 ;вернуть абсолютное позиционирование
G60 ; Сохранить текущую позицию
G0 F9000 X10 Y10 ;Перемещение в выбранную зону парковки по XY [travel_speed]
M0 Change filament and press button ;Собственно, пауза с текстом сообщения
G61 F9000 XY; восстановление позиции по XY
G91 ;use relative coordinates
G0 Z-10 F240 ;Возвращаем по Z, величина перемещения должна быть выставлена такой же как и для подъёма
G90 ;use absolute coordinates
M83 ; надо дополнительно включить относительное позиционирование для экструдера, хоть мы его и не выключали. Видимо G91/G90 переключают позиционирование и для экструдера
G1 F2400 E10 ;возвращаем пластик в зону печати, на те же 10mm [retract_speed]
Управление температурой и прочими параметрами можно добавить по вкусу.В квадратных скобках есть параметры из настроек, которые можно было бы использовать в SS, но оказалось, что в этом месте данные константы не доступны. :(
Еще больше интересных статей
Продолжение моделирования МАЗ-537, корпус дифференциала.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Мини обзор на однорукого бандита KP3Spro-V2
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Записки тридэголика. Эпизод первый.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
На айли, 3 день выставлены по....
Пины и ласточкин хвост тема. У...
Экран от BTT 5 люймов... Вообщ...
Или же будут ли они вообще, т....
Нужна помощь. Не получается по...
Может есть у кого модель адапт...
Всем привет, может кто знает п...