BESSY GmbH

devSoftAsyn - Information and Download



site map site map


EPICS

EPICS Soft Asynchonous Device Support

Module Owner:
Benjamin Franksen

This page is the home of the EPICS devSoftAsyn module, which provides soft asynchronous device support for standard EPICS output records.

This site gives access to the software source code, information on other modules which are needed to install and run it, and documentation on the how to include and use it in your EPICS applications. Please email any comments and bug reports to the module owner who is responsible for coordinating development and releases.

Where to Find it

You can download the software directly from the links in the table below:

    Module Version EPICS Release Filename
    1-1
    3-13-6 devSoftAsynApp1-1.tgz

Site Installation and Building

After obtaining a copy of the distribution, it must be installed and built for use at your site. These steps only need to be performed once for the site (unless versions of the module running under different releases of EPICS and/or the other required modules are needed).
  1. Create an installation directory for the module. For example, at BESSY this module is installed under ~epics/support/soft/<version> (together with other soft support modules).
  2. Cd into the new directory and execute makeBaseApp.pl. It might be necessary to edit the (just generated) config/RELEASE file and set the path to your installation of EPICS.
  3. Uncompress and untar the distribution file into the new directory. Under Unix, this can be done with the command
      tar zxf <distfile>
  4. Run gnumake in the top level directory (the one in which you executed makeBaseApp.pl) and check for any compilation errors.

Documentation / Description

Often the EPICS programmer is confronted with the following problem: There is an output record with an asynchronous device support. But the data to be output must be preprocessed by one or more soft records before sending it to the hardware. Then, a normal ca or db put to one of the soft records will process synchronously i.e. will complete before the data is actually written to the hardware.

There are cases where this is not the desired behavior. Instead the front-end soft records should complete processing only after the asynchronous hardware record has completed. In order to achieve this, you can now use this asynchronous soft support to connect your soft record's OUT link to the hardware record's VAL. The connection will then act like an asynchronous link.

The technique to achieve this is the EPICS putNotify feature. Instead of performing a dbPutLink() on the OUT link, like the standard soft support does, the asynchronous soft support performs a dbPutNotify().

Like standard EPICS soft support, there are two flavors of soft asynchronous support: without conversion ("Asyn Soft Channel") and with conversion ("Asyn Raw Soft Channel"). Supported record types are:

    ao, bo, longout, mbbo, mbboDirect, stringout.
Since longout and stringout do not have conversion, the following combinations are supported (see devSoftAsyn.dbd):

    Record Type DSET DTYP
    ao devAoSoftAsyn Asyn Soft Channel
    bo devBoSoftAsyn Asyn Soft Channel
    longout devLoSoftAsyn Asyn Soft Channel
    mbbo devMbboSoftAsyn Asyn Soft Channel
    mbboDirect devMbboDirectSoftAsyn Asyn Soft Channel
    stringout devSoSoftAsyn Asyn Soft Channel
    ao devAoSoftRawAsyn Asyn Raw Soft Channel
    bo devBoSoftRawAsyn Asyn Raw Soft Channel
    mbbo devMbboSoftRawAsyn Asyn Raw Soft Channel
    mbboDirect devMbboDirectSoftRawAsyn Asyn Raw Soft Channel

The link type is INST_IO. The link definition syntax is:

    @<pv-name> [<timeout>]

The first parameter <pv-name> must be the name of a pv on the same IOC. The optional second parameter <timeout> must be a (floating point) number specifying the dbPutNotify timeout in seconds.

There is an optional configuration routine that may be called from the startup file:

    void devSoftAsynSetTimeout(double timeout)
Calling this routine changes the default timeout of 5.0 seconds for putNotify request (but only if the argument is strictly greater than zero).

Notes

  1. I am open for suggestions to improve this stuff.
  2. If anyone wonders why only output records are supported, well there is no "dbGetNotify" feature in EPICS; too bad. I fear, a lot of the (not uncomplicated) code that implements putNotify would have to be duplicated in any attempt to do something similar for input records.
  3. What i said under (2) may be completely wrong.
  4. Why not use a normal link (link type CONSTANT, funny name btw) instead of INST_IO?


Last modified: Wed May 7 16:47:57 2003   Maintained by: Benjamin Franksen <franksen@mail.bessy.de>
BESSY