Files
ADAndor/documentation/pvcamDoc.html
rivers 256daf2dde New date
git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@15328 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
2012-10-01 19:28:35 +00:00

994 lines
23 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>areaDetector PVCAM driver</title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
</head>
<body>
<div style="text-align: center">
<h1>
areaDetector PVCAM driver</h1>
<h2>
October 1, 2012</h2>
<h2>
Brian Tieman, John Hammonds, Mark Rivers</h2>
<h2>
Argonne National Laboratory and University of Chicago</h2>
</div>
<h2>
Table of Contents</h2>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#StandardNotes">Implementation of standard driver parameters</a></li>
<li><a href="#Driver_parameters">PVCAM specific parameters</a></li>
<li><a href="#Unsupported">Unsupported standard driver parameters</a></li>
<li><a href="#Configuration">Configuration</a></li>
<li><a href="#MEDM_screens">MEDM screens</a></li>
<li><a href="#Performance_measurements">Performance measurements</a> </li>
<li><a href="#Restrictions">Restrictions</a> </li>
</ul>
<h2 id="Introduction" style="text-align: left">
Introduction</h2>
<p>
This is a driver for the <a href="http://www.roperscientific.com/">Roper Scientific</a>
detectors, which includes those from <a href="http://www.princetoninstruments.com/">
Princeton Instruments</a> and <a href="http://www.photomet.com/">Photometrics</a>.</p>
<p>
The driver is based upon the PVCAM library from Roper, and only runs on Microsoft
Windows computers. This driver is complementary to the <a href="roperDoc.html">areaDetector
Roper driver</a>. That driver uses the Microsoft COM interface to control the
Roper WinView program. This driver works at a lower level, communicating instead
with the PVCAM library layer. PVCAM supports all Photometrics cameras, and many,
but not all, Princeton Instruments cameras.
</p>
<p>
ADD ADDTIONAL INTRODUCTORY TEXT HERE.</p>
<p>
This driver inherits from <a href="areaDetectorDoc.html#ADDriver">ADDriver</a>.
It implements many of the parameters in <a href="areaDetectorDoxygenHTML/asyn_n_d_array_driver_8h.html">
asynNDArrayDriver.h</a> and in <a href="areaDetectorDoxygenHTML/_a_d_driver_8h.html">
ADArrayDriver.h</a>. It also implements a number of parameters that are specific
to the Roper detectors. The <a href="areaDetectorDoxygenHTML/classpv_cam.html">pvCam
class documentation</a> describes this class in detail.</p>
<h2 id="StandardNotes" style="text-align: left">
Implementation of standard driver parameters</h2>
<p>
The following table describes how the PVCAM driver implements some of the standard
driver parameters.
</p>
<p>
DOCUMENT IMPLEMENTATION OF STANDARD DRIVER PARAMETERS IN THIS TABLE</p>
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
<tbody>
<tr>
<td align="center" colspan="3">
<b>Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record
Definitions in ADBase.template and NDFile.template</b></td>
</tr>
<tr>
<th>
Parameter index variable</th>
<th>
EPICS record name</th>
<th>
Description</th>
</tr>
<tr>
<td>
ADNumImages</td>
<td>
$(P)$(R)NumImages</td>
<td>
Controls the number of images to acquire when ADImageMode is ADImageMultiple.</td>
</tr>
</tbody>
</table>
<h2 id="Driver_parameters" style="text-align: left">
PVCAM specific parameters</h2>
<p>
The PVCAM 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 <code>PVCamInitDetector</code>.
</p>
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
<tbody>
<tr>
<td align="center" colspan="7">
<b>Parameter Definitions in pvcamSrc.h and EPICS Record Definitions in pvCam.template</b>
</td>
</tr>
<tr>
<th>
Parameter index variable</th>
<th>
asyn interface</th>
<th>
Access</th>
<th>
Description</th>
<th>
drvInfo string</th>
<th>
EPICS record name</th>
<th>
EPICS record type</th>
</tr>
<tr>
<td>
PVCam<br />
InitDetector</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Initializes the detector</td>
<td>
PVCAM_INITIALIZE_DETECTOR</td>
<td>
$(P)$(R)Initialize<br />
$(P)$(R)Initialize_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
PVCam<br />
InitSlot1Cam</td>
<td>
asynOctet</td>
<td>
r</td>
<td>
String describing 1st found detector</td>
<td>
PVCAM_SLOT1</td>
<td>
$(P)$(R)Slot1_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PVCam<br />
Slot2Cam</td>
<td>
asynOctet</td>
<td>
r</td>
<td>
String describing 2nd found detector</td>
<td>
PVCAM_SLOT2</td>
<td>
$(P)$(R)Slot2_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PVCam<br />
Slot3Cam</td>
<td>
asynOctet</td>
<td>
r</td>
<td>
String describing 3rd found detector</td>
<td>
PVCAM_SLOT3</td>
<td>
$(P)$(R)Slot3_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PVCam<br />
DetectorSelected</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Index of selected detector</td>
<td>
PVCAM_DETECTORSELECTED</td>
<td>
$(P)$(R)DetecorSelected<br />
$(P)$(R)DetecorSelected_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
PVCam<br />
ChipNameRBV</td>
<td>
asynOctet</td>
<td>
r</td>
<td>
String describing CCD chip</td>
<td>
PVCAM_CHIPNAME</td>
<td>
$(P)$(R)ChipName_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PVCam<br />
NumParallelPixelsRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Parallel size of the CCD in active rows</td>
<td>
PVCAM_NUMPARALLELPIXELS</td>
<td>
$(P)$(R)NumParallelPixels_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
NumSerialPixelsRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Serial size of the CCD</td>
<td>
PVCAM_NUMSERIAL</td>
<td>
$(P)$(R)NumSerialPixels_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PixelParallelSizeRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Size of the pixel in parallel direction in nanometers</td>
<td>
PVCAM_PIXELPARALLELSIZE</td>
<td>
$(P)$(R)PixelParallelSize_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PixelSerialSizeRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Size of the pixel in Serial direction in nanometers</td>
<td>
PVCAM_PIXELSERIALSIZE</td>
<td>
$(P)$(R)PixelSerialSize_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
ChipHeightRBV</td>
<td>
asynFloat64</td>
<td>
r</td>
<td>
Height of CCD in mm</td>
<td>
PVCAM_CHIPHEIGHT</td>
<td>
$(P)$(R)ChipHeight_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
ChipWidthRBV</td>
<td>
asynFloat64</td>
<td>
r</td>
<td>
Width of CCD in mm</td>
<td>
PVCAM_CHIPWIDTH</td>
<td>
$(P)$(R)ChipWidth_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PixelParallelDistRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Pixel-to-pixel distance, in parallel direction, in nanometers</td>
<td>
PVCAM_PIXELPARALLELDIST</td>
<td>
$(P)$(R)PixelParallelDist_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PixelSerialDistRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
Pixel-to-pixel distance, in serial direction, in nanometers</td>
<td>
PVCAM_PIXELSERIALDIST</td>
<td>
$(P)$(R)PixelSerialDist_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PostMaxRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_POSTMASK</td>
<td>
$(P)$(R)PostMask_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PreMaskRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_PREMASK</td>
<td>
$(P)$(R)PreMask_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PostScanRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_POSTSCAN</td>
<td>
$(P)$(R)PostScan_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PreScanRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_PRESCAN</td>
<td>
$(P)$(R)PreScan_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
NumPortsRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_NUMPORTS</td>
<td>
$(P)$(R)NumPorts_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
FullWellCapacityRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_FULLWELLCAPACITY</td>
<td>
$(P)$(R)FullWellCapacity_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
FrameTransferCapableRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_FRAMETRANSFERCAPABLE</td>
<td>
$(P)$(R)FrameTransferCapable_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
NumSpeedTableEntriesRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_NUMSPEEDTABLEENTRIES</td>
<td>
$(P)$(R)NumSpeedTableEntries_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
SpeedTableIndex<br />
SpeedTableIndexRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_SPEEDTABLEINDEX<br />
PVCAM_SPEEDTABLEINDEX_RBV</td>
<td>
$(P)$(R)SpeedTableIndex<br />
$(P)$(R)SpeedTableIndex_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
PVCam<br />
BitDepthRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_BITDEPTH</td>
<td>
$(P)$(R)BitDepth_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PixelTimeRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_PIXELTIME</td>
<td>
$(P)$(R)PixelTime_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
GainIndex<br />
GainIndexRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_GAININDEX<br />
PVCAM_GAININDEX_RBV</td>
<td>
$(P)$(R)GainIndex<br />
$(P)$(R)GainIndex_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MaxGainIndexRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MAXGAININDEX</td>
<td>
$(P)$(R)MaxGainIndex_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MinShutterOpenDelayRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MINSHUTTEROPENDELAY</td>
<td>
$(P)$(R)MinShutterOpenDelay_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MaxShutterOpenDelayRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MAXSHUTTEROPENDELAY</td>
<td>
$(P)$(R)MaxShutterOpenDelay_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MinShutterCloseDelayRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MINSHUTTERCLOSEDELAY</td>
<td>
$(P)$(R)MinShutterCloseDelay_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MaxShutterCloseDelayRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MAXSHUTTERCLOSEDELAY</td>
<td>
$(P)$(R)MaxShutterCloseDelay_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
ShutterOpenDelay<br />
ShutterOpenDelayRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_SHUTTEROPENDELAY<br />
PVCAM_SHUTTEROPENDELAY_RBV</td>
<td>
$(P)$(R)OpenDelay<br />
$(P)$(R)OpenDelay_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
PVCam<br />
ShutterCloseDelay<br />
ShutterCloseDelayRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_SHUTTERCLOSEDELAY<br />
PVCAM_SHUTTERCLOSEDELAY_RBV</td>
<td>
$(P)$(R)CloseDelay<br />
$(P)$(R)CloseDelay_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MeasuredTemperatureRBV</td>
<td>
asynFloat64</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MEASUREDTEMPERATURE_RBV</td>
<td>
$(P)$(R)MeasuredTemperature_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MinTemperatureRBV</td>
<td>
asynFloat64</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MINTEMPERATURE</td>
<td>
$(P)$(R)MinSetTemperature</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
MaxTemperatureRBV</td>
<td>
asynFloat64</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_MAXTEMPERATURE</td>
<td>
$(P)$(R)MaxSetTemperature</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
SetTemperature<br />
SetTemperatureRBV</td>
<td>
asynFloat64</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_SETTEMPERATURE<br />
PVCAM_SETTEMPERATURE_RBV</td>
<td>
$(P)$(R)SetTemperature<br />
$(P)$(R)SetTemperature_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
DetectorMode<br />
DetectorModeRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_DETECTORMODE<br />
PVCAM_DETECTORMODE_RBV</td>
<td>
$(P)$(R)DetectorMode<br />
$(P)$(R)DetectorMode_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
TriggerMode<br />
TriggerModeRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_TRIGGERMODE_RBV<br />
PVCAM_TRIGGERMODE_RBV</td>
<td>
$(P)$(R)TriggerMode<br />
$(P)$(R)TriggerMode_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
TriggerEdge<br />
TriggerEdgeRBV</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
</td>
<td>
PVCAM_TRIGGEREDGE_RBV<br />
PVCAM_TRIGGEREDGE_RBV</td>
<td>
$(P)$(R)TriggerEdge<br />
$(P)$(R)TriggerEdge_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
CamFirmwareVersRBV</td>
<td>
asynOctetRead</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_CAMFIRMWAREVERS_RBV</td>
<td>
$(P)$(R)CameraFirmwareVers_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PCIFWVersRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_PCIFWVERS_RBV</td>
<td>
$(P)$(R)PCIFWVers_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
HeadSerialNumRBV</td>
<td>
asynOctetRead</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_HEADSERIALNUM_RBV</td>
<td>
$(P)$(R)HeadSerialNum_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
SerialNumRBV</td>
<td>
asynInt32</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_SERIALNUM_RBV</td>
<td>
$(P)$(R)SerialNum_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
PVCamVersRBV</td>
<td>
asynOctetRead</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_PVCAMVERS_RBV</td>
<td>
$(P)$(R)PVCamVers_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PVCam<br />
DevDrvVersRBV</td>
<td>
asynOctetRead</td>
<td>
r</td>
<td>
</td>
<td>
PVCAM_DEVDRVVERS_RBV</td>
<td>
$(P)$(R)DevDrvVers_RBV</td>
<td>
longin</td>
</tr>
</tbody>
</table>
<h2 id="Unsupported">
Unsupported standard driver parameters</h2>
<p>
The PVCAM driver does not support the following standard driver parameters because
they are not supported in the PVCAM library:</p>
<ul>
<li>List any unsupported parameters here (WORK NEEDED)</li>
</ul>
<h2 id="Configuration">
Configuration</h2>
<p>
The PVCAM driver is created with the pvCamConfig command, either from C/C++ or from
the EPICS IOC shell.</p>
<pre>int pvCamConfig(const char *portName, int maxSizeX, int maxSizeY, int dataType,
int maxBuffers, size_t maxMemory,
int priority, int stackSize )
</pre>
<p>
For details on the meaning of the parameters to this function refer to the detailed
documentation on the pvCamConfig function in the <a href="areaDetectorDoxygenHTML/pv_cam_8cpp.html">
pvCam.cpp documentation</a> and in the documentation for the constructor for the
<a href="areaDetectorDoxygenHTML/classpv_cam.html">pvCam class</a>.
</p>
<p>
There an example IOC boot directory and startup script (<a href="pvcam_st_cmd.html">iocBoot/iocPVCam/st.cmd)</a>
provided with areaDetector.
</p>
<h2 id="MEDM_screens" style="text-align: left">
MEDM screens</h2>
<p>
The following shows the MEDM screens that are used to control the PVCAM detector.
Note that the general purpose screen ADBase.adl can be used, but it exposes many
controls that are not applicable to the PVCAM driver, and lacks some fields that
are important for the PVCAM driver.</p>
<p>
<code>pvCam.adl</code> is the main screen used to control the PVCAM driver.
</p>
<div style="text-align: center">
<h3 style="text-align: center">
pvCam.adl</h3>
<img alt="pvCam.png" src="pvCam.png" /></div>
<div style="text-align: center">
<h3 style="text-align: center">
ADBase.adl</h3>
<img alt="pvCam_ADBase.png" src="pvCam_ADBase.png" /></div>
<h2 id="Performance_measurements">
Performance measurements</h2>
<p>
The following measurements were done to demonstrate the performance that can be
obtained with the areaDetector PVCAM driver.</p>
<p>
PUT A TABLE OF PERFORMANCE MEASUREMENTS HERE</p>
<h2 id="Restrictions">
Restrictions</h2>
<p>
The following are some current restrictions of the PVCAM driver:</p>
<ul>
<li>DOCUMENT ANY IMPORTANT RESTRICTIONS OF THE PVCAM DRIVER HERE</li>
</ul>
</body>
</html>