EPICS-DIM Interface
description
Transcript of EPICS-DIM Interface
EPICS-DIM InterfaceEPICS-DIM Interface
Peter Zumbruch
Experiment control systems group GSI
(KS/EE)
December 6, 2009December 6, 2009 EPICS - DIM Interface - Peter Zumbruch - GSIEPICS - DIM Interface - Peter Zumbruch - GSI
EPICS DIM InterfaceEPICS DIM Interface
• 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
DIM (protocol)
DIM (protocol)
EPICSEPICSEPICS-DIM
Interface
Clie
ntS
erve
r Device
December 6, 2009December 6, 2009 EPICS - DIM Interface - Peter Zumbruch - GSIEPICS - DIM Interface - Peter Zumbruch - GSI
Embedded EPICS on ETRAXEmbedded EPICS on ETRAX
• install embedded Linux on ETRAX chip CPU (axis.com) based front-end systems
• 2 step approach:1. 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
2. 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
CS
December 6, 2009December 6, 2009 EPICS - DIM Interface - Peter Zumbruch - GSIEPICS - DIM Interface - Peter Zumbruch - GSI
DownloadDownload
Contact:
WWW - http://wiki.gsi.de
Mail - epics_at_gsi.de
(p.zumbruch_at_gsi.de)
December 6, 2009December 6, 2009 EPICS - DIM Interface - Peter Zumbruch - GSIEPICS - DIM Interface - Peter Zumbruch - GSI
Record databaseRecord database
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)")
}
December 6, 2009December 6, 2009 EPICS - DIM Interface - Peter Zumbruch - GSIEPICS - DIM Interface - Peter Zumbruch - GSI
Startup command fileStartup command fileExample startup file:
#!../../bin/linux-x86/caDIMInterface
< envPaths
cd ${TOP}
## Register all support componentsdbLoadDatabase("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()