M73, M117 и другие непонятные цифры. Учимся показывать проценты правильно
У многих на принтерах есть дисплей. А некоторые из них наверняка пользуются слайсером Cura. Именно для них этот пост.
Бывало ставишь на ночь печать, а к утру ещё не готово. И вроде бы пора уже уходить, но оставлять нагревательные приборы в жилом помещении без присмотра - фуфуфу (да, у меня есть и 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: А ведь постойте-ка, ведь если марлин будет знать весьма точный прогресс выполнения задания, да ещё и прошедшее время с момента старта задания он итак знает - это что же, можно точный прогресс оставшегося времени до завершения печати на экране рисовать? Да, вполне можно. Но это уже совсем другая история...
Еще больше интересных статей
Как одной деталью я купил Bambu Lab X1 Carbon Combo
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Все...
Боль и страдание и при чем тут bambulab
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Халявный пластик 2 (печатаем пэт бутылками)
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Постараюсь написать про всё что удалось узнать в...
Комментарии и вопросы
Когда бамбук научится на скоро...
Как в пародии на известную рек...
А гадить - делать угодное, люб...
Посоветуйте хотенд с гладким т...
Здравствуйте, столкнулся с про...
Всем привет! Прошу, не кидайте...
Собственно и вопрос: Как в Ком...