diff options
author | David Crocker <dcrocker@eschertech.com> | 2019-06-13 18:59:05 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2019-06-13 18:59:05 +0300 |
commit | 11a51e9669a92cc6e03683aa9e0d2dade94aa36d (patch) | |
tree | c56be56453d135305fece95ec845d5dd242c5d27 | |
parent | 0e8d585ac18513b086a79e9ea1b7c8c64a0c3400 (diff) |
Release 2.03 provisional
When disabling Telnet or HTTP or disabling networking, set the number of sessons to zero
Added virtual extruder position to M114 response for Octoprint
Added M566 P parameter (jerk policy)
Increased pulsed filament monitor pulses/mm displayed value from 2 to 3 decimal places
-rw-r--r-- | src/BugList.txt | 6 | ||||
-rw-r--r-- | src/FilamentMonitors/PulsedFilamentMonitor.cpp | 2 | ||||
-rw-r--r-- | src/GCodes/GCodes.cpp | 5 | ||||
-rw-r--r-- | src/GCodes/GCodes2.cpp | 13 | ||||
-rw-r--r-- | src/Movement/DDA.cpp | 12 | ||||
-rw-r--r-- | src/Movement/Move.cpp | 15 | ||||
-rw-r--r-- | src/Movement/Move.h | 4 | ||||
-rw-r--r-- | src/Networking/HttpResponder.cpp | 3 | ||||
-rw-r--r-- | src/Networking/TelnetResponder.cpp | 3 | ||||
-rw-r--r-- | src/Version.h | 6 |
10 files changed, 50 insertions, 19 deletions
diff --git a/src/BugList.txt b/src/BugList.txt index 3e5274e6..7b5c18cd 100644 --- a/src/BugList.txt +++ b/src/BugList.txt @@ -176,6 +176,12 @@ In 2.03RC5: - [done] Duet Maestro build now supports laser cutters - [done] SCARA bug: when attempting to move beyond arm limits the cached X and Y are inconsistent with the cached theta and psi +For 2.03 release: +- Add virtual extruder position to M114 response for Octoprint, https://forum.duet3d.com/topic/10821/returning-virtual-extruder-position-in-m114/3 +- When disabling network or a protocol, set the number of active HTTP and/or Telnet clients to 0 +- Added jerk policy, P parameter to M566 +- Pulse-type filament monitor now reports mm/pulse to 3 decimal places instead of 2 + Outstanding issues: - Running out of output buffers and not freeing them up, https://forum.duet3d.com/post/96586 - Inconsistent Z0 position, https://forum.duet3d.com/user/caveman diff --git a/src/FilamentMonitors/PulsedFilamentMonitor.cpp b/src/FilamentMonitors/PulsedFilamentMonitor.cpp index 8221f34b..ed97d4bf 100644 --- a/src/FilamentMonitors/PulsedFilamentMonitor.cpp +++ b/src/FilamentMonitors/PulsedFilamentMonitor.cpp @@ -81,7 +81,7 @@ bool PulsedFilamentMonitor::Configure(GCodeBuffer& gb, const StringRef& reply, b } else { - reply.printf("Pulse-type filament monitor on endstop input %u, %s, sensitivity %.2fmm/pulse, allowed movement %ld%% to %ld%%, check every %.1fmm, ", + reply.printf("Pulse-type filament monitor on endstop input %u, %s, sensitivity %.3fmm/pulse, allowed movement %ld%% to %ld%%, check every %.1fmm, ", GetEndstopNumber(), (comparisonEnabled) ? "enabled" : "disabled", (double)mmPerPulse, diff --git a/src/GCodes/GCodes.cpp b/src/GCodes/GCodes.cpp index 0e859064..257394f6 100644 --- a/src/GCodes/GCodes.cpp +++ b/src/GCodes/GCodes.cpp @@ -3605,6 +3605,9 @@ void GCodes::GetCurrentCoordinates(const StringRef& s) const s.catf("%c:%.3f ", axisLetters[axis], HideNan(GetUserCoordinate(axis))); } + // Now the virtual extruder position, for Octoprint + s.catf("E:%.3f ", (double)virtualExtruderPosition); + // Get the live machine coordinates, we'll need them later float liveCoordinates[MaxTotalDrivers]; reprap.GetMove().LiveCoordinates(liveCoordinates, reprap.GetCurrentXAxes(), reprap.GetCurrentYAxes()); @@ -3617,7 +3620,7 @@ void GCodes::GetCurrentCoordinates(const StringRef& s) const // Print the axis stepper motor positions as Marlin does, as an aid to debugging. // Don't bother with the extruder endpoints, they are zero after any non-extruding move. - s.cat(" Count"); + s.cat("Count"); for (size_t i = 0; i < numVisibleAxes; ++i) { s.catf(" %" PRIi32, reprap.GetMove().GetEndPoint(i)); diff --git a/src/GCodes/GCodes2.cpp b/src/GCodes/GCodes2.cpp index dc32574f..0b111189 100644 --- a/src/GCodes/GCodes2.cpp +++ b/src/GCodes/GCodes2.cpp @@ -3245,7 +3245,14 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) platform.SetInstantDv(numTotalAxes + e, eVals[e] * multiplier1); } } - else if (!seen) + + if (code == 566 && gb.Seen('P')) + { + seen = true; + reprap.GetMove().SetJerkPolicy(gb.GetUIValue()); + } + + if (!seen) { const float multiplier2 = (code == 566) ? MinutesToSeconds : 1.0; reply.printf("Maximum jerk rates (mm/%s): ", (code == 566) ? "min" : "sec"); @@ -3260,6 +3267,10 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) reply.catf("%c%.1f", sep, (double)(platform.GetInstantDv(extruder + numTotalAxes) * multiplier2)); sep = ':'; } + if (code == 566) + { + reply.catf(", jerk policy: %u", reprap.GetMove().GetJerkPolicy()); + } } } break; diff --git a/src/Movement/DDA.cpp b/src/Movement/DDA.cpp index 1830f102..b863de5d 100644 --- a/src/Movement/DDA.cpp +++ b/src/Movement/DDA.cpp @@ -473,12 +473,7 @@ bool DDA::InitStandardMove(DDARing& ring, GCodes::RawMove &nextMove, bool doMoto // 7. Calculate the provisional accelerate and decelerate distances and the top speed endSpeed = 0.0; // until the next move asks us to adjust it - if (prev->state != provisional || flags.isPrintingMove != prev->flags.isPrintingMove || flags.xyMoving != prev->flags.xyMoving) - { - // There is no previous move that we can adjust, so this move must start at zero speed. - startSpeed = 0.0; - } - else + if (prev->state == provisional && (move.GetJerkPolicy() != 0 || (flags.isPrintingMove == prev->flags.isPrintingMove && flags.xyMoving == prev->flags.xyMoving))) { // Try to meld this move to the previous move to avoid stop/start // Assuming that this move ends with zero speed, calculate the maximum possible starting speed: u^2 = v^2 - 2as @@ -486,6 +481,11 @@ bool DDA::InitStandardMove(DDARing& ring, GCodes::RawMove &nextMove, bool doMoto DoLookahead(ring, prev); startSpeed = prev->endSpeed; } + else + { + // There is no previous move that we can adjust, so start at zero speed. + startSpeed = 0.0; + } RecalculateMove(ring); state = provisional; diff --git a/src/Movement/Move.cpp b/src/Movement/Move.cpp index 9695f989..70d79f4f 100644 --- a/src/Movement/Move.cpp +++ b/src/Movement/Move.cpp @@ -66,10 +66,16 @@ DEFINE_GET_OBJECT_MODEL_TABLE(Move) #endif -Move::Move() : active(false) +Move::Move() + : active(false), + drcEnabled(false), // disable dynamic ringing cancellation + maxPrintingAcceleration(10000.0), maxTravelAcceleration(10000.0), + drcPeriod(0.025), // 40Hz + drcMinimumAcceleration(10.0), + jerkPolicy(0) { // Kinematics must be set up here because GCodes::Init asks the kinematics for the assumed initial position - kinematics = Kinematics::Create(KinematicsType::cartesian); // default to Cartesian + kinematics = Kinematics::Create(KinematicsType::cartesian); // default to Cartesian mainDDARing.Init1(DdaRingLength); DriveMovement::InitialAllocate(NumDms); } @@ -78,11 +84,6 @@ void Move::Init() { mainDDARing.Init2(); - maxPrintingAcceleration = maxTravelAcceleration = 10000.0; - drcEnabled = false; // disable dynamic ringing cancellation - drcMinimumAcceleration = 10.0; - drcPeriod = 50.0; - // Clear the transforms SetIdentityTransform(); tanXY = tanYZ = tanXZ = 0.0; diff --git a/src/Movement/Move.h b/src/Movement/Move.h index 972f3fb5..4bbd90c2 100644 --- a/src/Movement/Move.h +++ b/src/Movement/Move.h @@ -165,6 +165,9 @@ public: uint32_t ExtruderPrintingSince() const { return mainDDARing.ExtruderPrintingSince(); } // When we started doing normal moves after the most recent extruder-only move + unsigned int GetJerkPolicy() const { return jerkPolicy; } + void SetJerkPolicy(unsigned int jp) { jerkPolicy = jp; } + #if HAS_SMART_DRIVERS uint32_t GetStepInterval(size_t axis, uint32_t microstepShift) const; // Get the current step interval for this axis or extruder #endif @@ -203,6 +206,7 @@ private: float drcPeriod; // the period of ringing that we don't want to excite float drcMinimumAcceleration; // the minimum value that we reduce acceleration to + unsigned int jerkPolicy; // When we allow jerk unsigned int idleCount; // The number of times Spin was called and had no new moves to process uint32_t longestGcodeWaitInterval; // the longest we had to wait for a new GCode uint32_t numHiccups; // How many times we delayed an interrupt to avoid using too much CPU time in interrupts diff --git a/src/Networking/HttpResponder.cpp b/src/Networking/HttpResponder.cpp index 85c4d96f..29945acc 100644 --- a/src/Networking/HttpResponder.cpp +++ b/src/Networking/HttpResponder.cpp @@ -1353,6 +1353,9 @@ void HttpResponder::Diagnostics(MessageType mt) const /*static*/ void HttpResponder::Disable() { MutexLocker lock(gcodeReplyMutex); + + clientsServed = 0; + numSessions = 0; gcodeReply.ReleaseAll(); } diff --git a/src/Networking/TelnetResponder.cpp b/src/Networking/TelnetResponder.cpp index 8d23f491..7fc01310 100644 --- a/src/Networking/TelnetResponder.cpp +++ b/src/Networking/TelnetResponder.cpp @@ -301,6 +301,9 @@ void TelnetResponder::ProcessLine() /*static*/ void TelnetResponder::Disable() { MutexLocker lock(gcodeReplyMutex); + + clientsServed = 0; + numSessions = 0; OutputBuffer::ReleaseAll(gcodeReply); } diff --git a/src/Version.h b/src/Version.h index 423b0f97..60983f3e 100644 --- a/src/Version.h +++ b/src/Version.h @@ -11,16 +11,16 @@ #ifndef VERSION #ifdef RTOS -# define MAIN_VERSION "2.03RC5" +# define MAIN_VERSION "2.03" #else -# define MAIN_VERSION "1.24RC5" +# define MAIN_VERSION "1.24" #endif # define VERSION MAIN_VERSION #endif #ifndef DATE -# define DATE "2019-06-05b5" +# define DATE "2019-06-13b2" #endif #define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman, printm3d" |