honor timeouts during calibration

pull/134/head
gabrielburnworth 2020-02-12 17:39:40 -08:00
parent 8988e8472f
commit fa23a199d3
4 changed files with 80 additions and 6 deletions

View File

@ -221,6 +221,7 @@ Value |Description
1 |Emergency stop
2 |Timeout
3 |Stall detected
4 |Calibration error
14 |Invalid command
15 |No config

View File

@ -9,7 +9,7 @@
#ifndef CONFIG_H_
#define CONFIG_H_
const char SOFTWARE_VERSION[] = "6.5.5\0";
const char SOFTWARE_VERSION[] = "6.5.6\0";
const int LOGGING = 0;

View File

@ -16,6 +16,7 @@ enum ErrorListEnum
ERR_EMERGENCY_STOP = 1,
ERR_TIMEOUT = 2,
ERR_STALL_DETECTED = 3,
ERR_CALIBRATION_ERROR = 4,
ERR_INVALID_COMMAND = 14,
ERR_PARAMS_NOT_OK = 15,

View File

@ -928,7 +928,7 @@ int Movement::calibrateAxis(int axis)
loadMotorSettings();
loadEncoderSettings();
//unsigned long timeStart = millis();
unsigned long timeStart = millis();
bool movementDone = false;
@ -1004,7 +1004,7 @@ int Movement::calibrateAxis(int axis)
break;
default:
Serial.print("R99 Calibration error: invalid axis selected\r\n");
error = 1;
error = ERR_CALIBRATION_ERROR;
CurrentState::getInstance()->setLastError(error);
return error;
}
@ -1014,7 +1014,7 @@ int Movement::calibrateAxis(int axis)
if (calibAxis->endStopMin() || calibAxis->endStopMax())
{
Serial.print("R99 Calibration error: end stop active before start\r\n");
error = 1;
error = ERR_CALIBRATION_ERROR;
CurrentState::getInstance()->setLastError(error);
return error;
}
@ -1059,6 +1059,41 @@ int Movement::calibrateAxis(int axis)
checkAxisVsEncoder(calibAxis, calibEncoder, &motorConsMissedSteps[axis], &motorLastPosition[axis], &motorConsEncoderLastPosition[axis], &motorConsEncoderUseForPos[axis], &motorConsMissedStepsDecay[axis], &motorConsEncoderEnabled[axis]);
// Check timeouts
if (!movementDone && ((millis() >= timeStart && millis() - timeStart > timeOut[axis] * 1000) || (millis() < timeStart && millis() > timeOut[axis] * 1000)))
{
calibAxis->disableMotor();
switch (axis)
{
case 0:
Serial.print(COMM_REPORT_TIMEOUT_X);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout X axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
case 1:
Serial.print(COMM_REPORT_TIMEOUT_Y);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout Y axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
case 2:
Serial.print(COMM_REPORT_TIMEOUT_Z);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout Z axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
default:
Serial.print("R99 Calibration error: invalid axis selected\r\n");
error = ERR_CALIBRATION_ERROR;
CurrentState::getInstance()->setLastError(error);
return error;
}
}
// Check if there is an emergency stop command
if (Serial.available() > 0)
{
@ -1070,7 +1105,7 @@ int Movement::calibrateAxis(int axis)
CurrentState::getInstance()->setEmergencyStop();
Serial.print(COMM_REPORT_EMERGENCY_STOP);
CurrentState::getInstance()->printQAndNewLine();
error = 1;
error = ERR_EMERGENCY_STOP;
}
}
@ -1175,6 +1210,8 @@ int Movement::calibrateAxis(int axis)
Serial.print(" calibrating length");
Serial.print("\r\n");
timeStart = millis();
stepsCount = 0;
movementDone = false;
*missedSteps = 0;
@ -1201,6 +1238,41 @@ int Movement::calibrateAxis(int axis)
checkAxisVsEncoder(calibAxis, calibEncoder, &motorConsMissedSteps[axis], &motorLastPosition[axis], &motorConsEncoderLastPosition[axis], &motorConsEncoderUseForPos[axis], &motorConsMissedStepsDecay[axis], &motorConsEncoderEnabled[axis]);
// Check timeouts
if (!movementDone && ((millis() >= timeStart && millis() - timeStart > timeOut[axis] * 1000) || (millis() < timeStart && millis() > timeOut[axis] * 1000)))
{
calibAxis->disableMotor();
switch (axis)
{
case 0:
Serial.print(COMM_REPORT_TIMEOUT_X);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout X axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
case 1:
Serial.print(COMM_REPORT_TIMEOUT_Y);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout Y axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
case 2:
Serial.print(COMM_REPORT_TIMEOUT_Z);
CurrentState::getInstance()->printQAndNewLine();
Serial.print("R99 timeout Z axis\r\n");
error = ERR_TIMEOUT;
CurrentState::getInstance()->setLastError(error);
return error;
default:
Serial.print("R99 Calibration error: invalid axis selected\r\n");
error = ERR_CALIBRATION_ERROR;
CurrentState::getInstance()->setLastError(error);
return error;
}
}
// Check if there is an emergency stop command
if (Serial.available() > 0)
{
@ -1212,7 +1284,7 @@ int Movement::calibrateAxis(int axis)
CurrentState::getInstance()->setEmergencyStop();
Serial.print(COMM_REPORT_EMERGENCY_STOP);
CurrentState::getInstance()->printQAndNewLine();
error = 1;
error = ERR_EMERGENCY_STOP;
}
}