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  2022  2023  2024  2025  <2026 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  2025  <2026
<== Date ==> <== Thread ==>

Subject: RxEpics/cpp: ReactiveX-style recipes for EPICS/PVXS
From: "Khokhriakov, Igor via Tech-talk" <tech-talk at aps.anl.gov>
To: tech-talk <tech-talk at aps.anl.gov>
Date: Wed, 24 Jun 2026 15:53:54 +0200 (CEST)
Hi all,

I wanted to share a project that may be interesting to people working with EPICS, PVXS, acquisition scripts, or higher-level control-system automation.

The project is called rx-controls-suite:

https://urldefense.us/v3/__https://github.com/scientific-software-hub/rx-controls-suite__;!!G_uCfscf7eWS!dLLG5g5HnbbiJvQpn7Sq75aLLC5Lgx6AgUJF_Ccg4Z_wpdj6XUk9hDjeUcQ33aGbZtWw4kXOrNFbSDl6gMbOGm-wBtCFyqIQ$ 

The basic idea is to express common control-system tasks as reactive streams and reusable recipes.

For example:

poll or monitor a value;
combine several values into one snapshot;
react to fault conditions;
apply quality flags;
share one health stream with multiple consumers;
build acquisition or middleware logic as a pipeline.

The suite originally grew from Tango-related work, but the goal is explicitly cross-platform: the same ReactiveX-style operator vocabulary across different control systems and languages.

I have now added a C++ EPICS and Python subprojects:

RxEpics/cpp
RxEpics/python

It wraps EPICS/PVXS concepts as rxcpp::observable<T> streams, aligned with the existing Python design. There is also a corresponding RxTango/cpp side, because one of the long-term goals is to express cross-SCADA recipes using the same vocabulary on both sides.

The motivation is not to replace existing EPICS tools. It is to explore whether some recurring automation patterns can be made more explicit and reusable, instead of being reimplemented each time with custom loops, callbacks, buffers, timestamp matching, and error-handling glue.

I recently presented the broader idea at the Tango Users Group Meeting 2026, using a demo that combines a simulated Tango storage ring and an EPICS beamline in one Python process:

https://urldefense.us/v3/__https://www.youtube.com/watch?v=9CyGPIwJlxc__;!!G_uCfscf7eWS!dLLG5g5HnbbiJvQpn7Sq75aLLC5Lgx6AgUJF_Ccg4Z_wpdj6XUk9hDjeUcQ33aGbZtWw4kXOrNFbSDl6gMbOGm-wBjncTtBQ$ 

I would appreciate feedback from the EPICS community, especially around the C++/PVXS direction:

Does a ReactiveX-style layer around EPICS/PVXS sound useful?
Are there existing EPICS patterns or tools this should align with?
Which recurring EPICS automation recipe would be a good first serious example?

Best regards,
Igor Khokhriakov

Navigate by Date:
Prev: Re: Problems with Dante (XGLab) Driver Mark Rivers via Tech-talk
Next: Re: Problems with Dante (XGLab) Driver Dariush Hampai 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  2022  2023  2024  2025  <2026
Navigate by Thread:
Prev: Epicsarchiver-mgmt-client Sky Brewer via Tech-talk
Next: 2026 white paper on EPICS vs commercial SCADA software Evans, Richard K. (GRC-H000) 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  2022  2023  2024  2025  <2026
ANJ, 24 Jun 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·