Металл2024 Реклама
Метобр2024 Реклама

M73, M117 и другие непонятные цифры. Учимся показывать проценты правильно

LinFor
Идет загрузка
Загрузка
05.10.2019
6936
11
3D-печать

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

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

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

4

У многих на принтерах есть дисплей. А некоторые из них наверняка пользуются слайсером Cura. Именно для них этот пост.

M73, M117 и другие непонятные цифры. Учимся показывать проценты правильно

Бывало ставишь на ночь печать, а к утру ещё не готово. И вроде бы пора уже уходить, но оставлять нагревательные приборы в жилом помещении без присмотра - фуфуфу (да, у меня есть и thermal runaway, и выключение по завершении, и узо и управляемый sonoff - принципиально это всё дела не меняет), а сколько ещё ждать - непонятно. И на вопрос "когда уже" могут ответить только циферки на дисплее - прошедшее время и процент выполненного задания.

Но проблема в том, что процент этот - ненастоящий. Он более-менее соответствует реальности, когда модель по высоте однородная либо одинаково квадратная, либо одинаково круглая. Почему? Да потому что для Марлина (и, видимо, большинства других прошивок, хотя я и допускаю, что не всех) прогресс печати - это отношение уже выполненных команд из файла к общему количеству команд (точнее даже байт, но не суть). Что же в этом плохого? Да в общем-то ничего, но есть нюансы.

Так уж сложилось, что окружности наши принтеры печатать не умеют. А если принтеры и умеют, то слайсеры об этом знать ничего не хотят. Нет, отчего же, совсем не бред. Да, окружность напечатать можно. Но для слайсера и принтера это совсем даже не окружность, а много-много коротких отрезков. Стоп, но отпечатанная модель же ровная, гладкая, никаких граней! Да, всё так. У экструдера есть инерция, да и у пластика есть инерция, в итоге всё само волшебным образом сглаживается, в общем, никак оно не влияет на конечный результат.

А на что влияет? А вот на тот злополучный процент влияет. Потому что для печати квадрата нужно 4 команды, а для печати окружности - много. Прям вот очень много, можно было бы сказать - чем больше тем лучше, но есть разумные пределы. Но команд 100 на окружность - запросто. Против 4 на квадрат. По времени, как ни странно, круг может быть даже быстрее - резких поворотов на траектории нет, голову тормозить не надо - разогнался, да и лети себе по дуге, как в детстве на карусели.

Не убедил? Ну давайте маленький мысленный эксперимент. Напечатаем круг, а потом рядом квадрат схожих размеров. Т.е. 100 условных команд, а потом ещё 4. Напечатали круг, насколько мы выполнили задание? На ~50%? А вот и нет, уже на все 96%! Нет, не бред: 100/(100+4) = ~96%

Вот и я не понимаю, какого чёрта в 2019 году мы умеем показывать видео на лету с другого конца земного шара, а правильно посчитать 50% на экранчике принтера - не можем. Или можем? Если подумать, то очень даже можем. Но как всегда, есть нюансы - считать их на самом принтере уныло и долго, мощности не те.

Зато g-code формируется на мощном компьютере, а слайсер штука весьма умная. Cura например, прогнозы по времени печати строит не просто так - он пытается учитывать физические ограничения, которые указаны в профиле принтера - ускорения и джерки, таким образом выстраивая физическую модель движения головки. Если профиль принтера заполнен правильно - расчёт получается довольно точным - ведь можно указать даже скорость прогрева хотенда и стола - и это будет учитываться! А раз так, почему бы не взять это расчётное время, и не показывать процент выполнения исходя из предполагаемых затрат времени, а не каких-то там квадратурно-круглых команд, которые непонятно вообще зачем придумали, только голову забивать.

Собственно, это я и сделал, держите. Это простенький скриптик для Cura PostProcessingPlugin, который берёт рассчитанную курой длительность печати слоя и вставляет в нужные места команды M73 и M117, которые управляют отображением на экране принтера. Для длинных слоёв и низких моделей предположения о временных затратах внутри слоя делаются исходя из длины экструдированного пластика на конкретный момент - не очень корректно, но более-менее показательно.

Но и тут, как всегда есть нюансы.

1. Инструкцию по установке детально расписывать не буду - если уж печать освоили, думаю и тут справитесь. Кратко - нужна кура, в куре PostProcessingPlugin, скрипт положить в папку с профилем куры в папочку scripts (...AppData\Roaming\cura\4.3\scripts). После этого рестартануть куру, в меню найти PostProcessing - Modify G-Code, там уж добавить EnrichPrintProgress.

2. Скрипт некорректно обрабатывает режим абсолютного E. Ничего плохо при этом не происходит, просто дополнительные предсказания внутри слоя сильно неточные. Поправлю как-нибудь.

3. M117 - это команда позволяет вывести произвольный текст на нижней (на обычном 12864 экране в марлине) строчке дисплея. Там может быть что угодно написано, но марлин почему-то не любит двоеточия, поэтому время отображается в виде 00-00. Вся информация которая там отображается - прогнозная, время не реальное, а прогнозное.

4. M73 - эта замечательная команда позволяет указать процент на штатном месте экрана (штатная циферка и прогресс-барчик) и всё бы было прекрасно, но и сюда забрался злополучный нюанс. Дело в том, что марлин игнорирует все команды M73 при печати с карточки и принимает их только при печати по кабелю с компьютера. Зачем они так сделали не очень ясно, но оно ни на что, кроме отображения на экране не влияет и вот мой пулл-реквест в марлин, чтобы это поведение исправить. За него можно даже проголосовать (хотя это врядли что-то существенно изменит), а пока текущее поведение сохраняется на штатной циферке и в прогресс-баре на дисплее будет отображаться прогресс, подсчитанный только марлином.

О, а у вас Slic3r? Прекрасно, всё уже придумано за вас и он сам умеет без всяких скриптов выдавать M73 в g-code. Вот только вы его положите на карточку, засунете в принтер, а марлин все эти M73 так же радостно проигнорирует. Поэтому вы тоже можете полайкать пулл-реквест.

У вас клиппер, октопринт, марлин прошлый век, дисплеи не нужны, а с карточками носиться неудобно? Прекрасно, я всё так же рад за вас и вашу тягу к прогрессу, вот только мне удобнее оказались карточки и дисплей. И да, я ничего никому не навязываю!

PS: А ведь постойте-ка, ведь если марлин будет знать весьма точный прогресс выполнения задания, да ещё и прошедшее время с момента старта задания он итак знает - это что же, можно точный прогресс оставшегося времени до завершения печати на экране рисовать? Да, вполне можно. Но это уже совсем другая история...

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

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

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

4
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама