diff --git a/README.md b/README.md index 5c83581..9668569 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ ## Overview -![Physical setup](images/PhysicalSetup.svg) +![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: - `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 in order to provide a combined movement. Moving it results in a rotation of the entire beam around the support axis position. -- `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. +- `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}$). - `detectorTowerSupportAxis`: This is an axis at the rotation center of the beam which is part of the combined movements. Its origin can be shifted manually for small adjustments, resulting in a corresponding movement. Other than that, it is not meant to move on its own, hence setting a new value to the `VAL` field of the motor record won't cause it to move. ## User guide diff --git a/images/CoordinateSystems.odg b/images/CoordinateSystems.odg new file mode 100644 index 0000000..68549ed Binary files /dev/null and b/images/CoordinateSystems.odg differ diff --git a/images/CoordinateSystems.svg b/images/CoordinateSystems.svg new file mode 100644 index 0000000..96fb935 --- /dev/null +++ b/images/CoordinateSystems.svg @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + α + + + + + + + + + + + + + + zlift + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + z + + + + + + x + + + + + + zsupport + + + + + + + + + + + + + + + + Center of rotation + + + + + + + + \ No newline at end of file diff --git a/images/PhysicalSetup.odg b/images/PhysicalSetup.odg deleted file mode 100644 index 88fd84c..0000000 Binary files a/images/PhysicalSetup.odg and /dev/null differ diff --git a/images/PhysicalSetup.svg b/images/PhysicalSetup.svg deleted file mode 100644 index 525812b..0000000 --- a/images/PhysicalSetup.svg +++ /dev/null @@ -1,569 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z1 - - - - - - - - - - - - - - - - - - - - - - - - - - z2 - - - - - - - - - - - - - - - - - - - - - - - - - - z3 - - - - - - - - - - - - - - - - - - - - - - - - - - z4 - - - - - - - - - - - - - - - - - - - - - - - - - - z5 - - - - - - - - - - - - - - - - - - - - - - - - - - z6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/detectorTowerController.cpp b/src/detectorTowerController.cpp index c2a3871..fc96c61 100644 --- a/src/detectorTowerController.cpp +++ b/src/detectorTowerController.cpp @@ -152,7 +152,12 @@ asynStatus detectorTowerController::writeInt32(asynUser *pasynUser, /* Due to a bug which is currently not understood, the reset has to be handled - here rather than in sinqController. + 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);