This is an EPICS areaDetector driver for detectors from Bruker AXS using the Bruker Instrument Server (BIS).
The interface to the detector is via TCP/IP socket connections to the Bruker Instrument Server (BIS) program that Bruker provides. The BIS program must be started before the areaDetector software is started.
The Bruker Instrument Server saves the data to disk in Bruker's SRFM file format. The areaDetector driver reads these disk files in order to read the data, because BIS does not provide another mechanism to access the data.
This driver inherits from ADDriver. It implements many of the parameters in asynNDArrayDriver.h and in ADArrayDriver.h. It also implements a number of parameters that are specific to the Bruker detector. The BIS class documentation describes this class in detail.
The following table describes how the BIS driver implements some of the standard driver parameters.
Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record Definitions in ADBase.template and NDFile.template | ||
Parameter index variable | EPICS record name | Description |
---|---|---|
ADNumImages | $(P)$(R)NumImages | Controls the number of images to acquire when ADImageMode is ADImageMultiple. |
ADAcquirePeriod | $(P)$(R)AcquirePeriod | Controls the period between images when ADImageMode is ADImageMultiple or ADImageContinuous. If this is greater than the acquisition time plus readout overhead then the driver will wait until the period has elapsed before starting the next acquisition. |
NDFilePath | $(P)$(R)FilePath |
Controls the path for saving images. It must be a valid path for BIS and
for the areaDetector driver, which is normally running in an EPICS IOC. Normally
BIS and the EPICS IOC are run on the same machine so this is not an issue. Running
the IOC on another machine is difficult because Windows does not support soft links
that could be used to make the paths look identical. The terminator at the end of FilePath must be a "\" character, it cannot be a "/" character, because BIS only recognizes the "\". |
NDFileFormat | $(P)$(R)FileFormat | BIS only supports Bruker format SRFM files. |
ADFrameType | $(P)$(R)FrameType |
The driver redefines the choices for the ADFrameType parameter (record $(P)$(R)FrameType)
from ADDriver.h. The choices for the BIS driver are:
|
BIS will automatically open and close the shutter when exposures are collected. It does this by changing the state of pin 3 of the parallel port DB-25 connector on the PC. This signal is connected to a shutter control box. Alternatively, if ADShutterMode is set to ADShutterModeEPICS, then any EPICS PV can be used to control a shutter.
The Bruker driver implements the following parameters in addition to those in asynNDArrayDriver.h
and ADDriver.h. Note that to reduce the width of this table the parameter index
variable names have been split into 2 lines, but these are just a single name, for
example mar345ScanSize
.
Parameter Definitions in mar345.cpp and EPICS Record Definitions in mar345.template | ||||||
Parameter index variable | asyn interface | Access | Description | drvInfo string | EPICS record name | EPICS record type |
---|---|---|---|---|---|---|
Readout parameters | ||||||
BISSFRMTimeout | asynFloat64 | r/w | The timeout waiting for the SFRM file to appear. | SRFMTimeout | $(P)$(R)ReadSFRMTimeout | ao |
BISStatus | asynOctet | r/w | The status string returned from BIS. | BIS_STATUS | $(P)$(R)BISStatus | waveform |
BISNumDarks | asynInt32 | r/w | The number of dark fields to collect when ADFrameType=Dark. | NUM_DARKS |
$(P)$(R)NumDarks $(P)$(R)NumDarks_RBV |
longout
longin |
The Bruker driver does not support the following standard driver parameters because they are not supported in the BIS server:
BIS supports binning, but the binning in the X and Y directions must be the same, so only ADBinX is supported.
The Bruker driver is created with the BISDetectorConfig command, either from C/C++ or from the EPICS IOC shell.
BISDetectorConfig(const char *portName, const char *commandPort, const char *statusPort, int maxBuffers, size_t maxMemory, int priority, int stackSize)
For details on the meaning of the parameters to this function refer to the detailed documentation on theBISDetectorConfig function in the BIS.cpp documentation and in the documentation for the constructor for the BIS class.
There an example IOC boot directory and startup script (iocBoot/iocBruker/st.cmd) provided with areaDetector.
The following show the MEDM screen that is used to control the Bruker detector. Note that the general purpose screen ADBase.adl can be used, but it exposes many controls that are not applicable to the Bruker, and lacks some fields that are important for the Bruker.
BIS.adl
is the main screen used to control the Bruker driver.
The following are some current restrictions of the Bruker driver: