diff options
author | David Crocker <dcrocker@eschertech.com> | 2017-06-11 00:19:50 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2017-06-11 00:23:47 +0300 |
commit | 310b7c0e1ae92d65421276c3779efeddfb6977ff (patch) | |
tree | 56afba8162017646c4f1a47b8da0512482c7f336 /src/RepRap.cpp | |
parent | d026b0e4d2a7d5fda771e843cfca12e0370440d7 (diff) |
Version 1.19beta6
Refactored temperatyure sensor code
Refactored fan control code
Support invisible axes (M584 P parameter)
Supprt user-defined virtual heaters
Support heater names
Support proportional thermostatic fan control
Fix G10 retraction command
Removed delta probe code
Diffstat (limited to 'src/RepRap.cpp')
-rw-r--r-- | src/RepRap.cpp | 113 |
1 files changed, 84 insertions, 29 deletions
diff --git a/src/RepRap.cpp b/src/RepRap.cpp index e727bf55..1dcd27c4 100644 --- a/src/RepRap.cpp +++ b/src/RepRap.cpp @@ -234,7 +234,7 @@ void RepRap::EmergencyStop() } heat->Exit(); - for(size_t heater = 0; heater < HEATERS; heater++) + for(size_t heater = 0; heater < Heaters; heater++) { platform->SetHeater(heater, 0.0); } @@ -479,7 +479,7 @@ void RepRap::Tick() if (ticksInSpinState >= 20000) // if we stall for 20 seconds, save diagnostic data and reset { resetting = true; - for(size_t i = 0; i < HEATERS; i++) + for(size_t i = 0; i < Heaters; i++) { platform->SetHeater(i, 0.0); } @@ -515,7 +515,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) response->printf("{\"status\":\"%c\",\"coords\":{", ch); // Coordinates - const size_t numAxes = reprap.GetGCodes().GetNumAxes(); + const size_t numAxes = reprap.GetGCodes().GetVisibleAxes(); { float liveCoordinates[DRIVES + 1]; #if SUPPORT_ROLAND @@ -684,49 +684,104 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) } /* Heads */ + response->cat("\"heads\":{\"current\":"); + + // Current temperatures + ch = '['; + for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + { + response->catf("%c%.1f", ch, heat->GetTemperature(heater)); + ch = ','; + } + response->cat((ch == '[') ? "[]" : "]"); + + // Active temperatures + response->catf(",\"active\":"); + ch = '['; + for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + { + response->catf("%c%.1f", ch, heat->GetActiveTemperature(heater)); + ch = ','; + } + response->cat((ch == '[') ? "[]" : "]"); + + // Standby temperatures + response->catf(",\"standby\":"); + ch = '['; + for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + { + response->catf("%c%.1f", ch, heat->GetStandbyTemperature(heater)); + ch = ','; + } + response->cat((ch == '[') ? "[]" : "]"); + + // Heater statuses (0=off, 1=standby, 2=active, 3=fault) + response->cat(",\"state\":"); + ch = '['; + for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) { - response->cat("\"heads\":{\"current\":"); + response->catf("%c%d", ch, static_cast<int>(heat->GetStatus(heater))); + ch = ','; + } + response->cat((ch == '[') ? "[]" : "]"); - // Current temperatures + /* Tool temperatures */ + response->cat("},\"tools\":{\"active\":["); + for (const Tool *tool = toolList; tool != nullptr; tool = tool->Next()) + { ch = '['; - for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + for (size_t heater = 0; heater < tool->heaterCount; heater++) { - response->catf("%c%.1f", ch, heat->GetTemperature(heater)); + response->catf("%c%.1f", ch, tool->activeTemperatures[heater]); ch = ','; } response->cat((ch == '[') ? "[]" : "]"); - // Active temperatures - response->catf(",\"active\":"); - ch = '['; - for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + if (tool->Next() != nullptr) { - response->catf("%c%.1f", ch, heat->GetActiveTemperature(heater)); - ch = ','; + response->cat(","); } - response->cat((ch == '[') ? "[]" : "]"); + } - // Standby temperatures - response->catf(",\"standby\":"); + response->cat("],\"standby\":["); + for (const Tool *tool = toolList; tool != nullptr; tool = tool->Next()) + { ch = '['; - for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + for (size_t heater = 0; heater < tool->heaterCount; heater++) { - response->catf("%c%.1f", ch, heat->GetStandbyTemperature(heater)); + response->catf("%c%.1f", ch, tool->standbyTemperatures[heater]); ch = ','; } response->cat((ch == '[') ? "[]" : "]"); - // Heater statuses (0=off, 1=standby, 2=active, 3=fault) - response->cat(",\"state\":"); - ch = '['; - for (size_t heater = DefaultE0Heater; heater < GetToolHeatersInUse(); heater++) + if (tool->Next() != nullptr) { - response->catf("%c%d", ch, static_cast<int>(heat->GetStatus(heater))); - ch = ','; + response->cat(","); + } + } + + // Named extra temperature sensors + response->cat("]},\"extra\":["); + bool first = true; + for (size_t heater = FirstVirtualHeater; heater < FirstVirtualHeater + MaxVirtualHeaters; ++heater) + { + const char *nm = heat->GetHeaterName(heater); + if (nm != nullptr) + { + if (!first) + { + response->cat(','); + } + first = false; + response->cat("{\"name\":"); + response->EncodeString(nm, strlen(nm), false, true); + TemperatureError err; + const float t = heat->GetTemperature(heater, err); + response->catf(",\"temp\":%.1f}", t); } - response->cat((ch == '[') ? "[]" : "]"); } - response->cat("}}"); + + response->cat("]}"); } // Time since last reset @@ -825,7 +880,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) // Axis mapping. Currently we only map the X axis, but we return an array of arrays to allow for mapping other axes in future. response->cat("],\"axisMap\":[["); bool first = true; - for (size_t xi = 0; xi < MAX_AXES; ++xi) + for (size_t xi = 0; xi < MaxAxes; ++xi) { if ((tool->GetXAxisMap() & (1u << xi)) != 0) { @@ -948,7 +1003,7 @@ OutputBuffer *RepRap::GetConfigResponse() return nullptr; } - const size_t numAxes = reprap.GetGCodes().GetNumAxes(); + const size_t numAxes = reprap.GetGCodes().GetVisibleAxes(); // Axis minima response->copy("{\"axisMins\":"); @@ -1131,7 +1186,7 @@ OutputBuffer *RepRap::GetLegacyStatusResponse(uint8_t type, int seq) response->cat((ch == '[') ? "[]" : "]"); // Send XYZ positions - const size_t numAxes = reprap.GetGCodes().GetNumAxes(); + const size_t numAxes = reprap.GetGCodes().GetVisibleAxes(); float liveCoordinates[DRIVES]; reprap.GetMove().LiveCoordinates(liveCoordinates, GetCurrentXAxes()); const Tool* const currentTool = reprap.GetCurrentTool(); |