Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
5dd5a26243 | |||
832884179c | |||
94edef6cd8 | |||
afdd66a648 |
@ -6,7 +6,7 @@
|
||||
|
||||

|
||||
|
||||
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}$).
|
||||
|
@ -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) {
|
||||
|
Submodule turboPmac updated: 55b523ddaa...a11d10cb6c
Reference in New Issue
Block a user