Пауза при печати

metlion
Идет загрузка
Загрузка
27.09.2021
1034
2
Личные дневники

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

3

Понадобилось тут недавно при печати делать паузу. В 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, но оказалось, что в этом месте данные константы не доступны. :(

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

3
Комментарии к статье