EPICS

EPICS（Experimental Physics and Industrial Control System）は、加速器、望遠鏡、その他の大規模は実験用機器を運用する分散制御システムを開発・実装するのに使われるソフトウェア環境である。EPICS は SCADA の機能も提供する。このツールは、多数のコンピュータからなるネットワークで制御とフィードバックを行うシステムの開発の補助となるよう設計されている。アルゴンヌ国立研究所が2004年に開発したもので、独自のオープンソースライセンスでリリースされている。
EPICS は、コンピュータ間の通信モデルとしてクライアントサーバモデルと出版-購読型モデルを採用している。コンピュータ群（サーバまたは Input Output Controller）が、付随する測定機器を使って実験データと制御データを収集する。この情報を Channel Access (CA) というプロトコルで別のコンピュータ群（クライアント）に送る。CA は広帯域のネットワークプロトコルであり、科学実験のようなリアルタイム性を要する応用に適している。
概要.
EPICS は IOC (Input Output Controller) 経由で実世界とインタフェースする。IOCとしては、一般的なPCまたはVMEバス規格の組み込みプロセッサがあり、各種標準（GPIB、RS-232、IPキャリア）で制御対象機器（電動機、熱電対、スイッチなど）と接続したり、制御システム装置（オシロスコープ、ネットワーク・アナライザなど）と接続する。IOC上にはレコード (record) のデータベースがあり、個々のレコードがデバイスやデバイスの制御を表している。IOCのオペレーティングシステムとしては、高いリアルタイム性を求める場合は VxWorks や RTEMS を使うが、他のシステムへの移植も進んでいる。ある程度のリアルタイム性でよい場合は、Linux や Windows が使える。
ネットワーク上の他のコンピュータは、チャンネル (channel) という概念を通して IOC とやり取りする。例えば、加速器に複数のセクターがあり、セクター間にシャッターがあるとする。一般に1つのシャッターには複数のチャンネルが対応する。シャッターの動きを起動する出力チャンネルと、シャッターの状態（閉じている、開いている、動作中など）を見る入力チャンネルと、シャッターの両側の温度や圧力を示すアナログの入力チャンネル群である。チャンネルには名前が付けられ、[装置名]:[信号名] の形式である（例えば、ACCELERATOR_RING:TEMP_PROBE_4 など）。
ほとんどの操作は、EDM (editor/display manager) または MEDM (Motif/EDM) といった独立したGUIパッケージから直接行える。これらによって、ダイヤル、ゲージ、テキストボックス、単純なアニメーションなどを組み合わせたGUI画面を生成できる。
EPICS とやり取りできるのはそのようなGUIソフトウェアだけではない。CA プロトコルを扱えるソフトウェアなら、レコードの値にアクセスできる。例えば、EPICSのウェブサイトには MATLAB、LabVIEW、Perl、Python、Tcl、ActiveX などで CA を扱えるようにする拡張パッケージがある。従って、EPICS で制御されている装置を起動するスクリプトを書くといったことも容易である。
レコード型の例.
EPICS のレコードにはいくつかの種類がある。ここでは主なものを挙げる。これら以外にもレコードはあるし、ユーザーが独自のレコード型を生成することもできる。
各レコードには複数のフィールド (field) があり、それぞれ役目を持っている。
レコード処理.
EPICS におけるレコードには "scan time" が設定される必要があり、さもなくばデフォルトで "passive" とされる。passive のレコードは（PROCフィールドに書き込みしない限り）処理されない。一般にレコードは定期的に処理されるよう "scan time" が設定される（例えば0.1秒間隔など）。また、何らかのイベント発生時のみ処理されるようレコードを設定することもできる。