From 01004e36614cc3a2ca67ccd5d244211225fefabe Mon Sep 17 00:00:00 2001 From: Jim Morris Date: Mon, 24 Aug 2015 19:09:41 -0700 Subject: [PATCH] Added max temp check, if exceeeded hotend will be turned off and HALT asserted Added M143 S0 P300 which will set max temp for hotend 0 to 300 degrees C This may be a breaking change as previously max_temp simply stopped one from entering a temp that was too high default is 300 --- ConfigSamples/AzteegX5Mini.delta/config | 2 ++ ConfigSamples/AzteegX5Mini/config | 2 ++ ConfigSamples/Smoothieboard.delta/config | 4 +++ ConfigSamples/Smoothieboard/config | 2 +- .../temperaturecontrol/TemperatureControl.cpp | 33 ++++++++++++++----- .../temperaturecontrol/TemperatureControl.h | 2 +- 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/ConfigSamples/AzteegX5Mini.delta/config b/ConfigSamples/AzteegX5Mini.delta/config index 720063f0..dd36ce0d 100644 --- a/ConfigSamples/AzteegX5Mini.delta/config +++ b/ConfigSamples/AzteegX5Mini.delta/config @@ -87,6 +87,8 @@ temperature_control.hotend.thermistor EPCOS100K # see http://smoot temperature_control.hotend.set_m_code 104 # temperature_control.hotend.set_and_wait_m_code 109 # temperature_control.hotend.designator T # +#temperature_control.hotend.max_temp 300 # Set maximum temperature - Will prevent heating above 300 by default +#temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below 0 by default #P39.98 I5.00 D79.91 # temperature_control.hotend.p_factor 39.98 # diff --git a/ConfigSamples/AzteegX5Mini/config b/ConfigSamples/AzteegX5Mini/config index 0facf207..9e7075f9 100755 --- a/ConfigSamples/AzteegX5Mini/config +++ b/ConfigSamples/AzteegX5Mini/config @@ -82,6 +82,8 @@ temperature_control.hotend.thermistor EPCOS100K # see http://smoot temperature_control.hotend.set_m_code 104 # temperature_control.hotend.set_and_wait_m_code 109 # temperature_control.hotend.designator T # +#temperature_control.hotend.max_temp 300 # Set maximum temperature - Will prevent heating above 300 by default +#temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below 0 by default temperature_control.hotend.p_factor 13.7 # temperature_control.hotend.i_factor 0.097 # diff --git a/ConfigSamples/Smoothieboard.delta/config b/ConfigSamples/Smoothieboard.delta/config index d7f8a0b0..d6d398eb 100644 --- a/ConfigSamples/Smoothieboard.delta/config +++ b/ConfigSamples/Smoothieboard.delta/config @@ -1,3 +1,5 @@ +#temperature_control.hotend.max_temp 300 # Set maximum temperature - Will prevent heating above 300 by default +#temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below 0 by default # NOTE Lines must not exceed 132 characters # Robot module configurations : general handling of movement G-codes and slicing into moves default_feed_rate 4000 # Default rate ( mm/minute ) for G1/G2/G3 moves @@ -132,6 +134,8 @@ temperature_control.hotend.thermistor EPCOS100K # see http://smoot temperature_control.hotend.set_m_code 104 # temperature_control.hotend.set_and_wait_m_code 109 # temperature_control.hotend.designator T # +#temperature_control.hotend.max_temp 300 # Set maximum temperature - Will prevent heating above 300 by default +#temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below 0 by default #temperature_control.hotend.p_factor 13.7 # permanently set the PID values after an auto pid #temperature_control.hotend.i_factor 0.097 # diff --git a/ConfigSamples/Smoothieboard/config b/ConfigSamples/Smoothieboard/config index d952f401..28df3b94 100644 --- a/ConfigSamples/Smoothieboard/config +++ b/ConfigSamples/Smoothieboard/config @@ -132,7 +132,7 @@ temperature_control.hotend.thermistor EPCOS100K # see http://smoot temperature_control.hotend.set_m_code 104 # temperature_control.hotend.set_and_wait_m_code 109 # temperature_control.hotend.designator T # -#temperature_control.hotend.max_temp 250 # Set maximum temperature +#temperature_control.hotend.max_temp 300 # Set maximum temperature - Will prevent heating above 300 by default #temperature_control.hotend.min_temp 0 # Set minimum temperature - Will prevent heating below if set #temperature_control.hotend.p_factor 13.7 # permanently set the PID values after an auto pid diff --git a/src/modules/tools/temperaturecontrol/TemperatureControl.cpp b/src/modules/tools/temperaturecontrol/TemperatureControl.cpp index 0d493ab9..f4c121f1 100644 --- a/src/modules/tools/temperaturecontrol/TemperatureControl.cpp +++ b/src/modules/tools/temperaturecontrol/TemperatureControl.cpp @@ -69,7 +69,7 @@ TemperatureControl::TemperatureControl(uint16_t name, int index) name_checksum= name; pool_index= index; waiting= false; - min_temp_violated= false; + temp_violated= false; sensor= nullptr; readonly= false; } @@ -113,9 +113,11 @@ void TemperatureControl::on_halt(void *arg) void TemperatureControl::on_main_loop(void *argument) { - if (this->min_temp_violated) { - THEKERNEL->streams->printf("Error: MINTEMP triggered. Check your temperature sensors!\n"); - this->min_temp_violated = false; + if (this->temp_violated) { + this->temp_violated = false; + THEKERNEL->streams->printf("!! Error: MINTEMP or MAXTEMP triggered. Check your temperature sensors!\n"); + THEKERNEL->streams->printf("HALT asserted - reset or M999 required\n"); + THEKERNEL->call_event(ON_HALT, nullptr); } } @@ -132,7 +134,7 @@ void TemperatureControl::load_config() this->designator = THEKERNEL->config->value(temperature_control_checksum, this->name_checksum, designator_checksum)->by_default(string("T"))->as_string(); // Max and min temperatures we are not allowed to get over (Safety) - this->max_temp = THEKERNEL->config->value(temperature_control_checksum, this->name_checksum, max_temp_checksum)->by_default(1000)->as_number(); + this->max_temp = THEKERNEL->config->value(temperature_control_checksum, this->name_checksum, max_temp_checksum)->by_default(300)->as_number(); this->min_temp = THEKERNEL->config->value(temperature_control_checksum, this->name_checksum, min_temp_checksum)->by_default(0)->as_number(); // Heater pin @@ -245,7 +247,20 @@ void TemperatureControl::on_gcode_received(void *argument) // readonly sensors don't handle the rest if(this->readonly) return; - if (gcode->m == 301) { + if (gcode->m == 143) { + if (gcode->has_letter('S') && (gcode->get_value('S') == this->pool_index)) { + if(gcode->has_letter('P')) { + max_temp= gcode->get_value('P'); + + } else { + gcode->stream->printf("Nothing set NOTE Usage is M143 S0 P300 where is the hotend index and

is the maximum temp to set\n"); + } + + }else if(gcode->get_num_args() == 0) { + gcode->stream->printf("Maximum temperature for %s(%d) is %f°C\n", this->designator.c_str(), this->pool_index, max_temp); + } + + } else if (gcode->m == 301) { if (gcode->has_letter('S') && (gcode->get_value('S') == this->pool_index)) { if (gcode->has_letter('P')) setPIDp( gcode->get_value('P') ); @@ -265,6 +280,8 @@ void TemperatureControl::on_gcode_received(void *argument) } else if (gcode->m == 500 || gcode->m == 503) { // M500 saves some volatile settings to config override file, M503 just prints the settings gcode->stream->printf(";PID settings:\nM301 S%d P%1.4f I%1.4f D%1.4f X%1.4f Y%d\n", this->pool_index, this->p_factor, this->i_factor / this->PIDdt, this->d_factor * this->PIDdt, this->i_max, this->heater_pin.max_pwm()); + gcode->stream->printf(";Max temperature setting:\nM143 S%d P%1.4f\n", this->pool_index, this->max_temp); + if(this->sensor_settings) { // get or save any sensor specific optional values TempSensor::sensor_options_t options; @@ -403,8 +420,8 @@ uint32_t TemperatureControl::thermistor_read_tick(uint32_t dummy) { float temperature = sensor->get_temperature(); if(!this->readonly && target_temperature > 2) { - if (isinf(temperature) || temperature < min_temp) { - this->min_temp_violated = true; + if (isinf(temperature) || temperature < min_temp || temperature > max_temp) { + this->temp_violated = true; target_temperature = UNDEFINED; heater_pin.set((this->o = 0)); } else { diff --git a/src/modules/tools/temperaturecontrol/TemperatureControl.h b/src/modules/tools/temperaturecontrol/TemperatureControl.h index 21a9ccaa..4760c3ee 100644 --- a/src/modules/tools/temperaturecontrol/TemperatureControl.h +++ b/src/modules/tools/temperaturecontrol/TemperatureControl.h @@ -84,7 +84,7 @@ class TemperatureControl : public Module { struct { bool use_bangbang:1; bool waiting:1; - bool min_temp_violated:1; + bool temp_violated:1; bool link_to_tool:1; bool active:1; bool readonly:1; -- 2.20.1