# 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") }