見出し画像

RaspberryPiとUbuntuでEPICSはじめました#5 最小構成

この記事は、EPICS(Experimental Physics and Industrial Control System)の初学用にまとめた記事です。

#1から #4までのまとめをします。

epics最小構成

EPICSの最小構成とインスール手順です。
EPICSはフレームワークなので最小インストールのみでは何も出来ませんが(実際には計算処理用には使えるような気がしますが)、ここにシステムに応じて色々とインストール等作業を行なっていきます。
実はRaspberryPi以外でも、他のOS(Linux,Mac,Windows)でもEPICSのみのインストールが最小構成です。
他のHPなどで色々とStreamDeviceやAsynのインストールが必要な説明が多く、敷居が高いイメージがありましたが、最小構成のみであればStreamDeviceやAsynは不要です。実はとてもシンプルでこれならばIT技術者でなくても何とかなりそうなイメージです。

IOC(Input Output Controller)側の構築

ビルドに必要なパッケージのインストール(Ubuntu Server使用時、既にインストール済ならばそのまま利用する)
sudo apt install make
sudo apt install gcc
sudo apt install g++

EPICSのインストール(EPICS7.0.4を使用
~/.bashrcへ環境変数を追加

vi ~/.bashrc

export EPICS_BASE=/opt/epics/base
export EPICS_HOST_ARCH=linux-arm
export PATH=${EPICS_BASE}/bin/${EPICS_HOST_ARCH}:${PATH}

ダウンロードと展開、ならびにPATHに合わせてシンボリックリンクの追加
wget https://epics-controls.org/download/base/base-7.0.4.tar.gz
gzip -dc base-7.0.4.tar.gz | tar xvf -
ln -s base-7.0.4 base

make実施!で終わりです。
ここまででEPICSの最小構成のインストールが完了しました。

システムに応じたカスタマイズ

上記で最小構成の説明をしましたが、通常はシステムに応じたカスタマイズを行います。
Raspberry Pi 3 Model B Rev.2 + Ubuntu 20.04 LTS + EPICS7.0.4 の場合にRaspberryPiのGPIOを操作する手順の説明をしましたが、この時はepics-devgpioを利用した簡単なシステムを構築しましたのでその時の作業をまとめます。(ディレクトリとかは適時作成が必要です)
ここに提示する最小システムで13行程度の修正(新規ファイル1つ含む)を行うだけでLAN経由で外のPCからGPIOを制御する仕組みが簡単に動作してしまいます。LANを経由して同じ動作をするシステムを1からすべて自分で構築したらどれだけの手間がかかるか想像すると如何にEPICSがフレームワークとして裏で動いているか分かります。

epics-devgpioの解凍に必要なパッケージのインストール
(Ubuntu Server使用時、既にインストール済ならばそのまま利用する)
sudo apt install unzip

RasberryPIのGPIOを使うためのモジュールのインストール
epics-devgpio
wget https://github.com/ffeldbauer/epics-devgpio/archive/master.zip
unzip master.zip

epicsのアプリケーションを構築
makeBaseApp.pl -t example rpi_gpio
makeBaseApp.pl -i -t example rpi_gpio

epics環境へカスタマイズ作業
src/Makefileへepics-devgpioを追加
vi ./rpi_gpioApp/src/Makefile

rpi_gpio_DBD += devgpio.dbd
rpi_gpio_LIBS += devgpio

configure/RELEASEへEPICSとepics-devgpioのパスを通す
(記述する行に注意!)

vi configure/RELEASE

DEVGPIO = $(EPICS_BASE)/modules/rpi/devgpio/20160302
EPICS_BASE = /opt/epics/base


アプリケーションへレコードを新規追加
vi ./rpi_gpioApp/Db/devgpio.db (新規ファイル追加)

record(bo, "GPIO:GPIO2:OUT") {
field(DTYP, "devgpio")
field(OUT, "@2 H")
field(ZNAM, "OFF")
field(ONAM, "ON")
}

Db/Makefileへ作成したレコードを追加
vi ./rpi_gpioApp/Db/Makefile

DB += devgpio.db

iocBoot/iocrpi_gpio/st.cmdへ作成したレコードの読み込みと
epics-devgpioの初期化を追加

vi ./iocBoot/iocrpi_gpio/st.cmd

dbLoadRecords "db/devgpio.db", "user=epics"
GpioConstConfigure "RASPI B REV2"

makeしてパーミッションを実行可能に変更、そして実行
make
chmod +x st.cmd
./st.cmd

制御コマンドの実行
epics上のコマンドラインから実行
dbl
dbpf GPIO:GPIO2:OUT 1 

OPI(Operator Interface)側の構築

コマンドライン(シェル)から実行
caget GPIO:GPIO2:OUT
caput GPIO:GPIO2:OUT 1
camonitor GPIO:GPIO2:OUT

Pytonからの使用方法
PyEpicsのインストール
sudo pip install pyepics
Pythonから実行
import epics
epics.caput('GPIO:GPIO2:OUT', 1)

CS-Studioからの使用方法
CS-Studioのダウンロード
http://controlsystemstudio.org
CS-Studio - Diagnostic Tools - Probeを選択して画面に表示させて
PV Formula:へ GPIO:GPIO2:OUT と入力
New Value: のOFFをONに変更

まだStreamDeviceやAsynは不要で、この先上位のシステムを構築する際には必要となります。

まとめ

今回説明した内容はほんの入り口を見ただけです。
実際にはもっと大きなシステムを構築することは可能です。
元々は加速器や大型望遠鏡を支えられるシステムなのでもっと複雑で高度な構築も可能です。
データのやり取りや複数の制御機器とクライアントPCのLAN接続などはフレームワークであるEPICSが取り繕ってくれるのでデータのレコードを作成してそのレコード名のみでやり取りが出来て、サーバーが何で取得開始や終了プロトコルだとかやり取りするシーケンスの大部分を考えずにEPICSに任せられる点で非常に優れています。IPアドレスでさえ不要ってところは非常に優れています。(最初意味が分からなかったがWAN側からの操作は難しい?)

まずEPICSとは?を知りたい方は上記ミニマムな構成で始められては如何でしょうか世界の研究者達の積み上げてきたシステムがあなたの世界を広げるかもしれません。


いいなと思ったら応援しよう!