PyEpics: Epics Channel Access for Python

# Epics Channel Access for Python

PyEpics is an interface for the Channel Access (CA) library of the Epics Control System to the Python Programming language. The pyepics package provides an `epics` module to python, with methods for reading from and writing to Epics Process Variables (PVs) via the CA protocol. The package includes a thin and fairly complete layer over the lowest-level Channel Access library in the `ca` module, and higher level abstractions built on top of this basic functionality.

The package includes a simple interface to CA similar to the Unix command-line tools with functions `epics.caget()`, `epics.caput()`, `epics.cainfo()`, and `epics.camonitor()`. For an object-oriented interface, there is a `pv.PV` class which represents an Epics Process Variable as a full-featured and convenient Python object. Additional modules provide higher-level programming support to CA, including grouping related PVs into a `device.Device` (with a number of predefined devices ready to use), for creating alarms in `alarm.Alarm`, and for saving PVs values in the `autosave` module. There is also support for conveniently using epics PVs to wxPython widgets in the `wx` module, and some support for using PyQt widgets in the `qt` module.

Some applications built with pyepics that are available at https://github.com/pyepics/epicsapps/.

- Downloading and Installation
  - Installation
  - Prerequisites and Dependencies, Supported Systems
  - Getting Started, Setting up the Epics Environment
  - Testing
  - Development Version
  - Getting Help
  - License
  - Acknowledgments
- PyEpics Overview
  - Quick Start
  - Simple `epics` functions: caget(), caput(), etc.
  - Motivation and design concepts
  - Status
- PV: Epics Process Variables
  - The `PV` class
  - String representation for a PV
  - Automatic Monitoring of a PV
  - User-supplied Callback functions
  - User-supplied Connection Callback functions
  - User-supplied Access Rights Callback functions
  - Put with wait, put callbacks, and put_complete
  - The `get_pv()` function and `_PVcache_` cache of PVs
  - Examples
- ca: Low-level Channel Access module
  - General description, difference with C library
  - Initialization, Finalization, and Life-cycle
  - Using the CA module
  - Implementation details
  - User-supplied Callback functions
  - Omissions
  - `CAThread` class
  - Examples
- Working with waveform / array data
  - Arrays without Numpy
  - Variable Length Arrays: NORD and NELM
  - Character Arrays
  - Example handling Large Arrays
- Devices: collections of PVs
  - Overview
  - Epics Motor Device
  - Other Device Examples
- Alarms: respond when a PV goes out of range
  - Overview
  - Alarm Example
- Auto-saving: simple save/restore of PVs
  - `save_pvs()`
  - `restore_pvs()`
  - `AutoSaver` class
  - Supported Data Types
- wx: wxPython Widgets for Epics
  - PV-aware Widgets
  - Decorators and other Utility Functions
  - wxMotorPanel Widget
  - OGL Classes
- Advanced Topic with Python Channel Access
  - The wait and timeout options for get(), ca.get_complete()
  - Strategies for connecting to a large number of PVs
  - time.sleep() or epics.poll()?
  - Using Python Threads
  - Using Multiprocessing with PyEpics