あらゆるものをWindows上で動かさないと気がすまない筆者なので、頑張ってExperimental Physics and Industrial Control System (EPICS) 7.0をWindows上で動かすことにする。
必要なアイテムは4つ
上記4つの準備が終わったら、Visual Studio 2022 Community 等の x64 Native Tools Command Prompt
を開き、Gitで epics-base
の最新版をcloneする。
> git clone --recursive https://github.com/epics-base/epics-base.git
このまま
> cd epics-base > make
とすると途中で止まってしまう。Windows用の makeの abspath
コマンドは、WindowsのC:\
等を含むPATHに対するバグ(仕様)があるので、それを使ってる configure\CONFIG_BASE
を修正する。
# TOOLS = $(abspath $(EPICS_BASE_HOST_BIN)) TOOLS = $(EPICS_BASE_HOST_BIN)
修正後、epics-base
ディレクトリで
> make
とすると、で最後までビルド・インストールできるはずである。
C:\Users\Masahiro\epics-base
でmakeした場合、以下のように環境変数を設定する。
EPICS_BASE=C:\Users\Masahiro\epics-base EPICS_HOST_ARCH=windows-x64 PATH=C:\Users\Masahiro\epics-base\bin\windows-x64
EPICSのbase
がインストールできたか確認する。新しいコマンドプロンプトを立ち上げてsoftIoc
というコマンドを実行すると、
> softIoc epics>
「このアプリの機能のいくつかが Windows Defender ファイアウォールでブロックされています」という「Windows セキュリティの重要な警告」が出てくるはずである。他のプログラムでも同様に、各自の判断で、「アクセスを許可する」すること。
epics>
と出ればインストールは成功している。Ctrl+C
でプログラムを終了させる。
管理する値を定義する。適当なディレクトリを作成し、次の内容の test.db
ファイルを作る。
record(ai, "temperature:water") { field(DESC, "Water temperature in the fish tank") }
例は水の温度である。
コマンドプロンプトで、test.db
を作成したディレクトリに移動し、softIoc
を実行すると、このdbファイルの値を管理するプロセスが立ち上がる。
>softIoc -d test.db Starting iocInit ############################################################################ ## EPICS R7.0.7.1-DEV ## Rev. R7.0.7-183-gb41787b6bf8093caaf00-dirty ## Rev. Date Git: 2023-10-22 17:42:36 -0700 ############################################################################ iocRun: All initialization complete epics>
この中で、値をリスト化するコマンドdbl
を実行すると、水の温度があることがわかる。
epics> dbl temperature:water epics>
別のプロセスから、水の温度の確認、追加をしてみよう。別のターミナル(2番)を開き、値を確認するコマンド caget
、値をセットするコマンド caput
を実行する。
※ WSL版だと caputではなく caset である。
> caget temperature:water > caput temperature:water 20
ともあれ、これだけではリアルタイムで値が管理されているか分からない。
別プロセスから値をリアルタイムでモニターしよう。さらに別のターミナル(3番)を開き、モニターするコマンド camonitor
を実行する。
> camonitor temperature:water
このままターミナル2番から caput
で値をセットすると、セットしたタイミングで以下のように表示されるはずである。
temperature:water 2023-10-13 21:45:09.551818 24 temperature:water 2023-10-13 21:45:43.071098 21
以上で「コンピュータ内のプロセス間でリアルタイム通信する機能」を確認できた。
反応する値の精度を変える説明は、以下の英語のドキュメントを参照してほしい。