Perform a re-check (LoadFilamentLimited) after successful LoadFilament
- [] Unit tests of unlimited LoadFilament need to be introduced as the complexity of this scenario is increasing .pull/173/head
parent
c5aea89cac
commit
6b06fed4b1
|
|
@ -21,6 +21,7 @@ void LoadFilament::Reset(uint8_t param) {
|
||||||
}
|
}
|
||||||
dbg_logic_P(PSTR("Load Filament"));
|
dbg_logic_P(PSTR("Load Filament"));
|
||||||
mg::globals.SetFilamentLoaded(param, mg::FilamentLoadState::AtPulley); // still at pulley, haven't moved yet
|
mg::globals.SetFilamentLoaded(param, mg::FilamentLoadState::AtPulley); // still at pulley, haven't moved yet
|
||||||
|
verifyLoadedFilament = 1;
|
||||||
Reset2(false);
|
Reset2(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,10 +62,12 @@ bool LoadFilament::StepInner() {
|
||||||
case FeedToFinda::Failed: // @@TODO - try to repeat 6x - push/pull sequence - probably something to put into feed_to_finda as an option
|
case FeedToFinda::Failed: // @@TODO - try to repeat 6x - push/pull sequence - probably something to put into feed_to_finda as an option
|
||||||
GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_ON); // signal loading error
|
GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_ON); // signal loading error
|
||||||
break;
|
break;
|
||||||
|
case FeedToFinda::Stopped:
|
||||||
|
// as requested in MMU-116 - stopping an unsuccessful feed should retract as well but not check the filament
|
||||||
|
verifyLoadedFilament = 0;
|
||||||
|
// [[fallthrough]]
|
||||||
case FeedToFinda::OK:
|
case FeedToFinda::OK:
|
||||||
case FeedToFinda::Stopped: // as requested in MMU-77 - stopping an unsuccessful feed should retract as well
|
GoToRetractingFromFinda();
|
||||||
state = ProgressCode::RetractingFromFinda;
|
|
||||||
retract.Reset();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -74,8 +77,15 @@ bool LoadFilament::StepInner() {
|
||||||
if (retract.State() == RetractFromFinda::Failed) {
|
if (retract.State() == RetractFromFinda::Failed) {
|
||||||
GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_OFF); // signal loading error
|
GoToErrDisengagingIdler(ErrorCode::FINDA_DIDNT_SWITCH_OFF); // signal loading error
|
||||||
} else {
|
} else {
|
||||||
state = ProgressCode::DisengagingIdler;
|
if (verifyLoadedFilament) {
|
||||||
mi::idler.Disengage();
|
--verifyLoadedFilament;
|
||||||
|
// as requested in MMU-116 - once the filament gets retracted after first feed, perform a short re-check
|
||||||
|
// by doing a limited load + retract. That ensures the filament can be loaded into the selector later when needed.
|
||||||
|
ResetLimited(mg::globals.ActiveSlot());
|
||||||
|
} else {
|
||||||
|
state = ProgressCode::DisengagingIdler;
|
||||||
|
mi::idler.Disengage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@ namespace logic {
|
||||||
class LoadFilament : public CommandBase {
|
class LoadFilament : public CommandBase {
|
||||||
public:
|
public:
|
||||||
inline LoadFilament()
|
inline LoadFilament()
|
||||||
: CommandBase() {}
|
: CommandBase()
|
||||||
|
, verifyLoadedFilament(0) {}
|
||||||
|
|
||||||
/// Restart the automaton - performs unlimited rotation of the Pulley
|
/// Restart the automaton - performs unlimited rotation of the Pulley
|
||||||
/// @param param index of filament slot to load
|
/// @param param index of filament slot to load
|
||||||
|
|
@ -33,6 +34,12 @@ private:
|
||||||
|
|
||||||
FeedToFinda feed;
|
FeedToFinda feed;
|
||||||
RetractFromFinda retract;
|
RetractFromFinda retract;
|
||||||
|
|
||||||
|
/// As requested in MMU-116:
|
||||||
|
/// Once the filament gets retracted after first feed, perform a short re-check by doing a limited load + retract.
|
||||||
|
/// That ensures the filament can be loaded into the selector later when needed.
|
||||||
|
/// verifyLoadedFilament holds the number of re-checks to be performed (we expect >1 re-checks will be requested one day ;) )
|
||||||
|
uint8_t verifyLoadedFilament;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The one and only instance of LoadFilament state machine in the FW
|
/// The one and only instance of LoadFilament state machine in the FW
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue