あらゆるものをWindows上で動かさないと気がすまない筆者なので、頑張ってExperimental Physics and Industrial Control System (EPICS) R3.15をWindows上で動かすことにする。7.0用の記事もあるが、Windowsで動かすには色々バグがあるかもしれない。
ビルドに必要なアイテムは4つ
当環境の各バージョンは以下の通り
>make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. これはフリーソフトウェアです. 利用許諾についてはソースを ご覧ください. 商業性や特定の目的への適合性の如何に関わらず, 無保証です. This program built for i386-pc-mingw32 >perl --version This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread Copyright 1987-2021, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. >cl Microsoft(R) C/C++ Optimizing Compiler Version 19.29.30151 for x64 Copyright (C) Microsoft Corporation. All rights reserved. 使い方: cl [ オプション... ] ファイル名... [ /link リンク オプション... ] >git --version git version 2.37.2.windows.2
上記4つの準備が終わったら、Visual Studio 2022 Community 等の x64 Native Tools Command Prompt
を開き、Gitで epics-base
の 3.15
をcloneする。
>git clone --recursive -b 3.15 https://github.com/epics-base/epics-base.git ./epics-base_v3.15
このまま
> cd epics-base_v3.15 > make
とすると、bin/windows-x64
にビルドされた exe がインストールされる。
C:\Users\Masahiro\epics-base_v3.15
でmakeした場合、以下のように環境変数を設定する。
EPICS_BASE=C:\Users\Masahiro\epics-base_v3.15 EPICS_HOST_ARCH=windows-x64 PATH=C:\Users\Masahiro\epics-base_v3.15\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 R3.15.9.1-DEV ## EPICS Base built Nov 1 2023 ############################################################################ iocRun: All initialization complete
この中で、値をリスト化するコマンドdbl
を実行すると、水の温度があることがわかる。
epics> dbl temperature:water epics>
別のプロセスから、水の温度の確認、追加をしてみよう。別のターミナル(2番)を開き、値を確認するコマンド caget
、値をセットするコマンド caput
を実行する。
※ WSL版だと caputではなく caset である。
> caget temperature:water >caput temperature:water 20 Old : temperature:water 0 New : 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
以上で「コンピュータ内のプロセス間でリアルタイム通信する機能」を確認できた。
当 Windows 環境で以下のエラーが出たのでその解決方法について書いておく。
>caget temperature:water temperature:water 0 CA.Client.Exception............................................... Warning: "Identical process variable names on multiple servers" Context: "Channel: "temperature:water", Connecting to: XXX.XXX.XXX.XXX:5064, Ignored: hostname.mshome.net:5064" Source File: C:\Users\Masahiro\epics-base_v3.15\src\ca\client\cac.cpp line 1308 Current Time: Wed Nov 01 2023 20:28:41.805707200 ..................................................................
これは、複数のサーバー上で同じプロセス変数名
と言う警告であるが、チャンネルアクセス(CA) を管理しているホストに名前がついていて、IPアドレスと名前でアクセス出来る場合等に起こる現象のようである。
を参考に、CAのアドレスに対する環境変数を設定する。例えば、
EPICS_CA_ADDR_LIST=127.0.0.1 EPICS_CA_AUTO_ADDR_LIST=NO
とするとよい。