Skip to content

jacomago/awesome-epics

Repository files navigation

Awesome EPICS Awesome

The Experimental Physics and Industrial Control System (EPICS) is a set of software tools and applications used to develop and implement distributed control systems to operate devices such as particle accelerators, telescopes and other large experiments.

Contents

Main EPICS Links

Base

  • EPICS Base - EPICS is a set of Open Source software tools, libraries and applications developed collaboratively and used worldwide to create distributed soft real-time control systems for scientific instruments such as a particle accelerators, telescopes and other large scientific experiments.
  • EPICS Docs - Documentation for EPICS Base.

Editor Extensions

  • VSCode EPICS - VS Code colorization for EPICS database, templates and substitution files.
  • epics.nvim - EPICS-related tools for Neovim including syntax highlighting and utilities.
  • tree-sitter-epics - Parsers for EPICS DSL file types: .db, .template, .substitutions, .proto, and .st SNL files.
  • EPICS IDE (Eclipse) - Eclipse plug-in for EPICS development with project wizards and IOC management.

Network Protocols

pvAccess

pvAccess is a high-performance network communication protocol for signal monitoring and scientific data services interconnect.

  • pvAccess Specification - The official specification of the pvAccess network protocol.
  • pvxs C++ Implementation - Modern C++11 library implementing pvAccess and Channel Access, with Python bindings (p4p).
  • Original C++ Implementation - The original C++ pvAccess library. Archived.
  • p4p - Python bindings for pvAccess with client, server, and gateway (pvAgw) APIs.
  • pvaPy - Python API for pvAccess with support for PvObject serialization and RPC services.
  • Phoebus Java Implementation - The Java pvAccess implementation maintained within the Phoebus core.
  • Original Java Implementation - The original Java pvAccess library in epicsCoreJava. Archived.
  • pva2pva - PVAccess gateway/proxy for bridging pvAccess networks; superseded by p4p.gw. Archived.
  • spvirit - Complete pvAccess protocol suite in Rust (codec, client, server, NT types, Python bindings) (ISIS).
  • pvxs-sys - Low-level Rust FFI bindings for the pvxs C++ pvAccess library.

Channel Access

  • Channel Access Specification - The official specification of the Channel Access network protocol.
  • Java Implementation - Java Channel Access (JCA) client and server library.
  • Jackie - Jackie Java Channel Access client library.
  • pyepics - Python interface to the EPICS Channel Access (CA) library for the EPICS control system.
  • caproto - Pure-Python Channel Access implementation (client and server) with a pluggable I/O model.
  • pcaspy - Portable Channel Access Server in Python for embedding CA servers in Python applications (PSI).
  • cothread - Python library for asynchronous Channel Access using cooperative threading (Diamond Light Source).
  • aioca - Asynchronous Channel Access client for Python asyncio (Diamond Light Source).
  • ophyd - Hardware abstraction layer for EPICS and other control systems, part of the Bluesky ecosystem.
  • NetChannelAccess - Pure C#/.NET implementation of the Channel Access protocol (client and server) (PSI).
  • epicars - Standalone pure-Rust Channel Access protocol client.
  • epics-ca - Rust client library for Channel Access.
  • ca-nameserver - Channel Access PV name server: lets clients discover PVs without flooding every subnet.
  • cacm - Channel Access Client Monitor: command-line CA monitoring tool.
  • caTools - PSI's enhanced Channel Access command-line tools (caget, caput, camonitor, cawait, and more) (PSI).

Other Language Bindings

Channel Access client interfaces for languages and environments beyond Python.

  • matlab_ca - MATLAB Channel Access client providing MCAGET/MCAPUT/MCAMON functions.
  • labCA - EPICS Channel Access interface for MATLAB and Scilab.
  • CALab - Channel Access client plugin for LabVIEW.

Modules

Driver Infrastructure

  • asyn - EPICS module for driver and device support.
  • StreamDevice - EPICS Driver for message based I/O (PSI).
  • devlib2 - Portable helper library for PCIbus, MMIO, and VME64 CR/CSR hardware access; used by many hardware support modules.
  • regdev - Generic EPICS register-device support framework for memory-mapped and register-based hardware (PSI).
  • mmap - regDev driver for VME and file-based memory maps (PSI).
  • epics-open62541 - EPICS device support acting as an OPC UA client via the open62541 library (KIT).
  • asynPythonDriver - Write an asynPortDriver entirely in Python (PSI).
  • pscdrv - Portable Streaming Controller driver: EPICS device support for streaming socket-based hardware controllers.
  • linStat - EPICS driver serving Linux system- and process-level statistics as PVs.
  • i2cDev - EPICS support and a simple API for I2C devices on Linux (PSI).

Motion & Industrial

  • motor - EPICS motor record and device support for a wide range of motion controllers.
  • ecmc - EPICS support for EtherCAT motion and generic I/O controllers.
  • ecmccfg - Configuration and deployment scripts for the EtherCAT Motion Controller (ecmc) (PSI).
  • ecat2 - PSI EtherCAT driver for EPICS (PSI).
  • modbus - EPICS support for Modbus TCP/IP and serial communication with PLCs and other devices.
  • s7plc - EPICS driver for communication with Siemens S7 PLCs (PSI).
  • ether_ip - EPICS device support for Allen-Bradley PLCs via the EtherIP protocol.
  • directNetAsyn - EPICS device support for Automation Direct (Koyo) PLCs over an Asyn serial connection.
  • twincat-ads - EPICS device support for communicating with Beckhoff TwinCAT PLCs via the ADS protocol.
  • opcua - EPICS device support for OPC UA servers.
  • epics-SMC9300 - EPICS device support for the Huber SMC 9300 motor controller (KIT).
  • epics-DeltaPS - EPICS device support for Delta SM3300 series power supplies (KIT).
  • isara-arm - EPICS driver for the ISARA sample-mounting robot.

Detectors & DAQ

  • areaDetector - Framework and core library for detector and camera integration.
  • ndwarp - NDPluginWarp: areaDetector plugin for image spatial-distortion correction / warping.
  • slsDetector - areaDetector driver for SLS Detector Group detectors (Eiger, Jungfrau, Mythen) (PSI).
  • ADZMQ - ZMQ ADDriver and NDPlugin for streaming areaDetector image data over ZeroMQ (PSI).
  • cam_server - Camera server that converts EPICS-enabled cameras into bsread image streams (PSI).
  • mca - EPICS support for multi-channel analyzers (MCA) and multi-channel scalers (MCS).
  • sscan - Programmatically configures conditions and acquires data across positioner ranges; standard at experimental beamlines.
  • calc - synApps module providing sCalcout, swait, transform, and other calculation record types.
  • mrfioc2 - EPICS driver for Micro Research Finland event-based timing system devices.
  • epics-picoharp - EPICS driver for PicoQuant PicoHarp 300 time-correlated photon counter (KIT).

Utilities

  • sequencer - State Notation Language (SNL) compiler and runtime sequencer for writing state machine programs in EPICS IOCs.
  • autosave - Saves and restores IOC PV values across restarts.
  • caPutLog - Logs Channel Access put operations to iocLogServer for audit trails.
  • iocStats - IOC statistics and health monitoring records.
  • mqtt - Native EPICS support for the MQTT protocol, enabling integration with IoT brokers.
  • epics-execute - EPICS device support for executing arbitrary shell scripts from an IOC (KIT).
  • IocshDeclWrap - C++ templates for easily wrapping user functions as EPICS IOC-shell commands (PSI).
  • iocsh_utilities - Assorted EPICS IOC-shell utility commands (PSI).

Scripting

  • PyDevice - Device support for writing IOC functionality directly in Python.
  • pyDevSup - Device support layer for implementing EPICS record processing in Python.
  • lua - Shell and scripting interfaces for EPICS IOCs using the Lua language.

Deployment

Build & Packaging

  • e3 - Allows for easily building EPICS modules directly from source and automagically resolves module dependencies, and allows for site-specific modifications to EPICS modules without needing to directly modify source trees (ESS).
  • EPNix - Build, package, and deploy IOCs and other EPICS-related software using the Nix package manager.
  • EPICS Containers - A collection of tools and documentation for building, deploying and managing containerized EPICS IOCs in a Kubernetes cluster.
  • EPICS on conda-forge - conda-forge feedstock for the epics-base package; installs EPICS Base and tools (medm, striptool, probe, alh, extensions) via conda.
  • require - Runtime loader for EPICS IOCs that dynamically loads versioned support modules; the core of PSI's driver.makefile build system (PSI).
  • makeUtils - Extensions for PSI's driver.makefile, used together with require (PSI).
  • EPICS-env - Reproducible EPICS Base + modules build/configuration environment.
  • EPICS-env-distribution - Pre-built binary distribution of the EPICS-env environment.

IOC Templating & Generation

  • ibek - IOC Builder for EPICS and Kubernetes: generates IOC startup scripts from YAML.
  • EPICS-IOC-template-tools - ALS-U EPICS IOC template generator (ALS-U).

Process Management & Runtime

  • procServ - Process server: wraps an IOC (or any child process) with a telnet console and automatic restart.
  • pythonSoftIOC - Embed a fully functional EPICS IOC in a Python process (Diamond Light Source).
  • systemd-softioc - Systemd service scripts for managing EPICS soft IOCs via procServ.
  • iocmanager - PyQt5 GUI for configuring and monitoring EPICS IOC processes across a facility (SLAC/PCDS).
  • epics-ioc-runner - CLI tool for managing (start/stop/status) EPICS IOC processes.
  • epics_NIOCs - Setup tool for running multiple IOCs on a single Linux host.

Applications

Operator Interfaces

  • Phoebus - A framework and set of tools to monitor and operate large scale control systems, such as the ones in the accelerator community.
  • caQtDM - Qt-based display manager with MEDM migration tools; runs on Linux, Windows, macOS, iOS, and Android.
  • PyDM - Python Display Manager: widget toolkit for building control system operator interfaces (SLAC).
  • React-Automation-Studio - Web-based EPICS operator interface platform built with React and Node.js.
  • weiss - Web EPICS Interface & Synoptic Studio: drag-and-drop tool for building EPICS web operator interfaces.
  • DBWR - Display Builder Web Runtime: renders Phoebus .bob OPI files in any browser with no client installation (ORNL).
  • medm - Motif Editor and Display Manager: a legacy X11/Motif display tool, still in use at many sites.
  • EDM - Extensible Display Manager: X11/Motif-based interactive GUI builder for EPICS operator interfaces, widely used at facilities (SLAC).
  • StripTool - Legacy strip-chart plotting tool for Channel Access PVs.
  • jstriptool - Java reimplementation of StripTool for strip-chart plotting of Channel Access PVs (PSI).
  • PShell - Java/Python scientific scripting workbench and GUI for controlling EPICS-based experiments (PSI).
  • CS Studio - Eclipse-based predecessor to Phoebus for monitoring and operating large scale control systems. Superseded by Phoebus. Archived.

Web & Gateways

  • ca-gateway - Channel Access PV Gateway: bridges multiple CA subnets and enforces access security.
  • pvws - PV Web Socket: serves Channel Access and pvAccess PVs over WebSockets to browser clients.
  • pvws-springboot - Spring Boot reimplementation of the pvws PV WebSocket server.
  • epics2web - Web gateway that exposes EPICS CA PVs via a JSON WebSocket API.
  • wica-http - HTTP streaming service providing real-time browser access to live EPICS control-system data (PSI).

Archiving

  • Archiver - This is an implementation of an archiver for EPICS control systems that aims to archive millions of PVs.
  • Phoebus Archive Engine - EPICS archive engine in Phoebus: stores PV history to RDB (MySQL, PostgreSQL, TimescaleDB).
  • epics-archiver (Rust) - Rust port of the EPICS Archiver Appliance with CA/pvAccess ingestion and PlainPB storage.
  • ChannelArchiver - Legacy EPICS Channel Archiver predating Archiver Appliance; minimal maintenance. Archived.
  • archiverappliance-datasource - Grafana datasource plugin for querying EPICS Archiver Appliance data.
  • epicsarchiver-retrieval-client - Official Python library and CLI for retrieving data from the EPICS Archiver Appliance.
  • epicsarchiverap_pbrawclient - Official Java client for the Archiver Appliance binary (PB raw) retrieval protocol.
  • epicsarchiver-mgmt-client - Official Python library and CLI for the Archiver Appliance management (mgmt) interface.
  • archapp - Python client for Archiver Appliance with Pandas/xarray support (SLAC/PCDS).
  • aaclient - Python client for the EPICS Archiver Appliance.
  • eapy - Python interface to the ChannelArchiver V4 data access layer.
  • epicsarchiverap-env - Configuration/build environment for deploying the EPICS Archiver Appliance.

Directory & Metadata Services

  • Channel Finder - A RESTful directory service for a list of channels.
  • pvinfo - Web interface to ChannelFinder with integrations to other high-level control applications.
  • pyCFClient - Python client library for the ChannelFinder directory service.
  • recsync - EPICS Record Synchronizor.
  • recsync-rs - Rust implementation of the RecSync protocol with Python bindings.
  • cfNameserver - pvAccess PV name server that resolves PVs using ChannelFinder and recsync information.

Alarms

  • Alarm Service - EPICS alarm handling system, part of the Phoebus suite.
  • alarm-logger - Phoebus service that archives alarm events to Elasticsearch for historical search.
  • alarm-config-logger - Phoebus service that tracks and logs Alarm Service configuration changes.
  • alh - Alarm Handler: legacy GUI tool for monitoring and acknowledging EPICS alarms. Superseded by the Phoebus alarm system.

Logging

  • phoebus-olog - Online logbook service for experimental logging, integrated with the Phoebus ecosystem.
  • phoebus-olog-web-client - ReactJS web client for the Phoebus Olog logbook service.
  • Olog Service - Java EE backend logbook service for EPICS experimental logging.
  • Olog logbook - Lightweight HTML5/jQuery web client for Olog Service. Superseded by phoebus-olog-web-client.
  • ELOG - Lightweight electronic logbook widely used at physics facilities alongside EPICS (PSI).
  • py_elog - Python client for reading and writing ELOG logbook entries (PSI).
  • ioclogserv2 - More flexible reimplementation of the EPICS IOC log server.

IOC & Database Tools

  • VisualDCT - Visual Database Configuration Tool: graphical editor for EPICS database files.
  • epicsdbbuilder - Python library for programmatically building EPICS database files (Diamond Light Source).
  • whatrecord - IOC meta-information tool: parses EPICS databases, startup scripts, and snl programs.
  • dbtoolspy - Python module for reading and parsing EPICS database files (PSI).
  • ioc-clone - Captures a snapshot of PV values as a loadable .db file.
  • oac-tree - Behavior-tree-based procedure sequencing framework for EPICS control systems.
  • phoebusgen - Python library for generating Phoebus OPI display files programmatically.
  • phoebus-converter - Converts legacy .opi (CSS/BOY) and .adl (MEDM) display files to Phoebus .bob format.
  • c2dataviewer - Python GUI front-end for visualizing AreaDetector and pvAccess image data.
  • GATO - Legacy generator tool for EPICS display files. Archived.

Simulators & Test IOCs

  • lewis - Python framework for writing simulated hardware devices for testing EPICS IOC control systems.
  • epics-rs - Pure-Rust EPICS Simulation framework: IOC core, CA, pvAccess, asyn, motor, areaDetector, and modbus ports.
  • EPICS-IOC-Demo - Simple example IOC (Asyn, Calc, StreamDevice) with a TCP/IP serial simulator.
  • ServiceTestIOC - Minimal IOC for testing EPICS middleware services.
  • tc32sim - EPICS IOC simulator for TC-32 thermocouple devices.
  • epics-modbus-example - Example IOC using the modbus driver against a simulated PLC.
  • vxi11sim - Simple simulated VXI-11 server for testing instrument communication.

Diagnostics & Network Analysis

  • cashark - Wireshark dissector plugin for decoding EPICS Channel Access and pvAccess network traffic.
  • EpicsSniffer - GUI tool for analyzing EPICS Channel Access traffic in real time and from pcap files (PSI).
  • archstats - EPICS IOC providing Archiver Appliance health and statistics records (SLAC/PCDS).
  • ci-core-dumper - Automates analysis of core dumps from crashes during CI builds and test runs.

Tutorials & Training

  • EPICS Training - GitHub organization of official EPICS training courses and hands-on materials.
  • training-collection - Parent repo bundling all modules for an EPICS training course.
  • training-vm - Flexible, maintainable EPICS training VM built with VirtualBox and Ansible.
  • epics7-overview - Overview of EPICS 7 with examples from QSRV2, PVXS, and P4P.
  • phoebus-training - Training material and references for Phoebus.
  • stream-introduction - Introductory training for StreamDevice.
  • opcua-support - Introduction and hands-on for the EPICS OPC UA device support.
  • areadetector-training - Hands-on training for areaDetector.
  • epics-trainings - EPICS environment training materials and exercises.
  • RTEMS Tutorial - Eric Norum's "Getting Started with RTEMS" tutorial and build scripts, for EPICS IOCs on RTEMS.

Other Lists

  • EPICS Extensions - The following list gives access to individual pages for most of the standard EPICS host tools and CA clients.
  • EPICS SoftSupport - The following table contains an index of EPICS Soft Support modules available for use within IOCs.
  • EPICS Related Software - The official EPICS documentation catalog of related software, modules, and tools.
  • Tango Controls - Free open-source device-oriented control system framework used widely at European facilities; the main open-source alternative to EPICS.

About

List of tools, modules and more to do with EPICS Scada system.

Topics

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors