Toolchanger Tool Prep
-
BACKGROUND
As toolchangers become more popular, the time to swap tools becomes more and more important.
One thing that slows down changes is "standby temperature". When a tool is parked for more than a few moments, leaving the hotend at extrusion temp will cause the filament already in the melt chamber to change in bad ways, and when that tool prints again, the first amounts of plastic deposited can be visually a different color, not deposit properly because they are too liquid, etc.
Therefore, the whole concept of standby temp. Which is great. Until you go to get the tool again, and then there is a wait for it to warm up to extrusion temp.
At the present time, there is no gcode that says "I am going to use this tool in a few moments, go ahead and switch it from standby to active temp". There is also no way to turn the extruder motor until the tool is mounted. It sure would be nice to warm up that tool, and extrude a bit (counting on the wiper to take care of the drool, as the tool is pulled from its stall)
SUMMARY
Gcode and/or firmware today provides nothing that will allow a toolchangers to "prepare" a tool in advance of mounting it.
THE QUESTION
This post is to trigger discussion. What should such G-Code look like? First, for heat: A new command? Extensions to existing commands? Second, for the actual extruder motor: Same questions.
Should putting this new gcode in the right "advance of need" spot be a slicer responsibility? Should the firmware "look ahead" to tool changes and execute a "tprepx.g" macro a fixed amount (lines) ahead?
And so forth...
-
Here are a couple of my starting thoughts, subject to change as we all discuss:
-
Firmware look ahead: It would be really hard to decide how much to look ahead.
-
Slicer placement of new commands: I like this because we could experiment via post-processor to start.
-
Such a post processor could insert things a fixed number of lines back from a tool change, or a calculated amount of time back. It is not that hard to look at each line and calculate how long it takes. There are a ton of code examples around.
-
Commands: Heater: This is fairly easy, and in fact COULD be done with today's "standby" temp commands. Just raise standby to match extrusion at the "advance prep point". And, put in a command to put the "old" tool's standby at an appropriate temp, put that right after the Tx. So that would work, I'm just curious if there is a "more automated" way.
-
Commands Extruder: I believe this is going to take either a new command, or new syntax on G1. I'm leaning toward syntax on G1. Something like "G1 E0.123" stays exactly like today, moves the mounted extruder. "G1 E2:0.123" moves the extruder for tool 2. Thoughts?
-
Also on extruder, the concept of "constant drool" is something we may want. Continuous slow extrusion while parked, to keep plastic moving through the melt chamber. This would allow standby temps to be quite a bit higher, maybe even the same as extrusion temps. Syntax? I don't know, this is fundamentally different than "coordinated linear motion". This is motion that continues after the command (line) finishes. It could start with the idea of "G1 E2:99999 F90" or similar... move very far very slowly. But how to continue the move? On unix systems '&' causes a command (really a process) to continue in background. So how about "G1 E2:99999 F90 &" This would need to be auto-canceled the next time the tool is mounted. Or have a syntax for canceling it. "G1 E2:0 &" maybe.
Again, I'm not married to any of the above, and the purpose of this thread is to solicit ideas.
-
-
Have you seen this?
https://github.com/mkudzia84/toolchanger-pspp
I've started playing with it to set the tool changer temperature etc -
I believe the look-ahead feature for tool changes is already on David's roadmap, no?
-
@Danal On a similar vein, a few years ago I came up with the idea (which I still use) of advancing the tool change point within the gcode file by post processing with a python script. The rationale for that is for use with a mixing hot end when changing from one colour (tool) to another. When this happens, it takes nn amount of extrusion to purge one filament out of the mixing chamber before the next one comes through. So if one advances the tool change point, then the new tool is selected before it is needed and so takes care of most of the purging.
The reason for all this diatribe is that DC42 said he would look to implement this look ahead tool change "thingy" in firmware. In fact, I think it's still on the firmware wish list somewhere so he might still have it in mind. IIRc I think he mentioned something about having 2 parallel gcode streams or some such.
I'd have thought that it wouldn't be too difficult to have a macro containing the commands you want to use, then run this at the appropriate "pre tool change point" in the gcode file. You could certainly do it by post processing I'd have thought.
On the subject of keeping filament at print temperature for extended periods of time, I can say that PLA is a bugger but PET-G isn't too bad. PLA will hydrolyse and this process begins at something like 140 deg C IIRC. So you need a very low standby temperature. It's probably just as easy and possibly less time consuming to keep it hot, accept that it will hydrolyse and run a big purge before before you use it. I've held PET-G at print temperature for over 8 hours before using it and not noticed any detrimental effects. But I haven't held any other filaments at print temperature for extended periods.
-
@jay_s_uk said in Toolchanger Tool Prep:
Have you seen this?
https://github.com/mkudzia84/toolchanger-pspp
I've started playing with it to set the tool changer temperature etcI have not seen that... will look at and think about!! Thanks.
-
@deckingman , excellent info, thanks. Very intriguing about the PetG. I've printed that some, but not a lot. Hmmm...
-
@Danal said in Toolchanger Tool Prep:
@deckingman , excellent info, thanks. Very intriguing about the PetG. I've printed that some, but not a lot. Hmmm...
Yes, that's a big drawback with mixing hot ends - all filaments have to be loaded at all times and they share a common heater. So "unused" filaments get held at print temperature. Keeping them moving forward even slightly helps enormously but even 1% white mixed with red will come out as pink so it's not always possible to keep them all moving. With PLA, if it's been at print temperature for more than say half and hour, I always purge 20 or 30 mm before printing with it. Otherwise, what's been held in the melt/mixing chamber just runs out in one big sloppy mess. But like I said, PET-G seems to hold up forever (well at least 8 hrs). That goes for Taulman T glass too (but I think that's likely a variant of PET-G).
-
@Danal Cura puts heating commands in the Gcode in advance of the tool change command so that the tool is up to heat by the time the change is due. The tool is parked at standby temp which can be whatever you like - off, if you prefer. I have found the timing works quite well, but I can see advantages to the firmware doing it
-
@pawPrinter said in Toolchanger Tool Prep:
@Danal Cura puts heating commands in the Gcode in advance of the tool change command so that the tool is up to heat by the time the change is due. The tool is parked at standby temp which can be whatever you like - off, if you prefer. I have found the timing works quite well, but I can see advantages to the firmware doing it
I did not know that Cura did that! Is there anything you have to "turn on"? I will play around with it.
-
Lots of great discussion above about various ways to set temperature in advance of a toolchange.
Any thoughts about ways to move the extruder on a parked tool? In terms of G-Code syntax?
-
@Danal No, it just does it. So there is no control, and you are stuck with what Cura decides. I rather took it for granted until I tried out PrusaSlicer recently, and found their tool change handling not so well developed. Which is a shame because otherwise it is easier to use with multiple tools. I suppose its all still early days
-
I've just discovered that IceSL-Slicer seems to have the functionality to preheat a tool so that it is heated to the correct temperature by the time it is called, based on a given slicer parameter degrees_per_second and the slicer's estimated print time.
I do not know how it is implemented, but I will look into it and add it to the RRF profile I'm building, of which I'm nearing the completion of the first version for beta release.
The feature is called active temperature control and is described as such:
When printing with multiple materials, only one extruder is active at a given time. Active temperature control is specifically designed to avoid material to degrade and ooze from idle extruders. The idle extruder is dynamically cooled down and heated during printing, such that it is ready when needed and cooled when not needed. Adjust extruder parameters idle_extruder_temp_degree_c and extruder_degrees_per_sec when using this feature.
Emphasis mine.
-
@pawPrinter said in Toolchanger Tool Prep:
@Danal Cura puts heating commands in the Gcode in advance of the tool change command so that the tool is up to heat by the time the change is due. The tool is parked at standby temp which can be whatever you like - off, if you prefer. I have found the timing works quite well, but I can see advantages to the firmware doing it
I've looked at the gcode, and I only see M104 and M109 right at the moment of toolchange. Is there something needed to get 'advance'?
-
@Danal said in Toolchanger Tool Prep:
@pawPrinter said in Toolchanger Tool Prep:
@Danal Cura puts heating commands in the Gcode in advance of the tool change command so that the tool is up to heat by the time the change is due. The tool is parked at standby temp which can be whatever you like - off, if you prefer. I have found the timing works quite well, but I can see advantages to the firmware doing it
I've looked at the gcode, and I only see M104 and M109 right at the moment of toolchange. Is there something needed to get 'advance'?
Impeccable timing on my part I think you need to install the "Machine Settings Plugin"
https://forum.duet3d.com/topic/16350/standby-temperature-definition-in-dual-extruder/29
Copied below:
Maybe a comment better suited for the tool changing thread from the other day -
Cura (with the "Machine Settings" plugin) has the capability to fine tune the standby temperature as well as the "expected" heat up and cool down rates.
Much like IceSL's "Heating/cooling rate (C/sec)" setting, the plugin allows you to set both heat up and cool down speeds (C/sec), as well as minimum standby times.
When the M104 commands are injected into the GCODE is driven by the layer time / print speed, as well as the heat up and cool down values entered. Changing the heat up speed from, for example, 1°C/s to 4°C/s will result in the M104 Tx command being injected a number of lines later. It appears that, if the layer time where the heat up would occur is too short to allow for the nozzle to heat up from the standby temperature to active temperature, Cura will modify the standby temperature so that the nozzle will be ready in time.
Left columns are at 4°C/s, right is at 1°C/s. You can see that the print temperature for T0 is set many layers (233, 237, 104, etc) later in the file for hotends that can heat up faster. Looking at some of the highlighted cells you can see where Cura modulated the standby temperature to account for the limiting heat up speed.
Obviously a hotends heat up/cool down speed is not some magic, made up number - its based on the actual heater performance. I believe* that where the M104 commands are injected is based on print speed and the heat up/cool down values, and is not impacted by acceleration, jerk, etc. These heating values can get someone really close to reducing time spent waiting during tool changes, but really Cura (or any software) doesn't have a clue what the "machine model" (acceleration, jerk, dynamic acceleration, tool change files, etc) is.
*I tried adjusting acceleration values in Cura and saw no change in where the lines were inserted.
As far as firmware looking ahead - I think that this would be the best solution, as the firmware should know what the "machine model" is - the config.g is loaded on the machine anyways ! However, how far should the firmware look ahead? Is the real solution to determining when to heat up hotends, priming the a different tools extruder, etc, to simulate a print file, and allow the firmware to rewrite the print file to include the relevant lines needed - a similar approach that is taken to determine realistic print times by simulating the print first. I am far from an expert, but I feel that there would be limits to looking ahead, and a full simulation of a print file would be needed.
-
Nice!! I will check that out!
-
@sebkritikel excellent! Thanks. Nice to know that you can do a bit of tuning contrary to what I thought - Cheers