Математика в Cura запускает выражения G-кода?

Горячая часть принтера нагревается намного быстрее, чем стол. Тем не менее, это требует своего сладкого времени, и последовательность запуска Cura по умолчанию: нагреть стол, дождаться, пока стол достигнет заданной температуры, нагреть горячий конец, дождаться достижения температуры горячего конца, продолжить - занимает значительно больше времени, чем следовало бы.

M140 S{material_bed_temperature_layer_0} ;Начать подогрев слоя
M190 S{material_bed_temperature_layer_0} ;Подождите, пока стол достигнет температуры
M104 S{material_print_temperature_layer_0} ;Начать нагрев экструдера
M109 S{material_print_temperature_layer_0} ;Подождите, пока экструдер достигнет температуры

Конечно, я мог бы начать нагревать оба до заданной температуры одновременно, а затем подождать обоих, но тогда я буду запекать неподвижную нить в сопле намного дольше, чем необходимо. Что я хотел бы сделать, так это начать нагревать сопло, когда стол примерно на 20 ° C меньше своей целевой температуры, что заставляет их достигать своих целевых температур почти одновременно. Что-то вроде:

M140 S{material_bed_temperature_layer_0} ;Начать подогрев слоя
M190 S{material_bed_temperature_layer_0 - 20} ;Подождите, пока стол окажется на 20 градусов перед целью
M104 S{material_print_temperature_layer_0} ;Начать нагрев экструдера
M190 S{material_bed_temperature_layer_0} ;Подождите, пока стол достигнет температуры
M109 S{material_print_temperature_layer_0} ;Подождите, пока экструдер достигнет температуры

За исключением того, что S{material_bed_temperature_layer_0 - 20} не распознается как допустимая замена.

Как добиться желаемого эффекта?

, 👍3


3 ответа


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

3

Вы не можете сделать это полностью в начальных шаблонах gcode, но вы можете сделать это, сначала добавив пользовательскую настройку в файл json для вашего профиля принтера или базового fdmprinter.def .json, из которого происходит большинство профилей. Это будет выглядеть примерно так (скопировано из моей копии fdmprinter.def.json определения material_bed_temperature_layer_0):

            "material_bed_temperature_preheat":
            {
                "label": "Build Plate Preheat Temperature",
                "description": "The temperature used for preheating the heated build plate.",
                "unit": "°C",
                "type": "float",
                "resolve": "max(extruderValues('material_bed_temperature_layer_0'))",
                "default_value": 40,
                "value": "resolveOrValue('material_bed_temperature_layer_0 - 20')",
                "minimum_value": "-273.15",
                "minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))",
                "maximum_value_warning": "130",
                "maximum_value": "200",
                "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
                "settable_per_mesh": false,
                "settable_per_extruder": false,
                "settable_per_meshgroup": false
            },

В качестве альтернативы вы можете установить для параметра enabled значение false, чтобы он не отображался в настройках, избегая красивого описания и прочего, и назвать его как-то вроде material_bed_temperature_layer_0_minus_20.

В любом случае вы можете использовать новую настройку в начальном gcode.


,

Потрясающий! Я нашел ветку форума об использовании этих выражений, за исключением того, что она была полностью лишена контекста, без информации о том, какой файл, куда поместить код, каких-то пугающих ограничений на default_value, и поэтому я надеялся, что есть способ. А есть, спасибо!, @SF.


1

Cura не разрешает математические операции в скриптах G-кода, если вы хотите сделать это, вам следует использовать Slic3r или PrusaSlicer.

См., например, этот вопрос или этот вопрос задан в сообществе UltiMaker.

,

Это не совсем так. Вы можете добавить новые виртуальные настройки в файл настроек json, которые указаны как формулы с точки зрения других настроек. Я уточню в ответе., @R.. GitHub STOP HELPING ICE

@R..GitHubSTOPHELPINGICE Пожалуйста, это долгожданная отсутствующая функция в Cura. Хотя «виртуальные настройки в файле настроек json» звучат не слишком удобно, как при использовании арифметики в вашем стартовом G-коде., @0scar


2

Ни один из приведенных выше примеров не работает, поскольку анализатор настроек более сложен.

Таким образом, вы можете добиться предварительного нагрева, добавив следующую модификацию в файл fdmprinter.def.json:

"material_bed_temperature_pre":
    {
        "label": "Build Plate Preheat Temperature",
        "description": "The temperature used for preheating the heated build plate.",
        "unit": "°C",
        "type": "float",
        "resolve": "material_bed_temperature_pre",
        "default_value": "material_bed_temperature_layer_0 - 8",
        "value": "material_bed_temperature_layer_0 - 8",
        "minimum_value": "0",
        "minimum_value_warning": "max(build_volume_temperature, max(extruderValues('material_bed_temperature')))",
        "maximum_value_warning": "130",
        "maximum_value": "200",
        "enabled": "false",
        "settable_per_mesh": false,
        "settable_per_extruder": false,
        "settable_per_meshgroup": false
    },

Возможная причина, по которой предыдущие предложения не сработали, заключается в том, что при завершении кода включение будет рассматриваться как своего рода конфликт/по умолчанию, поскольку оно не указано в настройках («включено = ложь»). Когда возникает конфликт, он пытается разрешить его на основе принципа «разрешения». поле, соответствующее настройке Layer_0 в неверном примере.

Таким образом, значение может отличаться от указанного в поле "value" категория в зависимости от обстоятельств. С этим добавлением у значения нет другого выбора, кроме как вычислить температуру предварительного нагрева на основе температуры слоя_0.

Для температуры сопла я использую фиксированное значение, которое еще не вызывает просачивания большинства материалов во время небольшого несоответствия периода синхронизации.

Настройка в генераторе G-кода следующая:

M190 S{material_bed_temperature_pre} ;Initial bed temperature, wait
M140 S{material_bed_temperature} ; start heating the bed
M104 S180 ;Hotend initial target, no wait
G28 ;Home
G1 Z15.0 F1200 ;Move the platform down 15mm
M104 S{material_print_temperature} ;Hotend actual target, no wait
M190 S{material_bed_temperature} ;Target bed temperature, wait
M109 S{material_print_temperature} T0 ; wait for hotend

Поэтому сначала мы ждем, пока стол нагреется до температуры предварительного нагрева, что занимает некоторое время. Затем температура стола устанавливается на целевое значение, а сопло должно предварительно нагреваться, но в фоновом режиме.

При этом мы переместились в исходное положение.

Наконец, конечная цель последовательности для сопла — не ждать, а затем оставаться до тех пор, пока температура на столе не станет окончательной. Чтобы убедиться, что сопло достигло конечной температуры (если она не была достигнута во время нагрева стола), мы ждем, пока оно перейдет к фактической печати.

,