Hey Eric,
After doing some homework with the Application Developer's guide I came to the same conclusion. Pushing data with FLNKs produces the desired result. Thanks for the help.
Andrew
On Sep 13, 2010, at 4:23 PM, Eric Norum wrote:
> When you have records performing asynchronous input it is often better to "push" data through a sequence of records rather than to "pull" it as you are now doing.
>
> Could you restructure your database to have the $(MUX)VOLT:Chan203 FLNK to the calc and calcout records? FLNK processing would not be done until the $(MUX)VOLT:Chan203 record had actually received the result of the MEAS:VOLT:DC? query so the calc and calcout records would have up-to-date values.
>
> On Sep 13, 2010, at 2:56 PM, [email protected] wrote:
>
>>
>>
>> Hey everyone,
>>
>> I'm having a problem with a calcout record that seems to process before it has passed control to its input record(s). I have a database with two records,
>>
>> record(calc, "Current:Coil") {
>> field(DESC, "Coil Current")
>> field(SCAN, "Passive")
>> field(MDEL, ".1")
>> field(ADEL, ".1")
>> field(INPA, "Current:Coil.VAL NPP")
>> field(INPB, "$(MUX)VOLT:Chan203.VAL PP MS")
>> field(CALC, "A + B")
>> field(PINI, "NO")
>> field(EGU, "A")
>> field(SDIS, "0")
>> }
>>
>> record(calcout, "Voltage:Output") {
>> field(DESC, "Output Voltage")
>> field(SCAN, "Passive")
>> field(INPA, "Current:Coil.VAL PP MS")
>> field(OOPT, "Every Time")
>> field(DOPT, "Use CALC")
>> field(CALC, "A")
>> field(OUT, "$(VLTPROG)P25V.VAL PP MS")
>> field(PINI, "YES")
>> field(EGU, "V")
>> field(SDIS, "0")
>>
>> }
>>
>> and when I start my ioc, I get:
>>
>> Starting iocInit
>> ############################################################################
>> ## EPICS R3.14.11 $R3-14-11$ $2009/08/28 18:47:36$
>> ## EPICS Base built Sep 2 2010
>> ############################################################################
>> 2010/09/13 14:37:11.593 172.25.100.69:1234 write 32
>> MEAS:VOLT:DC? (@203)\n++read eoi\n
>> 2010/09/13 14:37:11.593 172.25.100.97:1234 write 25
>> APPL P25V, 0.000000, 0.1\n
>>
>> iocRun: All initialization complete
>> ## Start any sequence programs
>> #seq sncxxx,"user=andrewwagnerHost"
>>
>> epics> 2010/09/13 14:37:11.870 172.25.100.69:1234 read 16
>> +8.92303000E-04\n
>>
>>
>> It seems the calcout record processes at init (as desired) passes control to input A which issues the MEAS:VOLT:DC? command but doesn't wait for input A to actually return a value. Input A returns control to the calcout record too quickly so if I print the record I get:
>>
>> epics> dbpr Voltage:Output
>> A: 0 ASG: B: 0 C: 0
>> CALC: A D: 0 DESC: Output Voltage
>> DISA: 0 DISP: 0 DISV: 1 DLYA: 0
>> E: 0 F: 0 G: 0 H: 0
>> I: 0 J: 0 K: 0 L: 0
>> NAME: Voltage:Output OCAL: 0 OEVT: 0
>> OVAL: 0 POVL: 0 PVAL: 0 SEVR: INVALID
>> STAT: LINK TPRO: 0 VAL: 0
>>
>>
>> with an INVALID LINK. How can I guarantee that control from the input is not passed back to the calcout record until it has finished measuring the voltage? Should I set SDIS "Current:Coil.PACT" ? Thanks very much for your help.
>>
>> Andrew
>>
>>
>>
>
> --
> Eric Norum
> [email protected]
>
- References:
- asynchronous record behavior apwagner
- Re: asynchronous record behavior Eric Norum
- Navigate by Date:
- Prev:
Re: asynchronous record behavior Eric Norum
- Next:
Strange gateway error message Dirk Zimoch
- 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: asynchronous record behavior Eric Norum
- Next:
Re: asynchronous record behavior Dirk Zimoch
- 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
|