Редактирование G-кода для изменения порядка печати нескольких заданий печати по одному

КРАТКИЕ СВЕДЕНИЯ: Я использую Creality Ender 3 и Cura 4.8 slicer. Мне нужно напечатать несколько объектов "по одному" (Cura позволяет это, это нормально), и я должен указать порядок, в котором печатается каждая модель, но Cura не имеет этой возможности. Мой вопрос: как я могу изменить порядок напечатанных объектов, отредактировав G-код?

Деталь: Иногда важно или полезно указать порядок печати нескольких объектов в один-на-времени' пакетная печать при которой можно печатать некоторые объекты, которые выше, чем Х-Козловой оформления вместе с другими объектами, которые были короче, чем на козлах, потому что если вы можете контролировать порядок, тогда вы можете печатать небольшие объекты, а затем высотных объектах (за Козловой не мешать уже печатные мелкие предметы, а если высокий объекты печатаются впервые тогда Козловой будут врезаться в них). В частности, я говорю о двух или более объектах, напечатанных примерно на одном уровне Y на печатном столе (я знаю, что вы можете "уйти" с ним, если вы разделите их на Y, но я хочу напечатать несколько строк таких объектов). Без контроля над порядком печати это не может быть сделано, тем самым ограничивая производительность (количество моделей на пробег печати).

ЧТО Я УЖЕ СДЕЛАЛ, ЧТОБЫ РЕШИТЬ ЭТУ ПРОБЛЕМУ: я могу управлять порядком печати нескольких идентичных объектов в Cura (они печатаются в обратном порядке к их созданию как дубликаты исходной модели, и если есть проблемы, вы иногда можете управлять порядком, перемещая объекты вокруг), но это не работает для нескольких разных объектов. Я сделал несколько поисков в Google и нашел несколько разговоров, которые касаются этой проблемы, в том числе на официальной странице GitHub Cura slicer (см., Например, Это обсуждение Cura GitHub). Вывод, сделанный разработчиками Cura, заключается в том, что они понимают это ограничение, но это не проблема для принтеров Ultimaker, поэтому они не планируют делать настраиваемый пользователем заказ печати функцией в Cura, потому что для них было бы слишком много работы, чтобы вносить изменения и поддерживать их. Один человек упомянул скрипт python, позволяющий постредактировать G-код для изменения порядка печати, но я не смог найти никаких ссылок на него. Другой человек описал в Cura "обходной путь", связанный с группировкой и разгруппировкой моделей в определенной последовательности, но это не работает для меня (возможно, это работало только в более старых версиях Cura). Возможно, кто-то на этом форуме обладает знаниями G-кодирования и может пролить некоторый свет на то, как это можно сделать? [PS: Меня интересуют только решения для редактирования G-кода для этого вопроса или обходной путь Cura, который работает в v4.8 - Я не использую контроллеры Octoprint/Rasperry Pi].

Спасибо.

[EDIT] Благодаря вкладчикам в принятом ответе мне удалось сделать это с помощью "cut-and-paste" (с помощью небольшой программы на языке Си - вы могли бы сделать это вручную, но это утомительно и есть больше риска ошибиться, если у вас много моделей). Я использовал комментарии в G-коде Куры и несколько других подсказок G-кода, чтобы вычислить правильные точки сращивания.

Он работает при условии, что вы позаботитесь о том, чтобы новый код экструдера был либо изменен в соответствии с новыми позициями модели, либо используете режим "относительной экструзии" при сохранении исходного G-кода из Cura (я использовал последний метод). Кроме того, вы должны соединить G-код в нужных точках, чтобы обеспечить правильную передачу команд G-кода до начала модели и после завершения модели, и конечная модель в исходном G-коде нуждается в построении команды терминала G0, если она больше не является терминалом в новом порядке, чтобы она могла правильно расположить сопло для перехода к следующей модели в цепочке. Кроме того, вы должны убедиться, что M107 включен перед первым слоем каждой модели. Делать все это опасно - новый G-код может повредить ваш принтер, если вы что - то сделаете неправильно, - но он может работать (по крайней мере, для меня).

Я сделал несколько ручных проверок нового перестроенного G-кода, а также загрузил его в Cura и запустил на нем симулятор сопла Cura, чтобы убедиться, что он делает то, что я ожидал от него, прежде чем рискнуть запустить его в моем принтере, но после этого он напечатал НОРМАЛЬНО.

, 👍3

Обсуждение

Это наводит на мысль о полезном запросе функции для отправки команде разработчиков Cura, предполагая, что он еще не включен в 4.9..., @Zeiss Ikon

@ZeissIkon Разработчики Cura знают, что люди хотят эту функцию, но они не хотят этого делать. Это потенциально опасно, но затем возиться с настройками Cura (переопределение параметров по умолчанию для вашего принтера и т. Д.) Также опасно. Пока люди знают это и принимают риск, я думаю, все в порядке. Если есть достаточный спрос, то, возможно, если я смогу поместить свой код в форму, которую другие могут легко использовать, я опубликую его на GitHub - с большим предупреждением о здоровье!, @WildCat

Кажется очевидным, что вы хотели бы/должны были бы сначала сделать более короткие части, даже если они разбросаны по углам стола. С другой стороны, если они достаточно разбросаны, это не имеет значения, пока ни один из них не находится достаточно высоко, чтобы мешать порталу, и они находятся достаточно далеко друг от друга, чтобы не задеть корпуса горячих вентиляторов и т. Д., @Zeiss Ikon


1 ответ


Лучший ответ:

3

Вы можете открыть файл G-кода в любом текстовом редакторе и скопировать-вставить соответствующие разделы G-кода, чтобы изменить их порядок. Будет довольно очевидно, где заканчивается один объект и начинается следующий, потому что печатающая головка будет двигаться обратно вниз к Z=0; вы можете сделать простой поиск, чтобы найти команды, которые движутся к Z=0 (в моей версии Cura она вставляет комментарий ;LAYER:0 в начале каждого объекта).

Чтобы убедиться, что экструдер начинается в правильном положении, посмотрите назад на предыдущую печать (в исходном порядке), чтобы увидеть, где экструдер закончился, а затем вставьте (в начале новой печати) G92 Exx.xx, где xx.xx-предыдущее положение экструдера. Если оглядываться на предыдущую печать слишком утомительно, вы также можете просто использовать самое первое положение экструдера в самой печати и использовать его. Он просто пропустит печать самого первого раздела поля/юбки, что не имеет большого значения.


,

К сожалению, это не так просто. Положение экструдера меняется от модели к модели в исходном порядке печати - и оно является кумулятивным. Итак, первая модель E начинается с 0. Вторая модель E начинается (скажем) с 23,214 мм, потому что именно столько нити было выдавливано до сих пор для вашей первой модели. Если вы просто поменяете их местами с помощью вырезания и вставки, то принтер выбросит 23,214 мм филамента перед началом вашей первой печати, а затем, когда он доберется до второй, он втянется обратно до E=0, полностью всасывая воздух, и ваша вторая печать будет сделана из разреженного воздуха., @WildCat

@WildCat Хорошая мысль. Вы можете просто использовать G92, чтобы исправить это., @Tom van der Zanden

@WildCat Команда G92 действительно устраняет эту проблему. Вам не нужно (программно) изменять все команды E position. Использование G92 сообщает принтеру, что он должен "виртуально" перемещать экструдер, то есть не физически перемещать его, а только обновлять память принтера, чтобы установить экструдер в это положение. Например (если начальная позиция равна нулю) выдача "G92 E10", за которой следует "G1 E20", приводит к вытеснению 10 мм филамента, как если бы мы только что выпустили "G1 E10"., @Tom van der Zanden

ОК. Мои извинения - я не до конца понял значение G92. Это значительно упростило бы перенастройку кода с помощью простого изменения порядка вырезания и вставки. Все равно было бы полезно иметь программу для этого для многих отпечатков на пластине, но это должно быть намного проще написать. Я немного поэкспериментирую, чтобы убедиться, что это работает на практике, прежде чем принимать ваш ответ (хотя, если бы кто-нибудь мог указать на бесплатный инструмент, который уже делает это, это было бы еще лучше)., @WildCat

Переключение слайсера в режим относительной экструзии может быть более простым вариантом., @R.. GitHub STOP HELPING ICE

@R.. GitHub ПЕРЕСТАНЬ ПОМОГАТЬ АЙСУ, Спасибо.Это немного облегчает (меньше работы) алгоритмическое распознавание втягивания, которое происходит перед запуском каждой новой модели, но мне интересно, почему Cura предупреждает о "выдавливании немного меньшего количества пластика" в относительном режиме, поскольку различия E кажутся мне одинаковыми при осмотре (между абсолютным и относительным режимами). Они также предупреждают, что не все принтеры совместимы, но это не проблема, так как всегда можно вернуться в абсолютный режим, используя команду G92 в отредактированном G-коде и удалив относительный режим после перестановки моделей., @WildCat

@WildCat: Это вопрос совокупной неточности с плавающей запятой, позволяющей встроенному ПО принтера суммировать десятичные значения, напечатанные в g-коде, каждое из которых индивидуально неточно, по сравнению с получением нового значения позиции из среза, которое округляется до ближайшего представимого значения при каждом перемещении. Это реальная математическая проблема, но порядок величины ошибки, вероятно, намного меньше, чем ошибка при калибровке ваших электронных шагов или диаметра филамента, поэтому на практике я думаю, что это не проблема., @R.. GitHub STOP HELPING ICE

Точно. Для абсолютных значений E найдите значение E для последнего перемещения объекта 1 для печати и отредактируйте его в G92 в начале объекта 2 и т. Д. Затем, когда вы измените порядок, значения будут начинаться с правильного номера для каждого объекта., @Davo