From 8df838da092aac74b4756761d12458e3239013c2 Mon Sep 17 00:00:00 2001 From: Nibbels Date: Sun, 26 May 2019 18:39:48 +0200 Subject: [PATCH] 1.43.99 --- .vs/Repetier/v14/.suo | Bin 270336 -> 270336 bytes Repetier/Constants.h | 2 +- Repetier/HAL.cpp | 2 +- Repetier/Printer.cpp | 15 ++++++++++++++- Repetier/Printer.h | 8 +------- Repetier/RF.cpp | 3 +-- Repetier/RF.h | 3 --- Repetier/motion.cpp | 29 +++++++++++++++-------------- Repetier/motion.h | 14 +++++++------- changelog.txt | 6 ++++++ 10 files changed, 46 insertions(+), 36 deletions(-) diff --git a/.vs/Repetier/v14/.suo b/.vs/Repetier/v14/.suo index 7c61346b1cdf129f71743688ca28ac6a58ff29ae..628a4e3105ccfc6e91165c5a59ce7d69cb86ec38 100644 GIT binary patch delta 5738 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 gkz0r^#9$KUApFJ+INu>b%7 delta 5788 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 diff --git a/Repetier/Constants.h b/Repetier/Constants.h index 0e50b7f88..a2b4b25b0 100644 --- a/Repetier/Constants.h +++ b/Repetier/Constants.h @@ -20,7 +20,7 @@ #define CONSTANTS_H -#define REPETIER_VERSION "1.43.98" +#define REPETIER_VERSION "1.43.99" #define UI_PRINTER_COMPANY "Conrad Community" #define UI_VERSION_STRING "V " REPETIER_VERSION diff --git a/Repetier/HAL.cpp b/Repetier/HAL.cpp index ca4bc2c9a..f52382cd9 100644 --- a/Repetier/HAL.cpp +++ b/Repetier/HAL.cpp @@ -832,7 +832,7 @@ ISR(TIMER1_COMPA_vect) #if FEATURE_HEAT_BED_Z_COMPENSATION || FEATURE_WORK_PART_Z_COMPENSATION if (PrintLine::cur == NULL && PrintLine::direct.task == TASK_NO_TASK) { - PrintLine::stepSlowedZCompensation(); + PrintLine::stepSlowedZCompensation(); // Z is free here. // Wait if the z-CMP is under heavy workload if (PrintLine::needCmpWait()) { diff --git a/Repetier/Printer.cpp b/Repetier/Printer.cpp index 65cf10bf8..0a42d3603 100644 --- a/Repetier/Printer.cpp +++ b/Repetier/Printer.cpp @@ -116,7 +116,6 @@ volatile long Printer::staticCompensationZ = 0; #endif // FEATURE_WORK_PART_Z_COMPENSATION volatile long Printer::currentSteps[3] = { 0, 0, 0 }; -volatile char Printer::stepperDirection[3] = { 0, 0, 0 }; volatile char Printer::blockAll = 0; volatile long Printer::currentXSteps = 0; //das ist der X-Zähler der GCodes zum Zählen des tiefsten Schalterdruckpunkts /Schaltercrash. @@ -436,6 +435,20 @@ inline bool isExtrusionAllowed(float e) { return true; } +bool Printer::isZMoveActive() { + if (PrintLine::direct.stepsRemaining && PrintLine::direct.isZMove()) { + return true; + } + if (PrintLine::cur == NULL) { + return false; + } + if (PrintLine::cur->isZMove()) { + return true; + } + + return false; +} + /** * Set the printers feedrate according to active unit settings */ diff --git a/Repetier/Printer.h b/Repetier/Printer.h index 249858e06..801bd68b9 100644 --- a/Repetier/Printer.h +++ b/Repetier/Printer.h @@ -140,7 +140,6 @@ class Printer #endif // FEATURE_WORK_PART_Z_COMPENSATION static volatile long currentSteps[3]; - static volatile char stepperDirection[3]; // this is the current x/y/z-direction from the processing of G-Codes static volatile char blockAll; static volatile long currentXSteps; @@ -466,7 +465,6 @@ class Printer #if FEATURE_TWO_XSTEPPER WRITE(X2_DIR_PIN, !INVERT_X_DIR); #endif // FEATURE_TWO_XSTEPPER - stepperDirection[X_AXIS] = 1; } else { @@ -475,7 +473,6 @@ class Printer #if FEATURE_TWO_XSTEPPER WRITE(X2_DIR_PIN, INVERT_X_DIR); #endif // FEATURE_TWO_XSTEPPER - stepperDirection[X_AXIS] = -1; } } // setXDirection @@ -488,7 +485,6 @@ class Printer #if FEATURE_TWO_YSTEPPER WRITE(Y2_DIR_PIN, !INVERT_Y_DIR); #endif // FEATURE_TWO_YSTEPPER - stepperDirection[Y_AXIS] = 1; } else { @@ -497,7 +493,6 @@ class Printer #if FEATURE_TWO_YSTEPPER WRITE(Y2_DIR_PIN, INVERT_Y_DIR); #endif // FEATURE_TWO_YSTEPPER - stepperDirection[Y_AXIS] = -1; } } // setYDirection @@ -513,7 +508,6 @@ class Printer #if FEATURE_CONFIGURABLE_Z_ENDSTOPS lastZDirection = 1; #endif // FEATURE_CONFIGURABLE_Z_ENDSTOPS - stepperDirection[Z_AXIS] = 1; } else { @@ -525,7 +519,6 @@ class Printer #if FEATURE_CONFIGURABLE_Z_ENDSTOPS lastZDirection = -1; #endif // FEATURE_CONFIGURABLE_Z_ENDSTOPS - stepperDirection[Z_AXIS] = -1; } } // setZDirection @@ -1097,6 +1090,7 @@ class Printer static void updateDerivedParameter(); static void switchEverythingOff(); static void updateAdvanceActivated(); + static bool isZMoveActive(); static INLINE void setXAxisSteps(int32_t x) { InterruptProtectedBlock noInts; diff --git a/Repetier/RF.cpp b/Repetier/RF.cpp index 993f9554c..3808ceb80 100644 --- a/Repetier/RF.cpp +++ b/Repetier/RF.cpp @@ -5325,7 +5325,6 @@ void moveZ(int nSteps) g_nZScanZPosition += (Printer::getZDirectionIsPos() ? 1 : -1); } - Printer::stepperDirection[Z_AXIS] = 0; //stepper immer freigeben. moveZ läuft nie parallel zu anderen Z-Bewegungen! } // moveZ @@ -6447,7 +6446,7 @@ void handleStrainGaugeFeatures(millis_t uTime) { g_nEmergencyESkip = true; // Block if we are driving Z rightnow - if (Printer::stepperDirection[Z_AXIS] && !Extruder::current->stepperDirection) + if (Printer::isZMoveActive() && !Extruder::current->stepperDirection) { // the pressure is outside the allowed range, we must perform the emergency stop doEmergencyStop(STOP_BECAUSE_OF_Z_BLOCK); diff --git a/Repetier/RF.h b/Repetier/RF.h index 538730396..97cde4515 100644 --- a/Repetier/RF.h +++ b/Repetier/RF.h @@ -443,9 +443,6 @@ The following variables are used for movements in x/y/z direction: - holds the position which has been reached through the movements from the queue - the value of currentSteps represents the current position of the printer in x, y and z direction -- Printer::stepperDirection[x/y/z] - - holds the direction of the axes as it is requested by the currently processed movement from the queue - - Printer::directDestinationSteps[x/y/z] - unit is [steps] - holds the position which shall be reached through direct movements, e.g. from the manual buttons or from the direct pause/continue functionality diff --git a/Repetier/motion.cpp b/Repetier/motion.cpp index a380cae0d..e50f87226 100644 --- a/Repetier/motion.cpp +++ b/Repetier/motion.cpp @@ -1040,7 +1040,7 @@ void PrintLine::stepSlowedZCompensation() { if (Printer::blockAll) { return; } - + // We do not want the zCMP to have a total axis dependand constant speed. // Constant jerky speedup and speeddowns sound awfull and we suspect that to cause the z-lift problematic. @@ -1056,19 +1056,21 @@ void PrintLine::stepSlowedZCompensation() { waitSteps--; return; } - + int32_t cmpDiff = Printer::compensatedPositionTargetStepsZ - Printer::compensatedPositionCurrentStepsZ; if (cmpDiff > 0) { // here we shall move the z-axis only in case performQueueMove() is not moving into the other direction at the moment - if (!Printer::stepperDirection[Z_AXIS]) + bool posZ = Printer::getZDirectionIsPos(); + if (!posZ) { + posZ = true; // set the direction only in case it is not set already - Printer::setZDirection(true); + Printer::setZDirection(posZ); } // we must move the heat bed do the bottom - if (Printer::getZDirectionIsPos()) + if (posZ) { Printer::startZStep(); #if STEPPER_HIGH_DELAY>0 @@ -1090,13 +1092,15 @@ void PrintLine::stepSlowedZCompensation() { if (cmpDiff < 0) { // here we shall move the z-axis only in case performQueueMove() is not moving into the other direction at the moment - if (!Printer::stepperDirection[Z_AXIS]) + bool posZ = Printer::getZDirectionIsPos(); + if (posZ) { + posZ = false; // set the direction only in case it is not set already - Printer::setZDirection(false); + Printer::setZDirection(posZ); } // we must move the heat bed to the top - if (!Printer::getZDirectionIsPos()) + if (!posZ) { Printer::startZStep(); #if STEPPER_HIGH_DELAY>0 @@ -1673,7 +1677,7 @@ long PrintLine::performMove(PrintLine* move, uint8_t forQueue) } #if FEATURE_HEAT_BED_Z_COMPENSATION || FEATURE_WORK_PART_Z_COMPENSATION else if (move->isXOrYMove()) { - PrintLine::stepSlowedZCompensation(); + PrintLine::stepSlowedZCompensation(); // Z is free here. This is no Z-Move } #endif // FEATURE_HEAT_BED_Z_COMPENSATION || FEATURE_WORK_PART_Z_COMPENSATION @@ -1767,12 +1771,9 @@ long PrintLine::performMove(PrintLine* move, uint8_t forQueue) if (move->stepsRemaining <= 0 || move->isNoMove()) // line finished { - if (move->stepsRemaining <= 0) { //Wenn keine Steps mehr da, sollten alle Achsen die benutzt wurden wieder freigegeben werden. Bei Z ist der Sonderfall, dass die Z-Kompensation sich reinschummeln könnte. - move->setXYMoveFinished(); - move->setZMoveFinished(); // Wichtig, das die Z-Kompensation wieder weiterarbeiten kann, auch wichtig bei PrintLine::direct! + //Wenn keine Steps mehr da, sollten alle Achsen die benutzt wurden wieder freigegeben werden. Bei Z ist der Sonderfall, dass die Z-Kompensation sich reinschummeln könnte. + move->setXYZEMoveFinished(); // Wichtig, das die Z-Kompensation wieder weiterarbeiten kann, auch wichtig bei PrintLine::direct! // Auch wenn kein Z-Move, könnte die Z-Kompensation die Achse Z benutzt haben. - move->setEMoveFinished(); - } if (forQueue) { removeCurrentLineForbidInterrupt(); diff --git a/Repetier/motion.h b/Repetier/motion.h index 0826cfd1a..f2e7d57dd 100644 --- a/Repetier/motion.h +++ b/Repetier/motion.h @@ -201,19 +201,16 @@ class PrintLine inline void setXMoveFinished() { dir &= ~16; - Printer::stepperDirection[X_AXIS] = 0; } // setXMoveFinished inline void setYMoveFinished() { dir &= ~32; - Printer::stepperDirection[Y_AXIS] = 0; } // setYMoveFinished inline void setZMoveFinished() { dir &= ~64; - Printer::stepperDirection[Z_AXIS] = 0; } // setZMoveFinished inline void setEMoveFinished() @@ -225,8 +222,12 @@ class PrintLine inline void setXYMoveFinished() { dir &= ~48; - Printer::stepperDirection[Y_AXIS] = 0; - Printer::stepperDirection[X_AXIS] = 0; + } // setXYMoveFinished + + inline void setXYZEMoveFinished() + { + dir &= ~240; + Extruder::current->stepperDirection = 0; } // setXYMoveFinished inline bool isXPositiveMove() @@ -317,7 +318,6 @@ class PrintLine inline void setMoveOfAxisFinished(uint8_t axis) { dir &= ~(16 << axis); - Printer::stepperDirection[axis] = 0; } // setMoveOfAxisFinished inline bool isPositiveMoveOfAxis(uint8_t axis) @@ -412,10 +412,10 @@ class PrintLine static INLINE void removeCurrentLineForbidInterrupt() { + HAL::forbidInterrupts(); nextPlannerIndex(linesPos); cur->task = TASK_NO_TASK; cur = NULL; - HAL::forbidInterrupts(); --linesCount; } // removeCurrentLineForbidInterrupt diff --git a/changelog.txt b/changelog.txt index 4c83284d9..50c5b66b8 100644 --- a/changelog.txt +++ b/changelog.txt @@ -21,6 +21,12 @@ TODO: # milling mode: test or rework milling functions # pause @RF1000: test if z max-endstop is respected while moving in dual-endstop circular setting +V 01.43.99.Mod (2019-05-26) +- fixed a bug that sometimes caused the zcompensation to "hang" when the printlines were long. + The problem was that the compensation was only able to drive into one direction per move + because it did not free Z direction afterwards and blocked itself on direction changes. + That produced some weired looking first layers when printing some gcodes. + V 01.43.98.Mod (2019-05-01) - At the end of a M3912 startline the speed adjustment is now reset to 100% to gain a faster travel to the start point (instead of auto accelerating due to normal digits).