Skip to content

Commit 0100936

Browse files
thinkyheadAndy-Big
authored andcommitted
πŸ§‘β€πŸ’» Adjust PID / MPC / ProUI
Changes to simplify MarlinFirmware#25232 WIP
1 parent 033d9ae commit 0100936

33 files changed

Lines changed: 180 additions & 164 deletions

β€ŽMarlin/Configuration_adv.hβ€Ž

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,12 +1431,10 @@
14311431

14321432
#endif // HAS_MARLINUI_MENU
14331433

1434-
#if ANY(HAS_DISPLAY, DWIN_LCD_PROUI, DWIN_CREALITY_LCD_JYERSUI)
1434+
#if HAS_DISPLAY
14351435
//#define SOUND_MENU_ITEM // Add a mute option to the LCD menu
14361436
#define SOUND_ON_DEFAULT // Buzzer/speaker default enabled state
1437-
#endif
14381437

1439-
#if EITHER(HAS_DISPLAY, DWIN_LCD_PROUI)
14401438
// The timeout to return to the status screen from sub-menus
14411439
#define LCD_TIMEOUT_TO_STATUS 30000 // (ms)
14421440

@@ -1487,7 +1485,7 @@
14871485
#endif
14881486
#endif
14891487

1490-
#endif // HAS_DISPLAY || DWIN_LCD_PROUI
1488+
#endif // HAS_DISPLAY
14911489

14921490
// Add 'M73' to set print job progress, overrides Marlin's built-in estimate
14931491
//#define SET_PROGRESS_MANUALLY

β€ŽMarlin/src/gcode/geometry/M206_M428.cppβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ void GcodeSuite::M428() {
9191
diff[i] = -current_position[i];
9292
if (!WITHIN(diff[i], -20, 20)) {
9393
SERIAL_ERROR_MSG(STR_ERR_M428_TOO_FAR);
94-
LCD_ALERTMESSAGE_F("Err: Too far!");
94+
LCD_ALERTMESSAGE(MSG_ERR_M428_TOO_FAR);
9595
ERR_BUZZ();
9696
return;
9797
}

β€ŽMarlin/src/gcode/temp/M303.cppβ€Ž

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ void GcodeSuite::M303() {
6767
default:
6868
SERIAL_ECHOPGM(STR_PID_AUTOTUNE);
6969
SERIAL_ECHOLNPGM(STR_PID_BAD_HEATER_ID);
70-
TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_BAD_EXTRUDER_NUM));
71-
TERN_(DWIN_LCD_PROUI, DWIN_PidTuning(PID_BAD_EXTRUDER_NUM));
70+
TERN_(EXTENSIBLE_UI, ExtUI::onPidTuning(ExtUI::result_t::PID_BAD_HEATER_ID));
71+
TERN_(DWIN_PID_TUNE, DWIN_PidTuning(PID_BAD_HEATER_ID));
7272
return;
7373
}
7474

@@ -78,20 +78,9 @@ void GcodeSuite::M303() {
7878
const celsius_t temp = seenS ? parser.value_celsius() : default_temp;
7979
const bool u = parser.boolval('U');
8080

81-
#if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED)
82-
if (seenC) HMI_data.PidCycles = c;
83-
if (seenS) {
84-
switch (hid) {
85-
OPTCODE(PIDTEMP, case 0 ... HOTENDS - 1: HMI_data.HotendPidT = temp; break)
86-
OPTCODE(PIDTEMPBED, case H_BED: HMI_data.BedPidT = temp; break)
87-
default: break;
88-
}
89-
}
90-
#endif
81+
TERN_(DWIN_PID_TUNE, DWIN_StartM303(seenC, c, seenS, hid, temp));
9182

92-
#if DISABLED(BUSY_WHILE_HEATING)
93-
KEEPALIVE_STATE(NOT_BUSY);
94-
#endif
83+
IF_DISABLED(BUSY_WHILE_HEATING, KEEPALIVE_STATE(NOT_BUSY));
9584

9685
LCD_MESSAGE(MSG_PID_AUTOTUNE);
9786
thermalManager.PID_autotune(temp, hid, c, u);

β€ŽMarlin/src/gcode/temp/M306.cppβ€Ž

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ void GcodeSuite::M306() {
5252

5353
if (parser.seen("ACFPRH")) {
5454
const heater_id_t hid = (heater_id_t)parser.intval('E', 0);
55-
MPC_t &constants = thermalManager.temp_hotend[hid].constants;
56-
if (parser.seenval('P')) constants.heater_power = parser.value_float();
57-
if (parser.seenval('C')) constants.block_heat_capacity = parser.value_float();
58-
if (parser.seenval('R')) constants.sensor_responsiveness = parser.value_float();
59-
if (parser.seenval('A')) constants.ambient_xfer_coeff_fan0 = parser.value_float();
55+
MPC_t &mpc = thermalManager.temp_hotend[hid].mpc;
56+
if (parser.seenval('P')) mpc.heater_power = parser.value_float();
57+
if (parser.seenval('C')) mpc.block_heat_capacity = parser.value_float();
58+
if (parser.seenval('R')) mpc.sensor_responsiveness = parser.value_float();
59+
if (parser.seenval('A')) mpc.ambient_xfer_coeff_fan0 = parser.value_float();
6060
#if ENABLED(MPC_INCLUDE_FAN)
61-
if (parser.seenval('F')) constants.fan255_adjustment = parser.value_float() - constants.ambient_xfer_coeff_fan0;
61+
if (parser.seenval('F')) mpc.applyFanAdjustment(parser.value_float());
6262
#endif
63-
if (parser.seenval('H')) constants.filament_heat_capacity_permm = parser.value_float();
63+
if (parser.seenval('H')) mpc.filament_heat_capacity_permm = parser.value_float();
6464
return;
6565
}
6666

@@ -71,16 +71,16 @@ void GcodeSuite::M306_report(const bool forReplay/*=true*/) {
7171
report_heading(forReplay, F("Model predictive control"));
7272
HOTEND_LOOP() {
7373
report_echo_start(forReplay);
74-
MPC_t& constants = thermalManager.temp_hotend[e].constants;
74+
MPC_t &mpc = thermalManager.temp_hotend[e].mpc;
7575
SERIAL_ECHOPGM(" M306 E", e);
76-
SERIAL_ECHOPAIR_F(" P", constants.heater_power, 2);
77-
SERIAL_ECHOPAIR_F(" C", constants.block_heat_capacity, 2);
78-
SERIAL_ECHOPAIR_F(" R", constants.sensor_responsiveness, 4);
79-
SERIAL_ECHOPAIR_F(" A", constants.ambient_xfer_coeff_fan0, 4);
76+
SERIAL_ECHOPAIR_F(" P", mpc.heater_power, 2);
77+
SERIAL_ECHOPAIR_F(" C", mpc.block_heat_capacity, 2);
78+
SERIAL_ECHOPAIR_F(" R", mpc.sensor_responsiveness, 4);
79+
SERIAL_ECHOPAIR_F(" A", mpc.ambient_xfer_coeff_fan0, 4);
8080
#if ENABLED(MPC_INCLUDE_FAN)
81-
SERIAL_ECHOPAIR_F(" F", constants.ambient_xfer_coeff_fan0 + constants.fan255_adjustment, 4);
81+
SERIAL_ECHOPAIR_F(" F", mpc.fanCoefficient(), 4);
8282
#endif
83-
SERIAL_ECHOPAIR_F(" H", constants.filament_heat_capacity_permm, 4);
83+
SERIAL_ECHOPAIR_F(" H", mpc.filament_heat_capacity_permm, 4);
8484
SERIAL_EOL();
8585
}
8686
}

β€ŽMarlin/src/inc/Conditionals_post.hβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,6 +2504,9 @@
25042504
// PID heating
25052505
#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER)
25062506
#define HAS_PID_HEATING 1
2507+
#if ENABLED(DWIN_LCD_PROUI) && EITHER(PIDTEMP, PIDTEMPBED)
2508+
#define DWIN_PID_TUNE 1
2509+
#endif
25072510
#endif
25082511

25092512
// Thermal protection

β€ŽMarlin/src/lcd/e3v2/proui/dwin.cppβ€Ž

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,9 +1500,10 @@ void DWIN_LevelingDone() {
15001500

15011501
// PID process
15021502

1503-
#if HAS_PIDPLOT
1503+
#if BOTH(HAS_PIDPLOT, DWIN_PID_TUNE)
1504+
15041505
void DWIN_Draw_PIDPopup() {
1505-
frame_rect_t gfrm = {40, 180, DWIN_WIDTH - 80, 120};
1506+
frame_rect_t gfrm = { 40, 180, DWIN_WIDTH - 80, 120 };
15061507
DWINUI::ClearMainArea();
15071508
Draw_Popup_Bkgd();
15081509
DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 100, GET_TEXT_F(MSG_PID_AUTOTUNE));
@@ -1525,9 +1526,21 @@ void DWIN_LevelingDone() {
15251526
default: break;
15261527
}
15271528
}
1529+
15281530
#endif
15291531

1530-
#if EITHER(PIDTEMP, PIDTEMPBED)
1532+
#if DWIN_PID_TUNE
1533+
1534+
void DWIN_StartM303(const bool seenC, const int c, const bool seenS, const heater_id_t hid, const celsius_t temp) {
1535+
if (seenC) HMI_data.PidCycles = c;
1536+
if (seenS) {
1537+
switch (hid) {
1538+
OPTCODE(PIDTEMP, case 0 ... HOTENDS - 1: HMI_data.HotendPidT = temp; break)
1539+
OPTCODE(PIDTEMPBED, case H_BED: HMI_data.BedPidT = temp; break)
1540+
default: break;
1541+
}
1542+
}
1543+
}
15311544

15321545
void DWIN_PidTuning(pidresult_t result) {
15331546
HMI_value.pidresult = result;
@@ -1541,9 +1554,9 @@ void DWIN_LevelingDone() {
15411554
DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running."));
15421555
#endif
15431556
break;
1544-
case PID_BAD_EXTRUDER_NUM:
1557+
case PID_BAD_HEATER_ID:
15451558
checkkey = last_checkkey;
1546-
DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_EXTRUDER_NUM));
1559+
DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE_FAILED), GET_TEXT_F(MSG_BAD_HEATER_ID));
15471560
break;
15481561
#endif
15491562
#if ENABLED(PIDTEMPBED)
@@ -1568,11 +1581,13 @@ void DWIN_LevelingDone() {
15681581
checkkey = last_checkkey;
15691582
DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE), GET_TEXT_F(MSG_BUTTON_DONE));
15701583
break;
1571-
default: checkkey = last_checkkey; break;
1584+
default:
1585+
checkkey = last_checkkey;
1586+
break;
15721587
}
15731588
}
15741589

1575-
#endif // PIDTEMP || PIDTEMPBED
1590+
#endif // DWIN_PID_TUNE
15761591

15771592
// Started a Print Job
15781593
void DWIN_Print_Started() {
@@ -1667,7 +1682,7 @@ void DWIN_SetDataDefaults() {
16671682
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color, HMI_data.StatusBg_Color);
16681683
TERN_(PIDTEMP, HMI_data.HotendPidT = DEF_HOTENDPIDT);
16691684
TERN_(PIDTEMPBED, HMI_data.BedPidT = DEF_BEDPIDT);
1670-
TERN_(HAS_PID_HEATING, HMI_data.PidCycles = DEF_PIDCYCLES);
1685+
TERN_(DWIN_PID_TUNE, HMI_data.PidCycles = DEF_PIDCYCLES);
16711686
#if ENABLED(PREVENT_COLD_EXTRUSION)
16721687
HMI_data.ExtMinT = EXTRUDE_MINTEMP;
16731688
ApplyExtMinT();
@@ -2057,7 +2072,7 @@ void SetMoveZ() { HMI_value.axis = Z_AXIS; SetPFloatOnClick(Z_MIN_POS, Z_MAX_POS
20572072
}
20582073
#endif
20592074

2060-
#if EITHER(PIDTEMP, PIDTEMPBED)
2075+
#if DWIN_PID_TUNE
20612076
void SetPID(celsius_t t, heater_id_t h) {
20622077
char cmd[53] = "";
20632078
char str_1[5] = "", str_2[5] = "";
@@ -2523,7 +2538,7 @@ void SetStepsZ() { HMI_value.axis = Z_AXIS, SetPFloatOnClick( MIN_STEP, MAX_STEP
25232538
void SetBedPidT() { SetPIntOnClick(MIN_BEDTEMP, MAX_BEDTEMP); }
25242539
#endif
25252540

2526-
#if EITHER(PIDTEMP, PIDTEMPBED)
2541+
#if DWIN_PID_TUNE
25272542
void SetPidCycles() { SetPIntOnClick(3, 50); }
25282543
void SetKp() { SetPFloatOnClick(0, 1000, 2); }
25292544
void ApplyPIDi() {
@@ -2694,7 +2709,7 @@ void onDrawGetColorItem(MenuItemClass* menuitem, int8_t line) {
26942709
DWIN_Draw_HLine(HMI_data.SplitLine_Color, 16, MYPOS(line + 1), 240);
26952710
}
26962711

2697-
#if EITHER(PIDTEMP, PIDTEMPBED)
2712+
#if DWIN_PID_TUNE
26982713
void onDrawPIDi(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_i(*(float*)static_cast<MenuItemPtrClass*>(menuitem)->value)); }
26992714
void onDrawPIDd(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_d(*(float*)static_cast<MenuItemPtrClass*>(menuitem)->value)); }
27002715
#endif

β€ŽMarlin/src/lcd/e3v2/proui/dwin.hβ€Ž

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ enum processID : uint8_t {
7676
enum pidresult_t : uint8_t {
7777
PIDTEMP_START = 0,
7878
PIDTEMPBED_START,
79-
PID_BAD_EXTRUDER_NUM,
79+
PID_BAD_HEATER_ID,
8080
PID_TEMP_TOO_HIGH,
8181
PID_TUNING_TIMEOUT,
8282
PID_DONE,
@@ -107,14 +107,14 @@ typedef struct {
107107
uint16_t Coordinate_Color;
108108

109109
// Temperatures
110-
#if ENABLED(PIDTEMP)
111-
int16_t HotendPidT = DEF_HOTENDPIDT;
112-
#endif
113-
#if ENABLED(PIDTEMPBED)
114-
int16_t BedPidT = DEF_BEDPIDT;
115-
#endif
116-
#if (HAS_HOTEND || HAS_HEATED_BED) && HAS_PID_HEATING
110+
#if DWIN_PID_TUNE
117111
int16_t PidCycles = DEF_PIDCYCLES;
112+
#if ENABLED(PIDTEMP)
113+
int16_t HotendPidT = DEF_HOTENDPIDT;
114+
#endif
115+
#if ENABLED(PIDTEMPBED)
116+
int16_t BedPidT = DEF_BEDPIDT;
117+
#endif
118118
#endif
119119
#if ENABLED(PREVENT_COLD_EXTRUSION)
120120
int16_t ExtMinT = EXTRUDE_MINTEMP;
@@ -141,8 +141,8 @@ static constexpr size_t eeprom_data_size = sizeof(HMI_data_t);
141141

142142
typedef struct {
143143
int8_t Color[3]; // Color components
144-
#if HAS_PID_HEATING
145-
tempcontrol_t pidresult = PID_DONE;
144+
#if DWIN_PID_TUNE
145+
pidresult_t pidresult = PID_DONE;
146146
#endif
147147
uint8_t Select = 0; // Auxiliary selector variable
148148
AxisEnum axis = X_AXIS; // Axis Select
@@ -358,13 +358,14 @@ void Draw_Steps_Menu();
358358
#endif
359359

360360
// PID
361-
#if HAS_PID_HEATING
362-
void DWIN_PidTuning(tempcontrol_t result);
361+
#if DWIN_PID_TUNE
362+
#include "../../../module/temperature.h"
363+
void DWIN_StartM303(const bool seenC, const int c, const bool seenS, const heater_id_t hid, const celsius_t temp);
364+
void DWIN_PidTuning(pidresult_t result);
363365
#if ENABLED(PIDTEMP)
364366
void Draw_HotendPID_Menu();
365367
#endif
366368
#if ENABLED(PIDTEMPBED)
367369
void Draw_BedPID_Menu();
368370
#endif
369371
#endif
370-
#endif

β€ŽMarlin/src/lcd/e3v2/proui/plot.cppβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void PlotClass::Draw(const frame_rect_t frame, const float max, const float ref)
7474
DWIN_Draw_HLine(Color_Red, frame.x, r, frame.w);
7575
}
7676

77-
void PlotClass::Update(const float value) {
77+
void PlotClass::Update(const_float_t value) {
7878
if (!scale) return;
7979
uint16_t y = round((y2) - value * scale);
8080
if (grphpoints < grphframe.w) {

β€ŽMarlin/src/lcd/e3v2/proui/plot.hβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
class PlotClass {
4949
public:
5050
void Draw(frame_rect_t frame, float max, float ref = 0);
51-
void Update(float value);
51+
void Update(const_float_t value);
5252
};
5353

5454
extern PlotClass Plot;

β€ŽMarlin/src/lcd/extui/dgus/DGUSScreenHandler.cppβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,11 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var)
295295

296296
// Don't let the user in the dark why there is no reaction.
297297
if (!ExtUI::isMediaInserted()) {
298-
setstatusmessagePGM(GET_TEXT(MSG_NO_MEDIA));
298+
setstatusmessage(GET_TEXT_F(MSG_NO_MEDIA));
299299
return;
300300
}
301301
if (card.flag.abort_sd_printing) {
302-
setstatusmessagePGM(GET_TEXT(MSG_MEDIA_ABORTING));
302+
setstatusmessage(GET_TEXT_F(MSG_MEDIA_ABORTING));
303303
return;
304304
}
305305
}

0 commit comments

Comments
Β (0)