From 1ff74597430ac6110c48b3d0939ac458a928c926 Mon Sep 17 00:00:00 2001 From: "D.R.racer" Date: Thu, 9 Jun 2022 13:49:30 +0200 Subject: [PATCH] Re-enable filament runout + add debug msgs Needs a fix on the MMU side (report FeedToBondtech::DisengageIdler) --- Firmware/Filament_sensor.cpp | 9 +++++++- Firmware/mmu2.cpp | 42 +++++++++++++++++++++++++----------- Firmware/ultralcd.cpp | 9 +++----- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/Firmware/Filament_sensor.cpp b/Firmware/Filament_sensor.cpp index ab9c81228..5bd65e470 100644 --- a/Firmware/Filament_sensor.cpp +++ b/Firmware/Filament_sensor.cpp @@ -17,10 +17,12 @@ FSensorBlockRunout::FSensorBlockRunout() { #if (FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125) fsensor.setJamDetectionEnabled(false); //suppress filament jam detection while loading filament. #endif //(FILAMENT_SENSOR_TYPE == FSENSOR_PAT9125) +// SERIAL_ECHOLNPGM("FSBlockRunout"); } FSensorBlockRunout::~FSensorBlockRunout() { fsensor.settings_init(); // restore filament runout state. +// SERIAL_ECHOLNPGM("FSUnBlockRunout"); } # if FILAMENT_SENSOR_TYPE == FSENSOR_IR @@ -113,6 +115,7 @@ void Filament_sensor::triggerFilamentInserted() { } void Filament_sensor::triggerFilamentRemoved() { +// SERIAL_ECHOLNPGM("triggerFilamentRemoved"); if (runoutEnabled && (eFilamentAction == FilamentAction::None) && !saved_printing @@ -124,7 +127,10 @@ void Filament_sensor::triggerFilamentRemoved() { || eeprom_read_byte((uint8_t *)EEPROM_WIZARD_ACTIVE) ) ){ -// filRunout(); +// SERIAL_ECHOPGM("runoutEnabled="); SERIAL_ECHOLN((int)runoutEnabled); +// SERIAL_ECHOPGM("eFilamentAction="); SERIAL_ECHOLN((int)eFilamentAction); +// SERIAL_ECHOPGM("saved_printing="); SERIAL_ECHOLN((int)saved_printing); + filRunout(); } } @@ -140,6 +146,7 @@ void Filament_sensor::filAutoLoad() { } void Filament_sensor::filRunout() { + SERIAL_ECHOLNPGM("filRunout"); runoutEnabled = false; autoLoadEnabled = false; stop_and_save_print_to_ram(0, 0); diff --git a/Firmware/mmu2.cpp b/Firmware/mmu2.cpp index 3ec5282a2..ccc1dbba3 100644 --- a/Firmware/mmu2.cpp +++ b/Firmware/mmu2.cpp @@ -168,8 +168,7 @@ void MMU2::mmu_loop() { logicStepLastStatus = LogicStep(); // it looks like the mmu_loop doesn't need to be a blocking call - if (is_mmu_error_monitor_active) - { + if (is_mmu_error_monitor_active){ // Call this every iteration to keep the knob rotation responsive // This includes when mmu_loop is called within manage_response ReportErrorHook((uint16_t)lastErrorCode); @@ -214,7 +213,15 @@ bool MMU2::tool_change(uint8_t index) { manage_response(false, false); // true, true); // reset current position to whatever the planner thinks it is +// SERIAL_ECHOPGM("TC1:p="); +// SERIAL_ECHO(position[E_AXIS]); +// SERIAL_ECHOPGM("TC1:cp="); +// SERIAL_ECHOLN(current_position[E_AXIS]); plan_set_e_position(current_position[E_AXIS]); +// SERIAL_ECHOPGM("TC2:p="); +// SERIAL_ECHO(position[E_AXIS]); +// SERIAL_ECHOPGM("TC2:cp="); +// SERIAL_ECHOLN(current_position[E_AXIS]); extruder = index; //filament change is finished SetActiveExtruder(0); @@ -355,7 +362,15 @@ bool MMU2::load_filament_to_nozzle(uint8_t index) { // reset current position to whatever the planner thinks it is st_synchronize(); +// SERIAL_ECHOPGM("LFTN1:p="); +// SERIAL_ECHO(position[E_AXIS]); +// SERIAL_ECHOPGM("LFTN1:cp="); +// SERIAL_ECHOLN(current_position[E_AXIS]); plan_set_e_position(current_position[E_AXIS]); +// SERIAL_ECHOPGM("LFTN2:p="); +// SERIAL_ECHO(position[E_AXIS]); +// SERIAL_ECHOPGM("LFTN2:cp="); +// SERIAL_ECHOLN(current_position[E_AXIS]); // Finish loading to the nozzle with finely tuned steps. execute_extruder_sequence((const E_Step *)load_to_nozzle_sequence, sizeof(load_to_nozzle_sequence) / sizeof (load_to_nozzle_sequence[0])); @@ -372,8 +387,6 @@ bool MMU2::eject_filament(uint8_t index, bool recover) { if( ! WaitForMMUReady()) return false; - WaitForHotendTargetTempBeep(); - ReportingRAII rep(CommandInProgress::EjectFilament); current_position[E_AXIS] -= MMU2_FILAMENTCHANGE_EJECT_FEED; plan_buffer_line_curposXYZE(2500.F / 60.F); @@ -595,6 +608,8 @@ void MMU2::execute_extruder_sequence(const E_Step *sequence, uint8_t steps) { current_position[E_AXIS] += pgm_read_float(&(step->extrude)); plan_buffer_line_curposXYZE(pgm_read_float(&(step->feedRate))); st_synchronize(); +// SERIAL_ECHOPGM("EES:"); +// SERIAL_ECHOLN(position[E_AXIS]); step++; } } @@ -641,12 +656,12 @@ void MMU2::ReportProgress(ProgressCode pc) { } void MMU2::OnMMUProgressMsg(ProgressCode pc){ - if( pc != lastProgressCode){ + if (pc != lastProgressCode) { ReportProgress(pc); lastProgressCode = pc; // Act accordingly - one-time handling - switch(pc){ + switch (pc) { case ProgressCode::FeedingToBondtech: // prepare for the movement of the E-motor st_synchronize(); @@ -658,26 +673,27 @@ void MMU2::OnMMUProgressMsg(ProgressCode pc){ } } else { // Act accordingly - every status change (even the same state) - switch(pc){ + switch (pc) { case ProgressCode::FeedingToBondtech: case ProgressCode::FeedingToFSensor: - if ( loadFilamentStarted ) - { - switch ( WhereIsFilament() ) - { + if (loadFilamentStarted) { + switch (WhereIsFilament()) { case FilamentState::AT_FSENSOR: // fsensor triggered, finish FeedingToBondtech state loadFilamentStarted = false; // After the MMU knows the FSENSOR is triggered it will: // 1. Push the filament by additional 30mm (see fsensorToNozzle) // 2. Disengage the idler and push another 5mm. +// SERIAL_ECHOPGM("ATF1="); +// SERIAL_ECHO(current_position[E_AXIS]); current_position[E_AXIS] += 30.0f + 2.0f; plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE); +// SERIAL_ECHOPGM("ATF2="); +// SERIAL_ECHOLN(current_position[E_AXIS]); break; case FilamentState::NOT_PRESENT: // fsensor not triggered, continue moving extruder - if(!blocks_queued()) - { // Only plan a move if there is no move ongoing + if (!blocks_queued()) { // Only plan a move if there is no move ongoing current_position[E_AXIS] += 2.0f; plan_buffer_line_curposXYZE(MMU2_LOAD_TO_NOZZLE_FEED_RATE); } diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a03e0f847..7676cd69a 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -6195,7 +6195,6 @@ void printf_IRSensorAnalogBoardChange(){ static bool lcd_selftest_IRsensor(bool bStandalone) { - bool ret = false; FSensorBlockRunout fsBlockRunout; IR_sensor_analog::SensorRevision oldSensorRevision = fsensor.getSensorRevision(); IR_sensor_analog::SensorRevision newSensorRevision; @@ -6206,7 +6205,7 @@ static bool lcd_selftest_IRsensor(bool bStandalone) if(volt_IR_int < fsensor.IRsensor_Hmin_TRESHOLD){ if(!bStandalone) lcd_selftest_error(TestError::FsensorLevel,"HIGH",""); - goto exit; + return false; } lcd_show_fullscreen_message_and_wait_P(_i("Insert the filament (do not load it) into the extruder and then press the knob."));////MSG_INSERT_FIL c=20 r=6 volt_IR_int = fsensor.getVoltRaw(); @@ -6214,15 +6213,13 @@ static bool lcd_selftest_IRsensor(bool bStandalone) if(volt_IR_int > (fsensor.IRsensor_Lmax_TRESHOLD)){ if(!bStandalone) lcd_selftest_error(TestError::FsensorLevel,"LOW",""); - goto exit; + return false; } if(newSensorRevision != oldSensorRevision) { fsensor.setSensorRevision(newSensorRevision, true); printf_IRSensorAnalogBoardChange(); } - ret = true; -exit: - return ret; + return true; } static void lcd_detect_IRsensor(){