EPICS-DIM Interface Peter Zumbruch Experiment control systems group GSI (KS/EE)

6
EPICS-DIM Interface EPICS-DIM Interface Peter Zumbruch Experiment control systems group GSI (KS/EE)

Transcript of EPICS-DIM Interface Peter Zumbruch Experiment control systems group GSI (KS/EE)

Page 1: EPICS-DIM Interface Peter Zumbruch Experiment control systems group GSI (KS/EE)

EPICS-DIM InterfaceEPICS-DIM Interface

Peter Zumbruch

Experiment control systems group GSI

(KS/EE)

Page 2: EPICS-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

Page 3: EPICS-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

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

Page 4: EPICS-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

DownloadDownload

Contact:

WWW - http://wiki.gsi.de

Mail - epics_at_gsi.de

(p.zumbruch_at_gsi.de)

Page 5: EPICS-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

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)")

}

Page 6: EPICS-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

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()