Experimental Physics and Industrial Control System
|
Thanks, Stephanie. That did the trick.
--- rod.
Allison, Stephanie wrote:
Hi Rod,
The INIT (INAM) subroutine is called during the database record initialization part of iocInit:
http://www.aps.anl.gov/epics/base/R3-14/12-docs/AppDevGuide/node8.html#SECTION00840000000000000000
The INAM routine is only meant to be used to allocate memory and any other resources or system initialization needed by the processing (SNAM) subroutine.
The IOC is not yet ready for ANY record processing so your dbPutField fails.
Instead, you need to process during the initial processing part of iocInit (aka when PINI=YES processing is done) which comes a little later. This processing will still be done before any EDM client connects to the waveform so should meet your requirement. So move the dbPutField to the processing subroutine and set PINI=YES. I assume SCAN=Passive so it'll only process once.
Stephanie Allison
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf
Of Rod Nussbaumer
Sent: Thursday, January 13, 2011 9:27 AM
To: [email protected]
Subject: Access to records from subroutines during iocInit
Hi All.
I have a question/problem, which may simply be me trying to work outside
the expected norms. It involves writing to records during IOC
initialization. I will give a summary of the situation:
A subroutine record has on one of its inputs, a link to a waveform
record. During the INIT subroutine, I call dbGetPdbAddrFromLink() to
locate the waveform record, as well as call dbGetNelements() to find the
size of the respective waveform record. This seems to work.
My intention is to initialize the waveform record with data
algorithmically created. I do this by creating an array, and calling
dbPutField(), using the value saved from the earlier call to
dbGetPdbAddrFromLink(). This results in the following:
A call to 'assert(dbLockIsInitialized)'
by thread '_main_' failed in ../dbLock.c line 239.
EPICS Release EPICS R3.14.11 $R3-14-11$ $2009/08/28 18:47:36$.
Local time is 2011-01-13 09:05:45.332489000 PST
Please E-mail this message to the author or to [email protected]
Calling epicsThreadSuspendSelf()
If I perform the same actions within the PROC subroutine of the
subroutine record, it seems to work as I expected it to. So, if this is
not a bug, is there a proper way to accomplish what I am attempting?
There are no other records referencing or linked to the waveform record.
Its data is used purely for visualization purposes in an EDM X-Y Graph.
Thanks for listening.
Rod Nussbaumer
ISAC Controls, TRIUMF
Vancouver, Canada.
- References:
- Access to records from subroutines during iocInit Rod Nussbaumer
- RE: Access to records from subroutines during iocInit Allison, Stephanie
- Navigate by Date:
- Prev:
Re: MOXA terminal server Eric Norum
- Next:
sscan and averaging [SEC=UNCLASSIFIED] LYNCH, Damien
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
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:
RE: Access to records from subroutines during iocInit Allison, Stephanie
- Next:
sscan and averaging [SEC=UNCLASSIFIED] LYNCH, Damien
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
<2011>
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|
ANJ, 18 Nov 2013 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|