Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed issue #1207 - MMU - Change Temperature/Material Purge Order Issue #9737

Open
wants to merge 15 commits into
base: master
Choose a base branch
from

Conversation

amatulic
Copy link

@amatulic amatulic commented Feb 16, 2023

This fixes issue #1207 and others closed as duplicates (#8201 and #8702). The tool temperature changes have been corrected so that the purge on the wipe tower occurs at the higher of the two temperatures between the current filament and next filament.

This PR affects only single-extruder configurations. Multi-extruder configurations remain unchanged.

This change allows the MMU to be a true multi-material unit, making it possible to print PLA with PETG supports without nozzle jams due to too-early cooling, or mix together PLA and high-temperature PLA+.

Specifically:

  • If changing to a hotter filament, the temperature change is started when the cooler filament unloads and the new hotter filament loads, as has always been the case. But then it waits (if needed) for the temperature to be reached before starting the wipe on the wipe tower. After the wipe tower purge is done, the print resumes.
  • If changing to a cooler filament, there is no temperature change during unloading and loading; the temperature is kept hot. The lower temperature target is set only when wiping starts purging ends on the tower, so that the nozzle purges the leftover hot filament at a higher temperature and cools during the final wipe. When the wipe is done, it waits (if needed) for the lower temperature to stabilize before the print resumes.

This PR includes three kinds of changes in the file WipeTower.cpp, all minor:

  • better management of the existing m_old_temperature variable
  • adding temperature controls in WipeTower::toolchange_Wipe() (which required adding one small change to WipeTower.hpp)
  • modifying some existing g-code comments to add temperature values, for easier g-code reading

I made sure that these modifications affect only the single-extruder MMU configuration, not configurations with multiple extruders.

I tested this fix two ways: by examining the g-code generated for a simple cube with two tool changes, and printing a somewhat more complex 3D model using PLA (205°) and PLA+ (220°) for the part and PETG (215°) for support structure. Each test performed as expected.

Update 2023-03-09: I have since been printing extensively with multiple materials of different temperatures and this fix has been working flawlessly.

Update September 2023: Based on feedback below, I have changed the cooldown to start when the purge completes, but before the final wipe. This prevents jamming in fast-cooling hotends. With my slow-cooling stock MK3S hotend, this results in a pause for a couple of seconds to wait for the final temperature, and then printing resumes at the new cooler temperature.

@RickM777
Copy link

RickM777 commented Aug 6, 2023

We definitely would like to see this change implemented. We run into problems with temps changing too quickly on silk filaments and on Prusament Galaxy Black which has led to bad tips and/or breakage of the Prusament which in turn has led to numerous jams.

@Mirarkitty
Copy link

Upvote. We need this

@Jackjan4
Copy link

Jackjan4 commented Aug 7, 2023

Another upvote. How can this be missed?

@Sebastian1989101
Copy link

+1

1 similar comment
@yahbluez
Copy link

yahbluez commented Aug 7, 2023

+1

@3Delights
Copy link

Upvote.

@doug006
Copy link

doug006 commented Aug 8, 2023

Please merge this request. It would be helpful to several who are commenting here.

@pgilfernandez
Copy link

+1

@kazibole
Copy link

kazibole commented Aug 9, 2023

+1 for making the MMU2S / MMU3 great!

@Skaronator
Copy link

It would be wonderful to get this merged.

/cc @lukasmatena @bubnikv @enricoturri1966 @alranel

@Sionree
Copy link

Sionree commented Aug 12, 2023

we hope it will be implemented soon

@SalmonSays
Copy link

+1

@paulcopping
Copy link

Please Implement, helps use of MM multi-material.

@beavis69
Copy link

+1

@LostFool
Copy link

For extruders that cool quickly this fix does not work 100% of the time. I still jam up. It should remain at the higher temperature until the wipe is done. Then pause for the cool down. Or give an option to switch between the methods.

Does not work for my setup.

@amatulic
Copy link
Author

For extruders that cool quickly this fix does not work 100% of the time. I still jam up. It should remain at the higher temperature until the wipe is done. Then pause for the cool down. Or give an option to switch between the methods.

Good point. I'm curious, what extruder cools so quickly?

This is trival to fix. A line of code just has to be moved from before the wipe to after the wipe (or middle of wipe). It already waits for the cooler temperature before resuming printing, but this wait never happens in my case because the correct temperature is already there by the time the wipe is done.

@LostFool
Copy link

LostFool commented Sep 13, 2023 via email

@amatulic
Copy link
Author

amatulic commented Sep 13, 2023

it seems the temperature should remain the high temperature until the second part of the wipe. Where the order is wipe current > swap > wipe new > cool down. At most mid second wipe cooling can begin.

I just fixed this. The change is in WipeTower::toolchange_Wipe() in the file WipeTower.cpp. I need to test it on a couple of prints before modifying this pull request. Just two lines of code, though: one changed line and one new line.

When switching from a hotter to a cooler filament, it now waits until the end of the new wipe tower layer before setting the cooler temperature. Then the final step is to wipe the nozzle (this takes very little time) while cooling; the old hot filament is completely purged by then. Then it waits until the new temperature is reached before resuming the print.

I could also have it change to a cooler temperature mid-wipe, but that complicates the code due to needing two checks inside the loop that does the wipe: one to check if half the wipe is done, and another to check if the new temperature hasn't already been set within that loop.

@amatulic
Copy link
Author

amatulic commented Oct 1, 2023

@amatulic My first test worked. I had some other issues that are my own doing (tip forming). So I will do another more thorough test when I can.

Excellent. Because my stock hotend cools slower than yours, it paused for a couple of seconds on the wipe tower to cool down to the correct temperature before resuming printing, as I expected. Did you also experience a pause? If so, I can try to figure out how to move the temperature change to start at the middle of the purge.

@LostFool
Copy link

LostFool commented Oct 1, 2023

Yes, I experience a pause at the end. It doesn't last too long for me. I don't think it is necessary in my case to switch temp sooner, as it works as needed right now and I like the comfort of all of the high temp material being purged, or more of it.

I think this iteration is stable. I will report back if anymore issues. But I am mostly struggling with performance of my ERCF.

Though for a first time use I am definitely making it difficult on myself. PLA Tough, PLA, ASA, ASA, TPU, PVA.
Probably not the best choices for a first time use, but I have a project that requires the last three all in one.

Now I'd like to install the project as it is currently built, but that part confuses me.
I have never worked in Visual Studio. Only Visual Studio Code, and even not much.

Anyone understand how to make the install run properly? The help document says "Now just use cmake and install". I wish it was a little more guided in that spot.

@amatulic
Copy link
Author

amatulic commented Oct 2, 2023

@LostFool - my concern is that if there are a few extra seconds to pause at every layer due to needing a cooldown, then this adds up to a significant but not overwhelming amount of extra duration for a long print.

Now I'd like to install the project as it is currently built, but that part confuses me. I have never worked in Visual Studio. Only Visual Studio Code, and even not much.

Anyone understand how to make the install run properly? The help document says "Now just use cmake and install". I wish it was a little more guided in that spot.

What I did was this:

At no time do you actually need to be in the Visual Studio environment. You just need it for the build script to work. In fact, I have never figured out how to build this thing from Visual Studio. I use Visual Studio only as an editor.

Once it's built, you can simply replace the files WipeTower.hpp and WipeTower.cpp in the src/libslic3r/GCode/ directory with the ones from my repository, and rebuild.

@LostFool
Copy link

LostFool commented Oct 2, 2023

I also worry about it sitting idle on high heat and causing swelling on some printers. My voron will survive, but I bet my ender would swell.

If you can figure out how to make it a GUI option you could add a toggle/switch in the GUI so that the logic can be chosen, "when to change temp, pause too cool" or something similar.

I got it built and running by launching from visual studio code. I was just hoping to make this branch an official install. So I can launch by icon.
To build in Visual Studio I followed :
https://github.com/amatulic/PrusaSlicer/blob/fix-wipe-tower-mmu/doc/How%20to%20build%20-%20Windows.md#manual-build-instructions

@LostFool
Copy link

LostFool commented Oct 6, 2023

I have done a few tests now and it works perfect presently! Thank you.

@escape-lib
Copy link

+1 this has been an issue for many many years

@ubermacin
Copy link

ubermacin commented Nov 11, 2023

+1 thanks for considering this fix

@bkerler
Copy link

bkerler commented Dec 10, 2023

+1 upvote

@amatulic amatulic closed this Feb 6, 2024
@amatulic amatulic deleted the fix-wipe-tower-mmu branch February 6, 2024 03:19
@amatulic amatulic restored the fix-wipe-tower-mmu branch February 6, 2024 04:56
@amatulic amatulic reopened this Feb 6, 2024
@LostFool
Copy link

LostFool commented Mar 5, 2024

Did this get merged in with the latest release? I didn't see anything about it in the release notes, but this recent activity makes me hopeful...

@amatulic
Copy link
Author

amatulic commented Mar 5, 2024

@LostFool Unfortunately, the recent activity is merely me updating the PR so it works with the latest stable release of PrusaSlicer. I don't know if anybody from Prusa has looked at this yet. It's been over a year now sine I raised this PR. I was hoping that with the MMU3 coming out, there would be more interest from Prusa to fix this bug. It's a really trivial fix, too.

@bkerler
Copy link

bkerler commented Mar 5, 2024

@SachCZ @lukasmatena Can you please have a look ? Thx :)

@Cinderhaze
Copy link

@LostFool Unfortunately, the recent activity is merely me updating the PR so it works with the latest stable release of PrusaSlicer. I don't know if anybody from Prusa has looked at this yet. It's been over a year now sine I raised this PR. I was hoping that with the MMU3 coming out, there would be more interest from Prusa to fix this bug. It's a really trivial fix, too.

After seeing 2.7.2 got released, I misread one of the things it said it added and thought your PR was in there! Here's hoping this can get mainlined!

@Cinderhaze
Copy link

@LostFool - my concern is that if there are a few extra seconds to pause at every layer due to needing a cooldown, then this adds up to a significant but not overwhelming amount of extra duration for a long print.

Now I'd like to install the project as it is currently built, but that part confuses me. I have never worked in Visual Studio. Only Visual Studio Code, and even not much.
Anyone understand how to make the install run properly? The help document says "Now just use cmake and install". I wish it was a little more guided in that spot.

What I did was this:

At no time do you actually need to be in the Visual Studio environment. You just need it for the build script to work. In fact, I have never figured out how to build this thing from Visual Studio. I use Visual Studio only as an editor.

Once it's built, you can simply replace the files WipeTower.hpp and WipeTower.cpp in the src/libslic3r/GCode/ directory with the ones from my repository, and rebuild.

I only see visual studio 2022 listed if I go through the song and dance now - do we still require 2019? Are there any containers that can be used to build prusaslicer?

@charminULTRA
Copy link

charminULTRA commented Mar 14, 2024

We hope it will be implemented soon, I wouldn't buy an MMU without it.

@amatulic
Copy link
Author

amatulic commented Apr 5, 2024

The latest changes to PrusaSlicer master branch created a merge conflict with this PR. I have just resolved it.

@charminULTRA

We hope it will be implemented soon, I wouldn't buy an MMU without it.

Well, for the typical use-case as a multi-color unit (which is what I imagine most people do with the MMU, rather than use it as a true multi material unit), this change doesn't matter. It matters only if you're using the MMU with different temperature materials. As for me, fortunately I can compile my own version of PrusaSlicer with this change in it, but it would be so much better if it was in an actual release.

With the MMU3 shipping, I had hoped that Prusa would be interested in this issue, which is a serious problem for different temperature materials. It would be nice if someone at Prusa would comment about the intent (or not) to include this someday. I see that @lukasmatena , @bubnikv , @enricoturri1966 , and @alranel were pinged in a comment here last year. I'm sure they get a lot of pings and are quite busy, and I apologize for doing so again, but I and other MMU owners are really interested in seeing this simple change implemented. I am available to answer any questions.

@HaWiWe
Copy link

HaWiWe commented Apr 11, 2024

Adding this would be great, I am in the process of setting up the MMU3 for the MK4 at the moment and it bugs me that there isn't even a TPU profile if I only want to print that. :(

@amatulic
Copy link
Author

it bugs me that there isn't even a TPU profile if I only want to print that. :(

I don't believe there is a filament handler in existence (whether it's MMU, AMS, or whatever) that works reliably with TPU, and that's why there is no TPU profile. I have some 87a TPU that's floppy like a wet noodle. My MMU has been able to push it all the way to the extruder some of the time, but pushing a wet noodle is so unreliable that I need to bypass the MMU when I print TPU.

@gdwinslow
Copy link

Guys this is not a new Isshu. When i was working on Changing filament with my first RepRap printer it was and Isshu. The hardware your hardware has Finly evolved such it will be posable to implement this in printer farms, and Finly get rid of thoughts ugly over hangs with support material damage. in FDM Printing. Please implement temperature for purge.

@BL1NKED
Copy link

BL1NKED commented Apr 24, 2024

Just wanted to drop in to say that this fix has been a lifesaver. I'm working on a project that involves multi-material printing of PLA (220C) and an ABS composite (250C), and without this, I would not have been able to do so. For anyone looking to build PrusaSlicer, just a heads-up, you might need a PC with at least 32 GB of RAM; I wasn't able to build it with 16 GB or 24 GB RAM on my laptop.

@amatulic
Copy link
Author

@BL1NKED - I'm glad this is helping someone. BTW my laptop is 16 GB and it builds fine from the commandline, but the full compile needs me to set it up before bed and run overnight.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet