|
|
|
@ -78,13 +78,13 @@ masterMacsAxis::masterMacsAxis(masterMacsController *pC, int axisNo)
|
|
|
|
|
bounds, asynMotorAxis prints an error. However, we want the IOC creation to
|
|
|
|
|
stop completely, since this is a configuration error.
|
|
|
|
|
*/
|
|
|
|
|
if (axisNo >= pC->numAxes_) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
if (axisNo >= pC->numAxes()) {
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:: FATAL ERROR: "
|
|
|
|
|
"Axis index %d must be smaller than the total number of axes "
|
|
|
|
|
"%d. Call the support.",
|
|
|
|
|
pC_->portName, axisNo, __PRETTY_FUNCTION__, __LINE__, axisNo_,
|
|
|
|
|
pC->numAxes_);
|
|
|
|
|
pC->numAxes());
|
|
|
|
|
exit(-1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -108,10 +108,10 @@ masterMacsAxis::masterMacsAxis(masterMacsController *pC, int axisNo)
|
|
|
|
|
timeAtHandshake_ = 0;
|
|
|
|
|
|
|
|
|
|
// masterMacs motors can always be disabled
|
|
|
|
|
status = pC_->setIntegerParam(axisNo_, pC_->motorCanDisable_, 1);
|
|
|
|
|
status = pC_->setIntegerParam(axisNo_, pC_->motorCanDisable(), 1);
|
|
|
|
|
if (status != asynSuccess) {
|
|
|
|
|
asynPrint(
|
|
|
|
|
pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nFATAL ERROR "
|
|
|
|
|
"(setting a parameter value failed with %s)\n. Terminating IOC",
|
|
|
|
|
pC_->portName, axisNo, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
@ -120,10 +120,10 @@ masterMacsAxis::masterMacsAxis(masterMacsController *pC, int axisNo)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Assume that the motor is initially not moving
|
|
|
|
|
status = pC_->setIntegerParam(axisNo_, pC_->motorStatusMoving_, false);
|
|
|
|
|
status = pC_->setIntegerParam(axisNo_, pC_->motorStatusMoving(), false);
|
|
|
|
|
if (status != asynSuccess) {
|
|
|
|
|
asynPrint(
|
|
|
|
|
pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nFATAL ERROR "
|
|
|
|
|
"(setting a parameter value failed with %s)\n. Terminating IOC",
|
|
|
|
|
pC_->portName, axisNo, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
@ -163,11 +163,11 @@ asynStatus masterMacsAxis::init() {
|
|
|
|
|
time_t now = time(NULL);
|
|
|
|
|
time_t maxInitTime = 60;
|
|
|
|
|
while (1) {
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution_,
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution(),
|
|
|
|
|
&motorRecResolution);
|
|
|
|
|
if (pl_status == asynParamUndefined) {
|
|
|
|
|
if (now + maxInitTime < time(NULL)) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line "
|
|
|
|
|
"%d\nInitializing the parameter library failed.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -237,7 +237,7 @@ asynStatus masterMacsAxis::init() {
|
|
|
|
|
|
|
|
|
|
// Store these values in the parameter library
|
|
|
|
|
pl_status =
|
|
|
|
|
pC_->setDoubleParam(axisNo_, pC_->motorPosition_, motorPosition);
|
|
|
|
|
pC_->setDoubleParam(axisNo_, pC_->motorPosition(), motorPosition);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorPosition_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
@ -264,7 +264,7 @@ asynStatus masterMacsAxis::init() {
|
|
|
|
|
// If we can't communicate with the parameter library, it doesn't
|
|
|
|
|
// make sense to try and upstream this to the user -> Just log the
|
|
|
|
|
// error
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line "
|
|
|
|
|
"%d:\ncallParamCallbacks failed with %s.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
@ -309,10 +309,10 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
time_t currentTime = time(NULL);
|
|
|
|
|
bool timedOut = (currentTime > timeAtHandshake_ + 5);
|
|
|
|
|
|
|
|
|
|
if (pC_->msgPrintControl_.shouldBePrinted(
|
|
|
|
|
if (pC_->getMsgPrintControl().shouldBePrinted(
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__, timedOut,
|
|
|
|
|
pC_->pasynUserSelf)) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
pC_->asynUserSelf())) {
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d\nAsked for a "
|
|
|
|
|
"handshake at %ld s and didn't get a positive reply yet "
|
|
|
|
|
"(current time is %ld s).\n",
|
|
|
|
@ -322,7 +322,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
|
|
|
|
|
if (timedOut) {
|
|
|
|
|
pl_status =
|
|
|
|
|
setStringParam(pC_->motorMessageText_,
|
|
|
|
|
setStringParam(pC_->motorMessageText(),
|
|
|
|
|
"Timed out while waiting for a handshake");
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
|
|
|
|
@ -351,14 +351,14 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
// poll. This is already part of the movement procedure.
|
|
|
|
|
*moving = true;
|
|
|
|
|
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusMoving_, *moving);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusMoving(), *moving);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status,
|
|
|
|
|
"motorStatusMoving_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDone_, !(*moving));
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDone(), !(*moving));
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusDone_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -370,7 +370,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Motor resolution from parameter library
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution_,
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution(),
|
|
|
|
|
&motorRecResolution);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorRecResolution_",
|
|
|
|
@ -380,7 +380,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
|
|
|
|
|
// Read the previous motor position
|
|
|
|
|
pl_status =
|
|
|
|
|
pC_->getDoubleParam(axisNo_, pC_->motorPosition_, &previousPosition);
|
|
|
|
|
pC_->getDoubleParam(axisNo_, pC_->motorPosition(), &previousPosition);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorPosition_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
@ -431,17 +431,17 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
since this information is not reliable.
|
|
|
|
|
*/
|
|
|
|
|
if (communicationError()) {
|
|
|
|
|
if (pC_->msgPrintControl_.shouldBePrinted(keyError, true,
|
|
|
|
|
pC_->pasynUserSelf)) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
if (pC_->getMsgPrintControl().shouldBePrinted(
|
|
|
|
|
keyError, true, pC_->asynUserSelf())) {
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line "
|
|
|
|
|
"%d\nCommunication error.%s\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
|
pC_->msgPrintControl_.getSuffix());
|
|
|
|
|
pC_->getMsgPrintControl().getSuffix());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status =
|
|
|
|
|
setStringParam(pC_->motorMessageText_,
|
|
|
|
|
setStringParam(pC_->motorMessageText(),
|
|
|
|
|
"Communication error between PC and motor "
|
|
|
|
|
"controller. Please call the support.");
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
@ -589,18 +589,18 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (strlen(shellMessage) > 0) {
|
|
|
|
|
if (pC_->msgPrintControl_.shouldBePrinted(keyError, true,
|
|
|
|
|
pC_->pasynUserSelf)) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
if (pC_->getMsgPrintControl().shouldBePrinted(
|
|
|
|
|
keyError, true, pC_->asynUserSelf())) {
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line "
|
|
|
|
|
"%d\n%s.%s\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
|
__LINE__, shellMessage,
|
|
|
|
|
pC_->msgPrintControl_.getSuffix());
|
|
|
|
|
pC_->getMsgPrintControl().getSuffix());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText_, userMessage);
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText(), userMessage);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -608,7 +608,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
pC_->msgPrintControl_.resetCount(keyError, pC_->pasynUserSelf);
|
|
|
|
|
pC_->getMsgPrintControl().resetCount(keyError, pC_->asynUserSelf());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Read out the limits, if the motor is not moving
|
|
|
|
@ -646,7 +646,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
directly, but need to shrink them a bit. In this case, we're shrinking
|
|
|
|
|
them by 0.1 mm or 0.1 degree (depending on the axis type) on both sides.
|
|
|
|
|
*/
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorLimitsOffset_,
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorLimitsOffset(),
|
|
|
|
|
&limitsOffset);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorLimitsOffset_",
|
|
|
|
@ -656,15 +656,15 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
highLimit = highLimit - limitsOffset;
|
|
|
|
|
lowLimit = lowLimit + limitsOffset;
|
|
|
|
|
|
|
|
|
|
pl_status = pC_->setDoubleParam(axisNo_, pC_->motorHighLimitFromDriver_,
|
|
|
|
|
highLimit);
|
|
|
|
|
pl_status = pC_->setDoubleParam(
|
|
|
|
|
axisNo_, pC_->motorHighLimitFromDriver(), highLimit);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(
|
|
|
|
|
pl_status, "motorHighLimitFromDriver_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = pC_->setDoubleParam(axisNo_, pC_->motorLowLimitFromDriver_,
|
|
|
|
|
pl_status = pC_->setDoubleParam(axisNo_, pC_->motorLowLimitFromDriver(),
|
|
|
|
|
lowLimit);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorLowLimit_",
|
|
|
|
@ -674,7 +674,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update the enable PV
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorEnableRBV_,
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorEnableRBV(),
|
|
|
|
|
readyToBeSwitchedOn() && switchedOn());
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorEnableRBV_", axisNo_,
|
|
|
|
@ -692,27 +692,27 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
|
|
|
|
|
// Update the parameter library
|
|
|
|
|
if (hasError) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusProblem_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
|
__LINE__);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusMoving_, *moving);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusMoving(), *moving);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusMoving_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
|
__LINE__);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDone_, !(*moving));
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDone(), !(*moving));
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusDone_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDirection_, direction);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusDirection(), direction);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusDirection_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -723,7 +723,7 @@ asynStatus masterMacsAxis::doPoll(bool *moving) {
|
|
|
|
|
// masterMacsAxis::init())
|
|
|
|
|
currentPosition = currentPosition / motorRecResolution;
|
|
|
|
|
|
|
|
|
|
pl_status = setDoubleParam(pC_->motorPosition_, currentPosition);
|
|
|
|
|
pl_status = setDoubleParam(pC_->motorPosition(), currentPosition);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorPosition_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
@ -751,13 +751,13 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
|
|
|
|
|
// =========================================================================
|
|
|
|
|
|
|
|
|
|
pl_status = pC_->getIntegerParam(axisNo_, pC_->motorEnableRBV_, &enabled);
|
|
|
|
|
pl_status = pC_->getIntegerParam(axisNo_, pC_->motorEnableRBV(), &enabled);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "enableMotorRBV_", axisNo_,
|
|
|
|
|
__PRETTY_FUNCTION__, __LINE__);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution_,
|
|
|
|
|
pl_status = pC_->getDoubleParam(axisNo_, pC_->motorRecResolution(),
|
|
|
|
|
&motorRecResolution);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorRecResolution_",
|
|
|
|
@ -766,7 +766,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (enabled == 0) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nAxis is "
|
|
|
|
|
"disabled.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__);
|
|
|
|
@ -778,12 +778,12 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
motorVelocity = maxVelocity * motorRecResolution;
|
|
|
|
|
|
|
|
|
|
asynPrint(
|
|
|
|
|
pC_->pasynUserSelf, ASYN_TRACE_FLOW,
|
|
|
|
|
pC_->asynUserSelf(), ASYN_TRACE_FLOW,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nMove to position %lf.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__, position);
|
|
|
|
|
|
|
|
|
|
// Check if the speed is allowed to be changed
|
|
|
|
|
pl_status = pC_->getIntegerParam(axisNo_, pC_->motorCanSetSpeed_,
|
|
|
|
|
pl_status = pC_->getIntegerParam(axisNo_, pC_->motorCanSetSpeed(),
|
|
|
|
|
&motorCanSetSpeed);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorCanSetSpeed_",
|
|
|
|
@ -794,7 +794,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
// Initialize the movement handshake
|
|
|
|
|
rw_status = pC_->write(axisNo_, 86, "0");
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusProblem_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -812,7 +812,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
snprintf(value, sizeof(value), "%lf", motorVelocity);
|
|
|
|
|
rw_status = pC_->write(axisNo_, 05, value);
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status,
|
|
|
|
|
"motorStatusProblem_", axisNo_,
|
|
|
|
@ -821,7 +821,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
return rw_status;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_FLOW,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_FLOW,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nSetting speed "
|
|
|
|
|
"to %lf.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
@ -832,7 +832,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
snprintf(value, sizeof(value), "%lf", motorCoordinatesPosition);
|
|
|
|
|
rw_status = pC_->write(axisNo_, 02, value);
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusProblem_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -848,7 +848,7 @@ asynStatus masterMacsAxis::doMove(double position, int relative,
|
|
|
|
|
rw_status = pC_->write(axisNo_, 00, "1");
|
|
|
|
|
}
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusProblem_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -883,7 +883,7 @@ asynStatus masterMacsAxis::stop(double acceleration) {
|
|
|
|
|
|
|
|
|
|
rw_status = pC_->write(axisNo_, 00, "8");
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorStatusProblem_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
@ -910,7 +910,7 @@ asynStatus masterMacsAxis::doHome(double min_velocity, double max_velocity,
|
|
|
|
|
|
|
|
|
|
// =========================================================================
|
|
|
|
|
|
|
|
|
|
pl_status = pC_->getStringParam(axisNo_, pC_->encoderType_,
|
|
|
|
|
pl_status = pC_->getStringParam(axisNo_, pC_->encoderType(),
|
|
|
|
|
sizeof(response), response);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "encoderType_", axisNo_,
|
|
|
|
@ -923,7 +923,7 @@ asynStatus masterMacsAxis::doHome(double min_velocity, double max_velocity,
|
|
|
|
|
// Initialize the movement handshake
|
|
|
|
|
rw_status = pC_->write(axisNo_, 86, "0");
|
|
|
|
|
if (rw_status != asynSuccess) {
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem_, true);
|
|
|
|
|
pl_status = setIntegerParam(pC_->motorStatusProblem(), true);
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status,
|
|
|
|
|
"motorStatusProblem_", axisNo_,
|
|
|
|
@ -983,9 +983,9 @@ asynStatus masterMacsAxis::readEncoderType() {
|
|
|
|
|
2=SSI (Absolute encoder with BiSS interface)
|
|
|
|
|
*/
|
|
|
|
|
if (encoder_id == 0) {
|
|
|
|
|
pl_status = setStringParam(pC_->encoderType_, IncrementalEncoder);
|
|
|
|
|
pl_status = setStringParam(pC_->encoderType(), IncrementalEncoder);
|
|
|
|
|
} else {
|
|
|
|
|
pl_status = setStringParam(pC_->encoderType_, AbsoluteEncoder);
|
|
|
|
|
pl_status = setStringParam(pC_->encoderType(), AbsoluteEncoder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
@ -1017,13 +1017,13 @@ asynStatus masterMacsAxis::enable(bool on) {
|
|
|
|
|
// axis instead of "moving", since status -6 is also moving, but the
|
|
|
|
|
// motor can actually be disabled in this state!
|
|
|
|
|
if (moving) {
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nAxis is not "
|
|
|
|
|
"idle and can therefore not be disabled.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__);
|
|
|
|
|
|
|
|
|
|
pl_status =
|
|
|
|
|
setStringParam(pC_->motorMessageText_,
|
|
|
|
|
setStringParam(pC_->motorMessageText(),
|
|
|
|
|
"Axis cannot be disabled while it is moving.");
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
|
|
|
|
@ -1039,7 +1039,7 @@ asynStatus masterMacsAxis::enable(bool on) {
|
|
|
|
|
|
|
|
|
|
if ((readyToBeSwitchedOn() && switchedOn()) == on) {
|
|
|
|
|
asynPrint(
|
|
|
|
|
pC_->pasynUserSelf, ASYN_TRACE_WARNING,
|
|
|
|
|
pC_->asynUserSelf(), ASYN_TRACE_WARNING,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nAxis is already %s.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
|
on ? "enabled" : "disabled");
|
|
|
|
@ -1048,14 +1048,14 @@ asynStatus masterMacsAxis::enable(bool on) {
|
|
|
|
|
|
|
|
|
|
// Enable / disable the axis if it is not moving
|
|
|
|
|
snprintf(value, sizeof(value), "%d", on);
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_FLOW,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_FLOW,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\n%s axis.\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
|
on ? "Enable" : "Disable");
|
|
|
|
|
if (on == 0) {
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText_, "Disabling ...");
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText(), "Disabling ...");
|
|
|
|
|
} else {
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText_, "Enabling ...");
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText(), "Enabling ...");
|
|
|
|
|
}
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
|
|
|
|
@ -1089,7 +1089,7 @@ asynStatus masterMacsAxis::enable(bool on) {
|
|
|
|
|
|
|
|
|
|
// Failed to change axis status within timeout_enable_disable => Send a
|
|
|
|
|
// corresponding message
|
|
|
|
|
asynPrint(pC_->pasynUserSelf, ASYN_TRACE_ERROR,
|
|
|
|
|
asynPrint(pC_->asynUserSelf(), ASYN_TRACE_ERROR,
|
|
|
|
|
"Controller \"%s\", axis %d => %s, line %d:\nFailed to %s axis "
|
|
|
|
|
"within %d seconds\n",
|
|
|
|
|
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
|
|
|
|
@ -1098,7 +1098,7 @@ asynStatus masterMacsAxis::enable(bool on) {
|
|
|
|
|
// Output message to user
|
|
|
|
|
snprintf(value, sizeof(value), "Failed to %s within %d seconds",
|
|
|
|
|
on ? "enable" : "disable", timeout_enable_disable);
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText_, "Enabling ...");
|
|
|
|
|
pl_status = setStringParam(pC_->motorMessageText(), "Enabling ...");
|
|
|
|
|
if (pl_status != asynSuccess) {
|
|
|
|
|
return pC_->paramLibAccessFailed(pl_status, "motorMessageText_",
|
|
|
|
|
axisNo_, __PRETTY_FUNCTION__,
|
|
|
|
|