Fixed a bug in the pmac driver which caused wrong state 5/6 errors to be

found on a slow motor.
This commit is contained in:
2019-10-30 11:32:33 +01:00
parent 3133d933fa
commit 5aefbd4684
2 changed files with 21 additions and 12 deletions

View File

@ -340,7 +340,7 @@ asynStatus pmacAxis::getAxisStatus(bool *moving)
char command[pC_->PMAC_MAXBUF_];
char response[pC_->PMAC_MAXBUF_];
int cmdStatus = 0;;
int done = 0;
int done = 0, posChanging = 0;
double position = 0;
int nvals = 0;
int axisProblemFlag = 0;
@ -441,25 +441,33 @@ asynStatus pmacAxis::getAxisStatus(bool *moving)
}
/*
code to check for checking against too long status 6
code to test against too long status 5 or 6
*/
if(axStat == 5 || axStat == 6){
if(status6Time == 0){
status6Time = time(NULL);
statusPos = position;
} else {
if(time(NULL) > status6Time + 60){
done = 1;
*moving = false;
setIntegerParam(pC_->motorStatusMoving_, false);
setIntegerParam(pC_->motorStatusDone_, true);
setIntegerParam(pC_->motorStatusProblem_, true);
errlogPrintf("Axis %d stayed in 5,6 for more then 60 seconds BROKEN\n", axisNo_);
updateMsgTxtFromDriver("Axis stayed in 5,6 for more then 60 seconds: BROKEN");
status6Time = 0;
return asynSuccess;
/* trigger error only when not moving */
if(abs(position-statusPos) < .1){
done = 1;
*moving = false;
setIntegerParam(pC_->motorStatusMoving_, false);
setIntegerParam(pC_->motorStatusDone_, true);
setIntegerParam(pC_->motorStatusProblem_, true);
errlogPrintf("Axis %d stayed in 5,6 for more then 60 seconds BROKEN\n", axisNo_);
updateMsgTxtFromDriver("Axis stayed in 5,6 for more then 60 seconds: BROKEN");
status6Time = 0;
return asynSuccess;
} else {
status6Time = time(NULL);
statusPos = position;
}
}
}
}
}
if (!done) {
*moving = true;

View File

@ -56,6 +56,7 @@ class pmacAxis : public SINQAxis
time_t status6Time;
int starting;
int homing;
double statusPos;
friend class pmacController;
};