EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  <20002001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  <20002001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Calcout record
From: Ned Arnold <[email protected]>
To: [email protected]
Cc: [email protected]
Date: Mon, 14 Feb 2000 08:06:33 -0600 (CST)
> I am trying to understand details of the calcout record.
> As distributed it does not appear to have any devise support including
> "Soft Channel". I added a devise support entry table in the usual way
> and added the following to the appropriate dbd file:
> device(calcout,CONSTANT,devCalcoutSoft,"Soft Channel")
> 
> This works fine except nothing in my entry table ever gets called.
> All it seems to require is the "Soft Channel" entry.
> 
> What I am really trying to do in the long run is add device support.
> Is this possible?
> 
> Thanks
> Graham.
 
 
Yes, it's possible, but you will have to add the call to device support in the
process() routine of the calcout record. Calling device support is not
"automatic" during record processing, for it is up to the record support
as to when this is actually done during the processing.

Examples abound in base distribution (src/rec) ... look for any code that 
uses "pdset->", such as the following ...

    if(!(pdset = (struct aodset *)(pao->dset))) {
        recGblRecordError(S_dev_noDSET,(void *)pao,"ao: init_record");
        return(S_dev_noDSET);
    }
    /* get the initial value if dol is a constant*/
    if (pao->dol.type == CONSTANT) {
        if(recGblInitConstantLink(&pao->dol,DBF_DOUBLE,&pao->val))
            pao->udf = FALSE;
    }

    /* must have write_ao function defined */
    if ((pdset->number < 6) || (pdset->write_ao ==NULL)) {
        recGblRecordError(S_dev_missingSup,(void *)pao,"ao: init_record");
        return(S_dev_missingSup);
    }
    pao->init = TRUE;
    pao->eoff = pao->egul;

    if (pdset->init_record) {
        status=(*pdset->init_record)(pao);
        switch(status){
        
        
        


If you make such substantial changes to an existing record type, please
rename the record type. This way the original author will not get support
requests about the new features :).



	Ned
	



Navigate by Date:
Prev: Calcout record Graham Waters
Next: Access Fault Dennis M. Reichhold
Index: 1994  1995  1996  1997  1998  1999  <20002001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Calcout record Graham Waters
Next: Access Fault Dennis M. Reichhold
Index: 1994  1995  1996  1997  1998  1999  <20002001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·