Compare commits

..

7 Commits

Author SHA1 Message Date
e7ce44fdb6 Test version for the homing check
Some checks failed
Test And Build / Lint (push) Failing after 4s
Test And Build / Build (push) Failing after 8s
2026-03-06 11:27:25 +01:00
08ce0999a3 Updated underlying version of motorBase to receive the RVEL bugfix
Some checks failed
Test And Build / Lint (push) Failing after 3s
Test And Build / Build (push) Failing after 6s
2026-02-12 12:05:34 +01:00
1d662ecd43 Use safe limit setter function from sinqMotor
Some checks failed
Test And Build / Lint (push) Failing after 3s
Test And Build / Build (push) Failing after 6s
2026-02-11 11:08:46 +01:00
bea68c807b Updated to new sinqMotor 1.6.0 version 2026-02-11 11:07:28 +01:00
01a04d3b24 Fixed of-by-one error
Some checks failed
Test And Build / Lint (push) Failing after 3s
Test And Build / Build (push) Failing after 8s
2026-02-03 14:05:12 +01:00
76cc48a49c Reverted back to sinqMotor 1.5.7
Some checks failed
Test And Build / Lint (push) Failing after 4s
Test And Build / Build (push) Failing after 7s
2026-02-03 13:44:21 +01:00
a9f623ba1d Merge pull request 'Document how to do reset when having HW error' (#1) from fix_hw_error_doc into main
Some checks failed
Test And Build / Lint (push) Failing after 3s
Test And Build / Build (push) Failing after 7s
Reviewed-on: #1
2026-02-03 10:07:56 +01:00
4 changed files with 39 additions and 29 deletions

View File

@@ -10,7 +10,7 @@ ARCH_FILTER=RHEL%
REQUIRED+=motorBase
# Specify the version of motorBase we want to build against
motorBase_VERSION=7.2.2
motorBase_VERSION=7.3.2
# These headers allow to depend on this library for derived drivers.
HEADERS += src/pmacAsynIPPort.h

View File

@@ -91,9 +91,9 @@ turboPmacAxis::turboPmacAxis(turboPmacController *pC, int axisNo,
}
// Even though this happens already in sinqAxis, a default value for
// motorMessageText is set here again, because apparently the sinqAxis
// motorErrorMessage is set here again, because apparently the sinqAxis
// constructor is not run before the string is accessed?
status = setStringParam(pC_->motorMessageText(), "");
status = setStringParam(pC_->motorErrorMessage(), "");
if (status != asynSuccess) {
asynPrint(pC_->pasynUser(), ASYN_TRACE_ERROR,
"Controller \"%s\", axis %d => %s, line %d:\nFATAL ERROR "
@@ -140,6 +140,9 @@ asynStatus turboPmacAxis::init() {
// Deadband in counts. Can be a fraction of a count, hence double.
double deadband_counts = 0.0;
// Read from the controller if the motor has been homed before
int hasBeenHomed = 0;
// Offset time for the movement watchdog caused by the air cushions in
// milliseconds.
int acoDelay = 0.0;
@@ -176,9 +179,11 @@ asynStatus turboPmacAxis::init() {
Ixx65.
*/
snprintf(command, sizeof(command),
"Q%2.2d10 Q%2.2d03 Q%2.2d04 Q%2.2d06 P%2.2d22 Q%2.2d00 I%2.2d65",
axisNo_, axisNo_, axisNo_, axisNo_, axisNo_, axisNo_, axisNo_);
status = pC_->writeRead(axisNo_, command, response, 7);
"Q%2.2d10 Q%2.2d03 Q%2.2d04 Q%2.2d06 P%2.2d22 Q%2.2d00 I%2.2d65 "
"M%2.2d45",
axisNo_, axisNo_, axisNo_, axisNo_, axisNo_, axisNo_, axisNo_,
axisNo_);
status = pC_->writeRead(axisNo_, command, response, 8);
msgPrintControlKey keyDisconnected = msgPrintControlKey(
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__, 1);
@@ -205,9 +210,9 @@ asynStatus turboPmacAxis::init() {
pC_->getMsgPrintControl().resetCount(keyDisconnected, pC_->pasynUser());
}
nvals = sscanf(response, "%lf %lf %lf %lf %d %lf %lf", &motorPos,
nvals = sscanf(response, "%lf %lf %lf %lf %d %lf %lf %d", &motorPos,
&motorVmax, &motorVelocity, &motorAccel, &acoDelay,
&counts_to_eu, &deadband_counts);
&counts_to_eu, &deadband_counts, &hasBeenHomed);
// The acoDelay is given in milliseconds -> Convert to seconds, rounded
// up
@@ -218,7 +223,7 @@ asynStatus turboPmacAxis::init() {
// here to mm/s^2.
motorAccel = motorAccel * 1000;
if (nvals != 8) {
if (nvals != 7) {
return pC_->couldNotParseResponse(command, response, axisNo_,
__PRETTY_FUNCTION__, __LINE__);
}
@@ -282,6 +287,9 @@ asynStatus turboPmacAxis::init() {
pTurboPmacA_->needInit = false;
}
// Use the homing status reported by the controller
setAxisParamChecked(this, motorStatusHomed, hasBeenHomed);
return status;
}
@@ -339,7 +347,7 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
}
if (timedOut) {
setAxisParamChecked(this, motorMessageText,
setAxisParamChecked(this, motorErrorMessage,
"Timed out while waiting for a handshake");
pTurboPmacA_->waitForHandshake = false;
}
@@ -459,7 +467,7 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
pC_->getMsgPrintControl().getSuffix());
}
resetCountStatus = false;
setAxisParamChecked(this, motorMessageText, "Emergency stop");
setAxisParamChecked(this, motorErrorMessage, "Emergency stop");
break;
case -3:
// Disabled
@@ -552,7 +560,7 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
userMessage, sizeof(userMessage),
"Reached unknown state P%2.2d00 = %d. Please call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
}
if (resetCountStatus) {
@@ -582,8 +590,10 @@ asynStatus turboPmacAxis::doPoll(bool *moving) {
getAxisParamChecked(this, limFromHardware, &limFromHardware);
if (limFromHardware != 0) {
setAxisParamChecked(this, motorHighLimitFromDriver, highLimit);
setAxisParamChecked(this, motorLowLimitFromDriver, lowLimit);
status = setLimits(highLimit, lowLimit);
if (status != asynSuccess) {
return status;
}
}
status = setMotorPosition(currentPosition);
@@ -614,7 +624,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
pC_->getMsgPrintControl().getSuffix());
}
setAxisParamChecked(this, motorMessageText,
setAxisParamChecked(this, motorErrorMessage,
"Target position would exceed software limits");
break;
case 5:
@@ -630,7 +640,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
pC_->getMsgPrintControl().getSuffix());
}
setAxisParamChecked(this, motorMessageText,
setAxisParamChecked(this, motorErrorMessage,
"Axis received move command while it is still "
"moving. Please call the support.");
break;
@@ -651,7 +661,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"(P%2.2d01 = "
"%d). Please call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 9:
if (pC_->getMsgPrintControl().shouldBePrinted(
@@ -670,7 +680,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"No feedback from auxiliary device before movement (P%2.2d01 = "
"%d). Please call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 10:
/*
@@ -696,7 +706,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"the SPS for errors (if available). "
"Otherwise please call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 11:
// Following error
@@ -716,7 +726,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"Check if movement range is blocked. "
"Otherwise please call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 12:
@@ -734,7 +744,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"for errors (if available). Otherwise please call "
"the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 13:
@@ -753,7 +763,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"Driver hardware error (P%2.2d01 = 13). Please call the "
"support.",
axisNo_);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
case 14:
// EPICS should already prevent this issue in the first place,
@@ -771,7 +781,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
"Move command exceeds hardware limits (P%2.2d01 = %d). Please "
"call the support.",
axisNo_, error);
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
default:
@@ -785,7 +795,7 @@ asynStatus turboPmacAxis::handleError(int error, char *userMessage,
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__, axisNo_,
error, pC_->getMsgPrintControl().getSuffix());
}
setAxisParamChecked(this, motorMessageText, userMessage);
setAxisParamChecked(this, motorErrorMessage, userMessage);
break;
}
return status;
@@ -1102,7 +1112,7 @@ asynStatus turboPmacAxis::rereadEncoder() {
"disabled before rereading the encoder.\n",
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__);
setAxisParamChecked(
this, motorMessageText,
this, motorErrorMessage,
"Axis must be disabled before rereading the encoder.");
return asynError;
} else {
@@ -1165,7 +1175,7 @@ asynStatus turboPmacAxis::enable(bool on) {
pC_->portName, axisNo_, __PRETTY_FUNCTION__, __LINE__,
axStatus);
setAxisParamChecked(this, motorMessageText,
setAxisParamChecked(this, motorErrorMessage,
"Axis cannot be disabled while it is moving.");
pTurboPmacA_->enableDisable = false;
return asynError;
@@ -1250,7 +1260,7 @@ asynStatus turboPmacAxis::enable(bool on) {
// Output message to user
snprintf(command, sizeof(command), "Failed to %s within %d seconds",
on ? "enable" : "disable", timeout_enable_disable);
setAxisParamChecked(this, motorMessageText, command);
setAxisParamChecked(this, motorErrorMessage, command);
// Enabling / disabling procedure failed
pTurboPmacA_->enableDisable = false;

View File

@@ -445,7 +445,7 @@ asynStatus turboPmacController::writeRead(int axisNo, const char *command,
getAxisParamChecked(axis, motorStatusProblem, &motorStatusProblem);
if (motorStatusProblem == 0) {
setAxisParamChecked(axis, motorMessageText, drvMessageText);
setAxisParamChecked(axis, motorErrorMessage, drvMessageText);
setAxisParamChecked(axis, motorStatusProblem, true);
setAxisParamChecked(axis, motorStatusCommsError, true);
}