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:
Diffstat (limited to 'src/Heating')
-rw-r--r--src/Heating/LocalHeater.cpp38
-rw-r--r--src/Heating/LocalHeater.h2
2 files changed, 27 insertions, 13 deletions
diff --git a/src/Heating/LocalHeater.cpp b/src/Heating/LocalHeater.cpp
index b105d6ea..4f21b246 100644
--- a/src/Heating/LocalHeater.cpp
+++ b/src/Heating/LocalHeater.cpp
@@ -12,6 +12,7 @@
#include "HeaterMonitor.h"
#include <Platform/Platform.h>
#include <Platform/RepRap.h>
+#include <Platform/Event.h>
#include <Tools/Tool.h>
#if SUPPORT_REMOTE_COMMANDS
@@ -252,7 +253,7 @@ void LocalHeater::Spin() noexcept
badTemperatureCount++;
if (badTemperatureCount > MaxBadTemperatureCount)
{
- RaiseHeaterFault("Temperature reading fault on heater %u: %s\n", GetHeaterNumber(), TemperatureErrorString(err));
+ RaiseHeaterFault(HeaterFaultType::failedToReadSensor, "%s", TemperatureErrorString(err));
}
}
// We leave lastPWM alone if we have a temporary temperature reading error
@@ -297,7 +298,7 @@ void LocalHeater::Spin() noexcept
else
{
const uint32_t now = millis();
- if ((float)(now - timeSetHeating) < GetModel().GetDeadTime() * SecondsToMillis * 1.5)
+ if ((float)(now - timeSetHeating) < GetModel().GetDeadTime() * SecondsToMillis * 2) // wait for twice the dead time before we start looking at the temperature rise
{
// Record the temperature for when we are past the dead time
lastTemperatureValue = temperature;
@@ -313,13 +314,14 @@ void LocalHeater::Spin() noexcept
// Check that we are heating fast enough, and if so, take another sample
const float expectedTemperatureRise = expectedRate * actualInterval;
const float actualTemperatureRise = temperature - lastTemperatureValue;
- if (actualTemperatureRise < expectedTemperatureRise * 0.7)
+ if (actualTemperatureRise < expectedTemperatureRise * 0.5)
{
++heatingFaultCount;
if (heatingFaultCount * HeatSampleIntervalMillis > GetMaxHeatingFaultTime() * SecondsToMillis)
{
- RaiseHeaterFault("Heater %u fault: at %.1f" DEGREE_SYMBOL "C temperature is rising at %.1f" DEGREE_SYMBOL "C/sec, well below the expected %.1f" DEGREE_SYMBOL "C/sec\n",
- GetHeaterNumber(), (double)temperature, (double)(actualTemperatureRise/actualInterval), (double)expectedRate);
+ RaiseHeaterFault(HeaterFaultType::temperatureRisingTooSlowly,
+ "expected %.2f" DEGREE_SYMBOL "C/sec measured %.2f" DEGREE_SYMBOL "C/sec",
+ (double)expectedRate, (double)(actualTemperatureRise/actualInterval));
}
}
else
@@ -343,8 +345,9 @@ void LocalHeater::Spin() noexcept
++heatingFaultCount;
if (heatingFaultCount * HeatSampleIntervalMillis > GetMaxHeatingFaultTime() * SecondsToMillis)
{
- RaiseHeaterFault("Heater %u fault: temperature excursion exceeded %.1f" DEGREE_SYMBOL "C (target %.1f" DEGREE_SYMBOL "C, actual %.1f" DEGREE_SYMBOL "C)\n",
- GetHeaterNumber(), (double)GetMaxTemperatureExcursion(), (double)targetTemperature, (double)temperature);
+ RaiseHeaterFault(HeaterFaultType::exceededAllowedExcursion,
+ "target %.1f" DEGREE_SYMBOL "C actual %.1f" DEGREE_SYMBOL "C",
+ (double)targetTemperature, (double)temperature);
}
}
else if (heatingFaultCount != 0)
@@ -450,7 +453,7 @@ void LocalHeater::Spin() noexcept
break;
case HeaterMonitorAction::GenerateFault:
- RaiseHeaterFault("Heater %u fault: heater monitor %u was triggered\n", GetHeaterNumber(), i);
+ RaiseHeaterFault(HeaterFaultType::monitorTriggered, "monitor %u was triggered", i);
break;
case HeaterMonitorAction::TemporarySwitchOff:
@@ -910,20 +913,31 @@ void LocalHeater::Suspend(bool sus) noexcept
}
}
-void LocalHeater::RaiseHeaterFault(const char *format, ...) noexcept
+void LocalHeater::RaiseHeaterFault(HeaterFaultType type, const char *_ecv_array format, ...) noexcept
{
lastPwm = 0.0;
SetHeater(0.0);
if (mode != HeaterMode::fault)
{
mode = HeaterMode::fault;
+ reprap.FlagTemperatureFault(GetHeaterNumber());
+
va_list vargs;
va_start(vargs, format);
- reprap.GetPlatform().MessageV(ErrorMessage, format, vargs);
+
+#if SUPPORT_REMOTE_COMMANDS
+ if (CanInterface::InExpansionMode())
+ {
+ CanInterface::RaiseEvent(EventType::heater_fault, (uint16_t)type, GetHeaterNumber(), format, vargs);
+ }
+ else
+#endif
+ {
+ Event::AddEvent(EventType::heater_fault, (uint16_t)type, GetHeaterNumber(), CanInterface::GetCanAddress(), format, vargs);
+ }
va_end(vargs);
+// reprap.GetGCodes().HandleHeaterFault();
}
- reprap.GetGCodes().HandleHeaterFault();
- reprap.FlagTemperatureFault(GetHeaterNumber());
}
#if SUPPORT_REMOTE_COMMANDS
diff --git a/src/Heating/LocalHeater.h b/src/Heating/LocalHeater.h
index fd31dde9..cf0840c5 100644
--- a/src/Heating/LocalHeater.h
+++ b/src/Heating/LocalHeater.h
@@ -66,7 +66,7 @@ private:
TemperatureError ReadTemperature() noexcept; // Read and store the temperature of this heater
void DoTuningStep() noexcept; // Called on each temperature sample when auto tuning
float GetExpectedHeatingRate() const noexcept; // Get the minimum heating rate we expect
- void RaiseHeaterFault(const char *format, ...) noexcept;
+ void RaiseHeaterFault(HeaterFaultType type, const char *_ecv_array format, ...) noexcept;
PwmPort ports[MaxPortsPerHeater]; // The port(s) that drive the heater
float temperature; // The current temperature