From b8d1c4d2a138db7d0b4982184ad0aec3c8d3d80a Mon Sep 17 00:00:00 2001
From: rivers
+ This is a 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.
+
+ 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.
+ areaDetector Bruker Instrument Server (BIS) driver
+
+ November 13, 2010
+
+ Mark Rivers
+
+ University of Chicago
+
+ Table of Contents
+
+
+
+ Introduction
+
+ Implementation of 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:
+
+
+
+
+ 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:
+