From 809ebe3d902ceb8ca2448d0c6df6da9a7420c362 Mon Sep 17 00:00:00 2001 From: Miguel Risco-Castillo Date: Thu, 12 Jan 2023 04:37:20 -0500 Subject: [PATCH 01/15] ProUI MPC menu implementation --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 212 ++++++++++++++++---------- Marlin/src/lcd/e3v2/proui/dwin.h | 40 +++-- Marlin/src/lcd/e3v2/proui/dwinui.h | 7 + Marlin/src/lcd/language/language_en.h | 5 + Marlin/src/module/probe.h | 2 +- Marlin/src/module/temperature.cpp | 10 +- 6 files changed, 185 insertions(+), 91 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 098db27b1b87..670289279a76 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -31,37 +31,6 @@ #if ENABLED(DWIN_LCD_PROUI) -#if DISABLED(LIMITED_MAX_FR_EDITING) - #warning "LIMITED_MAX_FR_EDITING is recommended with ProUI." -#endif -#if DISABLED(LIMITED_MAX_ACCEL_EDITING) - #warning "LIMITED_MAX_ACCEL_EDITING is recommended with ProUI." -#endif -#if ENABLED(CLASSIC_JERK) && DISABLED(LIMITED_JERK_EDITING) - #warning "LIMITED_JERK_EDITING is recommended with ProUI." -#endif -#if DISABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) - #warning "INDIVIDUAL_AXIS_HOMING_SUBMENU is recommended with ProUI." -#endif -#if DISABLED(SET_PROGRESS_MANUALLY) - #warning "SET_PROGRESS_MANUALLY is recommended with ProUI." -#endif -#if DISABLED(STATUS_MESSAGE_SCROLLING) - #warning "STATUS_MESSAGE_SCROLLING is recommended with ProUI." -#endif -#if DISABLED(BAUD_RATE_GCODE) - #warning "BAUD_RATE_GCODE is recommended with ProUI." -#endif -#if DISABLED(SOUND_MENU_ITEM) - #warning "SOUND_MENU_ITEM is recommended with ProUI." -#endif -#if DISABLED(PRINTCOUNTER) - #warning "PRINTCOUNTER is recommended with ProUI." -#endif -#if HAS_MESH && DISABLED(MESH_EDIT_MENU) - #warning "MESH_EDIT_MENU is recommended with ProUI." -#endif - #include "../../fontutils.h" #include "../../marlinui.h" @@ -297,6 +266,9 @@ MenuClass *MaxAccelMenu = nullptr; MenuClass *MaxJerkMenu = nullptr; #endif MenuClass *StepsMenu = nullptr; +#if ENABLED(MPCTEMP) + MenuClass *HotendMPCMenu = nullptr; +#endif #if ENABLED(PIDTEMP) MenuClass *HotendPIDMenu = nullptr; #endif @@ -1505,64 +1477,80 @@ void DWIN_LevelingDone() { } #endif -// PID process +// PID/MPC process -#if HAS_PIDPLOT - void DWIN_Draw_PIDPopup() { +#if HAS_PIDPLOT && ANY(HAS_PID_HEATING, MPCTEMP) + celsius_t _maxtemp, _target; + void DWIN_Draw_PID_MPC_Popup() { frame_rect_t gfrm = {40, 180, DWIN_WIDTH - 80, 120}; DWINUI::ClearMainArea(); Draw_Popup_Bkgd(); - DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_PID_AUTOTUNE)); - DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("PID target: Celsius")); - switch (HMI_value.pidresult) { - #if ENABLED(PIDTEMP) + #if ENABLED(MPCTEMP) + switch (HMI_value.pidresult) { + case MPCTEMP_START: + _maxtemp = thermalManager.hotend_maxtemp[0]; + _target = 200; + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_MPC_AUTOTUNE)); + DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("MPC target: Celsius")); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for Nozzle is running.")); + break; + case PIDTEMPBED_START: + _maxtemp = BED_MAXTEMP; + _target = HMI_data.BedPidT; + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_PID_AUTOTUNE)); + DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("PID target: Celsius")); + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for BED is running.")); + break; + default: + return; + } + #else + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_PID_AUTOTUNE)); + DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("PID target: Celsius")); + switch (HMI_value.pidresult) { case PIDTEMP_START: + _maxtemp = thermalManager.hotend_maxtemp[0]; + _target = HMI_data.HotendPidT; DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for Nozzle is running.")); - Plot.Draw(gfrm, thermalManager.hotend_maxtemp[0], HMI_data.HotendPidT); - DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, HMI_data.HotendPidT); break; - #endif - #if ENABLED(PIDTEMPBED) case PIDTEMPBED_START: + _maxtemp = BED_MAXTEMP; + _target = HMI_data.BedPidT; DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for BED is running.")); - Plot.Draw(gfrm, BED_MAXTEMP, HMI_data.BedPidT); - DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, HMI_data.BedPidT); break; - #endif - default: break; - } + default: + return; + } + #endif + Plot.Draw(gfrm, _maxtemp, _target); + DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, _target); } #endif -#if EITHER(PIDTEMP, PIDTEMPBED) - - void DWIN_PidTuning(pidresult_t result) { +#if HAS_PID_HEATING + void DWIN_PidTuning(tempcontrol_t result) { HMI_value.pidresult = result; switch (result) { - #if ENABLED(PIDTEMP) - case PIDTEMP_START: - HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT - DWIN_Draw_PIDPopup(); - #else - DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running.")); - #endif - break; - case PID_BAD_EXTRUDER_NUM: - checkkey = last_checkkey; - DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_EXTRUDER_NUM)); - break; - #endif - #if ENABLED(PIDTEMPBED) - case PIDTEMPBED_START: - HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT - DWIN_Draw_PIDPopup(); - #else - DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running.")); - #endif - break; - #endif + case PIDTEMPBED_START: + HMI_SaveProcessID(PidProcess); + #if HAS_PIDPLOT + DWIN_Draw_PID_MPC_Popup(); + #else + DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running.")); + #endif + break; + case PIDTEMP_START: + HMI_SaveProcessID(PidProcess); + #if HAS_PIDPLOT + DWIN_Draw_PID_MPC_Popup(); + #else + DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running.")); + #endif + break; + case PID_BAD_EXTRUDER_NUM: + checkkey = last_checkkey; + DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_EXTRUDER_NUM)); + break; case PID_TUNING_TIMEOUT: checkkey = last_checkkey; DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_ERROR), GET_TEXT_F(MSG_PID_TIMEOUT)); @@ -1575,11 +1563,47 @@ void DWIN_LevelingDone() { checkkey = last_checkkey; DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE), GET_TEXT_F(MSG_BUTTON_DONE)); break; - default: checkkey = last_checkkey; break; + default: + checkkey = last_checkkey; + break; } } +#endif -#endif // PIDTEMP || PIDTEMPBED +#if ENABLED(MPCTEMP) + void DWIN_MPCTuning(tempcontrol_t result) { + HMI_value.pidresult = result; + switch (result) { + case MPCTEMP_START: + HMI_SaveProcessID(MPCProcess); + #if HAS_PIDPLOT + DWIN_Draw_PID_MPC_Popup(); + #else + DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_MPC_AUTOTUNE), F("for Nozzle is running.")); + #endif + break; + case MPC_TEMP_ERROR: + checkkey = last_checkkey; + DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), F(STR_MPC_TEMPERATURE_ERROR)); + ui.reset_alert_level(); + break; + case MPC_INTERRUPTED: + checkkey = last_checkkey; + DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_ERROR), F(STR_MPC_AUTOTUNE STR_MPC_AUTOTUNE_INTERRUPTED)); + ui.reset_alert_level(); + break; + case MPC_DONE: + checkkey = last_checkkey; + DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_MPC_AUTOTUNE), GET_TEXT_F(MSG_BUTTON_DONE)); + ui.reset_alert_level(); + break; + default: + checkkey = last_checkkey; + ui.reset_alert_level(); + break; + } + } +#endif // Started a Print Job void DWIN_Print_Started() { @@ -3040,7 +3064,7 @@ void Draw_Control_Menu() { void Draw_AdvancedSettings_Menu() { checkkey = Menu; - if (SET_MENU(AdvancedSettings, MSG_ADVANCED_SETTINGS, 18)) { + if (SET_MENU(AdvancedSettings, MSG_ADVANCED_SETTINGS, 19)) { BACK_ITEM(Goto_Main_Menu); #if ENABLED(EEPROM_SETTINGS) MENU_ITEM(ICON_WriteEEPROM, MSG_STORE_EEPROM, onDrawMenuItem, WriteEeprom); @@ -3055,6 +3079,9 @@ void Draw_AdvancedSettings_Menu() { #if ENABLED(PIDTEMP) MENU_ITEM_F(ICON_PIDNozzle, STR_HOTEND_PID " Settings", onDrawSubMenu, Draw_HotendPID_Menu); #endif + #if ENABLED(MPCTEMP) + MENU_ITEM_F(ICON_MPCNozzle, STR_MPC_AUTOTUNE " Settings", onDrawSubMenu, Draw_HotendMPC_Menu); + #endif #if ENABLED(PIDTEMPBED) MENU_ITEM_F(ICON_PIDBed, STR_BED_PID " Settings", onDrawSubMenu, Draw_BedPID_Menu); #endif @@ -3470,6 +3497,37 @@ void Draw_Steps_Menu() { } #endif +#if ENABLED(MPCTEMP) + + void HotendMPC() { thermalManager.MPC_autotune(); } + void SetHeaterPower() { SetPFloatOnClick(1, 200, 1); } + void SetBlkHeatCapacity() { SetPFloatOnClick(0, 40, 2); } + void SetSensorRespons() { SetPFloatOnClick(0, 1, 4); } + void SetAmbientXfer() { SetPFloatOnClick(0, 1, 4); } + #if ENABLED(MPC_INCLUDE_FAN) + void onDrawFanAdj(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 4, thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0 + thermalManager.temp_hotend[0].constants.fan255_adjustment); } + void ApplyFanAdj() { thermalManager.temp_hotend[0].constants.fan255_adjustment = MenuData.Value / POW(10, 4) - thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0; } + void SetFanAdj() { SetFloatOnClick(0, 1, 4, thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0 + thermalManager.temp_hotend[0].constants.fan255_adjustment, ApplyFanAdj); } + #endif + + void Draw_HotendMPC_Menu() { + checkkey = Menu; + if (SET_MENU_F(HotendMPCMenu, STR_MPC_AUTOTUNE " Settings", 7)) { + BACK_ITEM(Draw_AdvancedSettings_Menu); + MENU_ITEM(ICON_MPCNozzle, MSG_MPC_AUTOTUNE, onDrawMenuItem, HotendMPC); + EDIT_ITEM(ICON_MPCHeater, MSG_MPC_POWER, onDrawPFloatMenu, SetHeaterPower, &thermalManager.temp_hotend[0].constants.heater_power); + EDIT_ITEM(ICON_MPCHeatCap, MSG_MPC_BLOCK_HEAT_CAPACITY, onDrawPFloat2Menu, SetBlkHeatCapacity, &thermalManager.temp_hotend[0].constants.block_heat_capacity); + EDIT_ITEM(ICON_MPCValue, MSG_SENSOR_RESPONSIVENESS, onDrawPFloat4Menu, SetSensorRespons, &thermalManager.temp_hotend[0].constants.sensor_responsiveness); + EDIT_ITEM(ICON_MPCValue, MSG_MPC_AMBIENT_XFER_COEFF, onDrawPFloat4Menu, SetAmbientXfer, &thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0); + #if ENABLED(MPC_INCLUDE_FAN) + EDIT_ITEM(ICON_MPCFan, MSG_MPC_AMBIENT_XFER_COEFF_FAN, onDrawFanAdj, SetFanAdj, &thermalManager.temp_hotend[0].constants.fan255_adjustment); + #endif + } + UpdateMenu(HotendMPCMenu); + } +#endif // MPCTEMP + + #if ENABLED(PIDTEMPBED) void Draw_BedPID_Menu() { checkkey = Menu; diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 27e1b4ebfacb..24792d74c3db 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -70,17 +70,28 @@ enum processID : uint8_t { WaitResponse, Homing, PidProcess, + MPCProcess, NothingToDo }; -enum pidresult_t : uint8_t { - PIDTEMP_START = 0, - PIDTEMPBED_START, - PID_BAD_EXTRUDER_NUM, - PID_TEMP_TOO_HIGH, - PID_TUNING_TIMEOUT, - PID_DONE, -}; +#if HAS_PID_HEATING || ENABLED(MPCTEMP) + enum tempcontrol_t : uint8_t { + #if HAS_PID_HEATING + PIDTEMP_START = 0, + PIDTEMPBED_START, + PID_BAD_EXTRUDER_NUM, + PID_TEMP_TOO_HIGH, + PID_TUNING_TIMEOUT, + PID_DONE, + #endif + #if ENABLED(MPCTEMP) + MPCTEMP_START, + MPC_TEMP_ERROR, + MPC_INTERRUPTED, + MPC_DONE, + #endif + }; +#endif #define DWIN_CHINESE 123 #define DWIN_ENGLISH 0 @@ -141,7 +152,9 @@ static constexpr size_t eeprom_data_size = sizeof(HMI_data_t); typedef struct { int8_t Color[3]; // Color components - TERN_(HAS_PID_HEATING, pidresult_t pidresult = PID_DONE); + #if HAS_PID_HEATING + tempcontrol_t pidresult = PID_DONE; + #endif uint8_t Select = 0; // Auxiliary selector variable AxisEnum axis = X_AXIS; // Axis Select } HMI_value_t; @@ -356,10 +369,17 @@ void Draw_Steps_Menu(); #endif // PID -void DWIN_PidTuning(pidresult_t result); +void DWIN_PidTuning(tempcontrol_t result); #if ENABLED(PIDTEMP) void Draw_HotendPID_Menu(); #endif #if ENABLED(PIDTEMPBED) void Draw_BedPID_Menu(); #endif + +// MPC +#if ENABLED(MPCTEMP) + void DWIN_MPCTuning(tempcontrol_t result); + void Draw_HotendMPC_Menu(); +#endif + diff --git a/Marlin/src/lcd/e3v2/proui/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h index 3dd37f30dfe6..5e6b1f15f6d3 100644 --- a/Marlin/src/lcd/e3v2/proui/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -149,6 +149,13 @@ #define ICON_CaseLight ICON_Motion #define ICON_LedControl ICON_Motion +//MPC +#define ICON_MPCNozzle ICON_SetEndTemp +#define ICON_MPCValue ICON_Contact +#define ICON_MPCHeater ICON_Temperature +#define ICON_MPCHeatCap ICON_SetBedTemp +#define ICON_MPCFan ICON_FanSpeed + // Buttons #define BTN_Continue 85 #define BTN_Cancel 87 diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 3ce7a5aa2b3a..f2000416f244 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -373,10 +373,15 @@ namespace Language_en { LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss"); LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Autotune"); LSTR MSG_MPC_EDIT = _UxGT("Edit * MPC"); + LSTR MSG_MPC_POWER = _UxGT("Heater Power"); LSTR MSG_MPC_POWER_E = _UxGT("Power *"); + LSTR MSG_MPC_BLOCK_HEAT_CAPACITY = _UxGT("Block Capacity"); LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Block C *"); + LSTR MSG_SENSOR_RESPONSIVENESS = _UxGT("Sensor respons."); LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor res *"); + LSTR MSG_MPC_AMBIENT_XFER_COEFF = _UxGT("Ambient xfer c."); LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient h *"); + LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN = _UxGT("Amb. fan xfer c."); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *"); LSTR MSG_SELECT = _UxGT("Select"); LSTR MSG_SELECT_E = _UxGT("Select *"); diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h index 9b2855132249..961ba411440e 100644 --- a/Marlin/src/module/probe.h +++ b/Marlin/src/module/probe.h @@ -50,7 +50,7 @@ #endif #if ALL(DWIN_LCD_PROUI, INDIVIDUAL_AXIS_HOMING_SUBMENU, MESH_BED_LEVELING) - #define Z_POST_CLEARANCE HMI_data.z_after_homing; + #define Z_POST_CLEARANCE HMI_data.z_after_homing #elif defined(Z_AFTER_HOMING) #define Z_POST_CLEARANCE Z_AFTER_HOMING #elif defined(Z_HOMING_HEIGHT) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index c53fa5df14ef..8b77c3a5c669 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -903,6 +903,7 @@ volatile bool Temperature::raw_temps_ready = false; if (!wait_for_heatup) { SERIAL_ECHOPGM(STR_MPC_AUTOTUNE); SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_INTERRUPTED); + TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPC_INTERRUPTED)); return false; } @@ -943,7 +944,8 @@ volatile bool Temperature::raw_temps_ready = false; do_blocking_move_to(tuningpos); SERIAL_ECHOLNPGM(STR_MPC_COOLING_TO_AMBIENT); - LCD_MESSAGE(MSG_COOLING); + TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPCTEMP_START)); + TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE_F(STR_MPC_COOLING_TO_AMBIENT), LCD_MESSAGE(MSG_COOLING)); millis_t ms = millis(), next_report_ms = ms, next_test_ms = ms + 10000UL; celsius_float_t current_temp = degHotend(active_extruder), ambient_temp = current_temp; @@ -970,7 +972,7 @@ volatile bool Temperature::raw_temps_ready = false; hotend.modeled_ambient_temp = ambient_temp; SERIAL_ECHOLNPGM(STR_MPC_HEATING_PAST_200); - LCD_MESSAGE(MSG_HEATING); + TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE_F(STR_MPC_HEATING_PAST_200), LCD_MESSAGE(MSG_HEATING)); hotend.target = 200.0f; // So M105 looks nice hotend.soft_pwm_amount = MPC_MAX >> 1; const millis_t heat_start_time = next_test_ms = ms; @@ -1022,7 +1024,7 @@ volatile bool Temperature::raw_temps_ready = false; // Allow the system to stabilize under MPC, then get a better measure of ambient loss with and without fan SERIAL_ECHOLNPGM(STR_MPC_MEASURING_AMBIENT, hotend.modeled_block_temp); - LCD_MESSAGE(MSG_MPC_MEASURING_AMBIENT); + TERN(DWIN_LCD_PROUI,LCD_ALERTMESSAGE(MSG_MPC_MEASURING_AMBIENT), LCD_MESSAGE(MSG_MPC_MEASURING_AMBIENT)); hotend.target = hotend.modeled_block_temp; next_test_ms = ms + MPC_dT * 1000; constexpr millis_t settle_time = 20000UL, test_duration = 20000UL; @@ -1062,6 +1064,7 @@ volatile bool Temperature::raw_temps_ready = false; if (!WITHIN(current_temp, t3 - 15.0f, hotend.target + 15.0f)) { SERIAL_ECHOLNPGM(STR_MPC_TEMPERATURE_ERROR); + TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPC_TEMP_ERROR)); break; } } @@ -1083,6 +1086,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOPGM(STR_MPC_AUTOTUNE); SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_FINISHED); + TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPC_DONE)); /* <-- add a slash to enable SERIAL_ECHOLNPGM("t1_time ", t1_time); From d745078d85d3b30e2ce06915919a6e44b9754fda Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 05:53:18 -0600 Subject: [PATCH 02/15] misc. cleanup --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 165 +++++++++++++++++------------ Marlin/src/lcd/e3v2/proui/dwin.h | 53 ++++----- Marlin/src/lcd/e3v2/proui/dwinui.h | 4 +- 3 files changed, 130 insertions(+), 92 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 670289279a76..fd611d42c3b6 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -522,10 +522,10 @@ void DWIN_DrawStatusMessage() { // If the string fits the status line do not scroll it if (slen <= LCD_WIDTH) { - if (hash_changed) { - DWIN_DrawStatusLine(ui.status_message); - hash_changed = false; - } + if (hash_changed) { + DWIN_DrawStatusLine(ui.status_message); + hash_changed = false; + } } else { // String is larger than the available line space @@ -648,14 +648,18 @@ void Draw_PrintDone() { Title.ShowCaption(GET_TEXT_F(MSG_PRINT_DONE)); DWINUI::ClearMainArea(); DWIN_Print_Header(nullptr); + #if HAS_GCODE_PREVIEW - if (Preview_Valid()) { + const bool isvalid = Preview_Valid(); + if (isvalid) { DWIN_ICON_Show(0, 0, 1, 21, 100, 0x00); DWINUI::Draw_Button(BTN_Continue, 86, 300); } - else + #else + constexpr bool isvalid = false; #endif - { + + if (!isvalid) { Draw_Print_ProgressBar(); Draw_Print_Labels(); DWINUI::Draw_Icon(ICON_PrintTime, 15, 173); @@ -703,11 +707,7 @@ void _update_axis_value(const AxisEnum axis, const uint16_t x, const uint16_t y, // Check for a position change static xyz_pos_t oldpos = { -1, -1, -1 }; - #if ENABLED(SHOW_REAL_POS) - const float p = stepper.position(axis) / planner.settings.axis_steps_per_mm[axis]; - #else - const float p = current_position[axis]; - #endif + const float p = TERN(SHOW_REAL_POS, stepper.position(axis) / planner.settings.axis_steps_per_mm[axis], current_position[axis]); const bool changed = oldpos[axis] != p; if (changed) oldpos[axis] = p; @@ -783,15 +783,9 @@ void update_variable() { if (IsMenu(TuneMenu) || IsMenu(TemperatureMenu)) { // Tune page temperature update - #if HAS_HOTEND - if (_new_hotend_target) HotendTargetItem->redraw(); - #endif - #if HAS_HEATED_BED - if (_new_bed_target) BedTargetItem->redraw(); - #endif - #if HAS_FAN - if (_new_fanspeed) FanSpeedItem->redraw(); - #endif + TERN_(HAS_HOTEND, if (_new_hotend_target) HotendTargetItem->redraw()); + TERN_(HAS_HEATED_BED, if (_new_bed_target) BedTargetItem->redraw()); + TERN_(HAS_FAN, if (_new_fanspeed) FanSpeedItem->redraw()); } // Bottom temperature update @@ -928,8 +922,7 @@ void onClickSDItem() { void FileMenuIdle(bool reset=false) { static bool hasUpDir = false; static uint8_t last_itemselected = 0; - static int8_t shift_amt = 0; - static int8_t shift_len = 0; + static int8_t shift_amt = 0, shift_len = 0; if (reset) { last_itemselected = 0; hasUpDir = !card.flag.workDirIsRoot; // is a SubDir @@ -1479,13 +1472,16 @@ void DWIN_LevelingDone() { // PID/MPC process -#if HAS_PIDPLOT && ANY(HAS_PID_HEATING, MPCTEMP) +#if HAS_PIDPLOT && EITHER(HAS_PID_HEATING, MPCTEMP) + celsius_t _maxtemp, _target; void DWIN_Draw_PID_MPC_Popup() { - frame_rect_t gfrm = {40, 180, DWIN_WIDTH - 80, 120}; + frame_rect_t gfrm = { 40, 180, DWIN_WIDTH - 80, 120 }; DWINUI::ClearMainArea(); Draw_Popup_Bkgd(); + #if ENABLED(MPCTEMP) + switch (HMI_value.pidresult) { case MPCTEMP_START: _maxtemp = thermalManager.hotend_maxtemp[0]; @@ -1501,12 +1497,14 @@ void DWIN_LevelingDone() { DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("PID target: Celsius")); DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for BED is running.")); break; - default: - return; + default: return; } - #else + + #else // PID + DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_PID_AUTOTUNE)); DWINUI::Draw_String(HMI_data.PopupTxt_Color, gfrm.x, gfrm.y - DWINUI::fontHeight() - 4, F("PID target: Celsius")); + switch (HMI_value.pidresult) { case PIDTEMP_START: _maxtemp = thermalManager.hotend_maxtemp[0]; @@ -1518,16 +1516,19 @@ void DWIN_LevelingDone() { _target = HMI_data.BedPidT; DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 120, F("for BED is running.")); break; - default: - return; + default: return; } - #endif + + #endif // PID + Plot.Draw(gfrm, _maxtemp, _target); DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, _target); } + #endif #if HAS_PID_HEATING + void DWIN_PidTuning(tempcontrol_t result) { HMI_value.pidresult = result; switch (result) { @@ -1568,9 +1569,11 @@ void DWIN_LevelingDone() { break; } } -#endif + +#endif // HAS_PID_HEATING #if ENABLED(MPCTEMP) + void DWIN_MPCTuning(tempcontrol_t result) { HMI_value.pidresult = result; switch (result) { @@ -1603,7 +1606,8 @@ void DWIN_LevelingDone() { break; } } -#endif + +#endif // MPCTEMP // Started a Print Job void DWIN_Print_Started() { @@ -1739,7 +1743,6 @@ void DWIN_CopySettingsFrom(const char * const buff) { ); leds.update(); #endif - } // Initialize or re-initialize the LCD @@ -1863,6 +1866,7 @@ void DWIN_RedrawScreen() { #endif // ADVANCED_PAUSE_FEATURE #if HAS_MESH + void DWIN_MeshViewer() { if (!leveling_is_valid()) DWIN_Popup_Continue(ICON_BLTouch, GET_TEXT_F(MSG_MESH_VIEWER), GET_TEXT_F(MSG_NO_VALID_MESH)); @@ -1871,8 +1875,8 @@ void DWIN_RedrawScreen() { MeshViewer.Draw(); } } -#endif // HAS_MESH +#endif // HAS_MESH #if HAS_LOCKSCREEN @@ -1898,7 +1902,7 @@ void DWIN_RedrawScreen() { if (lockScreen.isUnlocked()) DWIN_UnLockScreen(); } -#endif // HAS_LOCKSCREEN +#endif // HAS_LOCKSCREEN #if HAS_GCODE_PREVIEW @@ -1910,20 +1914,21 @@ void DWIN_RedrawScreen() { Goto_Main_Menu(); return card.openAndPrintFile(card.filename); } - else HMI_ReturnScreen(); + else + HMI_ReturnScreen(); } - void Goto_ConfirmToPrint() { - Goto_Popup(Preview_DrawFromSD, onClick_ConfirmToPrint); - } +#endif -#else - void Goto_ConfirmToPrint() { +void Goto_ConfirmToPrint() { + #if HAS_GCODE_PREVIEW + Goto_Popup(Preview_DrawFromSD, onClick_ConfirmToPrint); + #else // Print SD file HMI_flag.heat_flag = true; card.openAndPrintFile(card.filename); - } -#endif + #endif +} #if HAS_ESDIAG void Draw_EndStopDiag() { @@ -1939,6 +1944,7 @@ void DWIN_RedrawScreen() { // Tool functions #if ENABLED(EEPROM_SETTINGS) + void WriteEeprom() { DWIN_DrawStatusLine(GET_TEXT_F(MSG_STORE_EEPROM)); DWIN_UpdateLCD(); @@ -1958,8 +1964,9 @@ void DWIN_RedrawScreen() { } #if HAS_MESH - void SaveMesh() { TERN(AUTO_BED_LEVELING_UBL, UBLSaveMesh(), WriteEeprom()); } + void SaveMesh() { TERN(AUTO_BED_LEVELING_UBL, UBLMeshSave(), WriteEeprom()); } #endif + #endif // Reset Printer @@ -2428,9 +2435,9 @@ void TramC () { Tram(4); } MeshViewer.DrawMesh(zval, 2, 2); ui.reset_status(); - if (ABS(MeshViewer.max - MeshViewer.min) < 0.05) { - DWINUI::Draw_CenteredString(140,F("Corners leveled")); - DWINUI::Draw_CenteredString(160,F("Tolerance achieved!")); + if (ABS(MeshViewer.max - MeshViewer.min) < 0.05f) { + DWINUI::Draw_CenteredString(140, F("Corners leveled")); + DWINUI::Draw_CenteredString(160, F("Tolerance achieved!")); } else { uint8_t p = 0; @@ -2722,7 +2729,6 @@ void onDrawGetColorItem(MenuItemClass* menuitem, int8_t line) { DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MYPOS(line + 1), 240); } - #if EITHER(PIDTEMP, PIDTEMPBED) void onDrawPIDi(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_i(*(float*)static_cast(menuitem)->value)); } void onDrawPIDd(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_d(*(float*)static_cast(menuitem)->value)); } @@ -2915,6 +2921,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { } #if HAS_HOTEND + void onDrawMaxJerkE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 173, 133, 200, 147); @@ -2924,6 +2931,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) { } onDrawPFloatMenu(menuitem, line); } + #endif #endif // HAS_CLASSIC_JERK @@ -2953,6 +2961,7 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) { } #if HAS_HOTEND + void onDrawStepsE(MenuItemClass* menuitem, int8_t line) { if (HMI_IsChinese()) { menuitem->SetFrame(1, 153, 148, 194, 161); @@ -2960,6 +2969,7 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) { } onDrawPFloatMenu(menuitem, line); } + #endif #if HAS_ONESTEP_LEVELING @@ -3133,6 +3143,7 @@ void Draw_Move_Menu() { } #if HAS_HOME_OFFSET + void Draw_HomeOffset_Menu() { checkkey = Menu; if (SET_MENU(HomeOffMenu, MSG_SET_HOME_OFFSETS, 4)) { @@ -3143,9 +3154,11 @@ void Draw_Move_Menu() { } UpdateMenu(HomeOffMenu); } + #endif #if HAS_BED_PROBE + void Draw_ProbeSet_Menu() { checkkey = Menu; if (SET_MENU(ProbeSetMenu, MSG_ZPROBE_SETTINGS, 9)) { @@ -3165,6 +3178,7 @@ void Draw_Move_Menu() { } UpdateMenu(ProbeSetMenu); } + #endif void Draw_FilSet_Menu() { @@ -3232,6 +3246,7 @@ void Draw_GetColor_Menu() { } #if BOTH(CASE_LIGHT_MENU, CASELIGHT_USES_BRIGHTNESS) + void Draw_CaseLight_Menu() { checkkey = Menu; if (SET_MENU(CaseLightMenu, MSG_CASE_LIGHT, 3)) { @@ -3241,9 +3256,11 @@ void Draw_GetColor_Menu() { } UpdateMenu(CaseLightMenu); } + #endif #if ENABLED(LED_CONTROL_MENU) + void Draw_LedControl_Menu() { checkkey = Menu; if (SET_MENU(LedControlMenu, MSG_LED_CONTROL, 10)) { @@ -3273,7 +3290,8 @@ void Draw_GetColor_Menu() { } UpdateMenu(LedControlMenu); } -#endif + +#endif // LED_CONTROL_MENU void Draw_Tune_Menu() { checkkey = Menu; @@ -3336,6 +3354,7 @@ void Draw_Motion_Menu() { } #if ENABLED(ADVANCED_PAUSE_FEATURE) + void Draw_FilamentMan_Menu() { checkkey = Menu; if (SET_MENU(FilamentMenu, MSG_FILAMENT_MAN, 5)) { @@ -3351,9 +3370,11 @@ void Draw_Motion_Menu() { } UpdateMenu(FilamentMenu); } + #endif #if ENABLED(MESH_BED_LEVELING) + void Draw_ManualMesh_Menu() { checkkey = Menu; if (SET_MENU(ManualMesh, MSG_UBL_MANUAL_MESH, 6)) { @@ -3366,7 +3387,8 @@ void Draw_Motion_Menu() { } UpdateMenu(ManualMesh); } -#endif + +#endif // MESH_BED_LEVELING #if HAS_PREHEAT @@ -3449,6 +3471,7 @@ void Draw_MaxAccel_Menu() { } #if HAS_CLASSIC_JERK + void Draw_MaxJerk_Menu() { checkkey = Menu; if (SET_MENU_R(MaxJerkMenu, selrect({1, 16, 28, 13}), MSG_JERK, 5)) { @@ -3462,7 +3485,8 @@ void Draw_MaxAccel_Menu() { } UpdateMenu(MaxJerkMenu); } -#endif + +#endif // HAS_CLASSIC_JERK void Draw_Steps_Menu() { checkkey = Menu; @@ -3479,6 +3503,7 @@ void Draw_Steps_Menu() { } #if ENABLED(PIDTEMP) + void Draw_HotendPID_Menu() { checkkey = Menu; if (SET_MENU_F(HotendPIDMenu, STR_HOTEND_PID " Settings", 8)) { @@ -3495,6 +3520,7 @@ void Draw_Steps_Menu() { } UpdateMenu(HotendPIDMenu); } + #endif #if ENABLED(MPCTEMP) @@ -3525,10 +3551,11 @@ void Draw_Steps_Menu() { } UpdateMenu(HotendMPCMenu); } -#endif // MPCTEMP +#endif // MPCTEMP #if ENABLED(PIDTEMPBED) + void Draw_BedPID_Menu() { checkkey = Menu; if (SET_MENU_F(BedPIDMenu, STR_BED_PID " Settings", 8)) { @@ -3545,9 +3572,11 @@ void Draw_Steps_Menu() { } UpdateMenu(BedPIDMenu); } -#endif + +#endif // PIDTEMPBED #if HAS_BED_PROBE + void Draw_ZOffsetWiz_Menu() { checkkey = Menu; if (SET_MENU(ZOffsetWizMenu, MSG_PROBE_WIZARD, 4)) { @@ -3559,9 +3588,11 @@ void Draw_Steps_Menu() { UpdateMenu(ZOffsetWizMenu); if (!axis_is_trusted(Z_AXIS)) LCD_MESSAGE_F("WARNING: Z position unknown, move Z to home"); } + #endif #if ENABLED(INDIVIDUAL_AXIS_HOMING_SUBMENU) + void Draw_Homing_Menu() { checkkey = Menu; if (SET_MENU(HomingMenu, MSG_HOMING, 6)) { @@ -3576,9 +3607,11 @@ void Draw_Steps_Menu() { } UpdateMenu(HomingMenu); } + #endif #if ENABLED(FWRETRACT) + void Draw_FWRetract_Menu() { checkkey = Menu; if (SET_MENU(FWRetractMenu, MSG_FWRETRACT, 6)) { @@ -3591,6 +3624,7 @@ void Draw_Steps_Menu() { } UpdateMenu(FWRetractMenu); } + #endif //============================================================================= @@ -3623,22 +3657,23 @@ void Draw_Steps_Menu() { void SetEditMeshY() { HMI_value.Select = 1; SetIntOnClick(0, GRID_MAX_POINTS_Y - 1, bedLevelTools.mesh_y, ApplyEditMeshY, LiveEditMesh); } void SetEditZValue() { SetPFloatOnClick(Z_OFFSET_MIN, Z_OFFSET_MAX, 3); } #endif -#endif + +#endif // HAS_MESH #if ENABLED(AUTO_BED_LEVELING_UBL) void ApplyUBLSlot() { bedlevel.storage_slot = MenuData.Value; } void SetUBLSlot() { SetIntOnClick(0, settings.calc_num_meshes() - 1, bedlevel.storage_slot, ApplyUBLSlot); } void onDrawUBLSlot(MenuItemClass* menuitem, int8_t line) { - if (bedlevel.storage_slot < 0) bedlevel.storage_slot = 0; + NOLESS(bedlevel.storage_slot, 0); onDrawIntMenu(menuitem, line, bedlevel.storage_slot); } void ApplyUBLTiltGrid() { bedLevelTools.tilt_grid = MenuData.Value; } void SetUBLTiltGrid() { SetIntOnClick(1, 3, bedLevelTools.tilt_grid, ApplyUBLTiltGrid); } - void UBLTiltMesh() { - if (bedlevel.storage_slot < 0) bedlevel.storage_slot = 0; + void UBLMeshTilt() { + NOLESS(bedlevel.storage_slot, 0); char buf[15]; if (bedLevelTools.tilt_grid > 1) { sprintf_P(buf, PSTR("G28O\nG29 J%i"), bedLevelTools.tilt_grid); @@ -3654,15 +3689,15 @@ void Draw_Steps_Menu() { LCD_MESSAGE(MSG_UBL_MESH_FILLED); } - void UBLSaveMesh() { - if (bedlevel.storage_slot < 0) bedlevel.storage_slot = 0; + void UBLMeshSave() { + NOLESS(bedlevel.storage_slot, 0); settings.store_mesh(bedlevel.storage_slot); ui.status_printf(0, GET_TEXT_F(MSG_MESH_SAVED), bedlevel.storage_slot); DONE_BUZZ(true); } - void UBLLoadMesh() { - if (bedlevel.storage_slot < 0) bedlevel.storage_slot = 0; + void UBLMeshLoad() { + NOLESS(bedlevel.storage_slot, 0); settings.load_mesh(bedlevel.storage_slot); } @@ -3684,10 +3719,10 @@ void Draw_Steps_Menu() { #endif #if ENABLED(AUTO_BED_LEVELING_UBL) EDIT_ITEM(ICON_UBLSlot, MSG_UBL_STORAGE_SLOT, onDrawUBLSlot, SetUBLSlot, &bedlevel.storage_slot); - MENU_ITEM(ICON_UBLSaveMesh, MSG_UBL_SAVE_MESH, onDrawMenuItem, UBLSaveMesh); - MENU_ITEM(ICON_UBLLoadMesh, MSG_UBL_LOAD_MESH, onDrawMenuItem, UBLLoadMesh); + MENU_ITEM(ICON_UBLMeshSave, MSG_UBL_SAVE_MESH, onDrawMenuItem, UBLMeshSave); + MENU_ITEM(ICON_UBLMeshLoad, MSG_UBL_LOAD_MESH, onDrawMenuItem, UBLMeshLoad); EDIT_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILTING_GRID, onDrawPInt8Menu, SetUBLTiltGrid, &bedLevelTools.tilt_grid); - MENU_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILT_MESH, onDrawMenuItem, UBLTiltMesh); + MENU_ITEM(ICON_UBLTiltGrid, MSG_UBL_TILT_MESH, onDrawMenuItem, UBLMeshTilt); MENU_ITEM(ICON_UBLSmartFill, MSG_UBL_SMART_FILLIN, onDrawMenuItem, UBLSmartFillMesh); #endif #if ENABLED(MESH_EDIT_MENU) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index 24792d74c3db..f8744a1e447c 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -74,23 +74,25 @@ enum processID : uint8_t { NothingToDo }; -#if HAS_PID_HEATING || ENABLED(MPCTEMP) +#if EITHER(HAS_PID_HEATING, MPCTEMP) + enum tempcontrol_t : uint8_t { - #if HAS_PID_HEATING - PIDTEMP_START = 0, - PIDTEMPBED_START, - PID_BAD_EXTRUDER_NUM, - PID_TEMP_TOO_HIGH, - PID_TUNING_TIMEOUT, - PID_DONE, - #endif - #if ENABLED(MPCTEMP) - MPCTEMP_START, - MPC_TEMP_ERROR, - MPC_INTERRUPTED, - MPC_DONE, - #endif + #if HAS_PID_HEATING + PIDTEMP_START = 0, + PIDTEMPBED_START, + PID_BAD_EXTRUDER_NUM, + PID_TEMP_TOO_HIGH, + PID_TUNING_TIMEOUT, + PID_DONE, + #endif + #if ENABLED(MPCTEMP) + MPCTEMP_START, + MPC_TEMP_ERROR, + MPC_INTERRUPTED, + MPC_DONE, + #endif }; + #endif #define DWIN_CHINESE 123 @@ -226,10 +228,10 @@ void ParkHead(); void ApplyLEDColor(); #endif #if ENABLED(AUTO_BED_LEVELING_UBL) - void UBLTiltMesh(); + void UBLMeshTilt(); bool UBLValidMesh(); - void UBLSaveMesh(); - void UBLLoadMesh(); + void UBLMeshSave(); + void UBLMeshLoad(); #endif #if ENABLED(HOST_SHUTDOWN_MENU_ITEM) && defined(SHUTDOWN_ACTION) void HostShutDown(); @@ -369,12 +371,14 @@ void Draw_Steps_Menu(); #endif // PID -void DWIN_PidTuning(tempcontrol_t result); -#if ENABLED(PIDTEMP) - void Draw_HotendPID_Menu(); -#endif -#if ENABLED(PIDTEMPBED) - void Draw_BedPID_Menu(); +#if HAS_PID_HEATING + void DWIN_PidTuning(tempcontrol_t result); + #if ENABLED(PIDTEMP) + void Draw_HotendPID_Menu(); + #endif + #if ENABLED(PIDTEMPBED) + void Draw_BedPID_Menu(); + #endif #endif // MPC @@ -382,4 +386,3 @@ void DWIN_PidTuning(tempcontrol_t result); void DWIN_MPCTuning(tempcontrol_t result); void Draw_HotendMPC_Menu(); #endif - diff --git a/Marlin/src/lcd/e3v2/proui/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h index 5e6b1f15f6d3..f039327123c8 100644 --- a/Marlin/src/lcd/e3v2/proui/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -138,8 +138,8 @@ #define ICON_UBLActive ICON_HotendTemp #define ICON_UBLActive ICON_HotendTemp #define ICON_UBLSlot ICON_ResumeEEPROM -#define ICON_UBLSaveMesh ICON_WriteEEPROM -#define ICON_UBLLoadMesh ICON_ReadEEPROM +#define ICON_UBLMeshSave ICON_WriteEEPROM +#define ICON_UBLMeshLoad ICON_ReadEEPROM #define ICON_UBLTiltGrid ICON_PrintSize #define ICON_UBLSmartFill ICON_StockConfiguration #define ICON_ZAfterHome ICON_SetEndTemp From 31bb036ccc1960b77b36364e941b7d478583afcb Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 06:06:37 -0600 Subject: [PATCH 03/15] language tweaks --- Marlin/src/lcd/e3v2/proui/dwinui.h | 4 +--- Marlin/src/lcd/language/language_an.h | 1 - Marlin/src/lcd/language/language_cz.h | 1 - Marlin/src/lcd/language/language_da.h | 1 - Marlin/src/lcd/language/language_de.h | 1 - Marlin/src/lcd/language/language_en.h | 23 +++++++++++----------- Marlin/src/lcd/language/language_es.h | 1 - Marlin/src/lcd/language/language_eu.h | 1 - Marlin/src/lcd/language/language_fr.h | 1 - Marlin/src/lcd/language/language_gl.h | 1 - Marlin/src/lcd/language/language_hr.h | 1 - Marlin/src/lcd/language/language_hu.h | 1 - Marlin/src/lcd/language/language_it.h | 1 - Marlin/src/lcd/language/language_jp_kana.h | 1 - Marlin/src/lcd/language/language_nl.h | 1 - Marlin/src/lcd/language/language_pl.h | 1 - Marlin/src/lcd/language/language_pt_br.h | 1 - Marlin/src/lcd/language/language_ro.h | 1 - Marlin/src/lcd/language/language_ru.h | 1 - Marlin/src/lcd/language/language_sk.h | 1 - Marlin/src/lcd/language/language_sv.h | 1 - Marlin/src/lcd/language/language_tr.h | 1 - Marlin/src/lcd/language/language_uk.h | 1 - Marlin/src/lcd/language/language_vi.h | 1 - Marlin/src/lcd/language/language_zh_CN.h | 1 - Marlin/src/lcd/language/language_zh_TW.h | 1 - 26 files changed, 12 insertions(+), 39 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h index f039327123c8..054b9707f634 100644 --- a/Marlin/src/lcd/e3v2/proui/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -144,12 +144,10 @@ #define ICON_UBLSmartFill ICON_StockConfiguration #define ICON_ZAfterHome ICON_SetEndTemp - - #define ICON_CaseLight ICON_Motion #define ICON_LedControl ICON_Motion -//MPC +// MPC #define ICON_MPCNozzle ICON_SetEndTemp #define ICON_MPCValue ICON_Contact #define ICON_MPCHeater ICON_Temperature diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h index 8e65f3801285..1d4801278ce2 100644 --- a/Marlin/src/lcd/language/language_an.h +++ b/Marlin/src/lcd/language/language_an.h @@ -103,7 +103,6 @@ namespace Language_an { LSTR MSG_FLOW_N = _UxGT("Fluxo ~"); LSTR MSG_CONTROL = _UxGT("Control"); LSTR MSG_AUTOTEMP = _UxGT("Temperatura Auto."); - LSTR MSG_SELECT = _UxGT("Trigar"); LSTR MSG_SELECT_E = _UxGT("Trigar *"); LSTR MSG_ACC = _UxGT("Aceleracion"); LSTR MSG_VTRAV_MIN = _UxGT("Vel. viache min"); diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h index 50d490a6c2eb..db50def2da87 100644 --- a/Marlin/src/lcd/language/language_cz.h +++ b/Marlin/src/lcd/language/language_cz.h @@ -264,7 +264,6 @@ namespace Language_cz { LSTR MSG_LCD_OFF = _UxGT("Vyp"); LSTR MSG_PID_AUTOTUNE = _UxGT("PID automatika"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID automatika *"); - LSTR MSG_SELECT = _UxGT("Vybrat"); LSTR MSG_SELECT_E = _UxGT("Vybrat *"); LSTR MSG_ACC = _UxGT("Zrychl"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h index 4078c413d110..7d3867c3584c 100644 --- a/Marlin/src/lcd/language/language_da.h +++ b/Marlin/src/lcd/language/language_da.h @@ -98,7 +98,6 @@ namespace Language_da { LSTR MSG_AUTOTEMP = _UxGT("Autotemp"); LSTR MSG_LCD_ON = _UxGT("Til"); LSTR MSG_LCD_OFF = _UxGT("Fra"); - LSTR MSG_SELECT = _UxGT("Vælg"); LSTR MSG_SELECT_E = _UxGT("Vælg *"); LSTR MSG_A_RETRACT = _UxGT("A-retract"); LSTR MSG_A_TRAVEL = _UxGT("A-rejse"); diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index c2af37fc7777..a60da34d5f13 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -357,7 +357,6 @@ namespace Language_de { LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor res *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient h *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *"); - LSTR MSG_SELECT = _UxGT("Auswählen"); LSTR MSG_SELECT_E = _UxGT("Auswählen *"); LSTR MSG_ACC = _UxGT("Beschleunigung"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index f2000416f244..36eb976d20e4 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -375,15 +375,14 @@ namespace Language_en { LSTR MSG_MPC_EDIT = _UxGT("Edit * MPC"); LSTR MSG_MPC_POWER = _UxGT("Heater Power"); LSTR MSG_MPC_POWER_E = _UxGT("Power *"); - LSTR MSG_MPC_BLOCK_HEAT_CAPACITY = _UxGT("Block Capacity"); - LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Block C *"); - LSTR MSG_SENSOR_RESPONSIVENESS = _UxGT("Sensor respons."); - LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor res *"); - LSTR MSG_MPC_AMBIENT_XFER_COEFF = _UxGT("Ambient xfer c."); - LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient h *"); - LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN = _UxGT("Amb. fan xfer c."); - LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Amb. h fan *"); - LSTR MSG_SELECT = _UxGT("Select"); + LSTR MSG_MPC_BLOCK_HEAT_CAPACITY = _UxGT("Heat Capacity"); + LSTR MSG_MPC_BLOCK_HEAT_CAPACITY_E = _UxGT("Heat Cap. *"); + LSTR MSG_SENSOR_RESPONSIVENESS = _UxGT("Sensor Resp."); + LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Sensor Resp. *"); + LSTR MSG_MPC_AMBIENT_XFER_COEFF = _UxGT("Ambient Coeff."); + LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("Ambient Co. *"); + LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN = _UxGT("Fan coeff."); + LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("Fan coeff. *"); LSTR MSG_SELECT_E = _UxGT("Select *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); @@ -558,11 +557,11 @@ namespace Language_en { LSTR MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder"); LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *"); LSTR MSG_FILAMENTCHANGE = _UxGT("Change Filament"); - LSTR MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *"); + LSTR MSG_FILAMENTCHANGE_E = _UxGT("Change * Filament"); LSTR MSG_FILAMENTLOAD = _UxGT("Load Filament"); - LSTR MSG_FILAMENTLOAD_E = _UxGT("Load *"); + LSTR MSG_FILAMENTLOAD_E = _UxGT("Load * Filament"); LSTR MSG_FILAMENTUNLOAD = _UxGT("Unload Filament"); - LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Unload *"); + LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Unload * Filament"); LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All"); #if ENABLED(MULTI_VOLUME) LSTR MSG_ATTACH_MEDIA = _UxGT("Attach SD Card"); diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h index 5422a8117ba1..92e469576536 100644 --- a/Marlin/src/lcd/language/language_es.h +++ b/Marlin/src/lcd/language/language_es.h @@ -265,7 +265,6 @@ namespace Language_es { LSTR MSG_LCD_OFF = _UxGT("Apg"); LSTR MSG_PID_AUTOTUNE = _UxGT("PID Auto-ajuste"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Auto-ajuste *"); - LSTR MSG_SELECT = _UxGT("Seleccionar"); LSTR MSG_SELECT_E = _UxGT("Seleccionar *"); LSTR MSG_ACC = _UxGT("Aceleración"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h index 77c8dbe2d870..e5e1d898ab70 100644 --- a/Marlin/src/lcd/language/language_eu.h +++ b/Marlin/src/lcd/language/language_eu.h @@ -161,7 +161,6 @@ namespace Language_eu { LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max"); LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt"); LSTR MSG_AUTOTEMP = _UxGT("Auto tenperatura"); - LSTR MSG_SELECT = _UxGT("Aukeratu"); LSTR MSG_SELECT_E = _UxGT("Aukeratu *"); LSTR MSG_ACC = _UxGT("Azelerazioa"); LSTR MSG_JERK = _UxGT("Astindua"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index ed4c7ca9af50..02576f802c1b 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -272,7 +272,6 @@ namespace Language_fr { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Echec Autotune! E incorrect"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute"); LSTR MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Opér. expirée"); - LSTR MSG_SELECT = _UxGT("Sélectionner"); LSTR MSG_SELECT_E = _UxGT("Sélectionner *"); LSTR MSG_ACC = _UxGT("Accélération"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 005c6cc5d025..97b8b0831789 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -266,7 +266,6 @@ namespace Language_gl { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-Sint. fallida! Extrusor danado."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-Sint. fallida! Temperatura moi alta."); LSTR MSG_PID_TIMEOUT = _UxGT("Auto-Sint. fallida! Tempo excedido."); - LSTR MSG_SELECT = _UxGT("Escolla"); LSTR MSG_SELECT_E = _UxGT("Escolla *"); LSTR MSG_ACC = _UxGT("Acel"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h index 7ca0f5405af1..36eaf78acb1a 100644 --- a/Marlin/src/lcd/language/language_hr.h +++ b/Marlin/src/lcd/language/language_hr.h @@ -95,7 +95,6 @@ namespace Language_hr { LSTR MSG_BED = _UxGT("Bed"); LSTR MSG_FAN_SPEED = _UxGT("Brzina ventilatora"); LSTR MSG_FAN_SPEED_N = _UxGT("Brzina ventilatora ~"); - LSTR MSG_SELECT = _UxGT("Odaberi"); LSTR MSG_SELECT_E = _UxGT("Odaberi *"); LSTR MSG_TEMPERATURE = _UxGT("Temperature"); LSTR MSG_MOTION = _UxGT("Gibanje"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 09fb71876f3f..0d70148c624c 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -309,7 +309,6 @@ namespace Language_hu { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Hangolási hiba! Rossz adagoló."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Hangolási hiba! Magas hömérséklet."); LSTR MSG_PID_TIMEOUT = _UxGT("Hangolási hiba! Idötúllépés."); - LSTR MSG_SELECT = _UxGT("Kiválaszt"); LSTR MSG_SELECT_E = _UxGT("Kiválaszt *"); LSTR MSG_ACC = _UxGT("Gyorsítás"); LSTR MSG_JERK = _UxGT("Rántás"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index def1b9834317..b0adb7791fe2 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -370,7 +370,6 @@ namespace Language_it { LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Reattiv.Sens. *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("H ambiente *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("H Amb. vent. *"); - LSTR MSG_SELECT = _UxGT("Seleziona"); LSTR MSG_SELECT_E = _UxGT("Seleziona *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h index 2f75b887590e..989d5844f603 100644 --- a/Marlin/src/lcd/language/language_jp_kana.h +++ b/Marlin/src/lcd/language/language_jp_kana.h @@ -114,7 +114,6 @@ namespace Language_jp_kana { LSTR MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp" LSTR MSG_LCD_ON = _UxGT("オン"); // "On" LSTR MSG_LCD_OFF = _UxGT("オフ"); // "Off" - LSTR MSG_SELECT = _UxGT("センタク"); // "Select" LSTR MSG_SELECT_E = _UxGT("センタク *"); LSTR MSG_ACC = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel" LSTR MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk" diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h index 8aa74d7e9fdc..0636899c9523 100644 --- a/Marlin/src/lcd/language/language_nl.h +++ b/Marlin/src/lcd/language/language_nl.h @@ -108,7 +108,6 @@ namespace Language_nl { LSTR MSG_AUTOTEMP = _UxGT("Autotemp"); LSTR MSG_LCD_ON = _UxGT("Aan"); LSTR MSG_LCD_OFF = _UxGT("Uit"); - LSTR MSG_SELECT = _UxGT("Selecteer"); LSTR MSG_SELECT_E = _UxGT("Selecteer *"); LSTR MSG_ACC = _UxGT("Versn"); LSTR MSG_TEMPERATURE = _UxGT("Temperatuur"); diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h index 635866baf106..7eb17e93f73b 100644 --- a/Marlin/src/lcd/language/language_pl.h +++ b/Marlin/src/lcd/language/language_pl.h @@ -269,7 +269,6 @@ namespace Language_pl { LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Strojenie PID zakończone"); - LSTR MSG_SELECT = _UxGT("Wybierz"); LSTR MSG_SELECT_E = _UxGT("Wybierz *"); LSTR MSG_ACC = _UxGT("Przyspieszenie"); LSTR MSG_JERK = _UxGT("Zryw"); diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h index 1d07b2b94f22..d34cd0c0c187 100644 --- a/Marlin/src/lcd/language/language_pt_br.h +++ b/Marlin/src/lcd/language/language_pt_br.h @@ -236,7 +236,6 @@ namespace Language_pt_br { LSTR MSG_AUTOTEMP = _UxGT("Temp. Automática"); LSTR MSG_LCD_ON = _UxGT("Ligado"); LSTR MSG_LCD_OFF = _UxGT("Desligado"); - LSTR MSG_SELECT = _UxGT("Selecionar"); LSTR MSG_SELECT_E = _UxGT("Selecionar *"); LSTR MSG_ACC = _UxGT("Acel."); LSTR MSG_JERK = _UxGT("Arrancada"); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index 2cf6fff263cc..57af06202359 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -264,7 +264,6 @@ namespace Language_ro { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed! Bad extruder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high."); LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout."); - LSTR MSG_SELECT = _UxGT("Select"); LSTR MSG_SELECT_E = _UxGT("Select *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Jerk"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index ec9ddfa7f63c..0af84d120a6b 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -386,7 +386,6 @@ namespace Language_ru { LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора! Температура повышена."); LSTR MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени."); - LSTR MSG_SELECT = _UxGT("Выбор"); LSTR MSG_SELECT_E = _UxGT("Выбор *"); LSTR MSG_ACC = _UxGT("Ускорение"); LSTR MSG_JERK = _UxGT("Рывок"); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index bb332f4b1ff2..812e2a03c530 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -368,7 +368,6 @@ namespace Language_sk { LSTR MSG_SENSOR_RESPONSIVENESS_E = _UxGT("Rozliš. senz. *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_E = _UxGT("H okolia *"); LSTR MSG_MPC_AMBIENT_XFER_COEFF_FAN_E = _UxGT("H vent. okolia *"); - LSTR MSG_SELECT = _UxGT("Vybrať"); LSTR MSG_SELECT_E = _UxGT("Vybrať *"); LSTR MSG_ACC = _UxGT("Zrýchlenie"); LSTR MSG_JERK = _UxGT("Skok"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index 1342ccaad764..7b3c2d56a66a 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -294,7 +294,6 @@ namespace Language_sv { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autojustera misslyckad! Dålig extruder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autojustera misslyckad! Temperatur för hög."); LSTR MSG_PID_TIMEOUT = _UxGT("Autojustera misslyckad! Tidsgräns."); - LSTR MSG_SELECT = _UxGT("Välj"); LSTR MSG_SELECT_E = _UxGT("Välj *"); LSTR MSG_ACC = _UxGT("Accel"); LSTR MSG_JERK = _UxGT("Ryck"); diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h index cb2766306c8e..84d33f764de0 100644 --- a/Marlin/src/lcd/language/language_tr.h +++ b/Marlin/src/lcd/language/language_tr.h @@ -256,7 +256,6 @@ namespace Language_tr { LSTR MSG_LCD_OFF = _UxGT("Kapalı"); LSTR MSG_PID_AUTOTUNE = _UxGT("PID Kalibrasyon"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Kalibrasyon *"); - LSTR MSG_SELECT = _UxGT("Seç"); LSTR MSG_SELECT_E = _UxGT("Seç *"); LSTR MSG_ACC = _UxGT("İvme"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 6b4ebc79cd1e..59dd14812b7f 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -391,7 +391,6 @@ namespace Language_uk { LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Збій автопідбору! Температура завищена."); LSTR MSG_PID_TIMEOUT = _UxGT("Збій автопідбору! Вичерпан час."); - LSTR MSG_SELECT = _UxGT("Вибрати"); LSTR MSG_SELECT_E = _UxGT("Вибрати *"); LSTR MSG_ACC = _UxGT("Прискорорення"); LSTR MSG_JERK = _UxGT("Ривок"); diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h index 27c6ee11812f..ed50cca6633b 100644 --- a/Marlin/src/lcd/language/language_vi.h +++ b/Marlin/src/lcd/language/language_vi.h @@ -224,7 +224,6 @@ namespace Language_vi { LSTR MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp LSTR MSG_LCD_ON = _UxGT("Bật"); // on LSTR MSG_LCD_OFF = _UxGT("Tắt"); // off - LSTR MSG_SELECT = _UxGT("Lựa"); // Select LSTR MSG_SELECT_E = _UxGT("Lựa *"); LSTR MSG_ACC = _UxGT("Tăng Tốc"); LSTR MSG_JERK = _UxGT("Giật"); diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index 4c5a94edcdc8..26515b60940d 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -264,7 +264,6 @@ namespace Language_zh_CN { LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("自动调失败! 坏的挤出机"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("自动调失败! 温度太高"); LSTR MSG_PID_TIMEOUT = _UxGT("自动调失败! 超时"); - LSTR MSG_SELECT = _UxGT("选择"); // "Select" LSTR MSG_SELECT_E = _UxGT("选择 *"); LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration LSTR MSG_JERK = _UxGT("抖动速率"); // "Jerk" diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h index 2aa3554fe80f..6bc00e712aca 100644 --- a/Marlin/src/lcd/language/language_zh_TW.h +++ b/Marlin/src/lcd/language/language_zh_TW.h @@ -249,7 +249,6 @@ namespace Language_zh_TW { LSTR MSG_LCD_ON = _UxGT("開 "); // "On" LSTR MSG_LCD_OFF = _UxGT("關 "); // "Off" - LSTR MSG_SELECT = _UxGT("選擇"); // "Select" LSTR MSG_SELECT_E = _UxGT("選擇 *"); LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration LSTR MSG_JERK = _UxGT("抖動速率"); // "Jerk" From 484a12dbd31cb2dc6db6214d0eccbf1692ae5406 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 06:45:00 -0600 Subject: [PATCH 04/15] menu tweak --- Marlin/src/lcd/menu/menu_motion.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp index ffd60f77e8e4..1bd580aa2b34 100644 --- a/Marlin/src/lcd/menu/menu_motion.cpp +++ b/Marlin/src/lcd/menu/menu_motion.cpp @@ -246,25 +246,15 @@ void menu_move() { #endif } #elif EXTRUDERS == 3 - if (active_extruder < 2) { - if (active_extruder) - GCODES_ITEM_N(0, MSG_SELECT_E, F("T0")); - else - GCODES_ITEM_N(1, MSG_SELECT_E, F("T1")); - } + if (active_extruder < 2) + GCODES_ITEM_N(1 - active_extruder, MSG_SELECT_E, active_extruder ? F("T0") : F("T1")); #else - if (active_extruder) - GCODES_ITEM_N(0, MSG_SELECT_E, F("T0")); - else - GCODES_ITEM_N(1, MSG_SELECT_E, F("T1")); + GCODES_ITEM_N(1 - active_extruder, MSG_SELECT_E, active_extruder ? F("T0") : F("T1")); #endif #elif ENABLED(DUAL_X_CARRIAGE) - if (active_extruder) - GCODES_ITEM_N(0, MSG_SELECT_E, F("T0")); - else - GCODES_ITEM_N(1, MSG_SELECT_E, F("T1")); + GCODES_ITEM_N(1 - active_extruder, MSG_SELECT_E, active_extruder ? F("T0") : F("T1")); #endif From abf3c27822ac80d7302d7211d99a083ca8e671e4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 11:08:30 -0600 Subject: [PATCH 05/15] cleanup --- Marlin/src/module/temperature.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 8b77c3a5c669..2376c88acb2c 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -944,8 +944,13 @@ volatile bool Temperature::raw_temps_ready = false; do_blocking_move_to(tuningpos); SERIAL_ECHOLNPGM(STR_MPC_COOLING_TO_AMBIENT); - TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPCTEMP_START)); - TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE_F(STR_MPC_COOLING_TO_AMBIENT), LCD_MESSAGE(MSG_COOLING)); + #if ENABLED(DWIN_LCD_PROUI) + DWIN_MPCTuning(MPCTEMP_START); + LCD_ALERTMESSAGE_F(STR_MPC_COOLING_TO_AMBIENT); + #else + LCD_MESSAGE(MSG_COOLING); + #endif + millis_t ms = millis(), next_report_ms = ms, next_test_ms = ms + 10000UL; celsius_float_t current_temp = degHotend(active_extruder), ambient_temp = current_temp; @@ -1024,7 +1029,7 @@ volatile bool Temperature::raw_temps_ready = false; // Allow the system to stabilize under MPC, then get a better measure of ambient loss with and without fan SERIAL_ECHOLNPGM(STR_MPC_MEASURING_AMBIENT, hotend.modeled_block_temp); - TERN(DWIN_LCD_PROUI,LCD_ALERTMESSAGE(MSG_MPC_MEASURING_AMBIENT), LCD_MESSAGE(MSG_MPC_MEASURING_AMBIENT)); + TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE(MSG_MPC_MEASURING_AMBIENT), LCD_MESSAGE(MSG_MPC_MEASURING_AMBIENT)); hotend.target = hotend.modeled_block_temp; next_test_ms = ms + MPC_dT * 1000; constexpr millis_t settle_time = 20000UL, test_duration = 20000UL; @@ -1088,7 +1093,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_FINISHED); TERN_(DWIN_LCD_PROUI, DWIN_MPCTuning(MPC_DONE)); - /* <-- add a slash to enable + #if 0 SERIAL_ECHOLNPGM("t1_time ", t1_time); SERIAL_ECHOLNPGM("sample_count ", sample_count); SERIAL_ECHOLNPGM("sample_distance ", sample_distance); @@ -1097,7 +1102,8 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOLNPGM("t1 ", t1, " t2 ", t2, " t3 ", t3); SERIAL_ECHOLNPGM("asymp_temp ", asymp_temp); SERIAL_ECHOLNPAIR_F("block_responsiveness ", block_responsiveness, 4); - //*/ + #endif + SERIAL_ECHOLNPGM("MPC_BLOCK_HEAT_CAPACITY ", constants.block_heat_capacity); SERIAL_ECHOLNPAIR_F("MPC_SENSOR_RESPONSIVENESS ", constants.sensor_responsiveness, 4); SERIAL_ECHOLNPAIR_F("MPC_AMBIENT_XFER_COEFF ", constants.ambient_xfer_coeff_fan0, 4); From a1736f41987330c03a4da3d4daf23982c8fe7c9a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 11:40:03 -0600 Subject: [PATCH 06/15] language updates --- Marlin/src/gcode/geometry/M206_M428.cpp | 2 +- Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp | 4 ++-- Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h | 1 + Marlin/src/lcd/extui/dgus/dgus_extui.cpp | 10 +++++----- .../src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h | 8 ++++---- Marlin/src/lcd/language/language_en.h | 3 +++ Marlin/src/module/temperature.cpp | 12 ++++++------ 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp index 494b2115b826..b12e68060537 100644 --- a/Marlin/src/gcode/geometry/M206_M428.cpp +++ b/Marlin/src/gcode/geometry/M206_M428.cpp @@ -91,7 +91,7 @@ void GcodeSuite::M428() { diff[i] = -current_position[i]; if (!WITHIN(diff[i], -20, 20)) { SERIAL_ERROR_MSG(STR_ERR_M428_TOO_FAR); - LCD_ALERTMESSAGE_F("Err: Too far!"); + LCD_ALERTMESSAGE(MSG_ERR_M428_TOO_FAR); ERR_BUZZ(); return; } diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp index 37543a237c0b..82dbeee4112b 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp @@ -295,11 +295,11 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var) // Don't let the user in the dark why there is no reaction. if (!ExtUI::isMediaInserted()) { - setstatusmessagePGM(GET_TEXT(MSG_NO_MEDIA)); + setstatusmessage(GET_TEXT_F(MSG_NO_MEDIA)); return; } if (card.flag.abort_sd_printing) { - setstatusmessagePGM(GET_TEXT(MSG_MEDIA_ABORTING)); + setstatusmessage(GET_TEXT_F(MSG_MEDIA_ABORTING)); return; } } diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h index 07a108e84663..340938c9790d 100644 --- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h +++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandlerBase.h @@ -51,6 +51,7 @@ class DGUSScreenHandler { static void setstatusmessage(const char *msg); // The same for messages from Flash static void setstatusmessagePGM(PGM_P const msg); + static void setstatusmessage(FSTR_P const fmsg) { setstatusmessagePGM(FTOP(fmsg)); } // Callback for VP "Display wants to change screen on idle printer" static void ScreenChangeHookIfIdle(DGUS_VP_Variable &var, void *val_ptr); // Callback for VP "Screen has been changed" diff --git a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp index b041687a14fa..dd672e74bb9c 100644 --- a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp +++ b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp @@ -137,19 +137,19 @@ namespace ExtUI { // Called for temperature PID tuning result switch (rst) { case PID_STARTED: - ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_AUTOTUNE)); + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_AUTOTUNE)); break; case PID_BAD_EXTRUDER_NUM: - ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_BAD_EXTRUDER_NUM)); + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM)); break; case PID_TEMP_TOO_HIGH: - ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_TEMP_TOO_HIGH)); + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH)); break; case PID_TUNING_TIMEOUT: - ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_TIMEOUT)); + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_TIMEOUT)); break; case PID_DONE: - ScreenHandler.setstatusmessagePGM(GET_TEXT(MSG_PID_AUTOTUNE_DONE)); + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_AUTOTUNE_DONE)); break; } ScreenHandler.GotoScreen(DGUSLCD_SCREEN_MAIN); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h index cc59bda6d7fa..6a00a4f72aff 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h @@ -72,10 +72,10 @@ class DGUSScreenHandler { static void SetMessageLine(const char* msg, uint8_t line); static void SetMessageLinePGM(PGM_P msg, uint8_t line); - static void SetStatusMessage(const char* msg, const millis_t duration = DGUS_STATUS_EXPIRATION_MS); - static void SetStatusMessage(FSTR_P const msg, const millis_t duration = DGUS_STATUS_EXPIRATION_MS); + static void SetStatusMessage(const char* msg, const millis_t duration=DGUS_STATUS_EXPIRATION_MS); + static void SetStatusMessage(FSTR_P const msg, const millis_t duration=DGUS_STATUS_EXPIRATION_MS); - static void ShowWaitScreen(DGUS_Screen return_screen, bool has_continue = false); + static void ShowWaitScreen(DGUS_Screen return_screen, bool has_continue=false); static DGUS_Screen GetCurrentScreen(); static void TriggerScreenChange(DGUS_Screen screen); @@ -115,7 +115,7 @@ class DGUSScreenHandler { static const DGUS_Addr* FindScreenAddrList(DGUS_Screen screen); static bool CallScreenSetup(DGUS_Screen screen); - static void MoveToScreen(DGUS_Screen screen, bool abort_wait = false); + static void MoveToScreen(DGUS_Screen screen, bool abort_wait=false); static bool SendScreenVPData(DGUS_Screen screen, bool complete_update); static bool settings_ready; diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 36eb976d20e4..8027b544aac6 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -107,6 +107,7 @@ namespace Language_en { LSTR MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y"); LSTR MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z"); LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied"); + LSTR MSG_ERR_M428_TOO_FAR = _UxGT("Err: Too far!"); LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard"); LSTR MSG_SELECT_ORIGIN = _UxGT("Select Origin"); LSTR MSG_LAST_VALUE_SP = _UxGT("Last value "); @@ -371,6 +372,8 @@ namespace Language_en { LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high."); LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout."); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss"); + LSTR MSG_MPC_HEATING_PAST_200 = _UxGT("Heating to >200C"); + LSTR MSG_MPC_COOLING_TO_AMBIENT = _UxGT("Cooling to ambient"); LSTR MSG_MPC_AUTOTUNE = _UxGT("MPC Autotune"); LSTR MSG_MPC_EDIT = _UxGT("Edit * MPC"); LSTR MSG_MPC_POWER = _UxGT("Heater Power"); diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 2376c88acb2c..0d9c9fb106eb 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -882,7 +882,7 @@ volatile bool Temperature::raw_temps_ready = false; #if ENABLED(MPCTEMP) void Temperature::MPC_autotune() { - auto housekeeping = [] (millis_t& ms, celsius_float_t& current_temp, millis_t& next_report_ms) { + auto housekeeping = [] (millis_t &ms, celsius_float_t ¤t_temp, millis_t &next_report_ms) { ms = millis(); if (updateTemperaturesIfReady()) { // temp sample ready @@ -940,13 +940,12 @@ volatile bool Temperature::raw_temps_ready = false; set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 255); planner.sync_fan_speeds(fan_speed); #endif - const xyz_pos_t tuningpos = MPC_TUNING_POS; - do_blocking_move_to(tuningpos); + do_blocking_move_to(xyz_pos_t(MPC_TUNING_POS)); SERIAL_ECHOLNPGM(STR_MPC_COOLING_TO_AMBIENT); #if ENABLED(DWIN_LCD_PROUI) DWIN_MPCTuning(MPCTEMP_START); - LCD_ALERTMESSAGE_F(STR_MPC_COOLING_TO_AMBIENT); + LCD_ALERTMESSAGE(MSG_MPC_COOLING_TO_AMBIENT); #else LCD_MESSAGE(MSG_COOLING); #endif @@ -957,7 +956,7 @@ volatile bool Temperature::raw_temps_ready = false; wait_for_heatup = true; for (;;) { // Can be interrupted with M108 - if (!housekeeping(ms, current_temp, next_report_ms)) return; + if (!wait_for_heatup || !housekeeping(ms, current_temp, next_report_ms)) return; if (ELAPSED(ms, next_test_ms)) { if (current_temp >= ambient_temp) { @@ -968,6 +967,7 @@ volatile bool Temperature::raw_temps_ready = false; next_test_ms += 10000UL; } } + wait_for_heatup = false; #if HAS_FAN set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 0); @@ -977,7 +977,7 @@ volatile bool Temperature::raw_temps_ready = false; hotend.modeled_ambient_temp = ambient_temp; SERIAL_ECHOLNPGM(STR_MPC_HEATING_PAST_200); - TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE_F(STR_MPC_HEATING_PAST_200), LCD_MESSAGE(MSG_HEATING)); + TERN(DWIN_LCD_PROUI, LCD_ALERTMESSAGE(MSG_MPC_HEATING_PAST_200), LCD_MESSAGE(MSG_HEATING)); hotend.target = 200.0f; // So M105 looks nice hotend.soft_pwm_amount = MPC_MAX >> 1; const millis_t heat_start_time = next_test_ms = ms; From 311d44efa240e668d44d9ceea616b4e902ea6a1a Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 12:49:01 -0600 Subject: [PATCH 07/15] PID adjustments --- Marlin/src/gcode/temp/M303.cpp | 19 +--- Marlin/src/gcode/temp/M306.cpp | 28 +++--- Marlin/src/inc/Conditionals_post.h | 3 + Marlin/src/lcd/e3v2/proui/dwin.cpp | 88 +++++++++++-------- Marlin/src/lcd/e3v2/proui/dwin.h | 34 +++---- Marlin/src/lcd/extui/dgus/dgus_extui.cpp | 4 +- .../extui/dgus_reloaded/DGUSScreenHandler.cpp | 4 +- Marlin/src/lcd/extui/example/example.cpp | 10 +-- .../ftdi_eve_touch_ui/ftdi_eve_extui.cpp | 4 +- Marlin/src/lcd/extui/malyan/malyan_extui.cpp | 4 +- Marlin/src/lcd/extui/ui_api.h | 2 +- Marlin/src/lcd/language/language_de.h | 2 +- Marlin/src/lcd/language/language_en.h | 2 +- Marlin/src/lcd/language/language_fr.h | 2 +- Marlin/src/lcd/language/language_gl.h | 2 +- Marlin/src/lcd/language/language_hu.h | 2 +- Marlin/src/lcd/language/language_it.h | 2 +- Marlin/src/lcd/language/language_ro.h | 2 +- Marlin/src/lcd/language/language_ru.h | 2 +- Marlin/src/lcd/language/language_sk.h | 2 +- Marlin/src/lcd/language/language_sv.h | 2 +- Marlin/src/lcd/language/language_uk.h | 2 +- Marlin/src/lcd/language/language_zh_CN.h | 2 +- Marlin/src/lcd/menu/menu_advanced.cpp | 22 ++--- Marlin/src/module/settings.cpp | 20 ++--- Marlin/src/module/temperature.cpp | 62 ++++++------- Marlin/src/module/temperature.h | 10 ++- buildroot/tests/STM32F103RE_creality | 6 +- 28 files changed, 181 insertions(+), 163 deletions(-) diff --git a/Marlin/src/gcode/temp/M303.cpp b/Marlin/src/gcode/temp/M303.cpp index 820b1556d611..e0ad26027e60 100644 --- a/Marlin/src/gcode/temp/M303.cpp +++ b/Marlin/src/gcode/temp/M303.cpp @@ -67,8 +67,8 @@ void GcodeSuite::M303() { default: SERIAL_ECHOPGM(STR_PID_AUTOTUNE); SERIAL_ECHOLNPGM(STR_PID_BAD_HEATER_ID); - TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_BAD_EXTRUDER_NUM)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_BAD_EXTRUDER_NUM)); + TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_BAD_HEATER_ID)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_BAD_HEATER_ID)); return; } @@ -78,20 +78,9 @@ void GcodeSuite::M303() { const celsius_t temp = seenS ? parser.value_celsius() : default_temp; const bool u = parser.boolval('U'); - #if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED) - if (seenC) HMI_data.PidCycles = c; - if (seenS) { - switch (hid) { - OPTCODE(PIDTEMP, case 0 ... HOTENDS - 1: HMI_data.HotendPidT = temp; break) - OPTCODE(PIDTEMPBED, case H_BED: HMI_data.BedPidT = temp; break) - default: break; - } - } - #endif + TERN_(DWIN_PID_TUNE, DWIN_StartM303(seenC, c, seenS, hid, temp)); - #if DISABLED(BUSY_WHILE_HEATING) - KEEPALIVE_STATE(NOT_BUSY); - #endif + IF_DISABLED(BUSY_WHILE_HEATING, KEEPALIVE_STATE(NOT_BUSY)); LCD_MESSAGE(MSG_PID_AUTOTUNE); thermalManager.PID_autotune(temp, hid, c, u); diff --git a/Marlin/src/gcode/temp/M306.cpp b/Marlin/src/gcode/temp/M306.cpp index c6b700eac3b6..582eb13f81f7 100644 --- a/Marlin/src/gcode/temp/M306.cpp +++ b/Marlin/src/gcode/temp/M306.cpp @@ -52,15 +52,15 @@ void GcodeSuite::M306() { if (parser.seen("ACFPRH")) { const heater_id_t hid = (heater_id_t)parser.intval('E', 0); - MPC_t &constants = thermalManager.temp_hotend[hid].constants; - if (parser.seenval('P')) constants.heater_power = parser.value_float(); - if (parser.seenval('C')) constants.block_heat_capacity = parser.value_float(); - if (parser.seenval('R')) constants.sensor_responsiveness = parser.value_float(); - if (parser.seenval('A')) constants.ambient_xfer_coeff_fan0 = parser.value_float(); + MPC_t &mpc = thermalManager.temp_hotend[hid].mpc; + if (parser.seenval('P')) mpc.heater_power = parser.value_float(); + if (parser.seenval('C')) mpc.block_heat_capacity = parser.value_float(); + if (parser.seenval('R')) mpc.sensor_responsiveness = parser.value_float(); + if (parser.seenval('A')) mpc.ambient_xfer_coeff_fan0 = parser.value_float(); #if ENABLED(MPC_INCLUDE_FAN) - if (parser.seenval('F')) constants.fan255_adjustment = parser.value_float() - constants.ambient_xfer_coeff_fan0; + if (parser.seenval('F')) mpc.applyFanAdjustment(parser.value_float()); #endif - if (parser.seenval('H')) constants.filament_heat_capacity_permm = parser.value_float(); + if (parser.seenval('H')) mpc.filament_heat_capacity_permm = parser.value_float(); return; } @@ -71,16 +71,16 @@ void GcodeSuite::M306_report(const bool forReplay/*=true*/) { report_heading(forReplay, F("Model predictive control")); HOTEND_LOOP() { report_echo_start(forReplay); - MPC_t& constants = thermalManager.temp_hotend[e].constants; + MPC_t &mpc = thermalManager.temp_hotend[e].mpc; SERIAL_ECHOPGM(" M306 E", e); - SERIAL_ECHOPAIR_F(" P", constants.heater_power, 2); - SERIAL_ECHOPAIR_F(" C", constants.block_heat_capacity, 2); - SERIAL_ECHOPAIR_F(" R", constants.sensor_responsiveness, 4); - SERIAL_ECHOPAIR_F(" A", constants.ambient_xfer_coeff_fan0, 4); + SERIAL_ECHOPAIR_F(" P", mpc.heater_power, 2); + SERIAL_ECHOPAIR_F(" C", mpc.block_heat_capacity, 2); + SERIAL_ECHOPAIR_F(" R", mpc.sensor_responsiveness, 4); + SERIAL_ECHOPAIR_F(" A", mpc.ambient_xfer_coeff_fan0, 4); #if ENABLED(MPC_INCLUDE_FAN) - SERIAL_ECHOPAIR_F(" F", constants.ambient_xfer_coeff_fan0 + constants.fan255_adjustment, 4); + SERIAL_ECHOPAIR_F(" F", mpc.fanCoefficient(), 4); #endif - SERIAL_ECHOPAIR_F(" H", constants.filament_heat_capacity_permm, 4); + SERIAL_ECHOPAIR_F(" H", mpc.filament_heat_capacity_permm, 4); SERIAL_EOL(); } } diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 8fe9a408f22d..515d5f7984ac 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2504,6 +2504,9 @@ // PID heating #if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) #define HAS_PID_HEATING 1 + #if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED) + #define DWIN_PID_TUNE 1 + #endif #endif // Thermal protection diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 053ada23e87f..6519116c9ddc 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1472,7 +1472,7 @@ void DWIN_LevelingDone() { // PID/MPC process -#if HAS_PIDPLOT && EITHER(HAS_PID_HEATING, MPCTEMP) +#if HAS_PIDPLOT && EITHER(DWIN_PID_TUNE, MPCTEMP) celsius_t _maxtemp, _target; void DWIN_Draw_PID_MPC_Popup() { @@ -1527,28 +1527,47 @@ void DWIN_LevelingDone() { #endif -#if HAS_PID_HEATING +#if DWIN_PID_TUNE + + void DWIN_StartM303(const bool seenC, const int c, const bool seenS, const heater_id_t hid, const celsius_t temp) { + if (seenC) HMI_data.PidCycles = c; + if (seenS) { + switch (hid) { + OPTCODE(PIDTEMP, case 0 ... HOTENDS - 1: HMI_data.HotendPidT = temp; break) + OPTCODE(PIDTEMPBED, case H_BED: HMI_data.BedPidT = temp; break) + default: break; + } + } + } void DWIN_PidTuning(tempcontrol_t result) { HMI_value.pidresult = result; switch (result) { - case PIDTEMPBED_START: - HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT - DWIN_Draw_PID_MPC_Popup(); - #else - DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running.")); - #endif - break; - case PIDTEMP_START: - HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT - DWIN_Draw_PID_MPC_Popup(); - #else - DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running.")); - #endif - break; - case PID_BAD_EXTRUDER_NUM: + #if ENABLED(PIDTEMP) + case PIDTEMP_START: + HMI_SaveProcessID(PidProcess); + #if HAS_PIDPLOT + DWIN_Draw_PID_MPC_Popup(); + #else + DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running.")); + #endif + break; + case PID_TEMP_TOO_HIGH: + checkkey = last_checkkey; + DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_TEMP_TOO_HIGH)); + break; + #endif + #if ENABLED(PIDTEMPBED) + case PIDTEMPBED_START: + HMI_SaveProcessID(PidProcess); + #if HAS_PIDPLOT + DWIN_Draw_PID_MPC_Popup(); + #else + DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running.")); + #endif + break; + #endif + case PID_BAD_HEATER_ID: checkkey = last_checkkey; DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_EXTRUDER_NUM)); break; @@ -1556,10 +1575,6 @@ void DWIN_LevelingDone() { checkkey = last_checkkey; DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_ERROR), GET_TEXT_F(MSG_PID_TIMEOUT)); break; - case PID_TEMP_TOO_HIGH: - checkkey = last_checkkey; - DWIN_Popup_Confirm(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_TEMP_TOO_HIGH)); - break; case PID_DONE: checkkey = last_checkkey; DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE), GET_TEXT_F(MSG_BUTTON_DONE)); @@ -1570,7 +1585,7 @@ void DWIN_LevelingDone() { } } -#endif // HAS_PID_HEATING +#endif // DWIN_PID_TUNE #if ENABLED(MPCTEMP) @@ -1702,7 +1717,7 @@ void DWIN_SetDataDefaults() { DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color); TERN_(PIDTEMP, HMI_data.HotendPidT = DEF_HOTENDPIDT); TERN_(PIDTEMPBED, HMI_data.BedPidT = DEF_BEDPIDT); - TERN_(HAS_PID_HEATING, HMI_data.PidCycles = DEF_PIDCYCLES); + TERN_(DWIN_PID_TUNE, HMI_data.PidCycles = DEF_PIDCYCLES); #if ENABLED(PREVENT_COLD_EXTRUSION) HMI_data.ExtMinT = EXTRUDE_MINTEMP; ApplyExtMinT(); @@ -2092,7 +2107,7 @@ void SetMoveZ() { HMI_value.axis = Z_AXIS; SetPFloatOnClick(Z_MIN_POS, Z_MAX_POS } #endif -#if EITHER(PIDTEMP, PIDTEMPBED) +#if DWIN_PID_TUNE void SetPID(celsius_t t, heater_id_t h) { char cmd[53] = ""; char str_1[5] = "", str_2[5] = ""; @@ -2558,7 +2573,7 @@ void SetStepsZ() { HMI_value.axis = Z_AXIS, SetPFloatOnClick( MIN_STEP, MAX_STEP void SetBedPidT() { SetPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); } #endif -#if EITHER(PIDTEMP, PIDTEMPBED) +#if DWIN_PID_TUNE void SetPidCycles() { SetPIntOnClick(3, 50); } void SetKp() { SetPFloatOnClick(0, 1000, 2); } void ApplyPIDi() { @@ -2729,7 +2744,7 @@ void onDrawGetColorItem(MenuItemClass* menuitem, int8_t line) { DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MYPOS(line + 1), 240); } -#if EITHER(PIDTEMP, PIDTEMPBED) +#if DWIN_PID_TUNE void onDrawPIDi(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_i(*(float*)static_cast(menuitem)->value)); } void onDrawPIDd(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_d(*(float*)static_cast(menuitem)->value)); } #endif @@ -3531,22 +3546,23 @@ void Draw_Steps_Menu() { void SetSensorRespons() { SetPFloatOnClick(0, 1, 4); } void SetAmbientXfer() { SetPFloatOnClick(0, 1, 4); } #if ENABLED(MPC_INCLUDE_FAN) - void onDrawFanAdj(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 4, thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0 + thermalManager.temp_hotend[0].constants.fan255_adjustment); } - void ApplyFanAdj() { thermalManager.temp_hotend[0].constants.fan255_adjustment = MenuData.Value / POW(10, 4) - thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0; } - void SetFanAdj() { SetFloatOnClick(0, 1, 4, thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0 + thermalManager.temp_hotend[0].constants.fan255_adjustment, ApplyFanAdj); } + void onDrawFanAdj(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 4, thermalManager.temp_hotend[0].fanCoefficient()); } + void ApplyFanAdj() { thermalManager.temp_hotend[0].applyFanAdjustment(MenuData.Value / POW(10, 4)); } + void SetFanAdj() { SetFloatOnClick(0, 1, 4, thermalManager.temp_hotend[0].fanCoefficient(), ApplyFanAdj); } #endif void Draw_HotendMPC_Menu() { checkkey = Menu; if (SET_MENU_F(HotendMPCMenu, STR_MPC_AUTOTUNE " Settings", 7)) { + MPC_t &mpc = thermalManager.temp_hotend[0].mpc; BACK_ITEM(Draw_AdvancedSettings_Menu); MENU_ITEM(ICON_MPCNozzle, MSG_MPC_AUTOTUNE, onDrawMenuItem, HotendMPC); - EDIT_ITEM(ICON_MPCHeater, MSG_MPC_POWER, onDrawPFloatMenu, SetHeaterPower, &thermalManager.temp_hotend[0].constants.heater_power); - EDIT_ITEM(ICON_MPCHeatCap, MSG_MPC_BLOCK_HEAT_CAPACITY, onDrawPFloat2Menu, SetBlkHeatCapacity, &thermalManager.temp_hotend[0].constants.block_heat_capacity); - EDIT_ITEM(ICON_MPCValue, MSG_SENSOR_RESPONSIVENESS, onDrawPFloat4Menu, SetSensorRespons, &thermalManager.temp_hotend[0].constants.sensor_responsiveness); - EDIT_ITEM(ICON_MPCValue, MSG_MPC_AMBIENT_XFER_COEFF, onDrawPFloat4Menu, SetAmbientXfer, &thermalManager.temp_hotend[0].constants.ambient_xfer_coeff_fan0); + EDIT_ITEM(ICON_MPCHeater, MSG_MPC_POWER, onDrawPFloatMenu, SetHeaterPower, &mpc.heater_power); + EDIT_ITEM(ICON_MPCHeatCap, MSG_MPC_BLOCK_HEAT_CAPACITY, onDrawPFloat2Menu, SetBlkHeatCapacity, &mpc.block_heat_capacity); + EDIT_ITEM(ICON_MPCValue, MSG_SENSOR_RESPONSIVENESS, onDrawPFloat4Menu, SetSensorRespons, &mpc.sensor_responsiveness); + EDIT_ITEM(ICON_MPCValue, MSG_MPC_AMBIENT_XFER_COEFF, onDrawPFloat4Menu, SetAmbientXfer, &mpc.ambient_xfer_coeff_fan0); #if ENABLED(MPC_INCLUDE_FAN) - EDIT_ITEM(ICON_MPCFan, MSG_MPC_AMBIENT_XFER_COEFF_FAN, onDrawFanAdj, SetFanAdj, &thermalManager.temp_hotend[0].constants.fan255_adjustment); + EDIT_ITEM(ICON_MPCFan, MSG_MPC_AMBIENT_XFER_COEFF_FAN, onDrawFanAdj, SetFanAdj, &mpc.fan255_adjustment); #endif } UpdateMenu(HotendMPCMenu); diff --git a/Marlin/src/lcd/e3v2/proui/dwin.h b/Marlin/src/lcd/e3v2/proui/dwin.h index f8744a1e447c..112df5cae144 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.h +++ b/Marlin/src/lcd/e3v2/proui/dwin.h @@ -74,22 +74,22 @@ enum processID : uint8_t { NothingToDo }; -#if EITHER(HAS_PID_HEATING, MPCTEMP) +#if EITHER(DWIN_PID_TUNE, MPCTEMP) enum tempcontrol_t : uint8_t { - #if HAS_PID_HEATING - PIDTEMP_START = 0, + #if DWIN_PID_TUNE + PID_DONE, + PIDTEMP_START, PIDTEMPBED_START, - PID_BAD_EXTRUDER_NUM, + PID_BAD_HEATER_ID, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, - PID_DONE, #endif #if ENABLED(MPCTEMP) + MPC_DONE, MPCTEMP_START, MPC_TEMP_ERROR, - MPC_INTERRUPTED, - MPC_DONE, + MPC_INTERRUPTED #endif }; @@ -120,14 +120,14 @@ typedef struct { uint16_t Coordinate_Color; // Temperatures - #if ENABLED(PIDTEMP) - int16_t HotendPidT = DEF_HOTENDPIDT; - #endif - #if ENABLED(PIDTEMPBED) - int16_t BedPidT = DEF_BEDPIDT; - #endif - #if (HAS_HOTEND || HAS_HEATED_BED) && HAS_PID_HEATING + #if DWIN_PID_TUNE int16_t PidCycles = DEF_PIDCYCLES; + #if ENABLED(PIDTEMP) + int16_t HotendPidT = DEF_HOTENDPIDT; + #endif + #if ENABLED(PIDTEMPBED) + int16_t BedPidT = DEF_BEDPIDT; + #endif #endif #if ENABLED(PREVENT_COLD_EXTRUSION) int16_t ExtMinT = EXTRUDE_MINTEMP; @@ -154,7 +154,7 @@ static constexpr size_t eeprom_data_size = sizeof(HMI_data_t); typedef struct { int8_t Color[3]; // Color components - #if HAS_PID_HEATING + #if DWIN_PID_TUNE tempcontrol_t pidresult = PID_DONE; #endif uint8_t Select = 0; // Auxiliary selector variable @@ -371,7 +371,9 @@ void Draw_Steps_Menu(); #endif // PID -#if HAS_PID_HEATING +#if DWIN_PID_TUNE + #include "../../../module/temperature.h" + void DWIN_StartM303(const bool seenC, const int c, const bool seenS, const heater_id_t hid, const celsius_t temp); void DWIN_PidTuning(tempcontrol_t result); #if ENABLED(PIDTEMP) void Draw_HotendPID_Menu(); diff --git a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp index dd672e74bb9c..382c5eb1befa 100644 --- a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp +++ b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp @@ -139,8 +139,8 @@ namespace ExtUI { case PID_STARTED: ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_AUTOTUNE)); break; - case PID_BAD_EXTRUDER_NUM: - ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM)); + case PID_BAD_HEATER_ID: + ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_BAD_HEATER_ID)); break; case PID_TEMP_TOO_HIGH: ScreenHandler.setstatusmessage(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH)); diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp index 4d758ae5ef74..3d0896a67cf6 100644 --- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp +++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp @@ -325,8 +325,8 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) { case ExtUI::PID_STARTED: SetStatusMessage(GET_TEXT_F(MSG_PID_AUTOTUNE)); break; - case ExtUI::PID_BAD_EXTRUDER_NUM: - SetStatusMessage(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM)); + case ExtUI::PID_BAD_HEATER_ID: + SetStatusMessage(GET_TEXT_F(MSG_PID_BAD_HEATER_ID)); break; case ExtUI::PID_TEMP_TOO_HIGH: SetStatusMessage(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH)); diff --git a/Marlin/src/lcd/extui/example/example.cpp b/Marlin/src/lcd/extui/example/example.cpp index 6ef20cf5f0f3..27269a9bee7b 100644 --- a/Marlin/src/lcd/extui/example/example.cpp +++ b/Marlin/src/lcd/extui/example/example.cpp @@ -121,11 +121,11 @@ namespace ExtUI { void onPidTuning(const result_t rst) { // Called for temperature PID tuning result switch (rst) { - case PID_STARTED: break; - case PID_BAD_EXTRUDER_NUM: break; - case PID_TEMP_TOO_HIGH: break; - case PID_TUNING_TIMEOUT: break; - case PID_DONE: break; + case PID_STARTED: break; + case PID_BAD_HEATER_ID: break; + case PID_TEMP_TOO_HIGH: break; + case PID_TUNING_TIMEOUT: break; + case PID_DONE: break; } } #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp index 2ce9ed027e86..84de2c587128 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp @@ -136,8 +136,8 @@ namespace ExtUI { case PID_STARTED: StatusScreen::setStatusMessage(GET_TEXT_F(MSG_PID_AUTOTUNE)); break; - case PID_BAD_EXTRUDER_NUM: - StatusScreen::setStatusMessage(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM)); + case PID_BAD_HEATER_ID: + StatusScreen::setStatusMessage(GET_TEXT_F(MSG_PID_BAD_HEATER_ID)); break; case PID_TEMP_TOO_HIGH: StatusScreen::setStatusMessage(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH)); diff --git a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp index 945ff472e1a1..8ed319e35c8a 100644 --- a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp +++ b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp @@ -111,8 +111,8 @@ namespace ExtUI { case PID_STARTED: set_lcd_error(GET_TEXT_F(MSG_PID_AUTOTUNE)); break; - case PID_BAD_EXTRUDER_NUM: - set_lcd_error(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM)); + case PID_BAD_HEATER_ID: + set_lcd_error(GET_TEXT_F(MSG_PID_BAD_HEATER_ID)); break; case PID_TEMP_TOO_HIGH: set_lcd_error(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH)); diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index c2ce52ba4c1e..b48dc94f8fef 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -61,7 +61,7 @@ namespace ExtUI { enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5, E6, E7 }; enum heater_t : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER, COOLER }; enum fan_t : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 }; - enum result_t : uint8_t { PID_STARTED, PID_BAD_EXTRUDER_NUM, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE }; + enum result_t : uint8_t { PID_STARTED, PID_BAD_HEATER_ID, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE }; constexpr uint8_t extruderCount = EXTRUDERS; constexpr uint8_t hotendCount = HOTENDS; diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index a60da34d5f13..b583aee040e4 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -346,7 +346,7 @@ namespace Language_de { LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("ungültiger Extruder."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperatur zu hoch."); LSTR MSG_TIMEOUT = _UxGT("Timeout."); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune fehlge.! Ungültiger Extruder"); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autotune fehlge.! Ungültiger Extruder"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune fehlge.! Temperatur zu hoch."); LSTR MSG_PID_TIMEOUT = _UxGT("Autotune fehlge.! Timeout."); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("teste Wärmeverlust"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 8027b544aac6..708eef48d6e8 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -368,7 +368,7 @@ namespace Language_en { LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Bad extruder."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperature too high."); LSTR MSG_TIMEOUT = _UxGT("Timeout."); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed! Bad extruder."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autotune failed! Bad extruder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high."); LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout."); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss"); diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h index 02576f802c1b..35e8502b940c 100644 --- a/Marlin/src/lcd/language/language_fr.h +++ b/Marlin/src/lcd/language/language_fr.h @@ -269,7 +269,7 @@ namespace Language_fr { LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Tuning PID terminé"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Echec Autotune! E incorrect"); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Echec Autotune! E incorrect"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute"); LSTR MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Opér. expirée"); LSTR MSG_SELECT_E = _UxGT("Sélectionner *"); diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h index 97b8b0831789..abad80bbecb8 100644 --- a/Marlin/src/lcd/language/language_gl.h +++ b/Marlin/src/lcd/language/language_gl.h @@ -263,7 +263,7 @@ namespace Language_gl { LSTR MSG_PID_AUTOTUNE = _UxGT("Auto-Sint. PID"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("Auto-Sint. PID *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Fin Auto-Sint PID"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-Sint. fallida! Extrusor danado."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Auto-Sint. fallida! Extrusor danado."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-Sint. fallida! Temperatura moi alta."); LSTR MSG_PID_TIMEOUT = _UxGT("Auto-Sint. fallida! Tempo excedido."); LSTR MSG_SELECT_E = _UxGT("Escolla *"); diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h index 0d70148c624c..598da662cc74 100644 --- a/Marlin/src/lcd/language/language_hu.h +++ b/Marlin/src/lcd/language/language_hu.h @@ -306,7 +306,7 @@ namespace Language_hu { LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID hangolás *"); LSTR MSG_PID_CYCLE = _UxGT("PID ciklus"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID hangolás kész"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Hangolási hiba! Rossz adagoló."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Hangolási hiba! Rossz adagoló."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Hangolási hiba! Magas hömérséklet."); LSTR MSG_PID_TIMEOUT = _UxGT("Hangolási hiba! Idötúllépés."); LSTR MSG_SELECT_E = _UxGT("Kiválaszt *"); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index b0adb7791fe2..1c3361808658 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -359,7 +359,7 @@ namespace Language_it { LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Estrusore invalido."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temp.troppo alta."); LSTR MSG_TIMEOUT = _UxGT("Tempo scaduto."); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Calibrazione fallita! Estrusore errato."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Calibrazione fallita! Estrusore errato."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Calibrazione fallita! Temperatura troppo alta."); LSTR MSG_PID_TIMEOUT = _UxGT("Calibrazione fallita! Tempo scaduto."); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Testing heat loss"); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h index 57af06202359..48751f8cd2a4 100644 --- a/Marlin/src/lcd/language/language_ro.h +++ b/Marlin/src/lcd/language/language_ro.h @@ -261,7 +261,7 @@ namespace Language_ro { LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed! Bad extruder."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autotune failed! Bad extruder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed! Temperature too high."); LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout."); LSTR MSG_SELECT_E = _UxGT("Select *"); diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index 0af84d120a6b..1f3c77752e73 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -382,7 +382,7 @@ namespace Language_ru { LSTR MSG_PID_AUTOTUNE = _UxGT("Автоподбор PID"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автоподбор PID *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Подбор PID выполнен"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Сбой автоподбора! Плохой экструдер."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Сбой автоподбора! Плохой экструдер."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора! Температура повышена."); LSTR MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени."); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index 812e2a03c530..e0074a0d653f 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -357,7 +357,7 @@ namespace Language_sk { LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Zlý extrudér"); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Príliš vysoká tepl."); LSTR MSG_TIMEOUT = _UxGT("Čas vypršal."); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-kal. zlyhala! Zlý extrúder."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Auto-kal. zlyhala! Zlý extrúder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-kal. zlyhala! Príliš vysoká tepl."); LSTR MSG_PID_TIMEOUT = _UxGT("Auto-kal. zlyhala! Čas vypršal."); LSTR MSG_MPC_MEASURING_AMBIENT = _UxGT("Test. tepl. straty"); diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h index 7b3c2d56a66a..a18691fe0e5e 100644 --- a/Marlin/src/lcd/language/language_sv.h +++ b/Marlin/src/lcd/language/language_sv.h @@ -291,7 +291,7 @@ namespace Language_sv { LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autojustera"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autojustera *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autojustera misslyckad! Dålig extruder."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autojustera misslyckad! Dålig extruder."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autojustera misslyckad! Temperatur för hög."); LSTR MSG_PID_TIMEOUT = _UxGT("Autojustera misslyckad! Tidsgräns."); LSTR MSG_SELECT_E = _UxGT("Välj *"); diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index 59dd14812b7f..697445288dbb 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -387,7 +387,7 @@ namespace Language_uk { LSTR MSG_PID_AUTOTUNE = _UxGT("Автопідбір PID"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автопідбір PID *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Підбір PID виконано"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Збій автопідбору! Поганий екструдер."); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Збій автопідбору! Поганий екструдер."); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Збій автопідбору! Температура завищена."); LSTR MSG_PID_TIMEOUT = _UxGT("Збій автопідбору! Вичерпан час."); diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h index 26515b60940d..79c59be44b07 100644 --- a/Marlin/src/lcd/language/language_zh_CN.h +++ b/Marlin/src/lcd/language/language_zh_CN.h @@ -261,7 +261,7 @@ namespace Language_zh_CN { LSTR MSG_PID_AUTOTUNE = _UxGT("自动PID"); LSTR MSG_PID_AUTOTUNE_E = _UxGT("自动PID *"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID调整完成"); - LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("自动调失败! 坏的挤出机"); + LSTR MSG_PID_BAD_HEATER_ID = _UxGT("自动调失败! 坏的挤出机"); LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("自动调失败! 温度太高"); LSTR MSG_PID_TIMEOUT = _UxGT("自动调失败! 超时"); LSTR MSG_SELECT_E = _UxGT("选择 *"); diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp index 8e1963afe593..6f404f20e11e 100644 --- a/Marlin/src/lcd/menu/menu_advanced.cpp +++ b/Marlin/src/lcd/menu/menu_advanced.cpp @@ -41,7 +41,7 @@ #include "../../module/probe.h" #endif -#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) +#if HAS_PID_HEATING #include "../../module/temperature.h" #endif @@ -277,10 +277,10 @@ void menu_backlash(); // #if SHOW_MENU_ADVANCED_TEMPERATURE - #if ENABLED(MPC_EDIT_MENU) - #define MPC_EDIT_DEFS(N) \ - MPC_t &c = thermalManager.temp_hotend[N].constants; \ - TERN_(MPC_INCLUDE_FAN, editable.decimal = c.ambient_xfer_coeff_fan0 + c.fan255_adjustment) + #if BOTH(MPC_EDIT_MENU, MPC_INCLUDE_FAN) + #define MPC_EDIT_DEFS(N) editable.decimal = thermalManager.temp_hotend[N].fanCoefficient() + #else + #define MPC_EDIT_DEFS(...) #endif void menu_advanced_temperature() { @@ -370,17 +370,17 @@ void menu_backlash(); #if ENABLED(MPC_EDIT_MENU) #define _MPC_EDIT_ITEMS(N) \ - EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_POWER_E, &c.heater_power, 1, 200); \ - EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_BLOCK_HEAT_CAPACITY_E, &c.block_heat_capacity, 0, 40); \ - EDIT_ITEM_FAST_N(float43, N, MSG_SENSOR_RESPONSIVENESS_E, &c.sensor_responsiveness, 0, 1); \ - EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_E, &c.ambient_xfer_coeff_fan0, 0, 1) + EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_POWER_E, &mpc.heater_power, 1, 200); \ + EDIT_ITEM_FAST_N(float31sign, N, MSG_MPC_BLOCK_HEAT_CAPACITY_E, &mpc.block_heat_capacity, 0, 40); \ + EDIT_ITEM_FAST_N(float43, N, MSG_SENSOR_RESPONSIVENESS_E, &mpc.sensor_responsiveness, 0, 1); \ + EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_E, &mpc.ambient_xfer_coeff_fan0, 0, 1) #if ENABLED(MPC_INCLUDE_FAN) #define MPC_EDIT_ITEMS(N) \ + MPC_t &mpc = thermalManager.temp_hotend[MenuItemBase::itemIndex].constants; \ _MPC_EDIT_ITEMS(N); \ EDIT_ITEM_FAST_N(float43, N, MSG_MPC_AMBIENT_XFER_COEFF_FAN_E, &editable.decimal, 0, 1, []{ \ - MPC_t &c = thermalManager.temp_hotend[MenuItemBase::itemIndex].constants; \ - c.fan255_adjustment = editable.decimal - c.ambient_xfer_coeff_fan0; \ + thermalManager.temp_hotend[MenuItemBase::itemIndex].applyFanAdjustment(editable.decimal); \ }) #else #define MPC_EDIT_ITEMS _MPC_EDIT_ITEMS diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp index afdbf3d10342..8b615f2faf14 100644 --- a/Marlin/src/module/settings.cpp +++ b/Marlin/src/module/settings.cpp @@ -1632,8 +1632,7 @@ void MarlinSettings::postprocess() { // Model predictive control // #if ENABLED(MPCTEMP) - HOTEND_LOOP() - EEPROM_WRITE(thermalManager.temp_hotend[e].constants); + HOTEND_LOOP() EEPROM_WRITE(thermalManager.temp_hotend[e].mpc); #endif // @@ -2627,8 +2626,7 @@ void MarlinSettings::postprocess() { // #if ENABLED(MPCTEMP) { - HOTEND_LOOP() - EEPROM_READ(thermalManager.temp_hotend[e].constants); + HOTEND_LOOP() EEPROM_READ(thermalManager.temp_hotend[e].mpc); } #endif @@ -3416,15 +3414,15 @@ void MarlinSettings::reset() { static_assert(COUNT(_filament_heat_capacity_permm) == HOTENDS, "FILAMENT_HEAT_CAPACITY_PERMM must have HOTENDS items."); HOTEND_LOOP() { - MPC_t &constants = thermalManager.temp_hotend[e].constants; - constants.heater_power = _mpc_heater_power[e]; - constants.block_heat_capacity = _mpc_block_heat_capacity[e]; - constants.sensor_responsiveness = _mpc_sensor_responsiveness[e]; - constants.ambient_xfer_coeff_fan0 = _mpc_ambient_xfer_coeff[e]; + MPC_t &mpc = thermalManager.temp_hotend[e].mpc; + mpc.heater_power = _mpc_heater_power[e]; + mpc.block_heat_capacity = _mpc_block_heat_capacity[e]; + mpc.sensor_responsiveness = _mpc_sensor_responsiveness[e]; + mpc.ambient_xfer_coeff_fan0 = _mpc_ambient_xfer_coeff[e]; #if ENABLED(MPC_INCLUDE_FAN) - constants.fan255_adjustment = _mpc_ambient_xfer_coeff_fan255[e] - _mpc_ambient_xfer_coeff[e]; + mpc.fan255_adjustment = _mpc_ambient_xfer_coeff_fan255[e] - _mpc_ambient_xfer_coeff[e]; #endif - constants.filament_heat_capacity_permm = _filament_heat_capacity_permm[e]; + mpc.filament_heat_capacity_permm = _filament_heat_capacity_permm[e]; } #endif diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 0d9c9fb106eb..99d5603566b6 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -660,13 +660,13 @@ volatile bool Temperature::raw_temps_ready = false; TERN_(HAS_FAN_LOGIC, fan_update_ms = next_temp_ms + fan_update_interval_ms); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_STARTED)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(isbed ? PIDTEMPBED_START : PIDTEMP_START)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(isbed ? PIDTEMPBED_START : PIDTEMP_START)); if (target > GHV(CHAMBER_MAX_TARGET, BED_MAX_TARGET, temp_range[heater_id].maxtemp - (HOTEND_OVERSHOOT))) { SERIAL_ECHOPGM(STR_PID_AUTOTUNE); SERIAL_ECHOLNPGM(STR_PID_TEMP_TOO_HIGH); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TEMP_TOO_HIGH)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH))); return; } @@ -760,7 +760,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOPGM(STR_PID_AUTOTUNE); SERIAL_ECHOLNPGM(STR_PID_TEMP_TOO_HIGH); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TEMP_TOO_HIGH)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_TEMP_TOO_HIGH)); TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH))); break; } @@ -797,7 +797,7 @@ volatile bool Temperature::raw_temps_ready = false; #endif if ((ms - _MIN(t1, t2)) > (MAX_CYCLE_TIME_PID_AUTOTUNE * 60L * 1000L)) { TERN_(DWIN_CREALITY_LCD, DWIN_Popup_Temperature(0)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_TUNING_TIMEOUT)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_TUNING_TIMEOUT)); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_TUNING_TIMEOUT)); TERN_(HOST_PROMPT_SUPPORT, hostui.notify(GET_TEXT_F(MSG_PID_TIMEOUT))); SERIAL_ECHOPGM(STR_PID_AUTOTUNE); @@ -852,7 +852,7 @@ volatile bool Temperature::raw_temps_ready = false; TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onPidTuningDone(color)); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_DONE)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_DONE)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_DONE)); goto EXIT_M303; } @@ -870,7 +870,7 @@ volatile bool Temperature::raw_temps_ready = false; TERN_(PRINTER_EVENT_LEDS, printerEventLEDs.onPidTuningDone(color)); TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_DONE)); - TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_DONE)); + TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_DONE)); EXIT_M303: TERN_(NO_FAN_SLOWING_IN_PID_TUNING, adaptive_fan_slowing = true); @@ -930,7 +930,7 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOPGM(STR_MPC_AUTOTUNE); SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_START, active_extruder); MPCHeaterInfo &hotend = temp_hotend[active_extruder]; - MPC_t &constants = hotend.constants; + MPC_t &mpc = hotend.mpc; // Move to center of bed, just above bed height and cool with max fan gcode.home_all_axes(true); @@ -956,7 +956,7 @@ volatile bool Temperature::raw_temps_ready = false; wait_for_heatup = true; for (;;) { // Can be interrupted with M108 - if (!wait_for_heatup || !housekeeping(ms, current_temp, next_report_ms)) return; + if (!housekeeping(ms, current_temp, next_report_ms)) return; if (ELAPSED(ms, next_test_ms)) { if (current_temp >= ambient_temp) { @@ -1019,10 +1019,10 @@ volatile bool Temperature::raw_temps_ready = false; float asymp_temp = (t2 * t2 - t1 * t3) / (2 * t2 - t1 - t3), block_responsiveness = -log((t2 - asymp_temp) / (t1 - asymp_temp)) / (sample_distance * (sample_count >> 1)); - constants.ambient_xfer_coeff_fan0 = constants.heater_power * (MPC_MAX) / 255 / (asymp_temp - ambient_temp); - constants.fan255_adjustment = 0.0f; - constants.block_heat_capacity = constants.ambient_xfer_coeff_fan0 / block_responsiveness; - constants.sensor_responsiveness = block_responsiveness / (1.0f - (ambient_temp - asymp_temp) * exp(-block_responsiveness * t1_time) / (t1 - asymp_temp)); + mpc.ambient_xfer_coeff_fan0 = mpc.heater_power * (MPC_MAX) / 255 / (asymp_temp - ambient_temp); + mpc.fan255_adjustment = 0.0f; + mpc.block_heat_capacity = mpc.ambient_xfer_coeff_fan0 / block_responsiveness; + mpc.sensor_responsiveness = block_responsiveness / (1.0f - (ambient_temp - asymp_temp) * exp(-block_responsiveness * t1_time) / (t1 - asymp_temp)); hotend.modeled_block_temp = asymp_temp + (ambient_temp - asymp_temp) * exp(-block_responsiveness * (ms - heat_start_time) / 1000.0f); hotend.modeled_sensor_temp = current_temp; @@ -1049,7 +1049,7 @@ volatile bool Temperature::raw_temps_ready = false; hotend.soft_pwm_amount = (int)get_pid_output_hotend(active_extruder) >> 1; if (ELAPSED(ms, settle_end_ms) && !ELAPSED(ms, test_end_ms) && TERN1(HAS_FAN, !fan0_done)) - total_energy_fan0 += constants.heater_power * hotend.soft_pwm_amount / 127 * MPC_dT + (last_temp - current_temp) * constants.block_heat_capacity; + total_energy_fan0 += mpc.heater_power * hotend.soft_pwm_amount / 127 * MPC_dT + (last_temp - current_temp) * mpc.block_heat_capacity; #if HAS_FAN else if (ELAPSED(ms, test_end_ms) && !fan0_done) { set_fan_speed(EITHER(MPC_FAN_0_ALL_HOTENDS, MPC_FAN_0_ACTIVE_HOTEND) ? 0 : active_extruder, 255); @@ -1059,7 +1059,7 @@ volatile bool Temperature::raw_temps_ready = false; fan0_done = true; } else if (ELAPSED(ms, settle_end_ms) && !ELAPSED(ms, test_end_ms)) - total_energy_fan255 += constants.heater_power * hotend.soft_pwm_amount / 127 * MPC_dT + (last_temp - current_temp) * constants.block_heat_capacity; + total_energy_fan255 += mpc.heater_power * hotend.soft_pwm_amount / 127 * MPC_dT + (last_temp - current_temp) * mpc.block_heat_capacity; #endif else if (ELAPSED(ms, test_end_ms)) break; @@ -1075,19 +1075,19 @@ volatile bool Temperature::raw_temps_ready = false; } const float power_fan0 = total_energy_fan0 * 1000 / test_duration; - constants.ambient_xfer_coeff_fan0 = power_fan0 / (hotend.target - ambient_temp); + mpc.ambient_xfer_coeff_fan0 = power_fan0 / (hotend.target - ambient_temp); #if HAS_FAN const float power_fan255 = total_energy_fan255 * 1000 / test_duration, ambient_xfer_coeff_fan255 = power_fan255 / (hotend.target - ambient_temp); - constants.fan255_adjustment = ambient_xfer_coeff_fan255 - constants.ambient_xfer_coeff_fan0; + mpc.applyFanAdjustment(ambient_xfer_coeff_fan255); #endif // Calculate a new and better asymptotic temperature and re-evaluate the other constants - asymp_temp = ambient_temp + constants.heater_power * (MPC_MAX) / 255 / constants.ambient_xfer_coeff_fan0; + asymp_temp = ambient_temp + mpc.heater_power * (MPC_MAX) / 255 / mpc.ambient_xfer_coeff_fan0; block_responsiveness = -log((t2 - asymp_temp) / (t1 - asymp_temp)) / (sample_distance * (sample_count >> 1)); - constants.block_heat_capacity = constants.ambient_xfer_coeff_fan0 / block_responsiveness; - constants.sensor_responsiveness = block_responsiveness / (1.0f - (ambient_temp - asymp_temp) * exp(-block_responsiveness * t1_time) / (t1 - asymp_temp)); + mpc.block_heat_capacity = mpc.ambient_xfer_coeff_fan0 / block_responsiveness; + mpc.sensor_responsiveness = block_responsiveness / (1.0f - (ambient_temp - asymp_temp) * exp(-block_responsiveness * t1_time) / (t1 - asymp_temp)); SERIAL_ECHOPGM(STR_MPC_AUTOTUNE); SERIAL_ECHOLNPGM(STR_MPC_AUTOTUNE_FINISHED); @@ -1104,9 +1104,9 @@ volatile bool Temperature::raw_temps_ready = false; SERIAL_ECHOLNPAIR_F("block_responsiveness ", block_responsiveness, 4); #endif - SERIAL_ECHOLNPGM("MPC_BLOCK_HEAT_CAPACITY ", constants.block_heat_capacity); - SERIAL_ECHOLNPAIR_F("MPC_SENSOR_RESPONSIVENESS ", constants.sensor_responsiveness, 4); - SERIAL_ECHOLNPAIR_F("MPC_AMBIENT_XFER_COEFF ", constants.ambient_xfer_coeff_fan0, 4); + SERIAL_ECHOLNPGM("MPC_BLOCK_HEAT_CAPACITY ", mpc.block_heat_capacity); + SERIAL_ECHOLNPAIR_F("MPC_SENSOR_RESPONSIVENESS ", mpc.sensor_responsiveness, 4); + SERIAL_ECHOLNPAIR_F("MPC_AMBIENT_XFER_COEFF ", mpc.ambient_xfer_coeff_fan0, 4); TERN_(HAS_FAN, SERIAL_ECHOLNPAIR_F("MPC_AMBIENT_XFER_COEFF_FAN255 ", ambient_xfer_coeff_fan255, 4)); } @@ -1423,7 +1423,7 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { #elif ENABLED(MPCTEMP) MPCHeaterInfo &hotend = temp_hotend[ee]; - MPC_t &constants = hotend.constants; + MPC_t &mpc = hotend.mpc; // At startup, initialize modeled temperatures if (isnan(hotend.modeled_block_temp)) { @@ -1437,11 +1437,11 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { const bool this_hotend = (ee == active_extruder); #endif - float ambient_xfer_coeff = constants.ambient_xfer_coeff_fan0; + float ambient_xfer_coeff = mpc.ambient_xfer_coeff_fan0; #if ENABLED(MPC_INCLUDE_FAN) const uint8_t fan_index = EITHER(MPC_FAN_0_ACTIVE_HOTEND, MPC_FAN_0_ALL_HOTENDS) ? 0 : ee; const float fan_fraction = TERN_(MPC_FAN_0_ACTIVE_HOTEND, !this_hotend ? 0.0f : ) fan_speed[fan_index] * RECIPROCAL(255); - ambient_xfer_coeff += fan_fraction * constants.fan255_adjustment; + ambient_xfer_coeff += fan_fraction * mpc.fan255_adjustment; #endif if (this_hotend) { @@ -1452,17 +1452,17 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { if (fabs(e_speed) > planner.settings.max_feedrate_mm_s[E_AXIS]) mpc_e_position = e_position; else if (e_speed > 0.0f) { // Ignore retract/recover moves - ambient_xfer_coeff += e_speed * constants.filament_heat_capacity_permm; + ambient_xfer_coeff += e_speed * mpc.filament_heat_capacity_permm; mpc_e_position = e_position; } } // Update the modeled temperatures - float blocktempdelta = hotend.soft_pwm_amount * constants.heater_power * (MPC_dT / 127) / constants.block_heat_capacity; - blocktempdelta += (hotend.modeled_ambient_temp - hotend.modeled_block_temp) * ambient_xfer_coeff * MPC_dT / constants.block_heat_capacity; + float blocktempdelta = hotend.soft_pwm_amount * mpc.heater_power * (MPC_dT / 127) / mpc.block_heat_capacity; + blocktempdelta += (hotend.modeled_ambient_temp - hotend.modeled_block_temp) * ambient_xfer_coeff * MPC_dT / mpc.block_heat_capacity; hotend.modeled_block_temp += blocktempdelta; - const float sensortempdelta = (hotend.modeled_block_temp - hotend.modeled_sensor_temp) * (constants.sensor_responsiveness * MPC_dT); + const float sensortempdelta = (hotend.modeled_block_temp - hotend.modeled_sensor_temp) * (mpc.sensor_responsiveness * MPC_dT); hotend.modeled_sensor_temp += sensortempdelta; // Any delta between hotend.modeled_sensor_temp and hotend.celsius is either model @@ -1478,11 +1478,11 @@ void Temperature::mintemp_error(const heater_id_t heater_id) { float power = 0.0; if (hotend.target != 0 && !is_idling) { // Plan power level to get to target temperature in 2 seconds - power = (hotend.target - hotend.modeled_block_temp) * constants.block_heat_capacity / 2.0f; + power = (hotend.target - hotend.modeled_block_temp) * mpc.block_heat_capacity / 2.0f; power -= (hotend.modeled_ambient_temp - hotend.modeled_block_temp) * ambient_xfer_coeff; } - float pid_output = power * 254.0f / constants.heater_power + 1.0f; // Ensure correct quantization into a range of 0 to 127 + float pid_output = power * 254.0f / mpc.heater_power + 1.0f; // Ensure correct quantization into a range of 0 to 127 pid_output = constrain(pid_output, 0, MPC_MAX); /* <-- add a slash to enable diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h index d099c3d73b36..0b5f8caf3fac 100644 --- a/Marlin/src/module/temperature.h +++ b/Marlin/src/module/temperature.h @@ -382,10 +382,14 @@ typedef struct { float p, i, d, c, f; } raw_pidcf_t; float block_heat_capacity; // M306 C float sensor_responsiveness; // M306 R float ambient_xfer_coeff_fan0; // M306 A + float filament_heat_capacity_permm; // M306 H #if ENABLED(MPC_INCLUDE_FAN) float fan255_adjustment; // M306 F + void applyFanAdjustment(const_float_t cf) { fan255_adjustment = cf - ambient_xfer_coeff_fan0; } + #else + void applyFanAdjustment(const_float_t) {} #endif - float filament_heat_capacity_permm; // M306 H + float fanCoefficient() { return SUM_TERN(MPC_INCLUDE_FAN, ambient_xfer_coeff_fan0, fan255_adjustment); } } MPC_t; #define MPC_dT ((OVERSAMPLENR * float(ACTUAL_ADC_SAMPLES)) / (TEMP_TIMER_FREQUENCY)) @@ -433,10 +437,12 @@ struct PIDHeaterInfo : public HeaterInfo { #if ENABLED(MPCTEMP) struct MPCHeaterInfo : public HeaterInfo { - MPC_t constants; + MPC_t mpc; float modeled_ambient_temp, modeled_block_temp, modeled_sensor_temp; + float fanCoefficient() { return mpc.fanCoefficient(); } + void applyFanAdjustment(const_float_t cf) { mpc.applyFanAdjustment(cf); } }; #endif diff --git a/buildroot/tests/STM32F103RE_creality b/buildroot/tests/STM32F103RE_creality index a3c52372ef37..8c0a40d8ae22 100755 --- a/buildroot/tests/STM32F103RE_creality +++ b/buildroot/tests/STM32F103RE_creality @@ -25,7 +25,11 @@ opt_enable DWIN_LCD_PROUI INDIVIDUAL_AXIS_HOMING_SUBMENU SET_PROGRESS_MANUALLY S BLTOUCH Z_SAFE_HOMING AUTO_BED_LEVELING_UBL MESH_EDIT_MENU \ LIMITED_MAX_FR_EDITING LIMITED_MAX_ACCEL_EDITING LIMITED_JERK_EDITING BAUD_RATE_GCODE opt_set PREHEAT_3_LABEL '"CUSTOM"' PREHEAT_3_TEMP_HOTEND 240 PREHEAT_3_TEMP_BED 60 PREHEAT_3_FAN_SPEED 128 -exec_test $1 $2 "Ender-3 S1 with ProUI" "$3" +exec_test $1 $2 "Ender-3 S1 with ProUI (PIDTEMP)" "$3" + +opt_disable PIDTEMP +opt_enable MPCTEMP +exec_test $1 $2 "Ender-3 S1 with ProUI (MPCTEMP)" "$3" restore_configs opt_set MOTHERBOARD BOARD_CREALITY_V452 SERIAL_PORT 1 From 86eaaba42ee6a3ec33781afd055c1088c8454175 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 16:13:27 -0600 Subject: [PATCH 08/15] define HAS_PIDPLOT --- Marlin/src/inc/Conditionals_post.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 515d5f7984ac..44923993b00a 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2504,9 +2504,15 @@ // PID heating #if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) #define HAS_PID_HEATING 1 - #if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED) +#endif + +#if ENABLED(DWIN_LCD_PROUI) + #if EITHER(PIDTEMP, PIDTEMPBED) #define DWIN_PID_TUNE 1 #endif + #if EITHER(DWIN_PID_TUNE, MPCTEMP) + #define HAS_PIDPLOT 1 + #endif #endif // Thermal protection From 137e8d8e3a45737411a781065f9cb215d9149e30 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 16:43:38 -0600 Subject: [PATCH 09/15] patch PlotClass::Update --- Marlin/src/lcd/e3v2/proui/plot.cpp | 2 +- Marlin/src/lcd/e3v2/proui/plot.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/plot.cpp b/Marlin/src/lcd/e3v2/proui/plot.cpp index 75917320a45f..53178e3ea705 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.cpp +++ b/Marlin/src/lcd/e3v2/proui/plot.cpp @@ -74,7 +74,7 @@ void PlotClass::Draw(const frame_rect_t frame, const float max, const float ref) DWIN_Draw_HLine(Color_Red, frame.x, r, frame.w); } -void PlotClass::Update(const float value) { +void PlotClass::Update(const_float_t value) { if (!scale) return; uint16_t y = round((y2) - value * scale); if (grphpoints < grphframe.w) { diff --git a/Marlin/src/lcd/e3v2/proui/plot.h b/Marlin/src/lcd/e3v2/proui/plot.h index ea15255fe53a..2663776dc4fc 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.h +++ b/Marlin/src/lcd/e3v2/proui/plot.h @@ -48,7 +48,7 @@ class PlotClass { public: void Draw(frame_rect_t frame, float max, float ref = 0); - void Update(float value); + void Update(const_float_t value); }; extern PlotClass Plot; From 0f72d0eb3863fe0b4cab09d55b8beccc8f5b43c4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 17:09:48 -0600 Subject: [PATCH 10/15] HAS_DISPLAY --- Marlin/Configuration_adv.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index ee5310914280..71f46bfe8a79 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1429,12 +1429,10 @@ #endif // HAS_MARLINUI_MENU -#if ANY(HAS_DISPLAY, DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI) +#if HAS_DISPLAY //#define SOUND_MENU_ITEM // Add a mute option to the LCD menu #define SOUND_ON_DEFAULT // Buzzer/speaker default enabled state -#endif -#if EITHER(HAS_DISPLAY, DWIN_LCD_PROUI) // The timeout to return to the status screen from sub-menus //#define LCD_TIMEOUT_TO_STATUS 15000 // (ms) @@ -1483,7 +1481,7 @@ #endif #endif -#endif // HAS_DISPLAY || DWIN_LCD_PROUI +#endif // HAS_DISPLAY // Add 'M73' to set print job progress, overrides Marlin's built-in estimate //#define SET_PROGRESS_MANUALLY From e0cc4716306ef72161de825504d1729bbb3d1ed4 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 17:14:27 -0600 Subject: [PATCH 11/15] lang --- Marlin/src/lcd/language/language_de.h | 2 +- Marlin/src/lcd/language/language_en.h | 2 +- Marlin/src/lcd/language/language_it.h | 2 +- Marlin/src/lcd/language/language_sk.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h index b583aee040e4..56f91e0ed23b 100644 --- a/Marlin/src/lcd/language/language_de.h +++ b/Marlin/src/lcd/language/language_de.h @@ -343,7 +343,7 @@ namespace Language_de { LSTR MSG_PID_CYCLE = _UxGT("PID Zyklus"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID Tuning fertig"); LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune fehlge.!"); - LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("ungültiger Extruder."); + LSTR MSG_BAD_HEATER_ID = _UxGT("ungültiger Extruder."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperatur zu hoch."); LSTR MSG_TIMEOUT = _UxGT("Timeout."); LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autotune fehlge.! Ungültiger Extruder"); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 708eef48d6e8..425c948dbe39 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -365,7 +365,7 @@ namespace Language_en { LSTR MSG_PID_CYCLE = _UxGT("PID Cycles"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done"); LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("PID Autotune failed!"); - LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Bad extruder."); + LSTR MSG_BAD_HEATER_ID = _UxGT("Bad extruder."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temperature too high."); LSTR MSG_TIMEOUT = _UxGT("Timeout."); LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Autotune failed! Bad extruder."); diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h index 1c3361808658..12a9c572b5e9 100644 --- a/Marlin/src/lcd/language/language_it.h +++ b/Marlin/src/lcd/language/language_it.h @@ -356,7 +356,7 @@ namespace Language_it { LSTR MSG_PID_CYCLE = _UxGT("Ciclo PID"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Calibr.PID eseguita"); LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Calibr.PID fallito!"); - LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Estrusore invalido."); + LSTR MSG_BAD_HEATER_ID = _UxGT("Estrusore invalido."); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Temp.troppo alta."); LSTR MSG_TIMEOUT = _UxGT("Tempo scaduto."); LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Calibrazione fallita! Estrusore errato."); diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h index e0074a0d653f..323ae684d5ea 100644 --- a/Marlin/src/lcd/language/language_sk.h +++ b/Marlin/src/lcd/language/language_sk.h @@ -354,7 +354,7 @@ namespace Language_sk { LSTR MSG_PID_CYCLE = _UxGT("Cykly PID"); LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Kal. PID dokončená"); LSTR MSG_PID_AUTOTUNE_FAILED = _UxGT("Kal. PID zlyhala!"); - LSTR MSG_BAD_EXTRUDER_NUM = _UxGT("Zlý extrudér"); + LSTR MSG_BAD_HEATER_ID = _UxGT("Zlý extrudér"); LSTR MSG_TEMP_TOO_HIGH = _UxGT("Príliš vysoká tepl."); LSTR MSG_TIMEOUT = _UxGT("Čas vypršal."); LSTR MSG_PID_BAD_HEATER_ID = _UxGT("Auto-kal. zlyhala! Zlý extrúder."); From f0522f9f26b8c4af6e8b7587432fbb7a33556a77 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Sun, 15 Jan 2023 17:27:33 -0600 Subject: [PATCH 12/15] Patch PlotClass::Draw etc. --- Marlin/src/inc/Conditionals_post.h | 3 --- Marlin/src/lcd/e3v2/proui/dwin.cpp | 12 +++++++----- Marlin/src/lcd/e3v2/proui/plot.cpp | 6 +++--- Marlin/src/lcd/e3v2/proui/plot.h | 6 +++--- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 89e9aa795100..44923993b00a 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2504,9 +2504,6 @@ // PID heating #if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER) #define HAS_PID_HEATING 1 - #if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED) - #define DWIN_PID_TUNE 1 - #endif #endif #if ENABLED(DWIN_LCD_PROUI) diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index 6519116c9ddc..f6d4138c30e6 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -1248,7 +1248,7 @@ void EachMomentUpdate() { if (checkkey == ESDiagProcess) ESDiag.Update(); #endif #if HAS_PIDPLOT - if (checkkey == PidProcess) Plot.Update((HMI_value.pidresult == PIDTEMP_START) ? thermalManager.wholeDegHotend(0) : thermalManager.wholeDegBed()); + if (checkkey == PidProcess) plot.Update((HMI_value.pidresult == PIDTEMP_START) ? thermalManager.wholeDegHotend(0) : thermalManager.wholeDegBed()); #endif } @@ -1474,9 +1474,11 @@ void DWIN_LevelingDone() { #if HAS_PIDPLOT && EITHER(DWIN_PID_TUNE, MPCTEMP) + #include "plot.h" + celsius_t _maxtemp, _target; void DWIN_Draw_PID_MPC_Popup() { - frame_rect_t gfrm = { 40, 180, DWIN_WIDTH - 80, 120 }; + constexpr frame_rect_t gfrm = { 40, 180, DWIN_WIDTH - 80, 120 }; DWINUI::ClearMainArea(); Draw_Popup_Bkgd(); @@ -1521,11 +1523,11 @@ void DWIN_LevelingDone() { #endif // PID - Plot.Draw(gfrm, _maxtemp, _target); + plot.Draw(gfrm, _maxtemp, _target); DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, _target); } -#endif +#endif // HAS_PIDPLOT && (DWIN_PID_TUNE || MPCTEMP) #if DWIN_PID_TUNE @@ -1569,7 +1571,7 @@ void DWIN_LevelingDone() { #endif case PID_BAD_HEATER_ID: checkkey = last_checkkey; - DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_EXTRUDER_NUM)); + DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_PID_BAD_HEATER_ID)); break; case PID_TUNING_TIMEOUT: checkkey = last_checkkey; diff --git a/Marlin/src/lcd/e3v2/proui/plot.cpp b/Marlin/src/lcd/e3v2/proui/plot.cpp index 53178e3ea705..5f0b03058ef3 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.cpp +++ b/Marlin/src/lcd/e3v2/proui/plot.cpp @@ -42,7 +42,7 @@ * For commercial applications additional licenses can be requested */ -#include "../../../inc/MarlinConfigPre.h" +#include "../../../inc/MarlinConfig.h" #if BOTH(DWIN_LCD_PROUI, HAS_PIDPLOT) @@ -55,13 +55,13 @@ #define Plot_Bg_Color RGB( 1, 12, 8) -PlotClass Plot; +PlotClass plot; uint16_t grphpoints, r, x2, y2 = 0; frame_rect_t grphframe = {0}; float scale = 0; -void PlotClass::Draw(const frame_rect_t frame, const float max, const float ref) { +void PlotClass::Draw(const frame_rect_t &frame, const celsius_t max, const_float_t ref/*=0*/) { grphframe = frame; grphpoints = 0; scale = frame.h / max; diff --git a/Marlin/src/lcd/e3v2/proui/plot.h b/Marlin/src/lcd/e3v2/proui/plot.h index 2663776dc4fc..6ad608096580 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.h +++ b/Marlin/src/lcd/e3v2/proui/plot.h @@ -47,8 +47,8 @@ class PlotClass { public: - void Draw(frame_rect_t frame, float max, float ref = 0); - void Update(const_float_t value); + static void Draw(const frame_rect_t &frame, const celsius_t max, const_float_t ref=0); + static void Update(const_float_t value); }; -extern PlotClass Plot; +extern PlotClass plot; From f8c7ec39df7e4a714a62206262e12a842c3b651c Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 16 Jan 2023 22:02:52 -0600 Subject: [PATCH 13/15] NO YOU CANNOT RELICENSE GPLv3 --- Marlin/src/lcd/e3v2/proui/gcode_preview.cpp | 2 -- Marlin/src/lcd/e3v2/proui/gcode_preview.h | 1 - Marlin/src/lcd/e3v2/proui/menus.cpp | 1 - Marlin/src/lcd/e3v2/proui/plot.cpp | 2 -- Marlin/src/lcd/e3v2/proui/plot.h | 2 -- 5 files changed, 8 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp index 6411b669bbc8..39e9826396f9 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp @@ -38,8 +38,6 @@ * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . - * - * For commercial applications additional licenses can be requested */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.h b/Marlin/src/lcd/e3v2/proui/gcode_preview.h index c1949c5abc12..288990317205 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.h +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.h @@ -17,7 +17,6 @@ * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * - * For commercial applications additional licenses can be requested */ #pragma once diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 540f9e1f417b..1e423ccdadb8 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -38,7 +38,6 @@ * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . - * */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/proui/plot.cpp b/Marlin/src/lcd/e3v2/proui/plot.cpp index 5f0b03058ef3..5114feec02b1 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.cpp +++ b/Marlin/src/lcd/e3v2/proui/plot.cpp @@ -38,8 +38,6 @@ * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . - * - * For commercial applications additional licenses can be requested */ #include "../../../inc/MarlinConfig.h" diff --git a/Marlin/src/lcd/e3v2/proui/plot.h b/Marlin/src/lcd/e3v2/proui/plot.h index 6ad608096580..605ae855f7a1 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.h +++ b/Marlin/src/lcd/e3v2/proui/plot.h @@ -38,8 +38,6 @@ * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . - * - * For commercial applications additional licenses can be requested */ #pragma once From a91fb9c8e820b8ee3159574d84bf0334561b0fa2 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 16 Jan 2023 22:09:52 -0600 Subject: [PATCH 14/15] heading --- Marlin/src/lcd/e3v2/proui/dwin_defines.h | 4 ++-- Marlin/src/lcd/e3v2/proui/dwinui.h | 3 +-- Marlin/src/lcd/e3v2/proui/gcode_preview.cpp | 15 +------------- Marlin/src/lcd/e3v2/proui/gcode_preview.h | 23 ++++++++++++++------- Marlin/src/lcd/e3v2/proui/menus.cpp | 13 ------------ Marlin/src/lcd/e3v2/proui/menus.h | 16 +------------- Marlin/src/lcd/e3v2/proui/plot.cpp | 13 ------------ Marlin/src/lcd/e3v2/proui/plot.h | 15 +------------- 8 files changed, 21 insertions(+), 81 deletions(-) diff --git a/Marlin/src/lcd/e3v2/proui/dwin_defines.h b/Marlin/src/lcd/e3v2/proui/dwin_defines.h index de3f40e2814b..e87aedf31179 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin_defines.h +++ b/Marlin/src/lcd/e3v2/proui/dwin_defines.h @@ -19,6 +19,8 @@ * along with this program. If not, see . * */ +#pragma once + /** * DWIN general defines and data structs for PRO UI * Author: Miguel A. Risco-Castillo (MRISCOC) @@ -26,8 +28,6 @@ * Date: 2022/08/08 */ -#pragma once - //#define DEBUG_DWIN 1 //#define NEED_HEX_PRINT 1 diff --git a/Marlin/src/lcd/e3v2/proui/dwinui.h b/Marlin/src/lcd/e3v2/proui/dwinui.h index 054b9707f634..85d969043f02 100644 --- a/Marlin/src/lcd/e3v2/proui/dwinui.h +++ b/Marlin/src/lcd/e3v2/proui/dwinui.h @@ -19,6 +19,7 @@ * along with this program. If not, see . * */ +#pragma once /** * DWIN Enhanced implementation for PRO UI @@ -27,8 +28,6 @@ * Date: 2022/07/05 */ -#pragma once - #include "../../../inc/MarlinConfigPre.h" #include "../common/dwin_set.h" diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp index 39e9826396f9..bc489dd1fa8f 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.cpp @@ -21,23 +21,10 @@ */ /** - * DWIN g-code thumbnail preview + * DWIN G-code thumbnail preview * Author: Miguel A. Risco-Castillo * version: 3.1.2 * Date: 2022/09/03 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/proui/gcode_preview.h b/Marlin/src/lcd/e3v2/proui/gcode_preview.h index 288990317205..2452797d0c62 100644 --- a/Marlin/src/lcd/e3v2/proui/gcode_preview.h +++ b/Marlin/src/lcd/e3v2/proui/gcode_preview.h @@ -1,12 +1,13 @@ /** - * DWIN g-code thumbnail preview - * Author: Miguel A. Risco-Castillo - * version: 3.1.2 - * Date: 2022/09/03 + * Marlin 3D Printer Firmware + * Copyright (c) 2022 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm * * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, @@ -14,13 +15,19 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License + * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ - #pragma once +/** + * DWIN G-code thumbnail preview + * Author: Miguel A. Risco-Castillo + * version: 3.1.2 + * Date: 2022/09/03 + */ + void Preview_DrawFromSD(); void Preview_Invalidate(); bool Preview_Valid(); diff --git a/Marlin/src/lcd/e3v2/proui/menus.cpp b/Marlin/src/lcd/e3v2/proui/menus.cpp index 1e423ccdadb8..dfcfaa7bbc19 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.cpp +++ b/Marlin/src/lcd/e3v2/proui/menus.cpp @@ -25,19 +25,6 @@ * Author: Miguel A. Risco-Castillo * Version: 1.9.1 * Date: 2022/12/02 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . */ #include "../../../inc/MarlinConfigPre.h" diff --git a/Marlin/src/lcd/e3v2/proui/menus.h b/Marlin/src/lcd/e3v2/proui/menus.h index 33712f8959ef..072bf7584d90 100644 --- a/Marlin/src/lcd/e3v2/proui/menus.h +++ b/Marlin/src/lcd/e3v2/proui/menus.h @@ -19,28 +19,14 @@ * along with this program. If not, see . * */ +#pragma once /** * Menu functions for ProUI * Author: Miguel A. Risco-Castillo * Version: 1.9.1 * Date: 2022/12/02 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * */ -#pragma once #include "dwinui.h" diff --git a/Marlin/src/lcd/e3v2/proui/plot.cpp b/Marlin/src/lcd/e3v2/proui/plot.cpp index 5114feec02b1..6999b14154e4 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.cpp +++ b/Marlin/src/lcd/e3v2/proui/plot.cpp @@ -25,19 +25,6 @@ * Author: Miguel A. Risco-Castillo * Version: 2.1.2 * Date: 2022/11/20 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . */ #include "../../../inc/MarlinConfig.h" diff --git a/Marlin/src/lcd/e3v2/proui/plot.h b/Marlin/src/lcd/e3v2/proui/plot.h index 605ae855f7a1..14e7058b0171 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.h +++ b/Marlin/src/lcd/e3v2/proui/plot.h @@ -19,27 +19,14 @@ * along with this program. If not, see . * */ +#pragma once /** * DWIN Single var plot * Author: Miguel A. Risco-Castillo * Version: 2.1.2 * Date: 2022/11/20 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . */ -#pragma once #include "dwinui.h" From 2bc6bb94a47d45ce59b4816d474cdedc7499ed92 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 16 Jan 2023 22:20:38 -0600 Subject: [PATCH 15/15] option to disable tuning graph --- Marlin/src/inc/Conditionals_post.h | 4 ++-- Marlin/src/lcd/e3v2/proui/dwin.cpp | 14 +++++++------- Marlin/src/lcd/e3v2/proui/plot.cpp | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 44923993b00a..3faef307a8ae 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -2510,8 +2510,8 @@ #if EITHER(PIDTEMP, PIDTEMPBED) #define DWIN_PID_TUNE 1 #endif - #if EITHER(DWIN_PID_TUNE, MPCTEMP) - #define HAS_PIDPLOT 1 + #if EITHER(DWIN_PID_TUNE, MPCTEMP) && DISABLED(DISABLE_TUNING_GRAPH) + #define SHOW_TUNING_GRAPH 1 #endif #endif diff --git a/Marlin/src/lcd/e3v2/proui/dwin.cpp b/Marlin/src/lcd/e3v2/proui/dwin.cpp index f6d4138c30e6..e8430d591c98 100644 --- a/Marlin/src/lcd/e3v2/proui/dwin.cpp +++ b/Marlin/src/lcd/e3v2/proui/dwin.cpp @@ -111,7 +111,7 @@ #include "endstop_diag.h" #endif -#if HAS_PIDPLOT +#if SHOW_TUNING_GRAPH #include "plot.h" #endif @@ -1247,7 +1247,7 @@ void EachMomentUpdate() { #if HAS_ESDIAG if (checkkey == ESDiagProcess) ESDiag.Update(); #endif - #if HAS_PIDPLOT + #if SHOW_TUNING_GRAPH if (checkkey == PidProcess) plot.Update((HMI_value.pidresult == PIDTEMP_START) ? thermalManager.wholeDegHotend(0) : thermalManager.wholeDegBed()); #endif } @@ -1472,7 +1472,7 @@ void DWIN_LevelingDone() { // PID/MPC process -#if HAS_PIDPLOT && EITHER(DWIN_PID_TUNE, MPCTEMP) +#if SHOW_TUNING_GRAPH #include "plot.h" @@ -1527,7 +1527,7 @@ void DWIN_LevelingDone() { DWINUI::Draw_Int(HMI_data.PopupTxt_Color, 3, gfrm.x + 90, gfrm.y - DWINUI::fontHeight() - 4, _target); } -#endif // HAS_PIDPLOT && (DWIN_PID_TUNE || MPCTEMP) +#endif // SHOW_TUNING_GRAPH #if DWIN_PID_TUNE @@ -1548,7 +1548,7 @@ void DWIN_LevelingDone() { #if ENABLED(PIDTEMP) case PIDTEMP_START: HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT + #if SHOW_TUNING_GRAPH DWIN_Draw_PID_MPC_Popup(); #else DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running.")); @@ -1562,7 +1562,7 @@ void DWIN_LevelingDone() { #if ENABLED(PIDTEMPBED) case PIDTEMPBED_START: HMI_SaveProcessID(PidProcess); - #if HAS_PIDPLOT + #if SHOW_TUNING_GRAPH DWIN_Draw_PID_MPC_Popup(); #else DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running.")); @@ -1596,7 +1596,7 @@ void DWIN_LevelingDone() { switch (result) { case MPCTEMP_START: HMI_SaveProcessID(MPCProcess); - #if HAS_PIDPLOT + #if SHOW_TUNING_GRAPH DWIN_Draw_PID_MPC_Popup(); #else DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_MPC_AUTOTUNE), F("for Nozzle is running.")); diff --git a/Marlin/src/lcd/e3v2/proui/plot.cpp b/Marlin/src/lcd/e3v2/proui/plot.cpp index 6999b14154e4..fddaf3963ae1 100644 --- a/Marlin/src/lcd/e3v2/proui/plot.cpp +++ b/Marlin/src/lcd/e3v2/proui/plot.cpp @@ -29,7 +29,7 @@ #include "../../../inc/MarlinConfig.h" -#if BOTH(DWIN_LCD_PROUI, HAS_PIDPLOT) +#if BOTH(DWIN_LCD_PROUI, SHOW_TUNING_GRAPH) #include "plot.h" #include "../../../core/types.h" @@ -61,7 +61,7 @@ void PlotClass::Draw(const frame_rect_t &frame, const celsius_t max, const_float void PlotClass::Update(const_float_t value) { if (!scale) return; - uint16_t y = round((y2) - value * scale); + const uint16_t y = round((y2) - value * scale); if (grphpoints < grphframe.w) { DWIN_Draw_Point(Color_Yellow, 1, 1, grphpoints + grphframe.x, y); } @@ -74,4 +74,4 @@ void PlotClass::Update(const_float_t value) { grphpoints++; } -#endif // DWIN_LCD_PROUI && HAS_PIDPLOT +#endif // DWIN_LCD_PROUI && SHOW_TUNING_GRAPH