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  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024  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  <20222023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Embedding pyPVA server in EPICS IOC: How?
From: "Veseli, Sinisa via Tech-talk" <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>, Kuldeep Joshi <kuldeep.joshi at gmail.com>, "Rivers, Mark L." <rivers at cars.uchicago.edu>
Date: Fri, 6 May 2022 14:22:32 +0000
Hi,

Not sure if this helps or not, but pvapy comes with mirror server which allows one to expose any CA PV over PVA. You can use it directly via command line, or via the python API, e.g.:

$ pvapy-mirror-server --channel-map="(pvapy:image,13SIM1:Pva1:Image,PVA)"

>>> import pvaccess as pva

>>> s = pva.PvaMirrorServer()

>>> s.addMirrorRecord('pvapy:image', '13SIM1:Pva1:Image', pva.PVA)


Sinisa

$ pip install pvapy
$ pvapy-mirror-server -h
usage: pvapy-mirror-server [-h] [--channel-map CHANNEL_MAP]
                           [--runtime RUNTIME] [-v]

PvaPy Mirror Server

optional arguments:
  -h, --help            show this help message and exit
  --channel-map CHANNEL_MAP, -cm CHANNEL_MAP
                        Channel map specification given as a comma-separated
                        list of tuples of the form
                        (<mirror_channel>,<source_channel>[,source_provider]);
                        if specified, source provider must be either "pva" or
                        "ca" (default: pva)
  --runtime RUNTIME, -rt RUNTIME
                        Server runtime in seconds; values <=0 indicate
                        infinite runtime (default: infinite)
  -v, --version         show program's version number and exit


--
Siniša Veseli
Scientific Software Engineering & Data Management
Advanced Photon Source
Argonne National Laboratory
sveseli at anl.gov
(630)252-9182

From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Mark Rivers via Tech-talk <tech-talk at aps.anl.gov>
Sent: Friday, May 6, 2022 7:55 AM
To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>; Kuldeep Joshi <kuldeep.joshi at gmail.com>
Subject: Re: Embedding pyPVA server in EPICS IOC: How?
 
Hi Kuldeep,

There is an areaDetector driver called NDDriverStdArrays that is intended to do more or less what you want, but without Python.  It listens for CA monitors on arrays (like those from the sscan record) and puts them into NTNDArrays that can be published with PVA via NDPluginPva.  It has a number of operating options, and so might be able to do what you want.


I realize this does not answer your original question, which is about using Python.

Mark


From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Kuldeep Joshi via Tech-talk <tech-talk at aps.anl.gov>
Sent: Friday, May 6, 2022 12:09 AM
To: tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: Embedding pyPVA server in EPICS IOC: How?
 
Hello,
I am presently having an EPICS IOC with CA protocol, with SynApps toolkit. ( can python softIoc be used with SynApps)
I wanted the data to be displayed in a Tabular format. For this I set up  a separate multi threaded python process, with pyepics on the client side, gathering (monitoring for change) the data from the SynApps SScan Module, this data is processes and published on a python pvaccess server (pypva) in a tabular format.
Here I intentionally kept the processing in python code as the user has flexibility to adapt the code without recompiling.
The EPICS IOC and the python (pyepics client, pypva server) are started as separate processes. I can use procserv to initiate the IOC as well as the python based CA and PVA client-server.

I was wondering if by using pyDevSup or PyDevice, can I directly monitor the SScan data from the IOC and publish it directly to the python pvaccess server. This will save me one external CA connection. ie is it possible in pyDevSup and PyDevice to use the internal mechanism of IOC for monitoring and acquiring data.

The attempted connection is as below. Is there an easier/elegant way?

    <------------------------------------------------------->
EPICS IOC <--> pyepics <---> pypva <---> phoebus

I tried embedding the above python client server code using pyDevSup and PyDevice  I am getting similar warnings in both modules.
cas warning: Configured TCP port was unavailable.
cas warning: Using dynamically assigned TCP port 34549,
cas warning: but now two or more servers share the same UDP port.
cas warning: Depending on your IP kernel this server may not be
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST)
iocRun: All initialization complete

I guess it has to do with the same port used by the IOC and pyepics. How do I separate the port on the client and server side so as to avoid conflict.

Regards,
Kuldeep Joshi

PS: I am using the following sequence (in pyepics) as given in the SScan documentation to gather the data

  1. Create local variables to hold cached values of the fields to be monitored, and a local variable (which I'll call "numPoints") to hold the number of data points accumulated.
  2. Monitor DnnCV, RmCV and VAL (scalar data and control fields).
  3. Monitor DnnDA, PmRA, DATA, and CPT (array data and control fields).
  4. Whenever DnnCV, RmCV, or CPT are received, cache the received scalar value in a local variable.
  5. Whenever DnnDA or PmRA are received, cache the received array value in a local variable.
  6. When DATA=""> is received, clear all data arrays, and reset numPoints to zero.
  7. When VAL is received, append to all data arrays from cached scalar values, and increment numPoints.
  8. When DATA=""> is received, clear all data arrays and replace with cached array values; set numPoints to the cached value received from CPT.

Replies:
Re: Embedding pyPVA server in EPICS IOC: How? Kuldeep Joshi via Tech-talk
References:
Embedding pyPVA server in EPICS IOC: How? Kuldeep Joshi via Tech-talk
Re: Embedding pyPVA server in EPICS IOC: How? Mark Rivers via Tech-talk

Navigate by Date:
Prev: Re: Generating EPICS records from a spreadsheet Ian Gillingham via Tech-talk
Next: Employment opportunity at the East Asian Observatory/JCMT in Hilo, Hawaii Maren Purves via Tech-talk
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  <20222023  2024 
Navigate by Thread:
Prev: Re: Embedding pyPVA server in EPICS IOC: How? Mark Rivers via Tech-talk
Next: Re: Embedding pyPVA server in EPICS IOC: How? Kuldeep Joshi via Tech-talk
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  <20222023  2024 
ANJ, 14 Sep 2022 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·