diff options
author | David Crocker <dcrocker@eschertech.com> | 2022-09-30 15:18:02 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2022-09-30 15:18:02 +0300 |
commit | a150e8244a4c382f51f414c21eff3defb2424fef (patch) | |
tree | f6b2aa32319daa341585c3c8d067521a8b36e980 | |
parent | 796b7b65c237ef1b7b3a4f27a33adf3e9fb0d550 (diff) |
Added M570 R parameter
-rw-r--r-- | src/Heating/Heater.cpp | 43 | ||||
-rw-r--r-- | src/Heating/Heater.h | 5 | ||||
-rw-r--r-- | src/Heating/HeaterMonitor.cpp | 2 | ||||
-rw-r--r-- | src/Heating/HeaterMonitor.h | 2 | ||||
-rw-r--r-- | src/Heating/RemoteHeater.cpp | 2 |
5 files changed, 32 insertions, 22 deletions
diff --git a/src/Heating/Heater.cpp b/src/Heating/Heater.cpp index 19017fa5..49c4519c 100644 --- a/src/Heating/Heater.cpp +++ b/src/Heating/Heater.cpp @@ -41,26 +41,29 @@ constexpr ObjectModelTableEntry Heater::objectModelTable[] = { // Within each group, these entries must be in alphabetical order // 0. Heater members - { "active", OBJECT_MODEL_FUNC(self->GetActiveTemperature(), 1), ObjectModelEntryFlags::live }, - { "avgPwm", OBJECT_MODEL_FUNC(self->GetAveragePWM(), 3), ObjectModelEntryFlags::live }, - { "current", OBJECT_MODEL_FUNC(self->GetTemperature(), 2), ObjectModelEntryFlags::live }, - { "max", OBJECT_MODEL_FUNC(self->GetHighestTemperatureLimit(), 1), ObjectModelEntryFlags::none }, - { "min", OBJECT_MODEL_FUNC(self->GetLowestTemperatureLimit(), 1), ObjectModelEntryFlags::none }, - { "model", OBJECT_MODEL_FUNC((const FopDt *)&self->GetModel()), ObjectModelEntryFlags::none }, - { "monitors", OBJECT_MODEL_FUNC_ARRAY(0), ObjectModelEntryFlags::none }, - { "sensor", OBJECT_MODEL_FUNC((int32_t)self->GetSensorNumber()), ObjectModelEntryFlags::none }, - { "standby", OBJECT_MODEL_FUNC(self->GetStandbyTemperature(), 1), ObjectModelEntryFlags::live }, - { "state", OBJECT_MODEL_FUNC(self->GetStatus().ToString()), ObjectModelEntryFlags::live }, + { "active", OBJECT_MODEL_FUNC(self->GetActiveTemperature(), 1), ObjectModelEntryFlags::live }, + { "avgPwm", OBJECT_MODEL_FUNC(self->GetAveragePWM(), 3), ObjectModelEntryFlags::live }, + { "current", OBJECT_MODEL_FUNC(self->GetTemperature(), 2), ObjectModelEntryFlags::live }, + { "max", OBJECT_MODEL_FUNC(self->GetHighestTemperatureLimit(), 1), ObjectModelEntryFlags::none }, + { "maxBadReadings", OBJECT_MODEL_FUNC((int32_t)self->maxBadTemperatureCount), ObjectModelEntryFlags::none }, + { "maxHeatingFaultTime", OBJECT_MODEL_FUNC(self->maxHeatingFaultTime, 1), ObjectModelEntryFlags::none }, + { "maxTempExcursion", OBJECT_MODEL_FUNC(self->maxTempExcursion, 1), ObjectModelEntryFlags::none }, + { "min", OBJECT_MODEL_FUNC(self->GetLowestTemperatureLimit(), 1), ObjectModelEntryFlags::none }, + { "model", OBJECT_MODEL_FUNC((const FopDt *)&self->GetModel()), ObjectModelEntryFlags::none }, + { "monitors", OBJECT_MODEL_FUNC_ARRAY(0), ObjectModelEntryFlags::none }, + { "sensor", OBJECT_MODEL_FUNC((int32_t)self->GetSensorNumber()), ObjectModelEntryFlags::none }, + { "standby", OBJECT_MODEL_FUNC(self->GetStandbyTemperature(), 1), ObjectModelEntryFlags::live }, + { "state", OBJECT_MODEL_FUNC(self->GetStatus().ToString()), ObjectModelEntryFlags::live }, // 1. Heater.monitors[] members - { "action", OBJECT_MODEL_FUNC_IF(self->monitors[context.GetLastIndex()].GetTrigger() != HeaterMonitorTrigger::Disabled, - (int32_t)self->monitors[context.GetLastIndex()].GetAction()), ObjectModelEntryFlags::none }, - { "condition", OBJECT_MODEL_FUNC(self->monitors[context.GetLastIndex()].GetTriggerName()), ObjectModelEntryFlags::none }, - { "limit", OBJECT_MODEL_FUNC_IF(self->monitors[context.GetLastIndex()].GetTrigger() != HeaterMonitorTrigger::Disabled, - self->monitors[context.GetLastIndex()].GetTemperatureLimit(), 1), ObjectModelEntryFlags::none }, + { "action", OBJECT_MODEL_FUNC_IF(self->monitors[context.GetLastIndex()].GetTrigger() != HeaterMonitorTrigger::Disabled, + (int32_t)self->monitors[context.GetLastIndex()].GetAction()), ObjectModelEntryFlags::none }, + { "condition", OBJECT_MODEL_FUNC(self->monitors[context.GetLastIndex()].GetTriggerName()), ObjectModelEntryFlags::none }, + { "limit", OBJECT_MODEL_FUNC_IF(self->monitors[context.GetLastIndex()].GetTrigger() != HeaterMonitorTrigger::Disabled, + self->monitors[context.GetLastIndex()].GetTemperatureLimit(), 1), ObjectModelEntryFlags::none }, }; -constexpr uint8_t Heater::objectModelTableDescriptor[] = { 2, 10, 3 }; +constexpr uint8_t Heater::objectModelTableDescriptor[] = { 2, 13, 3 }; DEFINE_GET_OBJECT_MODEL_TABLE(Heater) @@ -461,6 +464,7 @@ GCodeResult Heater::ConfigureFaultDetectionParameters(GCodeBuffer& gb, const Str bool seenValue = false; gb.TryGetNonNegativeFValue('P', maxHeatingFaultTime, seenValue); gb.TryGetNonNegativeFValue('T', maxTempExcursion, seenValue); + gb.TryGetLimitedUIValue('R', maxBadTemperatureCount, seenValue, 51); if (seenValue) { const GCodeResult rslt = UpdateFaultDetectionParameters(reply); @@ -468,7 +472,8 @@ GCodeResult Heater::ConfigureFaultDetectionParameters(GCodeBuffer& gb, const Str return rslt; } - reply.printf("Heater %u allowed excursion %.1f" DEGREE_SYMBOL "C, fault trigger time %.1f seconds", heaterNumber, (double)maxTempExcursion, (double)maxHeatingFaultTime); + reply.printf("Heater %u allowed excursion %.1f" DEGREE_SYMBOL "C, fault trigger time %.1f seconds, max %" PRIu32 " consecutive bad readings", + heaterNumber, (double)maxTempExcursion, (double)maxHeatingFaultTime, maxBadTemperatureCount); return GCodeResult::ok; } @@ -674,6 +679,10 @@ GCodeResult Heater::SetFaultDetectionParameters(const CanMessageSetHeaterFaultDe { maxTempExcursion = msg.maxTempExcursion; maxHeatingFaultTime = msg.maxFaultTime; + if (msg.version35) + { + maxBadTemperatureCount = msg.maxBadTemperatureCount; + } return GCodeResult::ok; } diff --git a/src/Heating/Heater.h b/src/Heating/Heater.h index 9da5c919..f7837a55 100644 --- a/src/Heating/Heater.h +++ b/src/Heating/Heater.h @@ -20,7 +20,6 @@ # include "CanId.h" #endif - #define TUNE_WITH_HALF_FAN 0 class HeaterMonitor; @@ -135,7 +134,7 @@ protected: void SetSensorNumber(int sn) noexcept; float GetMaxTemperatureExcursion() const noexcept { return maxTempExcursion; } float GetMaxHeatingFaultTime() const noexcept { return maxHeatingFaultTime; } - unsigned int GetMaxBadTemperatureCount() const noexcept { return maxBadTemperatureCount; } + uint32_t GetMaxBadTemperatureCount() const noexcept { return maxBadTemperatureCount; } float GetTargetTemperature() const noexcept { return (active) ? activeTemperature : standbyTemperature; } bool IsBedOrChamber() const noexcept { return isBedOrChamber; } @@ -200,7 +199,7 @@ private: float standbyTemperature; // the required standby temperature float maxTempExcursion; // the maximum temperature excursion permitted while maintaining the setpoint float maxHeatingFaultTime; // how long a heater fault is permitted to persist before a heater fault is raised - unsigned int maxBadTemperatureCount; // the number of consecutive bad sensor readings we allow before raising a fault + uint32_t maxBadTemperatureCount; // the number of consecutive bad sensor readings we allow before raising a fault bool isBedOrChamber; // true if this was a bed or chamber heater when we were switched on bool active; // are we active or standby? diff --git a/src/Heating/HeaterMonitor.cpp b/src/Heating/HeaterMonitor.cpp index 7b1ef9fb..a593b072 100644 --- a/src/Heating/HeaterMonitor.cpp +++ b/src/Heating/HeaterMonitor.cpp @@ -17,7 +17,7 @@ HeaterMonitor::HeaterMonitor() noexcept } // Check if any action needs to be taken. Returns true if everything is OK -bool HeaterMonitor::Check(unsigned int maxBadTemperatureCount) noexcept +bool HeaterMonitor::Check(uint32_t maxBadTemperatureCount) noexcept { if (sensorNumber >= 0 && trigger != HeaterMonitorTrigger::Disabled) { diff --git a/src/Heating/HeaterMonitor.h b/src/Heating/HeaterMonitor.h index f10a27a4..206ea51a 100644 --- a/src/Heating/HeaterMonitor.h +++ b/src/Heating/HeaterMonitor.h @@ -48,7 +48,7 @@ public: void Set(int sn, float lim, HeaterMonitorAction act, HeaterMonitorTrigger trig) noexcept; void Disable() noexcept; - bool Check(unsigned int maxBadTemperatureCount) noexcept; // Check if any action needs to be taken + bool Check(uint32_t) noexcept; // Check if any action needs to be taken int GetSensorNumber() const noexcept { return sensorNumber; } // Get the supervisory sensor number float GetTemperatureLimit() const noexcept { return limit; } // Get the temperature limit diff --git a/src/Heating/RemoteHeater.cpp b/src/Heating/RemoteHeater.cpp index 931fbcf2..6d6e081a 100644 --- a/src/Heating/RemoteHeater.cpp +++ b/src/Heating/RemoteHeater.cpp @@ -426,6 +426,8 @@ GCodeResult RemoteHeater::UpdateFaultDetectionParameters(const StringRef& reply) msg->heater = GetHeaterNumber(); msg->maxFaultTime = GetMaxHeatingFaultTime(); msg->maxTempExcursion = GetMaxTemperatureExcursion(); + msg->maxBadTemperatureCount = GetMaxBadTemperatureCount(); + msg->version35 = true; return CanInterface::SendRequestAndGetStandardReply(buf, rid, reply); } |