![Page 1: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/1.jpg)
実用EPICS入門 4実用EPICS入門-4技術部専門講習技術部専門講習
飛山真理飛山真理
帯名崇
![Page 2: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/2.jpg)
複雑な処理をさせたいとき複雑な処理をさせたいとき
デ が ば 策• データベースでがんばる(下策)– 見通し最悪、保守性も極悪見通し最悪、保守性も極悪
• 上位ソフトウエア(SADとかPythonとか)でがんばる(場合による 中策)んばる(場合による、中策)– 汎用性に難、上位計算機の負荷にも難
• EPICS Sequencerで処理する(今回のオススメ)メ)
![Page 3: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/3.jpg)
EPICS SequencerEPICS Sequencer
• State Notation Language (状態遷移指向言語)語)
• EPICSデータベースと通信
IOC内 あるいは独立に動作可能 もちろん• IOC内、あるいは独立に動作可能、もちろんnative codeで実行
• Cに似た(しかし結構違う)言語で複雑なコードを記述可を記述可
![Page 4: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/4.jpg)
• State Notation Language and the Sequencerqby Andrew JohnsonAPS Engineering Support DivisionAPS Engineering Support DivisionOctober 18th, 2006SNS EPICS Trainingから引用しています
![Page 5: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/5.jpg)
SNLとSequencerSNLとSequencer
• SequencerはState Notation Language(SNL)で記述されていますg g ( )
• SNLはCに似た言語で、sequential動作を簡単に記述できます単に記述できます
• コンパイルしてあるので、高速動作します
• リアルタイム環境下にあるEPICSを拡張するプログラムインターフェースを提供しますプログラムインタ フェ スを提供します
![Page 6: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/6.jpg)
元々のSequencerのイメージ元々のSequencerのイメージ
![Page 7: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/7.jpg)
今では今では
![Page 8: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/8.jpg)
SequencerはSequencerは最近 は は 上 プ 部• 最近のEPICSでは、sequencerはIOC上のプロセスの一部としても、あるいはスタンドアロンプログラムとしても走ります
元々はIOC上で走るプロセスでした– 元々はIOC上で走るプロセスでした
• IOC上のプロセスとして走らせておくと、管理しやすい– 通信負荷もちょびっと少ないらしい– 通信負荷もちょびっと少ないらしい
• スタンドアロンプログラムとして走らせていれば、テスト、デバッグが容易になるッグが容易になる
• workstation上で(簡単な)CAクライアントを書く必要があるとき、SNLを使えば簡単
![Page 9: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/9.jpg)
状態遷移図状態遷移図
![Page 10: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/10.jpg)
状態遷移図の例状態遷移図の例
![Page 11: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/11.jpg)
SNL: General Structure and SyntaxSNL: General Structure and Syntax
![Page 12: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/12.jpg)
SNL: General Structure and SyntaxSNL: General Structure and Syntax
なんとか• program なんとか
– program中にいくつかのstate setがあることがあります
– 名前は、process名などに使われます(ので、わかりやすい名前が良いです)名前 、p 名な 使われます( 、わ りやす 名前 良 す)• ss なんとか{
– 並列動作プロセスです。並列動作が無いときはprogram中に1個だけあることになりますとになります
• state なんとか{– 状態ブロックです。eventが起きると、上から順に実行されます。
• when (event) { ... } state 次– このstateが起動される(起こるまで待つ)event条件を書きます。ブロックが実
行され終わると 最後に書かれたstateへ移行し そのstateのwhen条件が行され終わると、最後に書かれたstateへ移行し、そのstateのwhen条件が満たされるまで待ちます
![Page 13: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/13.jpg)
変数宣言変数宣言
![Page 14: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/14.jpg)
assignment宣言assignment宣言
![Page 15: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/15.jpg)
EventEvent
![Page 16: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/16.jpg)
実行文実行文
連• CA関連
– pvPut(var_name);– pvGet(var_name);
• もろC– プリプロセッサでSNLはCに変換されるので、もろCの記述は一般的にOK、但し、SNLに定義してない部分はescapeする必要がある
• %%で書いた一行
%{ と }%でくく た部分• %{ と }%でくくった部分
– escapeした中にSNL独自の記述は許されない(例えばpvPut pvGetなど)pvPut、pvGetなど)
![Page 17: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/17.jpg)
![Page 18: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/18.jpg)
宣言の例宣言の例
![Page 19: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/19.jpg)
state transitionの例state transitionの例
![Page 20: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/20.jpg)
初期化部の例初期化部の例
![Page 21: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/21.jpg)
![Page 22: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/22.jpg)
![Page 23: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/23.jpg)
![Page 24: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記](https://reader033.vdocument.in/reader033/viewer/2022050516/5fa007eefdb8e008687e5525/html5/thumbnails/24.jpg)
SNLの長所SNLの長所
ゴ ズ• 複雑なアルゴリズムをimplementできる
• (スタンドアロンプロセスの時)IOCを止めたり(スタンドアロンプロセスの時)IOCを止めたりリブートしたりせずにsequencerプログラムを
止めたり リロ ドしたり リスタ トできるの止めたり、リロードしたり、リスタートできるので、デバッグが容易
• Cコードを直接使える(ライブラリパッケージなど)ど)
• channel accessが容易にできる
• fileアクセスも(容易に)可能となる