EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: [Fwd: Re: ICALEPCS 2005: EPICS workshop: EPICS V4 Runtime Database]
From: Kay-Uwe Kasemir <[email protected]>
To: Marty Kraimer <[email protected]>
Cc: [email protected]
Date: Thu, 29 Sep 2005 12:02:48 -0400

void collectSample={
    processLink=[3] {
        {pvname = “incA”;      parallel=true;  wait=true},
        {pvname = “incB”;      parallel=false; wait=true},
        {pvname = “getSample”; parallel=false; wait=true}
    }
}

I can see that incB has parallel set to false, but will indeed be processed in parallel (with incA). In other words, using this syntax setting parallel to false will stop the next link from being processed in parallel, not this link. I fear users will keep making mistakes forever because they don't remember if setting parallel changes this or the next link's behaviour.

I agree that it took me two times to understand this.
I think the 'parallel' is meant as a 'execute in fork'.
So incA is forked off, incB is started 'in the same process',
then we wait for both.

What about changing the syntax a bit, so that your example reads:

void collectSample={
    processLink=[3] {
        {pvname = “incA”;      wait=no},
        {pvname = “incB”;      wait=completion},
        {pvname = “getSample”; wait=completion}
    }
}

That's misleading because we _do_ want to wait for incA (and incB)
to complete before taking a sample.

Maybe it's more obvious with a nested syntax:

void collectSample={
    processLink=[2] {
        {pvname = [2]{“incA”, "incB"}; wait=completion},
        {pvname =     “getSample”;     wait=completion}
    }
}

So incA and incB can run in parallel,  we wait for both to complete,
then getSample.

Well, one could even go one step further and include some functionality of the seq record by allowing numbers:

void collectSample={
    processLink=[3] {
        {pvname = “incA”;      wait=no},
        {pvname = “incB”;      wait=2.5},
        {pvname = “getSample”; wait=completion}
    }
}

which would fire off incA, incB, and then getSample after waiting for 2.5 seconds, regardless of incB's process state, finally wait for getSample to complete.

I think that's again wrong, you do want to wait for incA and incB.



References:
[Fwd: Re: ICALEPCS 2005: EPICS workshop: EPICS V4 Runtime Database] Marty Kraimer

Navigate by Date:
Prev: RE: strings Jeff Hill
Next: Re: strings Kay-Uwe Kasemir
Index: 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: [Fwd: Re: ICALEPCS 2005: EPICS workshop: EPICS V4 Runtime Database] Marty Kraimer
Next: [Fwd: Re: Link arrays / syntax] Marty Kraimer
Index: 2002  2003  2004  <20052006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 02 Feb 2012 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·