Experimental Physics and
Mark Rivers wrote:
> We have set the alarm status of the record to the most appropriate value based on the limited
> choices offered by EPICS.
In response to your message to me at
My response for that is listed at B).
I would like to contribute what I had developed in the past few weeks
regarding the disconnection/reconnection of the cameras. The two objectives
are 1) to whiten the rectangular boxes of the ASYN output records on the GUI
screen when the ASYN device is disconnected, and 2) to process the value
of the EPICS records to match the corresponding parameters setup of the
device at reconnection of the cameras.
Please CC the response to email@example.com because my E-mail
address is changed and the new one is not updated for the subscription yet.
A) There were two options being considered for the response of disconnection/reconnection:
Option 1) : See the attached patch prosilica.template.diff and ADBase.template.diff for the change in the record files.
To modify mainly the record (i.e. database) file link, and run
post_event(eventNumber) in the
prosilica::cameraLinkCallback() of prosilica.cpp file when the camera is found.
The driver should reset the value of all the busy records (e.g. the 'Acquire'
record for the cameras) to be 0 before the event was generated when the
camera is disconnected or reconnected.
The event number for each camera can be specified via prosilicaConfig() and
st.cmd. This method will trigger the processing of the output records.
For the readbacks, the SCAN type is changed to 'Passive' and will be
processed if its associated output records are processed. This works very well. It is the same method as what I did at NSLS for the RTEMS firewire camera device driver, of which software is posted at
for one's reference.
This method works well if one wishes to restore the value of the records to
what were set by EPICS users prio to the disconnection of the cameras. However, for other ASYN devices, their associated record files need to be
modified as well.
Option 2) : The attached cam.diff is the patch for your reference, which I had developed for this option.
To modify the source code by creating a link list of pointers to all the output
records that need to be processed at disconnection/reconnection, and
call 'dbpf' to process them in the driver's connection callback function
(i.e. prosilica::cameraLinkCallback() ). The
driver should reset the value of all the busy records (e.g. the 'Acquire' record for the cameras) to be 0. The readback records should be changed to be what is
similar to the attached prosilica.template.diff and ADBase.template.diff. In this case, the fanout records will not be needed. Only the FLNK links for each
readbacks are needed.
The attached cam.diff is the patch for your reference, which I had developed
for this option. Only the ASYN ao, asynFloat64, bo, lo, and mbbo records were
modified for this purpose. I did not change the code for the waveform record or finish the development for this option because I was not sure if you wish to
pursuit this option. The prosilica.cpp file is modified based on the file, which
you committed the change to SVN, as per your E-mail reply at http://www.aps.anl.gov/epics/tech-talk/2013/msg01220.php.
I would recommend a change to the patch that the dbpf() command
should set the .PROC field to be 1 if one wishes
to restore the value of the records to what were set by EPICS users before the
disconnection of the cameras. One exception is that the 'Acquire' (i.e. busy)
record should always be reset to be 0 (i.e. off) at the reconnection/disconnection.
The advantage of this option is that once the software is fully developed,
there is no need to change the record files for the output records. However, the SCAN field of the input records should be set as 'Passive' and be triggered
via its associated output records.
B) To be precise and be consistent with other ASYN software written in
asyn4-21/asyn/devEpics/*.c, the busy record (e.g. for the Acquire on/off record)
should set EPICS alarm status to be “COMM” instead of WRITE_ALARM, when the device is disconnected. The ASYN ao, asynFloat64, bo, lo, and mbbo records written in the directory asyn4-21/asyn/devEpics (see devAsynInt32.c and devAsynFloat64.c) set the EPICS alarm severity to be “Invalid” and the EPICS alarm status to be “COMM”, which are correct actions.
C) The 'Acquire' record at ADBase.template should be set as 'PINI=YES' and 'VAL=0' to set the camera in a known state (i.e. 'off' state) when the IOC is started.
D) To whiten the rectangular box, a new devConnected Boolean variable can be
added in the GUI manager (e.g. MEDM) to monitor the connection of the
ASYN device. If the STAT field of an EPICS record is changed to be epicsAlarmComm, then pr->devConnected is set to 0, and
pr->updateValueCb will be called to draw white rectangular boxes on the
See the attached patch medm3_1_6.diff file is for your reference.
E) disconnected.jpeg is the result of the image when the camera is disconnected.
Hope that it helps.
|ANJ, 20 Apr 2015||
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·