prusa3d / Prusa-Firmware-Buddy

Firmware for the Original Prusa MINI, Original Prusa MK4 and the Original Prusa XL 3D printers by Prusa Research.
Other
1.16k stars 229 forks source link

[BFW-6258] [ENHANCEMENT] Cancel object issues/enhancements #3418

Open rcmaniac25 opened 1 year ago

rcmaniac25 commented 1 year ago

Enter what type of printer or upgrade the enhancement applies to. Printer type - XL Single Tool Firmware - 5.1.0 alpha2 Optional upgrades - Stock

So this has a couple parts and my option was to make multiple tickets that all referenced each other, or to make 1 ticket that explained the different requests.

With the new firmware alpha, I wanted to give the cancel object a try. I had the perfect print: a bunch of small pegs useful in assembling the mega lego skeleton model. 50 pins are provided. Given their size and small footprint, I expected that at least one would detach and would be a good time to use cancel object.

All models were sliced using PrusaSlicer 2.7 alpha1 with stock printer profile (aside from infill amount and some paint on supports).

Issue 1) Cancel Object list is limited to 16 items.

I realize this is a challenge based on memory and UI usability, but PrusaSlicer decided to arrange the pin printing order in a maze-like format with multiple zig-zag motions, instead of clean left/right/top/button movements, meaning if I saw a pin that had failed, I couldn't just count 1, 2, 3, 4... and get the pin and mark cancel. Even if I went through the PrusaSlicer UI to find the order of the objects (since we don't have a picture representation to go off of), I am only able to see 16 of the 50 pins.

Issue 2) The general work around for not having the picture is Cancel Current, which should be able to cancel the currently printing object... unless it's none reactive

So as my print of many small pins started, 1 pin detached. I went to cancel objects menu and waited for the extruder to come around again because (see issue 1). Extruder moved over the spot, I selected "Cancel Current" and it continued printing it. As this was my first use of the feature in the alpha, I thought maybe it skips it next layer as it may be scheduled/buffered already. But next time it came around, it tried to print it again. I pressed "Cancel Current" and it still continued printing. Eventually a 2nd pin detached. Then the spaghetti from one detached pin knocked into another, now I have 3 detached pins. Each time, I tried "Cancel Current" but to no success. Eventually it became like a well known comedy routine (I Love Lucy candy scene) where I kept trying to stop one pin from causing problems for another pin. Without success as it kept going without stopping.

I eventually got 5 pins out of the original 50, which maybe 25 or so half finished pins which are good enough as they're guide pins for the model.

What I noticed, from looking at source code and the UI, is that if there are more then 16 objects being printed, objects 17 and up don't appear to be under the control of cancel object. As I kept trying to cancel pin after pin that failed because of the failed prints being dragged around, I reached a pin that was on the 1-16 list... when I did "Cancel Current" for that one, the extruder instantly stopped and moved to the next object. The UI said "canceled" and next layer, it skipped it. Making me think the 16 object limit isn't just UI.

While it was a good theory, I tried an unrelated print (the face parts for the early mentioned lego skeleton) on my MK4 (original, also running 5.1.0 alpha2) and it only had 4 prints. All 4 were listed in the UI. I noticed a small part broke off one of the objects and it started dragging it around. I went into cancel object and again chose "Cancel Current". Once again, nothing happened. The extruder continued to print it. I pressed it again, and it again continued printing it. Having only 4 objects, uniquely named, I scrolled to the one object and clicked it. The name changed from Printing to Canceled and the extruder immediately stopped and moved to the next object. The Cancel Current did not work, even when there was only 4 objects.

Issue 3) Cancel Object is available for single item prints

After I finished 3 of the 4 mouth prints, I went on to print just the failed part. A single print. I noticed that cancel object is still there. If I needed to cancel the only print available, I'm not sure what would happen. I did not try... but it may be an edge case that can be avoided by simply not having Cancel Object UI if there's only 1 object. It also is redundant UI since canceling a single object is really just stopping a print, which has a "are you sure?" dialog, unlike cancel object, which has no confirmation dialog.

rcmaniac25 commented 1 year ago

Minor update on Issue 3: while not a single object, I tried the same pin print (only 14 pins though) on my MK4 (also running 5.1.0 alpha2) and after a bit they started popping off. I started canceling objects and ran into issue 2, as it didn't cancel things as it was printing all the time. Maybe once 1/3 of the time it canceled the next object instead of the current object.

But it got to the point that I had canceled every object.

At this point, the extruder appeared paused... but the z height would go up in incremental steps. So it was obvious that it was still running in the background. I went to cancel the print, but the UI became almost unresponsive. Lagging, even a few screen tears. As it's not a big print, eventually the print finished. It did the ending sequence, and the UI became responsive again.

Perhaps some logic that indicates if there are no more objects to cancel, it asks if you want to stop the print or similar. Or at least not spin-looping code in the background that causes the UI to become unresponsive.

github-actions[bot] commented 5 months ago

This issue has been flagged as stale because it has been open for 60 days with no activity. The issue will be closed in 7 days unless someone removes the "stale" label or adds a comment.

rcmaniac25 commented 5 months ago

I feel I have to bump this. PrusaConnect adds support for a pictorial version of cancel object and offers cancel buttons for more then 16 items.

Yet only 16 are supported.

Not to mention competitors and various other embedded platforms/firmwares support more then 16 cancel objects.

Ideas:

The LRU and ring buffer could have the added UI of marking an item as done. So instead of seeing an option to cancel an object that finished, it only shows the ones that are still printing. Paged loading would then mean the UI doesn't need to have a hard-coded list of 16 items.

The end goal is to not provide the cancel object feature, only to suddenly discover the failed part 17 can't be canceled because of a hard coded limitation that the UI (Both on device and on PrusaConnect) does not show.

github-actions[bot] commented 2 months ago

Thank you for your contribution to our project. This issue has not received any updates for 60 days and may be considered "stale." If this issue is still important to you, please add an update within the next 7 days to keep it open. Administrators can manually reopen the issue if necessary.

rcmaniac25 commented 2 months ago

Bump (sorry, until this is addressed or manually closed, I have the stubbornness to keep the bot from closing it)

jackTfrost commented 2 weeks ago

I ran into this same issue. I was printing a full XL bed of small objects, 98 to be exact. When I went to cancel current object nothing happened. I couldn't load this through Prusa Connect because it was 90mb and it was going to take 90 minutes to transfer it, even though my printer is connected via ethernet to my network (that is another issue all by itself). I had to scrap the whole print because I couldn't cancel the 5 or so objects that pulled off the bed.

Tupson444 commented 2 weeks ago

Cancel Objects is not a complete feature if it doesn't support at least hundreds of objects. It is most often needed exactly when printing many small objects.

I currently use this workaround: I first merge e.g. 9 objects into one, then fill the bed with those merged ones. Like this, I can print 108 small parts while having only 12 "objects" in the list for cancelling. The downside is of course that if one part detaches, I have to cancel the whole group of 9, but it is much better than ruining the whole print.

CZDanol commented 1 week ago

Internal ticket: BFW-6258