Merge branch 'ess'

This commit is contained in:
2017-05-17 11:23:50 +02:00
19 changed files with 498 additions and 54 deletions

31
Makefile.EEE Normal file
View File

@ -0,0 +1,31 @@
include ${EPICS_ENV_PATH}/module.Makefile
PROJECT=sinq
USR_DEPENDENCIES = asyn,4.27.0
USR_DEPENDENCIES += motor,6.10.0
USR_DEPENDENCIES += synAppsStd,3.4.1
USR_DEPENDENCIES += streamdevice,2.6.0
USR_DEPENDENCIES += busy,1.6.0
USR_DEPENDENCIES += pcre,8.36.0
TEMPLATES += sinqEPICSApp/Db/dimetix.db
TEMPLATES += sinqEPICSApp/Db/slsvme.db
TEMPLATES += sinqEPICSApp/Db/spsamor.db
TEMPLATES += sinqEPICSApp/Db/el737Record.db
DBDS += sinqEPICSApp/src/sinq.dbd
SUBSTITUTIONS=-none-
OPIS=-none-
# What we need at SINQ
SOURCES += sinqEPICSApp/src/devScalerEL737.c
SOURCES += sinqEPICSApp/src/EL734Driver.cpp
SOURCES += sinqEPICSApp/src/NanotecDriver.cpp
SOURCES += sinqEPICSApp/src/stptok.cpp
# MISCS would be the place to keep the stream device template files

View File

@ -32,3 +32,5 @@ INSTALL_LOCATION=/afs/psi.ch/project/sinqdev/sinqepicsapp
# You must rebuild in the iocBoot directory for this to
# take effect.
#IOCS_APPL_TOP = </IOC/path/to/application/top>
STATIC_BUILD=NO
SHARED_LIBRARIES=YES

View File

@ -25,16 +25,17 @@ TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top
#SNCSEQ=$(EPICS_BASE)/../modules/soft/seq
# EPICS_BASE usually appears last so other apps can override stuff:
EPICS_BASE=/usr/local/epics
EPICS_BASE=/opt/epics/bases/base-3.14.12.5
# Set RULES here if you want to take build rules from somewhere
# other than EPICS_BASE:
#RULES=/path/to/epics/support/module/rules/x-y
MOTOR=/usr/local/epics/support/motor-6-7
ASYN=/usr/local/epics/support/asyn-4-18
STD=/usr/local/epics/support/std-3-1
ANC=/usr/local/epics/anc350v17
STREAMS=/usr/local/epics/support/StreamDevice-2-6
LAKESHORE336=/usr/local/epics/support/lakeshore336
BUSY=/usr/local/epics/support/busy-1-4
OXINSTCRYOJET=/usr/local/epics/support/OxInstCryojet-2-18-3
MOTOR=/opt/epics/modules/motor/6.10.0/3.14.12.5
ASYN=/opt/epics/modules/asyn/4.27.0/3.14.12.5
SYNAPPSSTD=/opt/epics/modules/synAppsStd/3.4.1/3.14.12.5/
#ANC=/usr/local/epics/anc350v17
STREAMS=/opt/epics/modules/streamdevice/2.6.0/3.14.12.5
#LAKESHORE336=/usr/local/epics/support/lakeshore336
BUSY=/opt/epics/modules/busy/1.6.0/3.14.12.5
#OXINSTCRYOJET=/usr/local/epics/support/OxInstCryojet-2-18-3
PCRE=/opt/epics/modules/pcre/8.36.0/3.14.12.5

61
essst.cmd Executable file
View File

@ -0,0 +1,61 @@
###!/opt/epics/modules/environment/1.8.0/3.14.12.5/bin/centos7-x86_64/iocsh
var requireDebug 2
require sinq, local
#---------- connect to controllers
drvAsynIPPortConfigure("serial1", "localhost:60001",0,0,0)
drvAsynIPPortConfigure("serial2", "localhost:60002",0,0,0)
drvAsynIPPortConfigure("serial3", "localhost:60003",0,0,0)
EL734CreateController("mota","serial1",12);
EL734CreateController("motb","serial2",12);
EL734CreateController("motc","serial3",12);
### Motors
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=serial1,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=serial2,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=serial3,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadTemplate "mota.substitutions"
dbLoadTemplate "motb.substitutions"
dbLoadTemplate "motc.substitutions"
#--------- load EL737 counter box
drvAsynIPPortConfigure("cter1","localhost:62000",0,0,0)
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=cter1,PORT=cter1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("el737Record.db")
#asynSetTraceIOMask("cter1",0,2)
#----------- load Magnets
drvAsynIPPortConfigure("slsvme", "localhost:60066",0,0,0)
#drvAsynIPPortConfigure("slsvme", "localhost:8080",0,0,0)
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=slsvme,PORT=slsvme,ADDR=0,OMAX=80,IMAX=80")
epicsEnvSet ("STREAM_PROTOCOL_PATH", "$(TOP)/db:.")
dbLoadRecords("slsvme.db","PREFIX=SQ:AMOR:PBY:,NO=1")
dbLoadRecords("slsvme.db","PREFIX=SQ:AMOR:FMA:,NO=2")
dbLoadRecords("slsvme.db","PREFIX=SQ:AMOR:ABY:,NO=3")
#-------------- load SPS
drvAsynIPPortConfigure("sps1", "localhost:60077",0,0,0)
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=spsdirect,PORT=sps1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("spsamor.db","PREFIX=SQ:AMOR:SPS1:")
#------------- Load dimetix distance measurement device
drvAsynIPPortConfigure("dimetix", "localhost:60088",0,0,0)
dbLoadRecords("asynRecord.db","P=SQ:AMOR:,R=dimetixdirect,PORT=dimetix,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("dimetix.db","PREFIX=SQ:AMOR:DIMETIX:")
iocInit
## Start any sequence programs
#seq sncxxx,"user=koenneckeHost"

View File

@ -1,8 +1,10 @@
epicsEnvSet("ARCH","linux-x86-debug")
epicsEnvSet("IOC","iocsinqEPICS")
epicsEnvSet("ARCH","centos7-x86_64")
epicsEnvSet("IOC","sinqEPICS")
epicsEnvSet("TOP","/afs/psi.ch/project/sinqdev/sinqepicsapp")
epicsEnvSet("EPICS_BASE","/usr/local/epics")
epicsEnvSet("ASYN","/usr/local/epics/support/asyn-4-18")
epicsEnvSet("MOTOR","/usr/local/epics/support/motor-6-7")
epicsEnvSet("LAKESHORE336","/usr/local/epics/support/lakeshore336")
epicsEnvSet("OXINSTCRYOJET","/usr/local/epics/support/OxInstCryojet-2-18-3")
epicsEnvSet("EPICS_BASE","/opt/epics/bases/base-3.14.12.5")
epicsEnvSet("ASYN","/opt/epics/modules/asyn/4.27.0")
epicsEnvSet("MOTOR","/opt/amor/epics")
epicsEnvSet("SYNAPPSSTD","/opt/epics/modules/synAppsStd/3.4.1")
#epicsEnvSet("LAKESHORE336","/usr/local/epics/support/lakeshore336")
epicsEnvSet("STREAM","/opt/epics/modules/streamdevice/2.7.1")

View File

@ -1,41 +1,42 @@
#!../../bin/linux-x86/sinqEPICS
#!/opt/amor/epics/sinqEPICS
## You may have to change sinqEPICS to something else
## everywhere it appears in this file
cd /opt/amor/epics
< envPaths
cd ${TOP}
## Register all support components
dbLoadDatabase "dbd/sinqEPICS.dbd"
dbLoadDatabase "dbd/sinq.dbd"
sinqEPICS_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=koenneckeHost")
#---------- load EL734 motor controller
drvAsynIPPortConfigure("serial1", "narziss-ts:3002",0,0,0)
#drvAsynIPPortConfigure("serial1", "localhost:8080",0,0,0)
EL734CreateController("mota","serial1",6);
#---------- connect to controllers
drvAsynIPPortConfigure("serial1", "localhost:60001",0,0,0)
drvAsynIPPortConfigure("serial2", "localhost:60002",0,0,0)
drvAsynIPPortConfigure("serial3", "localhost:60003",0,0,0)
EL734CreateController("mota","serial1",12);
EL734CreateController("motb","serial2",12);
EL734CreateController("motc","serial3",12);
### Motors
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=NZ:,R=serial1,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=serial1,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=serial2,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=serial3,PORT=serial1,ADDR=0,OMAX=80,IMAX=80")
cd ${TOP}/iocBoot/${IOC}
dbLoadTemplate "motor.substitutions.el734"
dbLoadTemplate "mota.substitutions"
dbLoadTemplate "motb.substitutions"
dbLoadTemplate "motc.substitutions"
#--------- load EL737 counter box
drvAsynIPPortConfigure("cter1","narziss-ts:3003",0,0,0)
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=NZ:,R=cter1,PORT=cter1,ADDR=0,OMAX=80,IMAX=80")
drvAsynIPPortConfigure("cter1","localhost:62000",0,0,0)
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=cter1,PORT=cter1,ADDR=0,OMAX=80,IMAX=80")
dbLoadRecords("${TOP}/db/el737Record.db")
asynSetTraceIOMask("cter1",0,2)
#asynSetTraceIOMask("cter1",0,2)
iocInit

View File

@ -0,0 +1,34 @@
#!../../bin/centos7-x86_64/sinqEPICS
# for debugging..................
## You may have to change sinqEPICS to something else
## everywhere it appears in this file
< envPaths
cd ${TOP}
## Register all support components
dbLoadDatabase "dbd/sinqEPICS.dbd"
dbLoadDatabase "dbd/sinq.dbd"
sinqEPICS_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=koenneckeHost")
#---------- Install SPS
drvAsynIPPortConfigure("dimetix", "localhost:64000",0,0,0)
#drvAsynIPPortConfigure("slsvme", "localhost:8080",0,0,0)
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=dimetix,PORT=dimetix,ADDR=0,OMAX=80,IMAX=80")
epicsEnvSet ("STREAM_PROTOCOL_PATH", "$(TOP)/sinqEPICSApp/Db:.")
cd ${TOP}/iocBoot/iocsinqEPICS
dbLoadRecords("$(TOP)/sinqEPICSApp/Db/dimetix.db","PREFIX=SQ:AMOR:DIMETIX:")
iocInit
## Start any sequence programs
#seq sncxxx,"user=koenneckeHost"

View File

@ -0,0 +1,34 @@
#!../../bin/centos7-x86_64/sinqEPICS
# for debugging..................
## You may have to change sinqEPICS to something else
## everywhere it appears in this file
< envPaths
cd ${TOP}
## Register all support components
dbLoadDatabase "dbd/sinqEPICS.dbd"
dbLoadDatabase "dbd/sinq.dbd"
sinqEPICS_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=koenneckeHost")
#---------- Install SLSVME
drvAsynIPPortConfigure("slsvme", "mpc2084:60066",0,0,0)
#drvAsynIPPortConfigure("slsvme", "localhost:8080",0,0,0)
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=slsvme,PORT=slsvme,ADDR=0,OMAX=80,IMAX=80")
epicsEnvSet ("STREAM_PROTOCOL_PATH", "$(TOP)/sinqEPICSApp/Db:.")
cd ${TOP}/iocBoot/iocsinqEPICS
dbLoadRecords("slsvme.db","PREFIX=SQ:AMOR:PBY:,NO=1")
iocInit
## Start any sequence programs
#seq sncxxx,"user=koenneckeHost"

34
iocBoot/iocsinqEPICS/stsps.cmd Executable file
View File

@ -0,0 +1,34 @@
#!../../bin/centos7-x86_64/sinqEPICS
# for debugging..................
## You may have to change sinqEPICS to something else
## everywhere it appears in this file
< envPaths
cd ${TOP}
## Register all support components
dbLoadDatabase "dbd/sinqEPICS.dbd"
dbLoadDatabase "dbd/sinq.dbd"
sinqEPICS_registerRecordDeviceDriver pdbbase
## Load record instances
#dbLoadRecords("db/xxx.db","user=koenneckeHost")
#---------- Install SPS
drvAsynIPPortConfigure("spss5", "localhost:63000",0,0,0)
#drvAsynIPPortConfigure("slsvme", "localhost:8080",0,0,0)
dbLoadRecords("$(ASYN)/db/asynRecord.db","P=SQ:AMOR:,R=spss5,PORT=spss5,ADDR=0,OMAX=80,IMAX=80")
epicsEnvSet ("STREAM_PROTOCOL_PATH", "$(TOP)/sinqEPICSApp/Db:.")
cd ${TOP}/iocBoot/iocsinqEPICS
dbLoadRecords("$(TOP)/sinqEPICSApp/Db/spsamor.db","PREFIX=SQ:AMOR:SPSS5:")
iocInit
## Start any sequence programs
#seq sncxxx,"user=koenneckeHost"

View File

@ -10,7 +10,7 @@ include $(TOP)/configure/CONFIG
#----------------------------------------------------
# Create and install (or just install) into <top>/db
# databases, templates, substitutions like this
#DB += xxx.db
DB_INSTALL += slsvme.proto
#----------------------------------------------------
# If <anyname>.db template is not named <anyname>*.template add

View File

@ -0,0 +1,40 @@
# DB file for dimetix laser distance measurement device
##
## Switch the laser
##
record(bo, "$(PREFIX)LASER") {
field(DESC, "Switch laser on and off")
field(DTYP,"stream")
field(OUT,"@dimetix.proto setlaser() dimetix 0")
field(PINI, "YES")
field(VAL, "0")
field(ZNAM, "OFF")
field(ONAM, "ON")
}
##
## Read the distance
##
record(ai, "$(PREFIX)DIST") {
field(DTYP, "stream")
field(DESC, "Distance")
field(INP, "@dimetix.proto read() dimetix 0")
field(SCAN, "1 second")
field(PREC, "1")
field(EGU, "mm")
}
##
## Set the readback (for simulation purposes only)
##
record(ao, "$(PREFIX)SimVal") {
field(DTYP, "stream")
field(DESC, "Set readback for simulation")
field(OUT, "@dimetix.proto setreadback() dimetix 0")
field(PREC, "1")
field(EGU, "mm")
}

View File

@ -0,0 +1,23 @@
# Streamdevice protocol file for a Dimetix distance measuring device as used at
# AMOR
InTerminator = "\n";
OutTerminator = "\r\n";
ExtraInput = Ignore;
setlaser {
out "%{s0p|s0o}";
in "g0?";
}
setreadback {
out "setval %d";
in "g0?";
}
read {
out "s0g";
in "g0g+%d";
@mismatch {in "@E213"}
}

94
sinqEPICSApp/Db/slsvme.db Normal file
View File

@ -0,0 +1,94 @@
# Database definition for the SLS VME magnets as installed at AMOR
##
## Read the High Limit
##
record(ai, "$(PREFIX)HighLim") {
field(DTYP, "stream")
field(DESC, "High Current Limit")
field(INP, "@slsvme.proto read($(NO),hl) slsvme 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "A")
}
##
## Read the High Limit
##
record(ai, "$(PREFIX)LowLim") {
field(DTYP, "stream")
field(DESC, "Low Current Limit")
field(INP, "@slsvme.proto read($(NO),ll) slsvme 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "A")
}
##
## Read the Error code
##
record(ai, "$(PREFIX)ErrCode") {
field(DTYP, "stream")
field(DESC, "Error Code")
field(INP, "@slsvme.proto read($(NO),err) slsvme 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "A")
}
##
## Read the textual representation of the error.
##
record(stringin, "$(PREFIX)ErrText") {
field(DTYP, "stream")
field(INP, "@slsvme.proto readErrTxt($(NO)) slsvme 0")
field(SCAN, "1 second")
field(PINI, "YES")
}
##
## Read the Current
##
record(ai, "$(PREFIX)CurRBV") {
field(DTYP, "stream")
field(DESC, "Low Current Limit")
field(INP, "@slsvme.proto read($(NO),cur) slsvme 0")
field(SCAN, "1 second")
field(PREC, "3")
field(EGU, "A")
}
##
## Set the current
##
record(ao, "$(PREFIX)CurSet") {
field(DTYP, "stream")
field(DESC, "Setpoint current")
field(OUT, "@slsvme.proto write($(NO),cur) slsvme 0")
field(PREC, "3")
field(EGU, "A")
}
##
## Read power status of the magnet
##
record(bi, "$(PREFIX)PowerStatusRBV") {
field(DESC, "Readback of the power status")
field(DTYP, "stream")
field(INP, "@slsvme.proto readonoff($(NO)) slsvme 0")
field(SCAN, "1 second")
field(ZNAM, "off")
field(ONAM, "on")
}
##
## Set the power status
##
record(bo, "$(PREFIX)PowerStatus") {
field(DESC, "Set the power status")
field(DTYP, "stream")
field(OUT, "@slsvme.proto setpower($(NO)) slsvme 0")
field(ZNAM, "on")
field(ONAM, "off")
}

View File

@ -0,0 +1,31 @@
# Streamdevice protocol file for the PSI SLS VME magnet controller used at AMOR
InTerminator = "\n";
OutTerminator = "\r\n";
#ExtraInput = Ignore;
read {
out "r \$1 \$2";
in "\$1 \$2 %f";
}
readErrTxt {
out "r \$1 errtext";
in "\$1 errtext %s";
}
write {
out "w \$1 \$2 %f";
in "OK";
}
readonoff {
out "r \$1 onoff";
in "\$1 onoff %{off|on}";
}
setpower {
out "w \$1 %{on|off}";
in "OK";
}

View File

@ -0,0 +1,32 @@
# DB definition for a SPS-S5 with the custom RS232 interface as used at SINQ.
#The digital inputs. Ignore the first one, which is the response character R
record(waveform, "$(PREFIX)DigitalInput") {
field(DTYP, "stream")
field(INP, "@spss5.proto readDigital() spss5 0")
field(SCAN, "5 second")
field(NELM, "16")
field(FTVL, "LONG")
field(PREC, "1")
}
# The analog inputs, again ignore the first one as it is the response character A
record(waveform, "$(PREFIX)AnalogInput") {
field(DTYP, "stream")
field(INP, "@spss5.proto readAnalog() spss5 0")
field(SCAN, "5 second")
field(NELM, "8")
field(FTVL, "LONG")
field(PREC, "1")
}
# This is forwarding the S0001 style strings to the hardware. This is the easiest solution but requires
# Hardware knowledge upstream. Which is required anyway. The syntax is: SBBBI with 3 characters for the byte
# to set and one character for the bit in the byte. The Byte must always be filled with 0 to the left.
record(stringout, "$(PREFIX)Push") {
field(DESC, "String for pushing buttons")
field(DTYP, "stream")
field(OUT, "@spss5.proto push() spss5 0")
}

View File

@ -0,0 +1,25 @@
# Streamdevice protocol file for the Siemens SPS-S5 with the custom RS232 interface as used at
# AMOR
InTerminator = "\n";
OutTerminator = "\r\n";
ExtraInput = Ignore;
readDigital {
out "R";
separator="";
in "\?%d";
}
readAnalog {
out "A";
separator="";
in "\?%d";
}
push {
out "%s";
}

View File

@ -17,15 +17,15 @@ sinqEPICS_DBD += base.dbd
# Include dbd files from all support applications:
sinqEPICS_DBD += sinq.dbd
sinqEPICS_DBD += pmacAsynIPPort.dbd pmacAsynMotorPort.dbd
#sinqEPICS_DBD += pmacAsynIPPort.dbd pmacAsynMotorPort.dbd
# Add all the support libraries needed by this IOC
sinqEPICS_LIBS += motor asyn std anc350 anc350AsynMotor stream busy
sinqEPICS_LIBS += motor asyn busy synAppsStd streamdevice pcre
# sinqEPICS_registerRecordDeviceDriver.cpp derives from sinqEPICS.dbd
sinqEPICS_SRCS += sinqEPICS_registerRecordDeviceDriver.cpp
sinqEPICS_SRCS += EL734Driver.cpp devScalerEL737.c pmacAsynIPPort.c
sinqEPICS_SRCS += pmacController.cpp pmacAxis.cpp
sinqEPICS_SRCS += EL734Driver.cpp
sinqEPICS_SRCS += devScalerEL737.c
sinqEPICS_SRCS += NanotecDriver.cpp stptok.cpp
sinqEPICS_SRCS += PhytronDriver.cpp

View File

@ -4,6 +4,6 @@ record(scaler,"")
field(NAME,"NZ:counter")
field(DESC,"NARZIS EL737 counter")
field(DTYP,"asynScalerEL737")
field(OUT,"INST_IO @asyn(cter1,0)"
field(OUT,"INST_IO @asyn(cter1,0)")
}

View File

@ -4,21 +4,20 @@
registrar(EL734Register)
registrar(PhytronRegister)
registrar(NanotecRegister)
addpath "/usr/local/epics/support/asyn-4-18/dbd"
addpath "/usr/local/epics/dbd"
addpath "/usr/local/epics/support/motor-6-7/dbd"
addpath "/usr/local/epics/support/std-3-1/dbd"
addpath "/usr/local/epics/anc350v17/dbd"
include "drvAsynIPPort.dbd"
include "motorRecord.dbd"
include "motorSupport.dbd"
include "anc350AsynMotor.dbd"
addpath "/opt/epics/modules/asyn/4.27.0/3.14.12.5/dbd"
addpath "/opt/epics/bases/base-3.14.12.5/dbd"
addpath "/opt/epics/modules/motor/6.10.0/3.14.12.5/dbd"
#addpath "/usr/local/epics/support/std-3-1/dbd"
addpath "/opt/epics/modules/synAppsStd/3.4.1/3.14.12.5/dbd"
include "asyn.dbd"
include "motor.dbd"
#include "motorSupport.dbd"
include "scalerRecord.dbd"
include "synAppsStd.dbd"
device(scaler,INST_IO,devScalerEL737,"asynScalerEL737")
#--------- For lakeshore
addpath "/usr/local/epics/support/StreamDevice-2-6/dbd"
include "stream.dbd"
addpath "/usr/local/epics/support/busy-1-4/dbd"
include "busySupport.dbd"
addpath "/opt/epics/modules/streamdevice/2.6.0/3.14.12.5/dbd"
include "streamdevice.dbd"
addpath "/opt/epics/modules/busy/1.6.0/3.14.12.5/dbd"
include "busy.dbd"