slic3r / Slic3r

Open Source toolpath generator for 3D printers
https://slic3r.org/
GNU Affero General Public License v3.0
3.34k stars 1.3k forks source link

Feature Request - Wait for temperature change to finish before continuing print #1955

Open Lodran opened 10 years ago

Lodran commented 10 years ago

I'm doing some tests with PP, to see what it'll take to print successfully, and I'm running into a catch-22.

I need to print the first layer at a lower temperature, so that it'll stick to the print surface without welding, but I then need to print successive layers at a higher temperature, so that they will weld.

The current gcode sets the second layer temperature, but doesn't wait for the change before continuing, which will result in a weak interface between the first and second layers.

My request: Add a checkbox which indicates that the print will pause, and wait for the temperature change to complete before continuing.

Arrow111 commented 10 years ago

Until all will happen with your request you can go manually in G-code. If you can find the line at g-code where required layer finishing and seting up new temperature then next of it just add G4 S( count down timer in sec) before your next temperature will be at the target point . At G4 command printer will stop all moves until seconds will not pass.To find relevant layer in G-code you will need to use repetier host interface just by loading code and selecting lines. When you are selecting lines in repetier host g-code window the relevant layer become yellow in the main window of item.

whosawhatsis commented 10 years ago

Or just change the M104 to an M109...

alranel commented 10 years ago

Hmmm. I see the need. It sounds like an advanced usage, so maybe a checkbox is not the ideal solution as you'd need something more flexible (for example you might want to park extruder somewhere else to avoid oozing in the print). Basically you'd need a conditional layer change G-code...

alranel commented 10 years ago

I thought about a conditional syntax for custom G-code like this some time ago:

{layer_num=1}G1 X0 Y0 F3600 ; park extruder
{layer_num=1}M109 S[temperature]
{layer_num%5}G1 X25 ; go to refill position every 5 layers
{layer_num%5}M42 P10 S255 ; do some refill action

It could help for tool change G-code as well:

{next_extruder=0}M42 P10 S0 ; do something (servo etc.)
{next_extruder=1}M42 P10 S255
Lodran commented 10 years ago

So, the idea is that whenever layer_num changes to 1, the G1 and M109 commands get inserted into gcode?

I like it - it could lead to some very clever gcode hacking, if enough variables were exposed.

NimrodQuimbus commented 10 years ago

I am running into the same kind of problem, I know the solution would be just as alexrj said, But enable the changes after a certain layer height, so a wiper servo could be used to wipe blobs after temperatures are reached.

Something like : M104 S[temperature_0] T[previous_extruder] ; cool off M104 S[first_layer_temperature_0] T[next_extruder] ;heat up G1 X0 Y0 ; park extruder M109 S[first_layer_temperature_0] T[next_extruder] ;Wait for heat up M42 P6 S0 ;Wiper servo

BUT, only do when Zheight is sufficient for wiper arm clearance.

lordofhyphens commented 8 years ago

M109 unfortunately doesn't wait for cooldown with some firmwares (just heatup).

Post-process script for the addition, perhaps? Add something to before or after-layer gcode and use a post-process script to work out parsing the if/then logic?