<p>I notice that if I print from Cura without preheating the printer, it will first raise the bed temperature and then raise the extruder temperature. The G-code it generates is:</p>

<pre><code>M140 S55     ; set bed temperature to 55 C
M105         ; report temperatures
M190 S55     ; wait for bed temperature to reach 55 C
M104 S210    ; set hot end temperature to 210 C
M105         ; report temperatures
M109 S210    ; wait for hot end temperature to reach 210 C
</code></pre>

<p>The "Preheat" feature of Cura presumably send the "set temperature" commands without the corresponding "wait" command.</p>

<p>Wouldn't it be more efficient to do something like this:</p>

<pre><code>M104 S210    ; set hot end temperature to 210 C
M140 S55     ; set bed temperature to 55 C
M105         ; report temperatures
M109 S210    ; wait for hot end temperature to reach 210 C
M105         ; report temperatures
M190 S55     ; wait for bed temperature to reach 55 C
</code></pre>

<p>Then the bed and extruder heat up simultaneously, and we wait for the higher temperature one <em>first</em> assuming that the other will reach its target temperature in the meanwhile.</p>

<p>If this is sound, is there a way to set this in Cura, or would I need to submit a patch?</p>

[{'answer_id': 12190, 'author': 'R.. GitHub STOP HELPING ICE', 'author_id': 11157, 'author_profile': 'https://3dprinting.stackexchange.com/users/11157', 'pm_score': 2, 'selected': False, 'text': '<p>I have an <a href="https://github.com/Ultimaker/CuraEngine/issues/1010" rel="nofollow noreferrer">open bug report/feature request</a> for this. Apparently Cura doesn\'t do it because some of Ultimaker\'s printers have underpowered power supplies that will shut off if you try to do both at the same time. I\'ve been carrying a patch (note this is against CuraEngine not the Cura GUI) that fixes this:</p>\n\n<pre><code>diff --git a/src/FffGcodeWriter.cpp b/src/FffGcodeWriter.cpp\nindex de3c771c..ced22017 100644\n--- a/src/FffGcodeWriter.cpp\n+++ b/src/FffGcodeWriter.cpp\n@@ -500,7 +500,7 @@ void FffGcodeWriter::processInitialLayerTemperature(const SliceDataStorage&amp; stor\n                 const Temperature bed_temp = scene.current_mesh_group-&gt;settings.get&lt;Temperature&gt;("material_bed_temperature_layer_0");\n                 if (bed_temp != 0)\n                 {\n-                    gcode.writeBedTemperatureCommand(bed_temp, scene.current_mesh_group-&gt;settings.get&lt;bool&gt;("material_bed_temp_wait"));\n+                    gcode.writeBedTemperatureCommand(bed_temp, false);\n                 }\n             }\n         }\n@@ -547,6 +547,18 @@ void FffGcodeWriter::processInitialLayerTemperature(const SliceDataStorage&amp; stor\n                 }\n             }\n         }\n+\n+        if (scene.current_mesh_group-&gt;settings.get&lt;bool&gt;("material_bed_temp_prepend"))\n+        {\n+            if (scene.current_mesh_group-&gt;settings.get&lt;bool&gt;("machine_heated_bed"))\n+            {\n+                const Temperature bed_temp = scene.current_mesh_group-&gt;settings.get&lt;Temperature&gt;("material_bed_temperature_layer_0");\n+                if (bed_temp != 0)\n+                {\n+                    gcode.writeBedTemperatureCommand(bed_temp, scene.current_mesh_group-&gt;settings.get&lt;bool&gt;("material_bed_temp_wait"));\n+                }\n+            }\n+        }\n     }\n }\n</code></pre>\n'}, {'answer_id': 12193, 'author': '0scar', 'author_id': 5740, 'author_profile': 'https://3dprinting.stackexchange.com/users/5740', 'pm_score': 4, 'selected': True, 'text': '<p>This can be achieved with start G-code adaptations, this requires no software changes. Cura, and most slicers, have the ability to use placeholders (basically variables or maybe better: constants). These placeholders are substituted with the correct value upon slicing.</p>\n<p>To sequentially heat the bed and hotend you would need to add the following into your start G-code:</p>\n<pre>\nM117 Heating bed 1st...\nM190 S{material_bed_temperature_layer_0}\nM117 Heating core 2nd...\nM109 S{material_print_temperature_layer_0}\n</pre>\n<p>For simultaneous heating you need to add:</p>\n<pre>\nM140 S{material_bed_temperature_layer_0}     ; set bed temperature to e.g. 55 °C and continue\nM104 S{material_print_temperature_layer_0}   ; set hot end temperature to e.g. 210 °C and continue\nM190 S{material_bed_temperature_layer_0}     ; wait for bed temperature to reach e.g. 55 °C\nM109 S{material_print_temperature_layer_0}   ; wait for hot end temperature to reach e.g. 210 °C\n</pre>\n<p>Note that Cura is very limited in using placeholders. E.g. Slic3r allows for arithmetic using the placeholders. The following example shows heating the bed first to the bed first layer temperature minus 10 degrees Celsius; then the hotend starts heating and heatbed starts further heating up to the final temperature. For my machine this results in the bed and hotend being at final temperature at the same time; so no time is wasted and printing can start.</p>\n<pre>\nM117 Heating bed...\nM190 S{[first_layer_bed_temperature]-10}\nM140 S[first_layer_bed_temperature]\nM117 Heating core...\nM109 S[first_layer_temperature_0]\nM190 S[first_layer_bed_temperature]\n</pre>\n'}, {'answer_id': 16225, 'author': 'Luis Fernando Nascimento', 'author_id': 28129, 'author_profile': 'https://3dprinting.stackexchange.com/users/28129', 'pm_score': 0, 'selected': False, 'text': "<p>It is a little annoying, what <code>Cura</code> is doing for me is forcing to wait. On start G-code I have:</p>\n<pre><code>; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\n;*** Start Dual Nozzle/Bed Preheating ***\nM140 S60 ; start preheating the bed\nM104 S200 T0 ; start preheating hotend\nG28 ; home\nM190 S60 ; heat to Cura Bed setting \nM109 S200\n;*** End Preheating ***M420 S1; Load Mesh Bed Level\n</code></pre>\n<p>But on the generated G-code I have:</p>\n<pre><code>;Generated with Cura_SteamEngine 4.9.0\nM140 S60\nM105\nM190 S60\nM104 S200\nM105\nM109 S200\nM82 ;absolute extrusion mode\n; Ender 3 Custom Start G-code\nG92 E0 ; Reset Extruder\n;*** Start Dual Nozzle/Bed Preheating ***\nM140 S60 ; start preheating the bed\nM104 S200 T0 ; start preheating hotend\nG28 ; home\nM190 S60 ; heat to Cura Bed setting \nM109 S200\n</code></pre>\n<p>In the end I'm changing it directly on G-code what is a pain</p>\n"}]
['https://3dprinting.stackexchange.com/questions/12188', 'https://3dprinting.stackexchange.com', 'https://3dprinting.stackexchange.com/users/16270/']