TemperatureControl: allow setting PID values indepdendently with M301
authorMichael Moon <triffid.hunter@gmail.com>
Sun, 30 Dec 2012 09:39:30 +0000 (20:39 +1100)
committerMichael Moon <triffid.hunter@gmail.com>
Wed, 2 Jan 2013 00:50:20 +0000 (11:50 +1100)
src/modules/tools/temperaturecontrol/TemperatureControl.cpp
src/modules/tools/temperaturecontrol/TemperatureControl.h
src/modules/tools/temperaturecontrol/TemperatureControlPool.cpp

index 832aa1d..57b9517 100644 (file)
@@ -157,15 +157,18 @@ void TemperatureControl::on_gcode_execute(void* argument){
         }
         if (gcode->m == 301)
         {
-            if (gcode->has_letter('P'))
-                this->p_factor = gcode->get_value('P');
-            if (gcode->has_letter('I'))
-                this->i_factor = gcode->get_value('I');
-            if (gcode->has_letter('D'))
-                this->d_factor = gcode->get_value('D');
-            if (gcode->has_letter('X'))
-                this->i_max    = gcode->get_value('X');
-            gcode->stream->printf("%s: Pf:%g If:%g Df:%g X(I_max):%g Pv:%g Iv:%g Dv:%g O:%d\n", this->designator.c_str(), this->p_factor, this->i_factor, this->d_factor, this->i_max, this->p, this->i, this->d, o);
+            if (gcode->has_letter('S') && (gcode->get_value('S') == this->pool_index))
+            {
+                if (gcode->has_letter('P'))
+                    this->p_factor = gcode->get_value('P');
+                if (gcode->has_letter('I'))
+                    this->i_factor = gcode->get_value('I');
+                if (gcode->has_letter('D'))
+                    this->d_factor = gcode->get_value('D');
+                if (gcode->has_letter('X'))
+                    this->i_max    = gcode->get_value('X');
+            }
+            gcode->stream->printf("%s(S%d): Pf:%g If:%g Df:%g X(I_max):%g Pv:%g Iv:%g Dv:%g O:%d\n", this->designator.c_str(), this->pool_index, this->p_factor, this->i_factor, this->d_factor, this->i_max, this->p, this->i, this->d, o);
         }
     }
 }
index e3abcf7..6f4185c 100644 (file)
@@ -98,7 +98,9 @@ class TemperatureControl : public Module {
         uint16_t set_m_code;
         uint16_t set_and_wait_m_code;
         uint16_t get_m_code;
+
         string designator;
+        int pool_index;
 };
 
 #endif
index fdad1cc..301fa90 100644 (file)
@@ -24,6 +24,7 @@ void TemperatureControlPool::on_module_loaded(){
         // If module is enabled
         if( this->kernel->config->value(temperature_control_checksum, modules[i], enable_checksum )->as_bool() == true ){
             TemperatureControl* controller = new TemperatureControl(modules[i]);
+            controller->pool_index = i;
             this->kernel->add_module(controller);
             this->controllers.push_back( controller );
         }