Fixup: restoring temp. while Load2ExtrFailed
This commit is contained in:
parent
d4f0f363cd
commit
5e103cc24e
|
|
@ -311,9 +311,8 @@ bool MMU2::ToolChangeCommonOnce(uint8_t slot){
|
|||
void MMU2::ToolChangeCommon(uint8_t slot){
|
||||
while( ! ToolChangeCommonOnce(slot) ){ // while not successfully fed into extruder's PTFE tube
|
||||
// failed autoretry, report an error by forcing a "printer" error into the MMU infrastructure - it is a hack to leverage existing code
|
||||
// @@TODO theoretically logic layer may not need to be spoiled with the printer error - may be just the manage_response needs it...
|
||||
logic.SetPrinterError(ErrorCode::LOAD_TO_EXTRUDER_FAILED);
|
||||
SaveAndPark(true);
|
||||
SaveHotendTemp(true);
|
||||
// We only have to wait for the user to fix the issue and press "Retry".
|
||||
// Please see CheckUserInput() for details how we "leave" manage_response.
|
||||
// If manage_response returns false at this spot (MMU operation interrupted aka MMU reset)
|
||||
|
|
@ -685,12 +684,24 @@ void MMU2::CheckUserInput(){
|
|||
case Right:
|
||||
SERIAL_ECHOPGM("CheckUserInput-btnLMR ");
|
||||
SERIAL_ECHOLN(btn);
|
||||
|
||||
// clear the explicit printer error as soon as possible so that the MMU error screens + reporting doesn't get too confused
|
||||
if( lastErrorCode == ErrorCode::LOAD_TO_EXTRUDER_FAILED ){
|
||||
// A horrible hack - clear the explicit printer error allowing manage_response to recover on MMU's Finished state
|
||||
// Moreover - if the MMU is currently doing something (like the LoadFilament - see comment above)
|
||||
// we'll actually wait for it automagically in manage_response and after it finishes correctly,
|
||||
// we'll issue another command (like toolchange)
|
||||
logic.ClearPrinterError();
|
||||
lastErrorSource = ErrorSourceMMU; // this seems to help clearing the error screen
|
||||
}
|
||||
|
||||
ResumeHotendTemp(); // Recover the hotend temp before we attempt to do anything else...
|
||||
|
||||
// In case of LOAD_TO_EXTRUDER_FAILED sending a button into the MMU has an interesting side effect
|
||||
// - it triggers the standalone LoadFilament function on the current active slot.
|
||||
// Considering the fact, that we are recovering from a failed load to extruder, this side effect is actually quite beneficial
|
||||
// - it checks if the filament is correctly loaded in the MMU (we assume the user was playing with the filament to recover from the failed load)
|
||||
// Moreover, the "button" makes all the nice things like temp recovery
|
||||
Button(btn);
|
||||
|
||||
// A quick hack: for specific error codes move the E-motor every time.
|
||||
|
|
@ -701,13 +712,6 @@ void MMU2::CheckUserInput(){
|
|||
case ErrorCode::FSENSOR_TOO_EARLY:
|
||||
HelpUnloadToFinda();
|
||||
break;
|
||||
case ErrorCode::LOAD_TO_EXTRUDER_FAILED:
|
||||
// A horrible hack - clear the explicit printer error allowing manage_response to recover on MMU's Finished state
|
||||
// Moreover - if the MMU is currently doing something (like the LoadFilament - see comment above)
|
||||
// we'll actually wait for it automagically in manage_response and after it finishes correctly,
|
||||
// we'll issue another command (like toolchange)
|
||||
logic.ClearPrinterError();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -782,6 +786,8 @@ bool MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) {
|
|||
CheckUserInput();
|
||||
return true;
|
||||
case PrinterError:
|
||||
SaveAndPark(move_axes);
|
||||
SaveHotendTemp(turn_off_nozzle);
|
||||
CheckUserInput();
|
||||
// if button pressed "Done", return true, otherwise stay within manage_response
|
||||
// Please see CheckUserInput() for details how we "leave" manage_response
|
||||
|
|
|
|||
Loading…
Reference in New Issue