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 2025 | 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 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: asyn R4.26 |
From: | Zenon Szalata <[email protected]> |
To: | Mark Rivers <[email protected]>, "[email protected]" <[email protected]> |
Date: | Fri, 27 Feb 2015 21:09:10 -0800 |
Hi Mark,I am using asynPortDriver class. The records are initialized after IOC init and the record in question looks like this:
epics> dbpr CHA:LO:2531-1-2:CWORD,3 ACKS: NO_ALARM ACKT: YES ADEL: 0 ALST: 0 ASG: BKPT: 00 DESC: DISA: 0 DISP: 0 DISS: NO_ALARM DISV: 1 DOL:CONSTANT DRVH: 0 DRVL: 0 DTYP: asynInt32 EGU: EVNT: 0 FLNK:CONSTANT 0 HHSV: NO_ALARM HIGH: 0 HIHI: 0 HOPR: 0 HSV: NO_ALARM HYST: 0 IVOA: Continue normally IVOV: 0 LALM: 0 LCNT: 0 LLSV: NO_ALARM LOLO: 0 LOPR: 0 LOW: 0 LSV: NO_ALARM MDEL: 0 MLST: 0 NAME: CHA:LO:2531-1-2:CWORD NSEV: NO_ALARM NSTA: NO_ALARM OMSL: supervisory OUT:INST_IO @asyn(2531-1,0,1)LO_CWORD PACT: 0 PHAS: 0 PINI: NO PRIO: LOW PROC: 0 PUTF: 0 RPRO: 0 SCAN: Passive SDIS:CONSTANT SEVR: INVALID SIML:CONSTANT SIMM: NO SIMS: NO_ALARM SIOL:CONSTANT STAT: UDF TIME: 2015-02-27 15:41:07.126179705 TPRO: 0 TSE: 0 TSEL:CONSTANT UDF: 0 VAL: 0 epics>I verified that processing the record, it goes into a healthy state. I suppose there is no harm to process the record, since it will write back to the hardware which was just read in. The reason I noticed this is that the EDM byte monitor widget displays the data as uninitialized... The question still remains, since the record should have been processed when the value was written to it and yet the record looks like it was not processed, so what happened?
Thanks Mark, Zen On 02/27/15 16:54, Mark Rivers wrote:
I think STAT and SEVR only get set when the record processes.
When are you doing the callback to device support, before or after iocInit?
If you do the callback after iocInit then the callback will cause the record to process, because it calls scanOnce(). However, if you call it before iocInit it will not call scanOnce() because that will crash the IOC.
Are you using the asynPortDriver C++ base class? If so that takes care of the problem for you because it has a thread that waits for interruptAccept to be true, and then does all of the callbacks to device support.
Mark
-----Original Message-----
From: Zenon Szalata [mailto:[email protected]]
Sent: Friday, February 27, 2015 5:59 PM
To: Mark Rivers; [email protected]
Subject: asyn R4.26
Hi Mark,
I am beginning to use asyn R4.26, where the new feature that you have
added to allow initialization of output records, is of interest.
It works well, except I have noticed one thing.
In my case I am initializing a longout record from the device driver.
It gets the value correctly, UDF is set to 0 but STAT has UDF and SEVR
is INVALID. Do I need to do something else in addition to just push a
new value to the record? I don't want to process the record, which most
likely would put the record in a good state.
Sorry for bugging you and thanks,
Zen