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>2017-08-26 23:31:47 +0300
committerDavid Crocker <dcrocker@eschertech.com>2017-08-26 23:32:00 +0300
commit7df2fe5e9a3387dbe00947dffe375b6443079b94 (patch)
treef033bbcaf41220ca93775756f011128b03b87c4c /src/Movement
parent2e967359f0b93c31437fdc4b7e93187a4ebbf050 (diff)
Version 1.19.1v1.19.1
M208 XY limits are now applied to SCARA printers Minimum limits are applied to M92, M291, M203 and M566 parameters
Diffstat (limited to 'src/Movement')
-rw-r--r--src/Movement/Kinematics/ScaraKinematics.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/Movement/Kinematics/ScaraKinematics.cpp b/src/Movement/Kinematics/ScaraKinematics.cpp
index fe956355..8fd1cad2 100644
--- a/src/Movement/Kinematics/ScaraKinematics.cpp
+++ b/src/Movement/Kinematics/ScaraKinematics.cpp
@@ -180,7 +180,11 @@ bool ScaraKinematics::IsReachable(float x, float y) const
// TODO take account of arm angle limits
bool ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, AxesBitmap axesHomed) const
{
- bool limited = false;
+ // First limit all axes according to M208
+ const bool m208Limited = Kinematics::LimitPosition(coords, numVisibleAxes, axesHomed);
+
+ // Now check that the XY position is within radius limits, in case the M208 limits are too generous
+ bool radiusLimited = false;
float x = coords[X_AXIS] + xOffset;
float y = coords[Y_AXIS] + yOffset;
const float r2 = fsquare(x) + fsquare(y);
@@ -198,29 +202,23 @@ bool ScaraKinematics::LimitPosition(float coords[], size_t numVisibleAxes, AxesB
x *= minRadius/r;
y *= minRadius/r;
}
- limited = true;
+ radiusLimited = true;
}
else if (r2 > maxRadiusSquared)
{
const float r = sqrtf(r2);
x *= maxRadius/r;
y *= maxRadius/r;
- limited = true;
+ radiusLimited = true;
}
- if (limited)
+ if (radiusLimited)
{
coords[X_AXIS] = x - xOffset;
coords[Y_AXIS] = y - yOffset;
}
- // Limit Z and any additional axes according to the M208 limits
- if (LimitPositionFromAxis(coords, Z_AXIS, numVisibleAxes, axesHomed))
- {
- limited = true;
- }
-
- return limited;
+ return m208Limited || radiusLimited;
}
// Return the initial Cartesian coordinates we assume after switching to this kinematics