Force Tool Change to load the filament if same slot but not loaded

MMU-63
pull/110/head
D.R.racer 2021-08-27 12:05:59 +02:00 committed by DRracer
parent 6f3540a14d
commit 5a53acd802
2 changed files with 42 additions and 1 deletions

View File

@ -17,9 +17,13 @@ void ToolChange::Reset(uint8_t param) {
return;
}
if (param == mg::globals.ActiveSlot())
if (param == mg::globals.ActiveSlot() && mg::globals.FilamentLoaded()) {
// we are already at the correct slot and the filament is loaded - nothing to do
return;
}
// we are either already at the correct slot, just the filament is not loaded - load the filament directly
// or we are standing at another slot ...
plannedSlot = param;
if (mg::globals.FilamentLoaded()) {

View File

@ -56,8 +56,13 @@ void ToolChange(logic::ToolChange tc, uint8_t fromSlot, uint8_t toSlot) {
void NoToolChange(logic::ToolChange tc, uint8_t fromSlot, uint8_t toSlot) {
ForceReinitAllAutomata();
// the filament is LOADED
mg::globals.SetFilamentLoaded(true);
EnsureActiveSlotIndex(fromSlot);
REQUIRE(VerifyEnvironmentState(true, mi::Idler::IdleSlotIndex(), toSlot, false, ml::off, ml::off));
// restart the automaton
tc.Reset(toSlot);
@ -66,6 +71,31 @@ void NoToolChange(logic::ToolChange tc, uint8_t fromSlot, uint8_t toSlot) {
REQUIRE(tc.Error() == ErrorCode::OK);
}
void JustLoadFilament(logic::ToolChange tc, uint8_t slot) {
ForceReinitAllAutomata();
EnsureActiveSlotIndex(slot);
// verify filament NOT loaded
REQUIRE(VerifyEnvironmentState(false, mi::Idler::IdleSlotIndex(), slot, false, ml::off, ml::off));
// restart the automaton
tc.Reset(slot);
REQUIRE(WhileCondition(
tc,
[&](int step) -> bool {
if(step == 1000){ // on 1000th step make FINDA trigger
hal::adc::SetADC(config::findaADCIndex, 900);
}
return tc.TopLevelState() == ProgressCode::LoadingFilament; },
200000UL));
REQUIRE(tc.TopLevelState() == ProgressCode::OK);
REQUIRE(mg::globals.FilamentLoaded() == true);
REQUIRE(mg::globals.ActiveSlot() == slot);
}
TEST_CASE("tool_change::test0", "[tool_change]") {
for (uint8_t fromSlot = 0; fromSlot < config::toolCount; ++fromSlot) {
for (uint8_t toSlot = 0; toSlot < config::toolCount; ++toSlot) {
@ -101,3 +131,10 @@ TEST_CASE("tool_change::state_machine_reusal", "[tool_change]") {
}
}
}
TEST_CASE("tool_change::same_slot_just_unloaded_filament", "[tool_change]") {
for (uint8_t toSlot = 0; toSlot < config::toolCount; ++toSlot) {
logic::ToolChange tc;
JustLoadFilament(tc, toSlot);
}
}