Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
6eb2b7197b | |||
f67ade602e | |||
ef181d85be | |||
02348e174f | |||
d1597e1d65 | |||
36de617a1f | |||
f93303216f | |||
a5ae0f2e0c |
@ -15,6 +15,7 @@ well as providing access to many status bits and messages.
|
||||
```
|
||||
epicsEnvSet("INSTR", "SQ:INSTRUMENT:") # can also be set in runScript call
|
||||
|
||||
require sinqSPS
|
||||
runScript("$(sinqSPS_DIR)shutter.cmd","SPS_IP=172.28.101.26,FETCH_DB=210")
|
||||
```
|
||||
|
||||
|
@ -6,13 +6,23 @@ record(bo, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER")
|
||||
field(VAL, 0)
|
||||
field(ZNAM, "Closed")
|
||||
field(ONAM, "Open")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):CLEAR-CONTROL PP")
|
||||
}
|
||||
|
||||
# The Exposed SPS Interface has an open register and a close register. You need
|
||||
# to write 1 to the corresponding register to perform said action. This, in
|
||||
# combination with "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER", maps the binay 0/1
|
||||
# to writing a 1 to the required register.
|
||||
# to write 1 to the corresponding register to perform said action and make sure
|
||||
# that the other bit is set back to 0. These two records, in combination with
|
||||
# "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER", first clear both control bits and
|
||||
# then maps the binay 0/1 to writing a 1 to the required register.
|
||||
record(dfanout, "$(INSTR)$(SPS_REGISTER_NAME):CLEAR-CONTROL")
|
||||
{
|
||||
field(DOL, 0)
|
||||
field(OUTA, "$(INSTR)$(SPS_REGISTER_NAME):CLOSE-SHUTTER PP")
|
||||
field(OUTB, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-SHUTTER PP")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL PP")
|
||||
field(SELM, "All")
|
||||
}
|
||||
|
||||
record(seq, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-CONTROL")
|
||||
{
|
||||
field(SELM, "Specified")
|
||||
@ -31,7 +41,10 @@ record(calc, "$(INSTR)$(SPS_REGISTER_NAME):MAP-STATUS")
|
||||
field(INPC, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-OKAY NPP")
|
||||
field(INPD, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK NPP")
|
||||
field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP")
|
||||
field(CALC, "(E=0||B=0)?2:(A=0||D=0)?1:C=0?2:0")
|
||||
field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):MOVES NPP")
|
||||
field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
|
||||
field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
|
||||
field(CALC, "(G=0||H=0||E=0||B=0)?3:(A=0||D=0)?2:F=1?1:C=0?3:0")
|
||||
field(SCAN, ".1 second")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS PP")
|
||||
}
|
||||
@ -43,14 +56,28 @@ record(mbbi, "$(INSTR)$(SPS_REGISTER_NAME):STATUS")
|
||||
field(ZRVL, "0")
|
||||
field(ZRST, "Okay")
|
||||
field(ONVL, "1")
|
||||
field(ONST, "Warning")
|
||||
field(ONST, "Busy")
|
||||
field(TWVL, "2")
|
||||
field(TWST, "Error")
|
||||
field(TWST, "Warning")
|
||||
field(THVL, "3")
|
||||
field(THST, "Unknown")
|
||||
field(THST, "Error")
|
||||
field(FRST, "4")
|
||||
field(FRST, "Unknown")
|
||||
field(FLNK, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg PP")
|
||||
}
|
||||
|
||||
record(stringout, "$(INSTR)$(SPS_REGISTER_NAME):MOTION-Msg")
|
||||
{
|
||||
field(DESC, "Shutter opening/closing message")
|
||||
field(VAL, "Shutter in motion")
|
||||
}
|
||||
|
||||
record(stringout, "$(INSTR)$(SPS_REGISTER_NAME):Connection-Msg")
|
||||
{
|
||||
field(DESC, "Shutter connection disrupted message")
|
||||
field(VAL, "Connection to SPS Disrupted")
|
||||
}
|
||||
|
||||
record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
{
|
||||
field(DESC, "Status Message")
|
||||
@ -60,6 +87,9 @@ record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
field(INPE, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-OKAY NPP")
|
||||
field(INPF, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK NPP")
|
||||
field(INPG, "$(INSTR)$(SPS_REGISTER_NAME):EMERGENCY-STOP-OFF NPP")
|
||||
field(INPH, "$(INSTR)$(SPS_REGISTER_NAME):MOVES NPP")
|
||||
field(INPI, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusFetch NPP")
|
||||
field(INPJ, "$(INSTR)$(SPS_REGISTER_NAME):ConnStatusWrite NPP")
|
||||
field(INAA, "$(INSTR)$(SPS_REGISTER_NAME):OPEN-Msg NPP")
|
||||
field(INBB, "$(INSTR)$(SPS_REGISTER_NAME):REMOTE-Msg NPP")
|
||||
field(INCC, "$(INSTR)$(SPS_REGISTER_NAME):SHUTTER-READY-Msg NPP")
|
||||
@ -67,5 +97,7 @@ record(scalcout, "$(INSTR)$(SPS_REGISTER_NAME):STATUS-Msg")
|
||||
field(INEE, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-Msg NPP")
|
||||
field(INFF, "$(INSTR)$(SPS_REGISTER_NAME):BLOCKED-REASON-Msg NPP")
|
||||
field(INGG, "$(INSTR)$(SPS_REGISTER_NAME):PSYS-OK-Msg NPP")
|
||||
field(CALC, 'G=0?DD:D=0?(EE+": "+FF):F=0?GG:C=0?CC:E=0?BB:AA')
|
||||
field(INHH, "$(INSTR)$(SPS_REGISTER_NAME):MOTION-Msg NPP")
|
||||
field(INII, "$(INSTR)$(SPS_REGISTER_NAME):Connection-Msg NPP")
|
||||
field(CALC, '(I=0||J=0)?II:H=1?HH:G=0?DD:D=0?(EE+": "+FF):F=0?GG:C=0?CC:E=0?BB:AA')
|
||||
}
|
||||
|
@ -5,4 +5,5 @@ record(bo, "$(INSTR)$(SPS_REGISTER_NAME):$(BIT_NAME)")
|
||||
field(OUT, "@$(SPS_REGISTER_NAME)/$(OFFSET) T=BYTE B=$(BIT)")
|
||||
field(ZNAM, "0")
|
||||
field(ONAM, "1")
|
||||
field(HIGH, "$(HIGH=0)")
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ require sinqS7plcFW
|
||||
# )
|
||||
|
||||
epicsEnvSet("SPS_REGISTER_NAME", "SPS-SHUTTER")
|
||||
epicsEnvSet("SPS_FETCH_SIZE", "152")
|
||||
epicsEnvSet("SPS_FETCH_SIZE", "154")
|
||||
# Seems that 1 doesn't work
|
||||
epicsEnvSet("SPS_WRITE_SIZE", "2")
|
||||
|
||||
|
@ -14,24 +14,25 @@ file "$(sinqSPS_DB)/readbit.db"
|
||||
{1 , 1 , "SHUTTER-READY" , "" , "" , "" }
|
||||
{1 , 2 , "EMERGENCY-STOP-OFF", "" , "" , "" }
|
||||
{1 , 3 , "NOT-LOCKED" , "" , "" , "" }
|
||||
{1 , 4 , "CLOSED" , "Closed" , "Open" , "" }
|
||||
{1 , 5 , "OPEN" , "Open" , "Closed" , "" }
|
||||
{1 , 4 , "CLOSED" , "closed" , "open" , "" }
|
||||
{1 , 5 , "OPEN" , "open" , "closed" , "" }
|
||||
{1 , 6 , "REMOTE-OKAY" , "" , "" , "" }
|
||||
{1 , 7 , "MOVES" , "" , "" , "" }
|
||||
}
|
||||
|
||||
# The way that the strings are currently implemented in the SPS, the first two
|
||||
# bytes are the maximum length of the string and the size of the current string
|
||||
# in the register. The epics driver doesn't seem to handle this currently, so
|
||||
# we add two to the offset to skip these bytes.
|
||||
# in the register.
|
||||
|
||||
file "$(sinqSPS_DB)/readstring.db"
|
||||
{
|
||||
pattern
|
||||
{OFFSET, LENGTH, STRING_NAME }
|
||||
{4 , 11 , "PSYS-OK" }
|
||||
{18 , 17 , "SHUTTER-READY" }
|
||||
{38 , 17 , "EMERGENCY-STOP" }
|
||||
{58 , 19 , "BLOCKED" }
|
||||
{80 , 24 , "BLOCKED-REASON" }
|
||||
{106 , 14 , "OPEN" }
|
||||
{122 , 27 , "REMOTE" }
|
||||
{4 , 14 , "PSYS-OK" }
|
||||
{20 , 17 , "SHUTTER-READY" }
|
||||
{40 , 17 , "EMERGENCY-STOP" }
|
||||
{60 , 19 , "BLOCKED" }
|
||||
{82 , 24 , "BLOCKED-REASON" }
|
||||
{108 , 14 , "OPEN" }
|
||||
{124 , 27 , "REMOTE" }
|
||||
}
|
||||
|
Reference in New Issue
Block a user