Skip to content

scientific-software-hub/rx-controls-suite

Repository files navigation

rx-controls-suite

Reactive Programming Suite for Scientific Control Systems — the same ReactiveX operator vocabulary across multiple control-system platforms.

poll → zip → sliding-average → backpressure → fluent pipeline

Works the same way whether you're talking to Tango Controls (Java) or EPICS (Python).


Sub-projects

Sub-project Platform Language Stack
RxTango/java Tango Controls Java 11+ jbang + RxJava3 + ezTangoAPI
RxEpics/python EPICS Channel Access Python 3.10+ uv + RxPY v4 + caproto
RxTine/java TINE (DESY) Java 11+ jbang + RxJava3 + TINE Java API

RxTango/java — quick start

Prerequisites: jbang, Docker, JTango artifacts in ~/.m2 (see RxTango/java/README.md).

cd RxTango/java
docker compose up -d          # start Tango stack (MariaDB + DatabaseDS + TangoTest)

# run examples directly
jbang examples/ReadAttribute.java tango://localhost:10000/sys/tg_test/1 double_scalar
jbang examples/PollAttribute.java tango://localhost:10000/sys/tg_test/1 double_scalar 500

# or via catalog aliases
jbang stats@.     tango://localhost:10000/sys/tg_test/1
jbang pipeline@.  tango://localhost:10000/sys/tg_test/1

RxEpics/python — quick start

Prerequisites: Python 3.10+, uv or pip, Docker.

cd RxEpics/python
pip install -r requirements.txt
docker compose up -d          # start soft IOC with TEST:CALC, TEST:DOUBLE, ...

python examples/read_pv.py TEST:DOUBLE TEST:LONG
python examples/monitor_pv.py TEST:CALC
python examples/pv_pipeline.py

Design philosophy

  • One vocabulary, many platforms. poll, zip, sliding average, backpressure, fluent pipeline — the same patterns, regardless of the underlying control system.
  • Spec-compliant. RxTango publishers are verified against the reactive-streams TCK.
  • No framework lock-in. Production code depends only on org.reactivestreams (Java) or reactivex (Python). RxJava3 / caproto are used in examples but swappable.
  • Zero build step for examples. jbang inline deps for Java; plain python for Python.

RxTine/java — quick start

Prerequisites: jbang, Docker, TINE jars in docker/ (see RxTine/java/CLAUDE.md).

cd RxTine/java
cp /path/to/tine.jar /path/to/jsineServer.jar docker/
docker compose up -d          # start jsineServer (JSINESRV in context TEST)

jbang read-property@. /TEST/JSINESRV/SINEDEV_0@jsinesrv Sine
jbang poll@.          /TEST/JSINESRV/SINEDEV_0@jsinesrv Sine 500
jbang pipeline@.      /TEST/JSINESRV/SINEDEV_0@jsinesrv

License

AGPL-3.0 for open / non-commercial use. Commercial use requires a separate license — see LICENSE-COMMERCIAL.md.

About

Reactive Programming Suite for Scientific Control Systems

Resources

License

AGPL-3.0, Unknown licenses found

Licenses found

AGPL-3.0
LICENSE
Unknown
LICENSE-COMMERCIAL.md

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors