4 Commits
0.2.0 ... 0.2.2

Author SHA1 Message Date
5dd5a26243 Removed unnecessary code (bug in sinqMotor has been found) 2025-05-16 16:33:49 +02:00
832884179c Updated dependencies sinqMotor and turboPmac both to 0.15.2 2025-05-16 16:17:36 +02:00
94edef6cd8 New error message always results in status problem
Previously, a new error message did not automatically result in a status
problem being shown. This patch fixes that.
2025-05-16 11:29:38 +02:00
afdd66a648 Adjusted link to turboPmac repository 2025-05-15 17:18:39 +02:00
3 changed files with 4 additions and 28 deletions

View File

@ -6,7 +6,7 @@
![Coordinate systems](images/CoordinateSystems.svg)
This is a driver for the detector tower which is based on the Turbo PMAC driver (https://git.psi.ch/sinq-epics-modules/turboPmac). It consists of the following four objects:
This is a driver for the detector tower which is based on the Turbo PMAC driver (https://gitea.psi.ch/lin-epics-modules/turboPmac). It consists of the following four objects:
- `detectorTowerController`: This is an expanded variant of `turboPmacController` provided by the Turbo PMAC library linked above.It is needed to operate a `detectorTowerAngleAxis`, but it can also be used to operate a "normal" `turboPmacAxis`.
- `detectorTowerAngleAxis`: This is a virtual axis which controls multiple physical motors ($x$ and $z$) in order to provide a combined movement. Moving it results in a rotation of the entire beam around the support axis position ($\alpha$).
- `detectorTowerLiftAxis`: This is a virtual axis which controls multiple physical motors in order to provide a combined movement. Moving it results in a vertical lift ($z_{lift}$).

View File

@ -150,31 +150,6 @@ asynStatus detectorTowerController::writeInt32(asynUser *pasynUser,
}
}
/*
Due to a bug which is currently not understood, the reset has to be handled
here rather than using the default implementation in sinqController. Piping
the motor reset request to sinqController causes segfaults. It might be due
to the fact that the default `reset` implementation of sinqAxis locks the
controller in order to perform some fast polls and that for some reason this
behaviour cannot be overwritten even by providing custom `reset` methods for
all three axes.
*/
if (pasynUser->reason == motorReset_) {
detectorTowerAngleAxis *aAxis = getDetectorTowerAngleAxis(pasynUser);
if (aAxis != nullptr) {
return aAxis->reset();
}
detectorTowerLiftAxis *lAxis = getDetectorTowerLiftAxis(pasynUser);
if (lAxis != nullptr) {
return lAxis->reset();
}
detectorTowerSupportAxis *sAxis =
getDetectorTowerSupportAxis(pasynUser);
if (sAxis != nullptr) {
return sAxis->reset();
}
}
return turboPmacController::writeInt32(pasynUser, value);
}
@ -838,7 +813,8 @@ asynStatus detectorTowerController::pollDetectorAxes(
getStringParam(angleAxisNo, motorMessageText(), sizeof(waitingErrorMessage),
waitingErrorMessage);
if (error != 0 || waitingErrorMessage[0] != '\0') {
if (error != 0 || errorMessage[0] != '\0' ||
waitingErrorMessage[0] != '\0') {
plStatus = angleAxis->setIntegerParam(motorStatusProblem(), true);
if (plStatus != asynSuccess) {