EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

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

Subject: Re: Processing a record a in loop
From: Rod Nussbaumer <[email protected]>
To: [email protected]
Date: Wed, 03 Sep 2014 07:29:52 -0700
David:

Your use case seems extremely typical for streamDevice applications, and it's in use here in many many problem free instances. Can you confirm that the behavior exists only with respect to this device, or is it common to other types of devices and buses you're using, as well? What kind of bus are you using? Does the problem manifest as a slow degradation, or a sudden and spontaneous stoppage? Perhaps there is some noise introducing a rogue character that is stopping the device, such as XOFF in a serial device.

I assume your streamDevice device support is layered upon the asyn package. I suggest enabling the asynTrace facility to allow you to observe the data stream and the timing of the data transfers in your IOC shell, especially as the problem period is anticipated. Using the asyn record and the associated MEDM (any other display panels being distributed for the asyn record???) displays makes this fairly convenient.

Rod Nussbaumer
Controls Group, TRIUMF
Vancouver, Canada


On 09/03/2014 06:55 AM, David Michel wrote:
Thanks Bob, I'm aware of being able to change the scan rate this way.
But longer scan rate is not really desirable. The typical task performed
by the device is only a couple of seconds, so long scan rate for status
updates would be close to useless.

David


---
Dr. David Michel
Address: 8 Viking Drive, Didcot, OX11 9RD, Oxfordshire
Mobile: 0789 670 98 01 - Home: 0123 581 46 93


On 3 September 2014 14:26, Dalesio, Leo <[email protected]
<mailto:[email protected]>> wrote:

    If you need a longer scan rate - you can modify menu.dbd. I think
    that the instructions in the Application Developer's Guide covers this.
    Bob

    ________________________________________
    From: [email protected]
    <mailto:[email protected]>
    [[email protected]
    <mailto:[email protected]>] on behalf of Mark Rivers
    [[email protected] <mailto:[email protected]>]
    Sent: Wednesday, September 03, 2014 8:08 AM
    To: David Michel; EPICS mailing list
    Subject: RE: Processing a record a in loop

    What is the maximum/typical time between when you send a query and
    receive a response?

    You should be able to set the timeout to a value just longer than
    the maximum and then you can process the record with any fixed rate
    (1 seconds, 10 seconds, etc.).  The record will be busy (PACT=1) if
    the next scan interval happens before the reply from the previous
    one.  So it will not keep sending query messages, it will wait for a
    reply before proceeding.

    What does your protocol file look like?  Is it a single query per
    response, etc.?

    Mark

    ________________________________
    From: [email protected]
    <mailto:[email protected]>
    [[email protected]
    <mailto:[email protected]>] on behalf of David Michel
    [[email protected] <mailto:[email protected]>]
    Sent: Wednesday, September 03, 2014 6:02 AM
    To: EPICS mailing list
    Subject: Processing a record a in loop


    Hi All,

    I'm using StreamDevice to talk to a custom device that doesn't
    support I/O interrupt so one has to keep sending commands to it to
    get status information.

    Problem is that after a while (~ couple of hours), the device's
    buffer fills up and doesn't reply anymore. Increasing the
    ReplyTimeOut improves things slightly, but the problem still
    eventually occurs.

    One potential solution would be to send the next command only once
    the previous one has returned in a loop (instead of using a set
    frequency).

    Making the record FWD link to itself doesn't seem to do it... I
    started something using purely database trickery with a FANOUT
    record set with a fixed SCAN field and disabling it depending on
    whether the streamdevice record has finished processing or not...
    but it's getting messy

    Is there an elegant way of doing this?

    David








References:
Processing a record a in loop David Michel
RE: Processing a record a in loop Mark Rivers
RE: Processing a record a in loop Dalesio, Leo
Re: Processing a record a in loop David Michel

Navigate by Date:
Prev: RE: Processing a record a in loop Mark Rivers
Next: RE: asyn record Mark Rivers
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: Processing a record a in loop David Michel
Next: RE: Processing a record a in loop Emmanuel Mayssat
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  <20142015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 17 Dec 2015 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·