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>2021-11-04 16:43:49 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-11-04 16:43:49 +0300
commitbcc31b9df1d6a5748b78c2249e55d75c9a7e0fed (patch)
tree493e17729242b17f4f8adfa363a100ddff4f4ead /src/Movement
parent2ec23cf3b7c3f0ba4422bbd07b5589fddfcfd934 (diff)
M669 and object model now report segmentation
Diffstat (limited to 'src/Movement')
-rw-r--r--src/Movement/Kinematics/CoreKinematics.cpp3
-rw-r--r--src/Movement/Kinematics/FiveBarScaraKinematics.cpp3
-rw-r--r--src/Movement/Kinematics/HangprinterKinematics.cpp12
-rw-r--r--src/Movement/Kinematics/Kinematics.cpp37
-rw-r--r--src/Movement/Kinematics/Kinematics.h2
-rw-r--r--src/Movement/Kinematics/PolarKinematics.cpp6
-rw-r--r--src/Movement/Kinematics/RotaryDeltaKinematics.cpp3
-rw-r--r--src/Movement/Kinematics/ScaraKinematics.cpp8
-rw-r--r--src/Movement/Kinematics/ZLeadscrewKinematics.cpp2
9 files changed, 56 insertions, 20 deletions
diff --git a/src/Movement/Kinematics/CoreKinematics.cpp b/src/Movement/Kinematics/CoreKinematics.cpp
index f7ddb669..fe451930 100644
--- a/src/Movement/Kinematics/CoreKinematics.cpp
+++ b/src/Movement/Kinematics/CoreKinematics.cpp
@@ -310,7 +310,8 @@ bool CoreKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const String
}
else if (!seenSeg)
{
- reply.printf("Kinematics is %s%s, matrix:", ((modified) ? "modified " : ""), GetName(false));
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.catf(", %smatrix:", ((modified) ? "modified " : ""));
const size_t numVisibleAxes = reprap.GetGCodes().GetVisibleAxes();
const size_t numTotalAxes = reprap.GetGCodes().GetTotalAxes();
for (size_t axis = 0; axis < numVisibleAxes; ++axis)
diff --git a/src/Movement/Kinematics/FiveBarScaraKinematics.cpp b/src/Movement/Kinematics/FiveBarScaraKinematics.cpp
index a60498a0..3e1ff1e1 100644
--- a/src/Movement/Kinematics/FiveBarScaraKinematics.cpp
+++ b/src/Movement/Kinematics/FiveBarScaraKinematics.cpp
@@ -709,7 +709,8 @@ bool FiveBarScaraKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, cons
else if (!seenNonGeometry && !gb.Seen('K'))
{
//TODO print all the parameters here
- reply.printf("Kinematics is FiveBarScara, documented in https://duet3d.dozuki.com/Guide/Five+Bar+Parallel+SCARA/24?lang=en");
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.catf(", documented in https://duet3d.dozuki.com/Guide/Five+Bar+Parallel+SCARA/24?lang=en");
}
return seen;
diff --git a/src/Movement/Kinematics/HangprinterKinematics.cpp b/src/Movement/Kinematics/HangprinterKinematics.cpp
index 1c05fc27..41fe3464 100644
--- a/src/Movement/Kinematics/HangprinterKinematics.cpp
+++ b/src/Movement/Kinematics/HangprinterKinematics.cpp
@@ -56,7 +56,7 @@ constexpr ObjectModelTableEntry HangprinterKinematics::objectModelTable[] =
constexpr uint8_t HangprinterKinematics::objectModelTableDescriptor[] = { 1, 3 };
-DEFINE_GET_OBJECT_MODEL_TABLE(HangprinterKinematics)
+DEFINE_GET_OBJECT_MODEL_TABLE_WITH_PARENT(HangprinterKinematics, Kinematics)
#endif
@@ -182,20 +182,18 @@ bool HangprinterKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const
}
else if (!seenNonGeometry && !gb.Seen('K'))
{
- reply.printf("Hangprinter\n"
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.lcatf(
"A:%.2f, %.2f, %.2f\n"
"B:%.2f, %.2f, %.2f\n"
"C:%.2f, %.2f, %.2f\n"
"D:%.2f, %.2f, %.2f\n"
- "P:Print radius: %.1f\n"
- "S:Segments/s: %d\n"
- "T:Min segment length: %.2f\n",
+ "P:Print radius: %.1f",
(double)anchors[A_AXIS][X_AXIS], (double)anchors[A_AXIS][Y_AXIS], (double)anchors[A_AXIS][Z_AXIS],
(double)anchors[B_AXIS][X_AXIS], (double)anchors[B_AXIS][Y_AXIS], (double)anchors[B_AXIS][Z_AXIS],
(double)anchors[C_AXIS][X_AXIS], (double)anchors[C_AXIS][Y_AXIS], (double)anchors[C_AXIS][Z_AXIS],
(double)anchors[D_AXIS][X_AXIS], (double)anchors[D_AXIS][Y_AXIS], (double)anchors[D_AXIS][Z_AXIS],
- (double)printRadius,
- (int)GetSegmentsPerSecond(), (double)GetMinSegmentLength()
+ (double)printRadius
);
}
}
diff --git a/src/Movement/Kinematics/Kinematics.cpp b/src/Movement/Kinematics/Kinematics.cpp
index f75a5fd2..f6478693 100644
--- a/src/Movement/Kinematics/Kinematics.cpp
+++ b/src/Movement/Kinematics/Kinematics.cpp
@@ -22,6 +22,33 @@
const char * const Kinematics::HomeAllFileName = "homeall.g";
+#if SUPPORT_OBJECT_MODEL
+
+// Object model table and functions
+// Note: if using GCC version 7.3.1 20180622 and lambda functions are used in this table, you must compile this file with option -std=gnu++17.
+// Otherwise the table will be allocated in RAM instead of flash, which wastes too much RAM.
+
+// Macro to build a standard lambda function that includes the necessary type conversions
+#define OBJECT_MODEL_FUNC(...) OBJECT_MODEL_FUNC_BODY(Kinematics, __VA_ARGS__)
+#define OBJECT_MODEL_FUNC_IF(...) OBJECT_MODEL_FUNC_IF_BODY(Kinematics, __VA_ARGS__)
+
+constexpr ObjectModelTableEntry Kinematics::objectModelTable[] =
+{
+ // Within each group, these entries must be in alphabetical order
+ // 0. kinematics members
+ { "segmentation", OBJECT_MODEL_FUNC_IF(self->segmentationType.useSegmentation, self, 1), ObjectModelEntryFlags::none },
+
+ // 1. segmentation members
+ { "minSegLength", OBJECT_MODEL_FUNC(self->minSegmentLength, 2), ObjectModelEntryFlags::none },
+ { "segmentsPerSec", OBJECT_MODEL_FUNC(self->segmentsPerSecond, 1), ObjectModelEntryFlags::none },
+};
+
+constexpr uint8_t Kinematics::objectModelTableDescriptor[] = { 2, 1, 2 };
+
+DEFINE_GET_OBJECT_MODEL_TABLE(Kinematics)
+
+#endif
+
// Constructor. Pass segsPerSecond <= 0.0 to get non-segmented kinematics.
Kinematics::Kinematics(KinematicsType t, SegmentationType segType) noexcept
: segmentsPerSecond(DefaultSegmentsPerSecond), minSegmentLength(DefaultMinSegmentLength), reciprocalMinSegmentLength(1.0/DefaultMinSegmentLength),
@@ -37,7 +64,15 @@ bool Kinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const StringRef&
{
if (!gb.Seen('K'))
{
- reply.printf("Kinematics is %s", GetName());
+ reply.printf("Kinematics is %s, ", GetName());
+ if (segmentationType.useSegmentation)
+ {
+ reply.catf("%d segments/sec, min. segment length %.2fmm", (int)segmentsPerSecond, (double)minSegmentLength);
+ }
+ else
+ {
+ reply.cat("no segmentation");
+ }
}
}
else
diff --git a/src/Movement/Kinematics/Kinematics.h b/src/Movement/Kinematics/Kinematics.h
index 7f587662..34fa474a 100644
--- a/src/Movement/Kinematics/Kinematics.h
+++ b/src/Movement/Kinematics/Kinematics.h
@@ -223,7 +223,7 @@ public:
float GetReciprocalMinSegmentLength() const noexcept pre(UseSegmentation()) { return reciprocalMinSegmentLength; }
protected:
- DECLARE_OBJECT_MODEL_VIRTUAL
+ DECLARE_OBJECT_MODEL
Kinematics(KinematicsType t, SegmentationType segType) noexcept;
diff --git a/src/Movement/Kinematics/PolarKinematics.cpp b/src/Movement/Kinematics/PolarKinematics.cpp
index b3c04a85..8e9d4af6 100644
--- a/src/Movement/Kinematics/PolarKinematics.cpp
+++ b/src/Movement/Kinematics/PolarKinematics.cpp
@@ -96,9 +96,9 @@ bool PolarKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const Strin
}
else if (!seenNonGeometry && !gb.Seen('K'))
{
- reply.printf("Kinematics is Polar with radius %.1f to %.1fmm, homed radius %.1fmm, segments/sec %d, min. segment length %.2f",
- (double)minRadius, (double)maxRadius, (double)homedRadius,
- (int)GetSegmentsPerSecond(), (double)GetMinSegmentLength());
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.catf(", radius %.1f to %.1fmm, homed radius %.1fmm",
+ (double)minRadius, (double)maxRadius, (double)homedRadius);
}
return seen;
}
diff --git a/src/Movement/Kinematics/RotaryDeltaKinematics.cpp b/src/Movement/Kinematics/RotaryDeltaKinematics.cpp
index 6ec33dc4..9ef081a2 100644
--- a/src/Movement/Kinematics/RotaryDeltaKinematics.cpp
+++ b/src/Movement/Kinematics/RotaryDeltaKinematics.cpp
@@ -154,7 +154,8 @@ bool RotaryDeltaKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const
}
else if (!seenNonGeometry && !gb.Seen('K'))
{
- reply.printf("Kinematics is rotary delta, arms (%.3f,%.2f,%.3f)mm, rods (%.3f,%.3f,%.3f)mm, bearingHeights (%.3f,%.2f,%.3f)mm"
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.catf(", arms (%.3f,%.2f,%.3f)mm, rods (%.3f,%.3f,%.3f)mm, bearingHeights (%.3f,%.2f,%.3f)mm"
", arm movement %.1f to %.1f" DEGREE_SYMBOL
", delta radius %.3f, bed radius %.1f"
", angle corrections (%.3f,%.3f,%.3f)" DEGREE_SYMBOL ,
diff --git a/src/Movement/Kinematics/ScaraKinematics.cpp b/src/Movement/Kinematics/ScaraKinematics.cpp
index 4a80872c..6c9a2e31 100644
--- a/src/Movement/Kinematics/ScaraKinematics.cpp
+++ b/src/Movement/Kinematics/ScaraKinematics.cpp
@@ -223,13 +223,13 @@ bool ScaraKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const Strin
}
else if (!seenNonGeometry && !gb.Seen('K'))
{
- reply.printf("Kinematics is Scara with proximal arm %.2fmm range %.1f to %.1f" DEGREE_SYMBOL
- "%s, distal arm %.2fmm range %.1f to %.1f" DEGREE_SYMBOL "%s, crosstalk %.1f:%.1f:%.1f, bed origin (%.1f, %.1f), segments/sec %d, min. segment length %.2f",
+ Kinematics::Configure(mCode, gb, reply, error);
+ reply.printf(", proximal arm %.2fmm range %.1f to %.1f" DEGREE_SYMBOL
+ "%s, distal arm %.2fmm range %.1f to %.1f" DEGREE_SYMBOL "%s, crosstalk %.1f:%.1f:%.1f, bed origin (%.1f, %.1f)",
(double)proximalArmLength, (double)thetaLimits[0], (double)thetaLimits[1], (supportsContinuousRotation[0]) ? " (continuous)" : "",
(double)distalArmLength, (double)psiLimits[0], (double)psiLimits[1], (supportsContinuousRotation[0]) ? " (continuous)" : "",
(double)crosstalk[0], (double)crosstalk[1], (double)crosstalk[2],
- (double)xOffset, (double)yOffset,
- (int)GetSegmentsPerSecond(), (double)GetMinSegmentLength());
+ (double)xOffset, (double)yOffset);
}
return seen;
}
diff --git a/src/Movement/Kinematics/ZLeadscrewKinematics.cpp b/src/Movement/Kinematics/ZLeadscrewKinematics.cpp
index 1d56972a..44ade884 100644
--- a/src/Movement/Kinematics/ZLeadscrewKinematics.cpp
+++ b/src/Movement/Kinematics/ZLeadscrewKinematics.cpp
@@ -64,7 +64,7 @@ constexpr ObjectModelTableEntry ZLeadscrewKinematics::objectModelTable[] =
constexpr uint8_t ZLeadscrewKinematics::objectModelTableDescriptor[] = { 2, 1, 6 };
-DEFINE_GET_OBJECT_MODEL_TABLE(ZLeadscrewKinematics)
+DEFINE_GET_OBJECT_MODEL_TABLE_WITH_PARENT(ZLeadscrewKinematics, Kinematics)
#endif