block motors before triggering SPS and make sure unblocked, before returning to okay status
Test And Build / Build (push) Successful in 3s
Test And Build / Build (push) Successful in 3s
This commit is contained in:
+230
-222
@@ -23,31 +23,56 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP")
|
||||
# Reset status
|
||||
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):RESET")
|
||||
{
|
||||
field(DESC, "Try to reset status")
|
||||
# Set the beamstop setpoint to same as readback
|
||||
# in case they are out of sync, i.e. retry error.
|
||||
field(DOL0, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(DOL1, 0)
|
||||
field(LNK1, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP")
|
||||
field(SELM, "All")
|
||||
field(DESC, "Try to reset status")
|
||||
# Set the beamstop setpoint to same as readback
|
||||
# in case they are out of sync, i.e. retry error.
|
||||
field(DOL0, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(DOL1, 0)
|
||||
field(LNK1, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP")
|
||||
field(SELM, "All")
|
||||
}
|
||||
|
||||
record(bi, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
{
|
||||
field(DESC, "Internal Busy State")
|
||||
field(VAL, 0)
|
||||
field(ZNAM, "Ready")
|
||||
field(ONAM, "Busy")
|
||||
field(DESC, "Internal Busy State")
|
||||
field(VAL, 0)
|
||||
field(ZNAM, "Ready")
|
||||
field(ONAM, "Busy")
|
||||
}
|
||||
|
||||
record(longout, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY")
|
||||
# Make sure to disable motors before actually triggering SPS so there can be no
|
||||
# chance, that they switch to a busy state in Nicos before being disabled
|
||||
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SET-BUSY")
|
||||
{
|
||||
field(DESC, "Trigger Internal Busy Status")
|
||||
# This determines the number of max retry ticks
|
||||
field(VAL, 5)
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-OUT")
|
||||
field(DESC, "Trigger Internal Busy Status")
|
||||
field(SELM, "All")
|
||||
# This determines the number of max retry ticks
|
||||
field(DOL0, 5)
|
||||
field(LNK0, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
field(DOL1, "$(INSTR)$(SPS_REGISTER_NAME):BSX-DISV PP")
|
||||
field(LNK1, "$(BS_MCU):bsx.DISV PP")
|
||||
field(DOL2, "$(INSTR)$(SPS_REGISTER_NAME):BSY-DISV PP")
|
||||
field(LNK2, "$(BS_MCU):bsy.DISV PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-OUT")
|
||||
}
|
||||
|
||||
# Can be used to disable BSX and BSY during
|
||||
# a beamstop change
|
||||
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):BSX-DISV")
|
||||
{
|
||||
field(INPA, "$(BS_MCU):bsx.DISA NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY NPP")
|
||||
field(CALC, "(B=0)&&(C=0)?!A:A")
|
||||
}
|
||||
|
||||
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):BSY-DISV")
|
||||
{
|
||||
field(INPA, "$(BS_MCU):bsy.DISA NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY NPP")
|
||||
field(CALC, "(B=0)&&(C=0)?!A:A")
|
||||
}
|
||||
|
||||
record(longout, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-OUT")
|
||||
@@ -84,25 +109,19 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):TRIGGER")
|
||||
|
||||
# This is a hack, the SPS sometimes doesn't registers the beamstop
|
||||
# execute command.
|
||||
#
|
||||
record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):RETRY")
|
||||
{
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
# Can't trust the SPS
|
||||
field(INPD, "$(BS_MCU):BS:TARGET_RANGE NPP")
|
||||
field(CALC, "A#B&&C#0&&D=0?1:0")
|
||||
# field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
# field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):MOVES")
|
||||
# field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):STATUS")
|
||||
# field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):IN-POSITION NPP")
|
||||
# field(CALC, "A#B&&C#0&&D=0&&F=1&&E=0?1:0")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-OUT.PROC PP")
|
||||
field(SCAN, "2 second")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
# Can't trust the SPS, so instead monitor the MCU state
|
||||
field(INPD, "$(BS_MCU):BS:TARGET_RANGE NPP")
|
||||
field(CALC, "A#B&&C#0&&D=0?1:0")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP-OUT.PROC PP")
|
||||
field(SCAN, "2 second")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING")
|
||||
}
|
||||
|
||||
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING")
|
||||
@@ -123,13 +142,13 @@ record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MCU-CHANGING")
|
||||
|
||||
record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):DECREASE-BUSY-TICK")
|
||||
{
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BUSY NPP")
|
||||
field(CALC, "A")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "A-1")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):DELAY-RETRY-ERROR")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BUSY NPP")
|
||||
field(CALC, "A")
|
||||
field(OOPT, "When Non-zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "A-1")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):DELAY-RETRY-ERROR")
|
||||
}
|
||||
|
||||
# Delay check for retry error, not this happens after each retry.
|
||||
@@ -145,96 +164,86 @@ record(seq, "$(INSTR)$(SPS_REGISTER_NAME):DELAY-RETRY-ERROR")
|
||||
|
||||
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR")
|
||||
{
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING NPP")
|
||||
field(CALC, "A#B&&C=0&&D=0?1:0")
|
||||
#field(OOPT, "When Non-zero")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING NPP")
|
||||
field(CALC, "A#B&&C=0&&D=0?1:0")
|
||||
#field(OOPT, "When Non-zero")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS")
|
||||
}
|
||||
|
||||
record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS")
|
||||
{
|
||||
field(DESC, "Maps Status Variables to singular status")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):SERVICE-MODE NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING NPP")
|
||||
field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):ERROR NPP")
|
||||
field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):EXECUTE-POSSIBLE NPP")
|
||||
field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
|
||||
field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
|
||||
field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(INPK, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR NPP")
|
||||
field(CALC, "(F=0||G=0||D=1||K=1)?3:(A=1)?2:(B=1||H#I)?1:0")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):BLOCK-BSX")
|
||||
field(DESC, "Maps Status Variables to singular status")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):SERVICE-MODE NPP")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):SPS-CHANGING NPP")
|
||||
field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):ERROR NPP")
|
||||
field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):EXECUTE-POSSIBLE NPP")
|
||||
field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
|
||||
field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
|
||||
field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP NPP")
|
||||
field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):BEAMSTOP_RBV NPP")
|
||||
field(INPK, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR NPP")
|
||||
field(CALC, "(F=0||G=0||D=1||K=1)?3:(A=1)?2:(B=1||H#I)?1:0")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):UNBLOCK-MOTORS")
|
||||
}
|
||||
|
||||
record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):BLOCK-BSX")
|
||||
# Make sure, that motors are re-enabled before the status
|
||||
# of the changer returns to "Okay".
|
||||
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):UNBLOCK-MOTORS")
|
||||
{
|
||||
field(DESC, "Disable BSX during change")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):STATUS NPP")
|
||||
field(INPB, "$(BS_MCU):bsx.DISA NPP")
|
||||
field(CALC, "A=0?!B:B")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BS_MCU):bsx.DISV PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):BLOCK-BSY")
|
||||
field(DESC, "Trigger Internal Busy Status")
|
||||
field(SELM, "All")
|
||||
field(DOL1, "$(INSTR)$(SPS_REGISTER_NAME):BSX-DISV PP")
|
||||
field(LNK1, "$(BS_MCU):bsx.DISV PP")
|
||||
field(DOL2, "$(INSTR)$(SPS_REGISTER_NAME):BSY-DISV PP")
|
||||
field(LNK2, "$(BS_MCU):bsy.DISV PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP")
|
||||
}
|
||||
|
||||
record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):BLOCK-BSY")
|
||||
{
|
||||
field(DESC, "Disable BSY during change")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):STATUS NPP")
|
||||
field(INPB, "$(BS_MCU):bsy.DISA NPP")
|
||||
field(CALC, "A=0?!B:B")
|
||||
field(DOPT, "Use CALC")
|
||||
field(OUT, "$(BS_MCU):bsy.DISV PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP")
|
||||
}
|
||||
|
||||
|
||||
record(mbbi, "$(INSTR)$(SPS_REGISTER_NAME):STATUS")
|
||||
{
|
||||
field(DESC, "Status of Shutter")
|
||||
field(INP, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP")
|
||||
field(ZRVL, "0")
|
||||
field(ZRST, "Okay")
|
||||
field(ONVL, "1")
|
||||
field(ONST, "Busy")
|
||||
field(TWVL, "2")
|
||||
field(TWST, "Warning")
|
||||
field(THVL, "3")
|
||||
field(THST, "Error")
|
||||
field(FRST, "4")
|
||||
field(FRST, "Unknown")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
field(DESC, "Status of Beamstop Changer")
|
||||
field(INP, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS NPP")
|
||||
field(ZRVL, "0")
|
||||
field(ZRST, "Okay")
|
||||
field(ONVL, "1")
|
||||
field(ONST, "Busy")
|
||||
field(TWVL, "2")
|
||||
field(TWST, "Warning")
|
||||
field(THVL, "3")
|
||||
field(THST, "Error")
|
||||
field(FRST, "4")
|
||||
field(FRST, "Unknown")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
}
|
||||
|
||||
record(stringout, "$(INSTR)$(SPS_REGISTER_NAME):Retry-Error-Msg")
|
||||
{
|
||||
field(DESC, "Beamstop max retries failed message")
|
||||
field(VAL, "Failed trying to change beamstop")
|
||||
field(DESC, "Beamstop max retries failed message")
|
||||
field(VAL, "Failed trying to change beamstop")
|
||||
}
|
||||
|
||||
record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
{
|
||||
field(DESC, "Status Message")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR NPP")
|
||||
field(INAA, "$(INSTR)$(SPS_REGISTER_NAME):Retry-Error-Msg NPP")
|
||||
field(INBB, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-REASON-Msg NPP")
|
||||
field(CALC, 'A=1?AA:BB')
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY")
|
||||
field(DESC, "Status Message")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):RETRY-ERROR NPP")
|
||||
field(INAA, "$(INSTR)$(SPS_REGISTER_NAME):Retry-Error-Msg NPP")
|
||||
field(INBB, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-REASON-Msg NPP")
|
||||
field(CALC, 'A=1?AA:BB')
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY")
|
||||
}
|
||||
|
||||
record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY")
|
||||
{
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):MCU-CHANGING NPP")
|
||||
field(CALC, "A?B:0")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "0")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
field(INPA, "$(INSTR)$(SPS_REGISTER_NAME):BUSY")
|
||||
field(INPB, "$(INSTR)$(SPS_REGISTER_NAME):MCU-CHANGING NPP")
|
||||
field(CALC, "A?B:0")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "0")
|
||||
field(OUT, "$(INSTR)$(SPS_REGISTER_NAME):BUSY PP")
|
||||
}
|
||||
|
||||
################################################################################
|
||||
@@ -242,144 +251,143 @@ record(calcout, "$(INSTR)$(SPS_REGISTER_NAME):SET-READY")
|
||||
################################################################################
|
||||
|
||||
record(longin, "$(BS_MCU):BS:X_0") {
|
||||
field(DESC, "X-Position of Beamstop 0")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q453) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "X-Position of Beamstop 0")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q453) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:X_1") {
|
||||
field(DESC, "X-Position of Beamstop 1")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q454) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "X-Position of Beamstop 1")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q454) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:X_2") {
|
||||
field(DESC, "X-Position of Beamstop 2")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q455) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "X-Position of Beamstop 2")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q455) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:X_3") {
|
||||
field(DESC, "X-Position of Beamstop 3")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q456) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "X-Position of Beamstop 3")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q456) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:Y_GET") {
|
||||
field(DESC, "Y Position for picking up Beamstop")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q553) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "Y Position for picking up Beamstop")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q553) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:Y_PUT") {
|
||||
field(DESC, "Y Position under beamstops")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q554) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
field(DESC, "Y Position under beamstops")
|
||||
field(DTYP, "stream")
|
||||
field(INP , "@$(PROTO) pmac_get(Q554) $(BS_MCU_ASYN_PORT) 0")
|
||||
field(PINI, "YES")
|
||||
}
|
||||
|
||||
record(calcout, "$(BS_MCU):BS:ST") {
|
||||
field(DESC, "Monitors beamstop changing")
|
||||
field(DTYP, "stream")
|
||||
field(OUT , "@$(PROTO) st() $(BS_MCU_ASYN_PORT) 0")
|
||||
field(CALC, "0")
|
||||
field(SCAN, ".1 second")
|
||||
field(FLNK, "$(BS_MCU):BS:ST_FANOUT.PROC")
|
||||
field(DESC, "Monitors beamstop changing")
|
||||
field(DTYP, "stream")
|
||||
field(OUT , "@$(PROTO) st() $(BS_MCU_ASYN_PORT) 0")
|
||||
field(CALC, "0")
|
||||
field(SCAN, ".1 second")
|
||||
field(FLNK, "$(BS_MCU):BS:ST_FANOUT1")
|
||||
}
|
||||
|
||||
record(fanout, "$(BS_MCU):BS:ST_FANOUT1") {
|
||||
field(LNK1, "$(BS_MCU):BS:TARGET")
|
||||
field(LNK2, "$(BS_MCU):BS:TARGET_X")
|
||||
field(LNK3, "$(BS_MCU):BS:TARGET_Y")
|
||||
field(LNK5, "$(BS_MCU):BS:TARGET_BS_RAW")
|
||||
field(LNK6, "$(BS_MCU):BS:TARGET_BS")
|
||||
field(LNK7, "$(BS_MCU):BS:ST_FANOUT2")
|
||||
field(SCAN, ".1 second")
|
||||
field(LNK1, "$(BS_MCU):BS:TARGET")
|
||||
field(LNK2, "$(BS_MCU):BS:TARGET_X")
|
||||
field(LNK3, "$(BS_MCU):BS:TARGET_Y")
|
||||
field(LNK5, "$(BS_MCU):BS:TARGET_BS_RAW")
|
||||
field(LNK6, "$(BS_MCU):BS:TARGET_BS")
|
||||
field(FLNK, "$(BS_MCU):BS:ST_FANOUT2")
|
||||
}
|
||||
|
||||
record(fanout, "$(BS_MCU):BS:ST_FANOUT2") {
|
||||
field(LNK1, "$(BS_MCU):BS:TARGET_RANGE_RAW")
|
||||
field(LNK2, "$(BS_MCU):BS:TARGET_RANGE")
|
||||
field(LNK3, "$(BS_MCU):BS:LOADED_RAW")
|
||||
field(LNK4, "$(BS_MCU):BS:INVALID")
|
||||
field(LNK1, "$(BS_MCU):BS:TARGET_RANGE_RAW")
|
||||
field(LNK2, "$(BS_MCU):BS:TARGET_RANGE")
|
||||
field(LNK3, "$(BS_MCU):BS:LOADED_RAW")
|
||||
field(LNK4, "$(BS_MCU):BS:INVALID")
|
||||
}
|
||||
|
||||
record(longin, "$(BS_MCU):BS:TARGET") {
|
||||
field(DESC, "Beamstop position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.A NPP MS")
|
||||
field(DESC, "Beamstop position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.A NPP MS")
|
||||
}
|
||||
|
||||
record(ai, "$(BS_MCU):BS:TARGET_X") {
|
||||
field(DESC, "X Position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.B NPP MS")
|
||||
record(ai, "$(BS_MCU):BS:TARGET_X") {
|
||||
field(DESC, "X Position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.B NPP MS")
|
||||
}
|
||||
|
||||
record(ai, "$(BS_MCU):BS:TARGET_Y") {
|
||||
field(DESC, "Y Position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.C NPP MS")
|
||||
record(ai, "$(BS_MCU):BS:TARGET_Y") {
|
||||
field(DESC, "Y Position being driven to")
|
||||
field(INP, "$(BS_MCU):BS:ST.C NPP MS")
|
||||
}
|
||||
|
||||
record(calc, "$(BS_MCU):BS:TARGET_BS_RAW") {
|
||||
field(DESC, "Beamstop == TARGET_X")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_X NPP MS")
|
||||
# Static Inputs
|
||||
field(INPI, "$(BS_MCU):BS:X_0 NPP MS")
|
||||
field(INPJ, "$(BS_MCU):BS:X_1 NPP MS")
|
||||
field(INPK, "$(BS_MCU):BS:X_2 NPP MS")
|
||||
field(INPL, "$(BS_MCU):BS:X_3 NPP MS")
|
||||
# Maybe having a tolerance isn't really necessary?
|
||||
# they get set exactly to the value in the MCU
|
||||
field(CALC, "ABS(A-I)<1?0:ABS(A-J)<1?1:ABS(A-K)<1?2:ABS(A-L)<1?3:4")
|
||||
# field(CALC, "A=I?0:A=J?1:A=K?2:A=L?3:4")
|
||||
field(DESC, "Beamstop == TARGET_X")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_X NPP MS")
|
||||
# Static Inputs
|
||||
field(INPI, "$(BS_MCU):BS:X_0 NPP MS")
|
||||
field(INPJ, "$(BS_MCU):BS:X_1 NPP MS")
|
||||
field(INPK, "$(BS_MCU):BS:X_2 NPP MS")
|
||||
field(INPL, "$(BS_MCU):BS:X_3 NPP MS")
|
||||
# Maybe having a tolerance isn't really necessary?
|
||||
# they get set exactly to the value in the MCU
|
||||
field(CALC, "ABS(A-I)<1?0:ABS(A-J)<1?1:ABS(A-K)<1?2:ABS(A-L)<1?3:4")
|
||||
# field(CALC, "A=I?0:A=J?1:A=K?2:A=L?3:4")
|
||||
}
|
||||
|
||||
record(mbbi, "$(BS_MCU):BS:TARGET_BS") {
|
||||
field(DESC, "Target Beamstop Holder")
|
||||
field(DTYP, "Soft Channel")
|
||||
field(INP, "$(BS_MCU):BS:TARGET_BS_RAW NPP MS")
|
||||
field(ZRST, "No Beamstop")
|
||||
field(ONST, "Beamstop 1")
|
||||
field(TWST, "Beamstop 2")
|
||||
field(THST, "Beamstop 3")
|
||||
field(FRST, "User Mode")
|
||||
field(DESC, "Target Beamstop Holder")
|
||||
field(DTYP, "Soft Channel")
|
||||
field(INP, "$(BS_MCU):BS:TARGET_BS_RAW NPP MS")
|
||||
field(ZRST, "No Beamstop")
|
||||
field(ONST, "Beamstop 1")
|
||||
field(TWST, "Beamstop 2")
|
||||
field(THST, "Beamstop 3")
|
||||
field(FRST, "User Mode")
|
||||
}
|
||||
|
||||
record(calc, "$(BS_MCU):BS:TARGET_RANGE_RAW") {
|
||||
field(DESC, "Beamstop target y-range")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_Y NPP MS")
|
||||
# Static Inputs
|
||||
field(INPK, "$(BS_MCU):BS:Y_GET NPP MS")
|
||||
field(INPL, "$(BS_MCU):BS:Y_PUT NPP MS")
|
||||
# Maybe having a tolerance isn't really necessary?
|
||||
# they get set exactly to the value in the MCU
|
||||
field(CALC, "ABS(A-K)<1?1:ABS(A-L)<1?2:0")
|
||||
field(DESC, "Beamstop target y-range")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_Y NPP MS")
|
||||
# Static Inputs
|
||||
field(INPK, "$(BS_MCU):BS:Y_GET NPP MS")
|
||||
field(INPL, "$(BS_MCU):BS:Y_PUT NPP MS")
|
||||
# Maybe having a tolerance isn't really necessary?
|
||||
# they get set exactly to the value in the MCU
|
||||
field(CALC, "ABS(A-K)<1?1:ABS(A-L)<1?2:0")
|
||||
}
|
||||
|
||||
record(mbbi, "$(BS_MCU):BS:TARGET_RANGE") {
|
||||
field(DESC, "Beamstop target y-range")
|
||||
field(DTYP, "Soft Channel")
|
||||
field(INP, "$(BS_MCU):BS:TARGET_RANGE_RAW NPP MS")
|
||||
field(ZRST, "User Mode")
|
||||
field(ONST, "Level with Beamstops")
|
||||
field(TWST, "Under Beamstops")
|
||||
field(DESC, "Beamstop target y-range")
|
||||
field(DTYP, "Soft Channel")
|
||||
field(INP, "$(BS_MCU):BS:TARGET_RANGE_RAW NPP MS")
|
||||
field(ZRST, "User Mode")
|
||||
field(ONST, "Level with Beamstops")
|
||||
field(TWST, "Under Beamstops")
|
||||
}
|
||||
|
||||
record(calcout, "$(BS_MCU):BS:LOADED_RAW")
|
||||
{
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_BS NPP MS")
|
||||
field(INPB, "$(BS_MCU):BS:TARGET_RANGE NPP MS")
|
||||
field(CALC, "B=2")
|
||||
field(OOPT, "Transition To Zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "A")
|
||||
field(OUT, "$(BS_MCU):BS:LOADED PP")
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_BS NPP MS")
|
||||
field(INPB, "$(BS_MCU):BS:TARGET_RANGE NPP MS")
|
||||
field(CALC, "B=2")
|
||||
field(OOPT, "Transition To Zero")
|
||||
field(DOPT, "Use OCAL")
|
||||
field(OCAL, "A")
|
||||
field(OUT, "$(BS_MCU):BS:LOADED PP")
|
||||
}
|
||||
|
||||
record(longout, "$(INSTR)$(SPS_REGISTER_NAME):LOADED-INIT")
|
||||
@@ -393,34 +401,34 @@ record(longout, "$(INSTR)$(SPS_REGISTER_NAME):LOADED-INIT")
|
||||
|
||||
record(mbbi, "$(BS_MCU):BS:LOADED")
|
||||
{
|
||||
field(DESC, "Most recently lifted beamstop")
|
||||
field(ZRST, "No Beamstop")
|
||||
field(ONST, "Beamstop 1")
|
||||
field(TWST, "Beamstop 2")
|
||||
field(THST, "Beamstop 3")
|
||||
field(DESC, "Most recently lifted beamstop")
|
||||
field(ZRST, "No Beamstop")
|
||||
field(ONST, "Beamstop 1")
|
||||
field(TWST, "Beamstop 2")
|
||||
field(THST, "Beamstop 3")
|
||||
}
|
||||
|
||||
record(calcout, "$(BS_MCU):BS:INVALID") {
|
||||
field(DESC, "Invalid Move STOP MOTORS!")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_BS NPP MS")
|
||||
field(INPB, "$(BS_MCU):BS:TARGET_RANGE NPP MS")
|
||||
field(INPC, "$(BS_MCU):BS:LOADED NPP MS")
|
||||
field(CALC, "(A<4) && (B=1) && (A#C)")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(OUT, "$(BS_MCU):BS:IMMEDIATE_STOP.PROC PP")
|
||||
field(DESC, "Invalid Move STOP MOTORS!")
|
||||
# Dynamic Inputs
|
||||
field(INPA, "$(BS_MCU):BS:TARGET_BS NPP MS")
|
||||
field(INPB, "$(BS_MCU):BS:TARGET_RANGE NPP MS")
|
||||
field(INPC, "$(BS_MCU):BS:LOADED NPP MS")
|
||||
field(CALC, "(A<4) && (B=1) && (A#C)")
|
||||
field(OOPT, "Transition To Non-zero")
|
||||
field(OUT, "$(BS_MCU):BS:IMMEDIATE_STOP.PROC PP")
|
||||
}
|
||||
|
||||
record(longout, "$(BS_MCU):BS:IMMEDIATE_STOP") {
|
||||
field(DESC, "Invalid Move STOP MOTORS!")
|
||||
# For Test
|
||||
# field(OUT, "TEST_RECORD PP")
|
||||
# field(OMSL, "closed_loop")
|
||||
# field(DOL, "1")
|
||||
# TODO not currently activated
|
||||
# FOR REAL
|
||||
# field(DTYP, "stream")
|
||||
# field(OUT , "@$(PROTO) stop() $(BS_MCU_ASYN_PORT) 0")
|
||||
field(DESC, "Invalid Move STOP MOTORS!")
|
||||
# For Test
|
||||
# field(OUT, "TEST_RECORD PP")
|
||||
# field(OMSL, "closed_loop")
|
||||
# field(DOL, "1")
|
||||
# TODO not currently activated
|
||||
# FOR REAL
|
||||
# field(DTYP, "stream")
|
||||
# field(OUT , "@$(PROTO) stop() $(BS_MCU_ASYN_PORT) 0")
|
||||
}
|
||||
|
||||
# record(longin, "TEST_RECORD") {
|
||||
|
||||
Reference in New Issue
Block a user