Fixed pmacV3 axis codes
This commit is contained in:
@ -16,7 +16,7 @@
|
|||||||
* when the motor is hung, it wont start. I check for this and cause an alarm.
|
* when the motor is hung, it wont start. I check for this and cause an alarm.
|
||||||
*
|
*
|
||||||
* Another mode where the motor is in trouble is if it stays too long in status
|
* Another mode where the motor is in trouble is if it stays too long in status
|
||||||
*5 or 6. I check and cause an alarm in this state too.
|
* 5 or 6. I check and cause an alarm in this state too.
|
||||||
*
|
*
|
||||||
* Mark Koennecke, February 2013
|
* Mark Koennecke, February 2013
|
||||||
*
|
*
|
||||||
@ -339,7 +339,7 @@ static char *translateAxisError(int axErr) {
|
|||||||
return strdup("command not allowed");
|
return strdup("command not allowed");
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
return strdup("watchdog triggere");
|
return strdup("watchdog triggered");
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
return strdup("current limit reached");
|
return strdup("current limit reached");
|
||||||
@ -985,24 +985,6 @@ asynStatus pmacV3Axis::getAxisStatus(bool *moving) {
|
|||||||
done = 0;
|
done = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (starting && time(NULL) > startTime + 10) {
|
|
||||||
// /*
|
|
||||||
// did not start in 10 seconds: messed up: cause an alarm
|
|
||||||
// */
|
|
||||||
// done = 1;
|
|
||||||
// *moving = false;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusMoving_, false);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusDone_, true);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
// errlogPrintf("Axis %d did not start within 10 seconds!! BROKEN\n", axisNo_);
|
|
||||||
// updateMsgTxtFromDriver("Axis did not start within 10 seconds");
|
|
||||||
// starting = 0;
|
|
||||||
// return st;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// /*
|
// /*
|
||||||
// code to test against too long status 5 or 6
|
// code to test against too long status 5 or 6
|
||||||
// */
|
// */
|
||||||
@ -1014,20 +996,11 @@ asynStatus pmacV3Axis::getAxisStatus(bool *moving) {
|
|||||||
EstimatedTimeOfArrival =
|
EstimatedTimeOfArrival =
|
||||||
std::ceil(2 * std::fabs(setpointPosition_ - position) / Speed);
|
std::ceil(2 * std::fabs(setpointPosition_ - position) / Speed);
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
if (time(NULL) > status6Time + EstimatedTimeOfArrival) {
|
if (time(NULL) > status6Time + EstimatedTimeOfArrival) {
|
||||||
/* trigger error only when not moving */
|
/* trigger error only when not moving */
|
||||||
if (abs(position - statusPos) < .1) {
|
if (abs(position - statusPos) < .1) {
|
||||||
// done = 1;
|
done = 1;
|
||||||
// *moving = false;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusMoving_, false);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusDone_, true);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
// st = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
||||||
// cmdStatus = cmdStatus > st ? cmdStatus : st;
|
|
||||||
|
|
||||||
errlogPrintf(
|
errlogPrintf(
|
||||||
"Axis %d stayed in 5,6 for more than %d seconds BROKEN\n",
|
"Axis %d stayed in 5,6 for more than %d seconds BROKEN\n",
|
||||||
axisNo_, EstimatedTimeOfArrival);
|
axisNo_, EstimatedTimeOfArrival);
|
||||||
@ -1148,6 +1121,40 @@ asynStatus pmacV3Axis::getAxisStatus(bool *moving) {
|
|||||||
axisProblemFlag = 0;
|
axisProblemFlag = 0;
|
||||||
axisErrorCount = 0;
|
axisErrorCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test for more error conditions encoded in axStat
|
||||||
|
switch(axStat) {
|
||||||
|
case -4:
|
||||||
|
snprintf(message, sizeof(message), "PMAC: %s on %d",
|
||||||
|
"Emergency stop activated", axisNo_);
|
||||||
|
updateMsgTxtFromDriver(message);
|
||||||
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR, "%s\n", message);
|
||||||
|
axisProblemFlag = 1;
|
||||||
|
break;
|
||||||
|
case -5:
|
||||||
|
snprintf(message, sizeof(message), "PMAC: %s on %d",
|
||||||
|
"Motor is not installed", axisNo_);
|
||||||
|
updateMsgTxtFromDriver(message);
|
||||||
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR, "%s\n", message);
|
||||||
|
axisProblemFlag = 1;
|
||||||
|
break;
|
||||||
|
case -3:
|
||||||
|
snprintf(message, sizeof(message), "PMAC: %s on %d",
|
||||||
|
"Axis disabled", axisNo_);
|
||||||
|
updateMsgTxtFromDriver(message);
|
||||||
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR, "%s\n", message);
|
||||||
|
axisProblemFlag = 1;
|
||||||
|
break;
|
||||||
|
case -2:
|
||||||
|
case -1:
|
||||||
|
snprintf(message, sizeof(message), "PMAC: %s on %d",
|
||||||
|
"Axis locked", axisNo_);
|
||||||
|
updateMsgTxtFromDriver(message);
|
||||||
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR, "%s\n", message);
|
||||||
|
axisProblemFlag = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
st = setIntegerParam(pC_->motorStatusProblem_, axisProblemFlag);
|
st = setIntegerParam(pC_->motorStatusProblem_, axisProblemFlag);
|
||||||
cmdStatus = cmdStatus > st ? cmdStatus : st;
|
cmdStatus = cmdStatus > st ? cmdStatus : st;
|
||||||
|
|
||||||
@ -1163,4 +1170,4 @@ asynStatus pmacV3Axis::move(double position, int relative, double min_velocity,
|
|||||||
}
|
}
|
||||||
updateMsgTxtFromDriver("");
|
updateMsgTxtFromDriver("");
|
||||||
return pmacAxis::move(position, relative, min_velocity, max_velocity, acceleration);
|
return pmacAxis::move(position, relative, min_velocity, max_velocity, acceleration);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user