450 likes | 821 Views
Andrew Johnson APS. EPICS データベース (プロセス・データベース)とは ?. 目次. レコード フィールドとフィールドのタイプ レコード のスキャン 入出力レコードタイプ ハードウェア サポート レコードのリンク レコードと同時に変更する 保護機構 アラーム、デッドバンド、シミュレーション、セキュリティ. データベース = レコード + リンク レコード = フィールド + プロセス. EPICS に基づく制御システムは一台以上の IOC(Input Output Controller) を含んでいる。
E N D
Andrew Johnson APS EPICS データベース(プロセス・データベース)とは?
目次 • レコード • フィールドとフィールドのタイプ • レコードのスキャン • 入出力レコードタイプ • ハードウェア サポート • レコードのリンク • レコードと同時に変更する • 保護機構 • アラーム、デッドバンド、シミュレーション、セキュリティ
データベース = レコード + リンクレコード= フィールド + プロセス • EPICSに基づく制御システムは一台以上のIOC(Input Output Controller)を含んでいる。 • それぞれのIOCにはそのIOCがなすべきことを指定する一つ以上のデータベースがロードされている。 • データベースは様々なタイプのレコードの集合である。 • レコードは以下の特徴をもつオブジェクトである。: • 個々のレコード毎の独立な名前A unique name • レコード型(class)毎の振る舞い • 制御可能な属性(フィールド) • 関連したハードウェア I/O (device support) • 他のレコードへのリンク
レコードの活動 • レコードは活動的である— レコードは仕事をすることができる: • 他のレコードやハードウェアからデータを取り込む • 計算を行う • 値が許容された範囲にあるかどうかを確認し、必要ならアラームを発生する。 • 他のレコードやハードウェアに値を書き込む • 他のレコードをアクティブ(活性)にしたり、不活性にする。 • ハードウェアからの信号を待つ(割り込み) • あるレコードが何をするかは、レコードの型とそのレコードのフィールドの設定に依存する。 • レコードが処理”process”されるまではどのような動作も行われない。
どのようにレコードは実装されているか? • レコード属性のデータ保存場所とレコードタイプ情報へのポインタ型からなるCの構造体 • データベース中のレコード定義は次の情報を提供する • レコード名 • レコード型 • それぞれのフィールドの値 • レコード型は次の情報を提供する。 • すべてのフィールドの定義 • レコードの動作を実装しているコード(RSET) • EPICS アプリケーション毎の要求に応じて新しいデータ型を追加することができる。
レコードの別なグラフィカルの表現 アナログ出力レコードの CapFast 上での表現 (小シンボル)
field(DRVH,"100") field(DRVL,"0") field(HOPR,"80") field(LOPR,"10") field(HIHI,"0.0e+00") field(LOLO,"0.0e+00") field(HIGH,"0.0e+00") field(LOW,"0.0e+00") field(HHSV,"NO_ALARM") field(LLSV,"NO_ALARM") field(HSV,"NO_ALARM") field(LSV,"NO_ALARM") field(HYST,"0.0e+00") field(ADEL,"0.0e+00") field(MDEL,"0.0e+00") field(SIOL,"") field(SIML,"") field(SIMS,"NO_ALARM") field(IVOA,"Continue normally") field(IVOV,"0.0e+00") } IOCから見たレコード アナログ出力レコードを定義する.dbファイルの全体 record(ao,"DemandTemp") { field(DESC,"Temperature") field(ASG,"") field(SCAN,"Passive") field(PINI,"NO") field(PHAS,"0") field(EVNT,"0") field(DTYP,"VMIC 4100") field(DISV,"1") field(SDIS,"") field(DISS,"NO_ALARM") field(PRIO,"LOW") field(FLNK,"") field(OUT,"#C0 S0") field(OROC,"0.0e+00") field(DOL,"") field(OMSL,"supervisory") field(OIF,"Full") field(PREC,"1") field(LINR,"NO CONVERSION") field(EGUF,"100") field(EGUL,"0") field(EGU,"Celcius") ここには設定が必要なフィールドだけが示されている。この他に実行時にだけ使われるフィールドがある。
フィールドの役割 • 定義 • 何がレコードのプロセスを開始するか(周期的、外部割り込み、オペレータ操作) • データ入出力の先 • 生のI/Oデータを制御量に変換する方法 • アラームを報告するべき時を指定するリミット • レコードをモニタしているクライアントにたいしていつ値の変更の通知を送るか。 • 処理アルゴリズム • その他そのレコードタイプで設定が必要なもの • 実行時の値を保持する • 入出力値 • アラーム状態、重篤度、アックノレッジ • タイムスタンプの処理 • その他内部的に利用されるデータ
フィールドの型 • フィールドは以下のデータ型をとりうる • 整数Integers • char, short or long • signed or unsigned • 浮動小数点 • float or double • 文字列 • max length 40 characters or less • メニュー選択 • いくつかの文字列から一つを選ぶ • 内部的には短整数として保持される • リンク • 同じあるいは別のIOC上にある別のレコードへのリンク • ハードウェア・シグナルへのリンク (device support) • 値の読み書きのために使われる • その他の内部的データ • 外部から直接にはアクセス不能
すべてのレコードに共通のフィールド 設計時フィールド NAME 28 文字のユニークな名前 DESC 28 文字の記述 ASG アクセス セキュリティ グループ SCANスキャン機能 PHASスキャンの順位(phase) PINI初期化時のプロセス? PRIOスケジューリング プライオリティ SDISスキャン禁止値入力リンク DISVスキャン禁止値 DISSスキャン禁止時の重篤度 FLNKフォワード リンク 実行時フィールド PROCプロセスの強制 PACTプロセス実行中フラグ STATアラーム状態 SEVRアラーム重篤度 TPROプロセスのトレース UDF 値が未定義状態の時1に設定される。 TIME最後にプロセスされた時間
レコードのスキャン • SCANフィールドは以下のメニュー選択枝から選ばれる。 • 周期的エベント — 0.1 seconds .. 10 seconds • I/O 割り込み (もしデバイスがサポートしていれば) • ソフトエベント — EVNTフィールド • 受動的(Passive): 既定値 • PHASフィールドに数値を指定することで、同一のスキャンのなかでの実行順序を設定する。 • PHAS=0のレコードが最初に「処理」され、 • その後PHAS=1 , PHAS=2と続く • PINI=YESのレコードはデータベースプロセスの起動時に一度「処理」される。 • PRIOフィールドにはLow/Medium/Highのプライオリティをソフト・エベントあるいはI/O割り込みで「処理」されるレコードで指定する。 • レコードはPROCフィールドに任意の値が書き込まれた時、「処理」される。
入力レコードのフィールド • ほとんどの入力レコードは次のフィールドをもつ: INP 入力リンク:どこから値を読み込むか? DTYPデバイス・タイプ RVAL生の値 VAL 物理量・Engineering value LOPR下限値 HOPR上限値 • アナログI/Oレコードは次のフィールドをもつ: LINRユニット変換指定 No conversion, Linear, breakpoint tables… EGUL生の値の下限値に対応する物理量 EGUF生の値の上限値に対応する物理量 EGU 物理量の単位(文字列)
入力レコードの使用例:周期的入力 • レコード名“Temperature”のアナログ入力レコード(AI) • 値は Xycom XY566 ADC Card 0 Signal 0 から読み込む • 0.1 秒毎に新しい値をHWから読み込む。 • データは ADC の範囲からto 摂氏 0..120 に変換される。
割り込み入力 • レコード名 “VentValve”のバイナリ入力(BI)レコード • データはAllen-Bradley TTL I/O Link 0, Adaptor 0, Card 3, Signal 5 から読み込む • PLCからの割り込み信号によって値が変わる度に読み込まれる。 • 0 = “Closed”, 1 = “Open” • バルブが開いている(1)の時レコードのアラーム状態は重警報状態(Major_Alarm)となる。
出力レコードのフィールド • ほとんどの出力レコードは次のフィールドをもつ: OUT 出力リンク(値の出力先) DTYPデバイスタイプ VAL 物理量・制御量 RVAL生な出力値 DOL 出力値を持ってくる入力リンク(チャンネル) OMSL出力モード選択 • Supervisory, Closed Loop LOPR下限値 HOPR上限値 • アナログ出力レコードは次のフィールドももつ。: OROC出力変化率: OIF 増減(Incremental)か直接指定(Full) OVAL出力値 DRVH出力上限値 DRVL出力下限値 IVOA不正出力時の動作指定 Continue Normal, Don’t Drive output, set output to IVOV IVOV 不正出力時のデフォルト値 RBV 読み返し値
受動的出力 • “Solenoid”という名前のバイナリ出力レコード(BO) • Xycom XY220 Digital output Card 2 Signal 12を制御 • SCAN=Passive:レコードは次の場合に「処理」される • チャンネルアクセスによって.VALフィールドに値が書き込まれる。 • 別のレコードが.VALフィールドに値を書き込む • 別のレコードからフォワードリンクされている。 • (入力レコードでは)別のレコードがこのレコードの値を読み込んだとき
リンク リンクはフィールドの型一つで、以下のいずれかとなる • Input link • データを読み出す • Output link • データを書き込む • Forward link • このレコードの処理が終わったときに処理されるレコードを指す
入力、出力リンクに指定できるのは… • 定数: 0 3.1415926536 1.6e-19 • ハードウェア・リンク • ハードウェアの入出力信号を選択。その形式は、デバイス・サポートに依存している。 • プロセス・バリアブル・リンク • レコードの名前を指定。それは次のいずれかの型のリンクとなる。 • データベース・リンク リンクに指定されたレコードは同じIOC上にある。 • チャンネル・アクセス・リンク リンクに指定されたレコードは別のIOC上にある。
ハードウェア・リンク VME_IO #Cn Sn @parm Card, Signal INST_IO @parm CAMAC_IO #Bn Cn Nn An Fn @parm Branch, Crate, Node, Address, Function AB_IO #Ln An Cn Sn @parm or #Ln Pn Cn Sn Fn @parm Link, Adaptor, Card, Signal, Flag GPIB_IO #Ln An @parm Link, Address BITBUS_IO #Ln Nn Pn Sn @parm Link, Node, Port, Signal BBGPIB_IO #Ln Bn Gn @parm Link, Bitbus Address, GPIB Address VXI_IO #Vn Cn Sn @parm or #Vn Sn @parm Frame, Slot, Signal
データベース・リンク いかのものを指定できる: • 同じIOC上にあるレコードの名前 myDb:myRecord • フィールド名をさらに指定できる .VAL (default) • プロセス・パッシブ・フラグ NPP (default) PP • 重篤度最大化フラグ NMS (default) MS たとえば: M1:current.RBV NPP MS 注:非同期処理デバイス・サポートをもつレコードからのPP指定のGet要求は新しい値を返さないことに注意。
チャンネル・アクセス・リンク • データベースリンクと同様に指定。 • 指令された名前のレコードは同じIOCに存在していない • 他のIOCとCAプロトコルで通信する。 • フィールド名を含んでいてもよい。(.VALが既定値) • PPリンクフラグは無視される。 • 入力リンクは常にNPP • 出力リンクはしゅつりょくさきのフィールドのPP属性に依存 • その他のCAと同じ振る舞いである。 • MSリンクフラグは入力リンクに適用される。 • 入力リンクは与えられたNMSやMSのフラグが効果を持つ • 出力リンクは常にNMS • 追加のフラグ CAローカルなリンクであってもCAリンクを使う。 CP入力リンクでは、Camonitorエベントが発生する毎にこのレコードが処理される。or input link, process this record on CA monitor event CPP: Cpのデータ読み出し:問題の切り分け
リンク・フラグのまとめ Pages 16 thru 23 of the IOC Application Developer’s Guide cover this topic.
デバイス・サポート • レコードは直接ハードウェアにアクセスするわけではない。 • デバイス・サポート層が要求のあった場合に入出力動作を実行する。 • 個々のデバイス・サポートは一つのレコード型に対する入出力を提供する。 • DTYPフィールドで使用するデバイス・サポートを指定する。 • 選択されたデバイス・サポートがリンク(INP or OUT field)に指定するデバイスのアドレス指定の形式を規定する。 • 新しいデバイス・サポートの追加はレコードのソフトウェアの変更を必要としない • デバイス・サポートは他のソフトウェア(ドライバ・サポート)を呼び出してもよい。
同期I/O 対非同期 I/O • EPICSの決まりでは、デバイスサポートが遅いデバイスの入出力要求の完了を待つことを許さない。:スキャンのプロセス全体を待たせてしまうので。 • レジスタ・ベースの VMEカードは通常即座に応答を返す:同期 • 同期デバイス・サポート呼び出し元に帰る前にすべての入出力を完了する。 • シリアルやI/Oバス装置はデータを返すまでに長い時間(>10ms)を必要とする。:非同期 • 非同期デバイスサポートは呼び出し時にI/Oを開始し、それをPACTをTrueにしたまま呼び出しもとに帰る。 • 結果が準備できると(CPU割り込み)デバイス・サポートはレコードのprocess関数を呼び出し、「処理」を終了させる。
ソフト・デバイス・サポート • 入力および出力レコードはデバイス・サポートを通じてハードウェアI/Oを実行するように設計されている。 • これらのレコードはソフト・デバイス・サポートを使うことで、DBあるいはCAリンクを使うことで他のレコードにアクセスすることができる。 • 二つのタイプのソフト・デバイス・サポートが用意されている: • Soft Channel • リンクを通じてVALを読み書きする。データの変換は行わない。 • Raw Soft Channel • Inputs • RVALをリンクを通じて読み込む。 • RVALをVALに変換(record-type specific) • Outputs • VALをRVALに変換 (record-type specific) • RVALを出力リンクに書き込み
フォワード・リンク • フォワード・リンクは通常同じIOCのレコードを参照するデータベースリンクである。 • CAリンクも可能であるが、リンク先のレコードのPROCフィールドをリンク先として指定する必要がある。 • フラグはない(PP, NMS etc) • リンク先のレコードは、「処理」実行されるためにSCAN = Passive を指定されている必要がある。 • 値は渡さない、単に「処理」を開始するだけである。
PACT フィールド • すべてのレコードは PACTと名付けらら他boolean 実行時フィールドをもっている (Process Active) • PACTレコードのリンクの無限ループを壊す効果を持つ • レコードの「処理」の開始直後にPACTは”true”に設定される。 • そのレコード中のリンクが値の読み書きに使われている間はPACTがtrueに設定される。 • PACTはレコードのI/O動作が終了しフォワードリンクの「処理」が終わったらFalseに設定される。 • PACTがTrueであるとどのPPリンクもそのレコードの「処理」を開始することができない。 • 入力レコードは現在の値を使う • 出力レコードは自分自身の値を単に出力する。d
レコードを「処理」から守る • 条件によっては個々のレコードの「処理」を禁止することができれば便利である。 • レコード特有の「処理」ルーチンが呼び出される前に、SDISフィールドに指定された入力リンクから値が読み出され、 DISAフィールドに収めれらる。 • もしDISA=DISVであればレコードは「処理」されない。:レコードのprocess関数は呼び出されない。 • 「処理」が禁止されたレコードはDISSフィールドに指定された重篤度状態になる。 • 「処理」が禁止されたレコードのFLNKフィールドはトリガされない。
レコードの処理時間はどのように割当られるか?レコードの処理時間はどのように割当られるか? いくつのIOCタスクが使われる: • コールバック(3 priorities) — I/O Interrupt • scanEvent — Soft Event • scanPeriod — Periodic • スキャンの周期ごとに異なるタスクが割り当てられる • 早いスキャンタスクほど高い実行割当率が実現できる。Faster scan rates are given a higher task priority (if supported by OS) • Caのタスクは レコード「処理」のタスクよりも低いプライオリティをもつ。
ロック・セット • 一つのレコードが二つのスキャン・タスクから同時に「処理」されることを防ぐ • ロック・セットは以下の条件で関係付けられる一組のレコードである。 • 出力データベース・リンク • フォーワード・リンク • PPあるいはMSフラグをもつ入力リンク • 配列 • ロック・セットはIOCの起動時に自動的に決定される。 次の条件があればロック・セットを分割することができる。 • リンクがCAリンクである。CAフラグを用いる。 • NPP NMSのデータベースリンク
アラーム • すべてのレコードは次のフィールドをもつ SEVRアラームの重篤度 NONE, MINOR, MAJOR, INVALID STATアラーム状態 (原因) READ, WRITE, UDF, HIGH, LOW, STATE, COS, CALC, DISABLE, etc. • ほとんどの数値的なレコードはVALフィールドの値をHIHI, HIGH, LOWおよびLOLOフィールドとVALフィールドの値が確定した後に比較する。 • HYSTフィールドでアラームのチャタリングを防止する。 • それぞれのアラーム・リミット(HIHI, HIGH, LOW, LOLO)にたいして独立に重篤度(HHSV, HSV, LSV, LLSV)を指定できる。 • 離散的(バイナリ)レコードでは、特定の状態になったときあるいは、状態の変化時にアラーム状態となることができる。 (COS)
値の変化の通知: モニタ・デッドバンド CAは数値レコードをモニタしているクライアントに次の条件が成り立つとき、通知を送る。 • VALが次のフィールドに指定された値以上に変化したとき: MDEL Value monitors ADEL Archive monitors • アラームの状態が変化したとき HYST Alarm hysteresis • アナログ入力レコードでは入力ノイズの影響を軽減するために平滑化のフィルタを適用することができる(SMOO)。
ブレークポイント・テーブル • アナログ入力・出力レコードは非線形変換をRVAL<->VAL変換の際に使うことができる。 • ブレークポイント・テーブルは与えられたテーブルから値を補間する。 • ブレークポイント・テーブルを使うにはLINRフィールドにブレークポイント・テーブルの名前を指定する。 • ブレークポイント・テーブルの例 (in your .dbd file) breaktable(attenuator1_1) { 504, 0 795, 1.25 909, 2.5 1012, 3.75 ... }
シミュレーション • 入出力レコードはしばしばハードウェア・インタフェースのシミュレーションをサポートしている。 SIML Simulation mode link SIMM Simulation mode value SIOL Simulation input link SIMS Simulation alarm severity • レコードはデバイスサポートを使う前に、SIMLリンクからSIMMの値を読み込む。 • もしSIMM=YESであれば, デバイス・サポートは無視される;レコードはSIOLリンクを入出力先として使う。 • シミュレーション・モード中(SIMM=YES) にはアラームの重篤度はSIMSフィールドに指定された値に固定される。
アクセス・セキュリティ • ネットワークを用いた制御システムはセキュリティルールを適用できる機能を持たねばならない。 • 誰が、何時、どこで、何をできるのか? • EPICSではセキュリティは CAサーバ(通常はIOC)で守られている。 • レコードはASGフィールドにしてされたアクセス・セキュリティ・グループに割り当てられる。 • ASGフィールドに指定がなければDEFAULTセキュリティ・グループが選択される。 • それぞれのグループのルールによって、CAクライアントがそのグループに所属するレコードの読み・書きの権限を持っているかどうかを • クライアントの IP address、ユーザ • フィールドのアクセス・セキュリティ・レベル • データベースから読み出した値に基づいて決定する。
アクセス・セキュリティ設定ファイル • セキュリティルールはアクセス・セキュリティ設定ファイルからロードされる。 • example: UAG(users) {user1, user2} HAG(hosts) {host1, host2} ASG(DEFAULT) { RULE(1, READ) RULE(1, WRITE) { UAG(users) HAG(hosts) } } • もしセキュリティ・設定ファイルがロードされなければセキュリティの機能は働かず、すべての要求が処理される。 • アクセス・セキュリティ・設定ファイルの詳細についてはIOCアプリケーション・デベロッパ・ガイドの第五章を参照せよ。