60 likes | 279 Views
EPICS-DIM Interface. Peter Zumbruch Experiment control systems group GSI (KS/EE). Implementation as “ device support module” Running DIM SERVER Providing read/write access to EPICS variables DIM CLIENT
E N D
EPICS-DIM Interface Peter Zumbruch Experiment control systems group GSI (KS/EE)
Implementation as “device support module” Running DIM SERVER Providing read/write access to EPICS variables DIM CLIENT Interfacing DIM services and commands for single variables to EPICS process variables Successfully used for 5 weeks continous HADES beam time On demand String transport mode (DIM provides strings converted by the Interface to single data types, easier to handle by EPICS) Array and structures support More EPICS records EPICS DIM (protocol) Client EPICS-DIM Interface Device Server EPICS DIM Interface EPICS - DIM Interface - Peter Zumbruch - GSI
install embedded Linux on ETRAX chip CPU (axis.com) based front-end systems 2 step approach: Install DIM on ETRAX and use EPICS-DIM Interface to communicate via network with external EPICS clients or IOCs Suitable for development: DIM protocol also accessible via other controls software, i.e. LabVIEW, or CS, etc. But locally no (EPICS) logic (database, (fast) sequencing, alarming) provided Install EPICS Embedded on ETRAX Provides all features of EPICS Local fast EPICS based logic, network independent By „turning the direction of the interface“ users may still see a DIM device, mimicked by EPICS using the EPICS – DIM interface Embedded EPICS on ETRAX CS EPICS - DIM Interface - Peter Zumbruch - GSI
Contact: WWW - http://wiki.gsi.de Mail - epics_at_gsi.de (p.zumbruch_at_gsi.de) Download EPICS - DIM Interface - Peter Zumbruch - GSI
Example general purpose record record($(record), "$(user):$(pvName)") { field(DESC, "caDIMInterface_$(record)") field(DTYP, "caDIMInterface") field($(INPOUT), "$(Type)$(serviceName)$(serviceFormat)$(commandName)$(commandFormat)$(dnsAddress)$(dnsPort)$(scanMode)$(scanInterval)$(serverName)$(defaultGet)$(defaultPut)$(any)") field(VAL, "$(value)") field(SCAN, "$(scanPeriod)") … field(PREC, "$(precision)") } Record database EPICS - DIM Interface - Peter Zumbruch - GSI
Example startup file: #!../../bin/linux-x86/caDIMInterface < envPaths cd ${TOP} ## Register all support components dbLoadDatabase("dbd/caDIMInterface.dbd") caDIMInterface_registerRecordDeviceDriver(pdbbase) ## Load record instances dbLoadRecords("db/dbDIMInterface.db", "any=, record=ai, INPOUT=INP, user=$(USER), pvName=DoubleValClient, value=100, Type=@T\=C, serviceName=@S\=TEST/DOUBLEVAL, serviceFormat=@Sf\=D:1, commandName=, commandFormat=, serverName=, dnsAddress=, dnsPort=, defaultPut=, defaultGet=, scanMode=, scanInterval=, scanPeriod=Passive, precision=2") dbLoadRecords("db/dbDIMInterface.db", "any=, record=ai, INPOUT=INP, user=$(USER), pvName=IntValClient, value=0, Type=@T\=C, serviceName=@S\=TEST/INTVAL, serviceFormat=@Sf\=I:1, commandName=, commandFormat=, serverName=, dnsAddress=, dnsPort=, defaultPut=, defaultGet=, scanMode=, scanInterval=, scanPeriod=Passive, precision=0") dbLoadRecords("db/dbDIMInterface.db", "any=, record=ai, INPOUT=INP, user=$(USER), pvName=KillTestServer, value=0, Type=@T\=C, serviceName=, serviceFormat=, commandName=@C\=TEST-SERVER/EXIT, commandFormat=@Cf\=L:1, serverName=, dnsAddress=, dnsPort=, defaultPut=, defaultGet=, scanMode=, scanInterval=, scanPeriod=Passive, precision=2") dbLoadRecords("db/dbDIMInterface.db", "any=, record=ao, INPOUT=OUT, user=$(USER), pvName=ServerAo, value=10, Type=@T\=S, serviceName=, serviceFormat=, commandName=, commandFormat=, serverName=, dnsAddress=, dnsPort=, defaultPut=, defaultGet=, scanMode=, scanInterval=, scanPeriod=Passive, precision=2") cd ${TOP}/iocBoot/${IOC} iocInit() Startup command file EPICS - DIM Interface - Peter Zumbruch - GSI