Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2022-09-30 15:18:02 +0300
committerDavid Crocker <dcrocker@eschertech.com>2022-09-30 15:18:02 +0300
commita150e8244a4c382f51f414c21eff3defb2424fef (patch)
treef6b2aa32319daa341585c3c8d067521a8b36e980
parent796b7b65c237ef1b7b3a4f27a33adf3e9fb0d550 (diff)
Added M570 R parameter
-rw-r--r--src/Heating/Heater.cpp43
-rw-r--r--src/Heating/Heater.h5
-rw-r--r--src/Heating/HeaterMonitor.cpp2
-rw-r--r--src/Heating/HeaterMonitor.h2
-rw-r--r--src/Heating/RemoteHeater.cpp2
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);
}