Experimental Physics and
| |||||||||||||||||
|
Hi Jameson,
On Thu, Aug 14, 2014 at 7:18 PM, Jameson Graef Rollins <[email protected]> wrote: Hi, folks. I'm seeing what might be a bug in the behavior of PVs in the Sorry for the trouble. The basic issue here is that PV.get() relies (by default) on a callback on the monitored value to keep the PV's value up-to-date, avoiding explicit calls to ca.get(). The put(wait=True) or put-with-callback uses a *different* callback on the put() request. When the put-callback completes, the callback for the monitored value may not have been run. It's reasonable to say that when the put-with-wait completes that the cached value should be updated. I'll look into that. There are two potential solutions with the current behavior. First, you can add a short wait after the put() to allow the monitored value to update, perhaps as: for i in range(10): pv.put(i, wait=True) time.sleep(0.001)
print pv.get() You could replace time.sleep() with epics.poll(). The danger with this approach is that it will add a slight delay, and doesn't actually guarantee that pv.get() will have the latest value. But it will probably work, at least more often. The alternative is to: for i in range(10): pv.put(i, wait=True)
print pv.get(auto_monitor=False) which will make an explicit call to ca.get() every time, not relying on the monitored value. That will add a potential delay, but is probably the safest way to ensure that the value is the current one. Does that work for you? --Matt Newville
| ||||||||||||||||
ANJ, 17 Dec 2015 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing · |