Current draft for the detector axis tower driver

This commit is contained in:
2025-03-04 16:38:00 +01:00
parent 8b185c6260
commit 747d08c52a
8 changed files with 718 additions and 308 deletions

View File

@ -1,70 +0,0 @@
# Reset any errors of the virtual axis.
# This record is coupled to the parameter library via reset_ -> RESET.
record(longout, "$(INSTR)$(M):Reset") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) RESET")
field(PINI, "NO")
}
# Read the position state of the axis:
# 0 = not ready
# 1 = ready (in working position)
# 2 = ready (in changer position)
record(longout, "$(INSTR)$(M):PositionState")
{
field(DTYP, "asynInt32")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) POSITION_STATE")
field(SCAN, "I/O Intr")
}
# Set the target position for the offset of the lift (motor COZ)
# This record is coupled to the parameter library via liftOffset_ -> LIFT_OFFSET.
record(ao, "$(INSTR)$(M):LiftOffset") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) LIFT_OFFSET")
field(PINI, "NO")
}
# Set the target position for the offset of the lift (motor COZ)
# This record is coupled to the parameter library via liftOffset_ -> LIFT_OFFSET.
record(ao, "$(INSTR)$(M):LiftOffset") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) LIFT_OFFSET")
field(PINI, "NO")
}
# Read the lower and upper limits for the lift offset
record(ai, "$(INSTR)$(M):LiftOffsetLowLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) LIFT_OFFSET_LOW_LIMIT")
field(SCAN, "I/O Intr")
}
record(ai, "$(INSTR)$(M):LiftOffsetHighLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) LIFT_OFFSET_HIGH_LIMIT")
field(SCAN, "I/O Intr")
}
# Set the target position for the offset of the detector tilt (motor COX)
# This record is coupled to the parameter library via tiltOffset_ -> TILT_OFFSET.
record(ao, "$(INSTR)$(M):TiltOffset") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) TILT_OFFSET")
field(PINI, "NO")
}
# Read the lower and upper limits for the detector tilt offset
record(ai, "$(INSTR)$(M):TiltOffsetLowLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) TILT_OFFSET_LOW_LIMIT")
field(SCAN, "I/O Intr")
}
record(ai, "$(INSTR)$(M):TiltOffsetHighLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) TILT_OFFSET_HIGH_LIMIT")
field(SCAN, "I/O Intr")
}

134
db/detectorTower.db Normal file
View File

@ -0,0 +1,134 @@
# Reset any errors of the virtual axis.
# This record is coupled to the parameter library via resetError_ -> RESET_ERROR.
record(longout, "$(INSTR)$(M):ResetError") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) RESET_ERROR")
field(PINI, "NO")
}
# Start the movement into the position defined by BeamAngle, LiftOffset and TiltOffset
record(longout, "$(INSTR)$(M):MoveToWorkingPosition") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) MOVE_TO_WORKING_POSITION")
field(PINI, "NO")
}
# Read the position state of the axis:
# 0 = not ready
# 1 = ready (in working position)
# 2 = Moving from working to changer position or in changer position
# 2 = Moving from changer to working position
record(longout, "$(INSTR)$(M):PositionState")
{
field(DTYP, "asynInt32")
field(OUT, "@asyn($(CONTROLLER),$(AXIS)) POSITION_STATE")
field(SCAN, "I/O Intr")
}
# Start the movement into the position defined by BeamAngle, LiftOffset and TiltOffset
record(longout, "$(INSTR)$(M):Start") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) START")
field(PINI, "NO")
}
# Set the target angle for the beam
record(ao, "$(INSTR)$(M):BeamAngle") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) BEAM_ANGLE")
field(PINI, "NO")
}
# Copy the high and low limits from the motor record
record(ao, "$(INSTR)$(M):DHLM2BeamAngle_RBV") {
field(DOL, "$(INSTR)$(M).DHLM CP")
field(OUT, "$(INSTR)$(M):BeamAngle.DRVH")
field(OMSL, "closed_loop")
}
record(ao, "$(INSTR)$(M):DLLM2BeamAngle_RBV") {
field(DOL, "$(INSTR)$(M).DLLM CP")
field(OUT, "$(INSTR)$(M):BeamAngle.DRVL")
field(OMSL, "closed_loop")
}
# Set the target position for the offset of the lift (motor COZ)
# This record is coupled to the parameter library via liftOffset_ -> LIFT_OFFSET.
record(ao, "$(INSTR)$(M):LiftOffset") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) LIFT_OFFSET")
field(PINI, "NO")
field(FLNK, "$(INSTR)$(M):LiftOffsetFwd")
}
# Like $(INSTR)$(M):LiftOffset, but starts a movement immediately, if able
record(ao, "$(INSTR)$(M):LiftOffsetMove") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) LIFT_OFFSET_MOVE")
field(PINI, "NO")
}
# Read the lower and upper limits for the lift offset
record(ai, "$(INSTR)$(M):LiftOffsetLowLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) LIFT_OFFSET_LOW_LIMIT")
field(SCAN, "I/O Intr")
}
record(ao, "$(INSTR)$(M):LiftOffsetLowLimit2Field") {
field(DOL, "$(INSTR)$(M):LiftOffsetLowLimitRBV CP")
field(OUT, "$(INSTR)$(M):LiftOffset.DRVL")
field(OMSL, "closed_loop")
}
record(ai, "$(INSTR)$(M):LiftOffsetHighLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) LIFT_OFFSET_HIGH_LIMIT")
field(SCAN, "I/O Intr")
}
record(ao, "$(INSTR)$(M):LiftOffsetHighLimit2Field") {
field(DOL, "$(INSTR)$(M):LiftOffsetHighLimitRBV CP")
field(OUT, "$(INSTR)$(M):LiftOffset.DRVH")
field(OMSL, "closed_loop")
}
# Set the target position for the offset of the detector tilt (motor COX)
# This record is coupled to the parameter library via tiltOffset_ -> TILT_OFFSET.
record(ao, "$(INSTR)$(M):TiltOffset") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) TILT_OFFSET")
field(PINI, "NO")
}
# Like $(INSTR)$(M):TiltOffset, but starts a movement immediately, if able
record(ao, "$(INSTR)$(M):TiltOffsetMove") {
field(DTYP, "asynFloat64")
field(OUT, "@asyn($(CONTROLLER),$(AXIS),1) TILT_OFFSET")
field(PINI, "NO")
field(FLNK, "$(INSTR)$(M):Start")
}
# Read the lower and upper limits for the detector tilt offset
record(ai, "$(INSTR)$(M):TiltOffsetLowLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) TILT_OFFSET_LOW_LIMIT")
field(SCAN, "I/O Intr")
}
record(ao, "$(INSTR)$(M):TiltOffsetLowLimit2Field") {
field(DOL, "$(INSTR)$(M):TiltOffsetLowLimitRBV CP")
field(OUT, "$(INSTR)$(M):TiltOffset.DRVL")
field(OMSL, "closed_loop")
}
record(ai, "$(INSTR)$(M):TiltOffsetHighLimitRBV")
{
field(DTYP, "asynFloat64")
field(INP, "@asyn($(CONTROLLER),$(AXIS)) TILT_OFFSET_HIGH_LIMIT")
field(SCAN, "I/O Intr")
}
record(ao, "$(INSTR)$(M):TiltOffsetHighLimit2Field") {
field(DOL, "$(INSTR)$(M):TiltOffsetHighLimitRBV CP")
field(OUT, "$(INSTR)$(M):TiltOffset.DRVH")
field(OMSL, "closed_loop")
}