飛山真理 帯名崇 - kekahfb1.kek.jp/epics/slides/epics-2007-4.pdfassignment宣言 event...

24
実用EPICS入門 4 実用EPICS入門-4 技術部専門講習 飛山真理 飛山真理 帯名崇

Upload: others

Post on 09-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

実用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の記

複雑な処理をさせたいとき複雑な処理をさせたいとき

デ が ば 策• データベースでがんばる(下策)– 見通し最悪、保守性も極悪見通し最悪、保守性も極悪

• 上位ソフトウエア(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の記

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の記

• 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の記

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の記

元々の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の記

今では今では

Page 8: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

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の記

状態遷移図状態遷移図

Page 10: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

状態遷移図の例状態遷移図の例

Page 11: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

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の記

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の記

変数宣言変数宣言

Page 14: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

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の記

EventEvent

Page 16: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

実行文実行文

連• 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の記
Page 18: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

宣言の例宣言の例

Page 19: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

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の記

初期化部の例初期化部の例

Page 21: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記
Page 22: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記
Page 23: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記
Page 24: 飛山真理 帯名崇 - KEKahfb1.kek.jp/epics/slides/EPICS-2007-4.pdfassignment宣言 Event 実行文 •CA関連 – pvPut(var_name); – pvGet(var_name); • もろC – プリプロセッサでSNLはCに変換されるので、もろCの記

SNLの長所SNLの長所

ゴ ズ• 複雑なアルゴリズムをimplementできる

• (スタンドアロンプロセスの時)IOCを止めたり(スタンドアロンプロセスの時)IOCを止めたりリブートしたりせずにsequencerプログラムを

止めたり リロ ドしたり リスタ トできるの止めたり、リロードしたり、リスタートできるので、デバッグが容易

• Cコードを直接使える(ライブラリパッケージなど)ど)

• channel accessが容易にできる

• fileアクセスも(容易に)可能となる