DAQ ミドルウエアの概要 2008 年 8 月 5 6 日 DAQ 実習 -DAQ-Middleware KEK エレクトロニクスシステムグループ KEK 測定器開発室 DAQ プロジェクト安芳次
DAQ ミドルウエアの狙い 多数の計算機を使ったネットワーク分散型 D AQ ソフトウエア ソフトウエアの汎用化 国際標準ロボット技術 (RT ミドルウエア ) の利用 XML によるデータ収集パラメータの記述 複雑さの隠蔽 パッケージソフトウエア化 ( 簡単インストール ) 通信 同期 マルチスレッドなどの隠蔽 自動化による簡単操作
RT ミドルウエアとは? Object Management Group(OMG) による国際標準ロボット技術 ロボット分野に限らず 自律し協調したコンポーネントを必要とする組み込み系を含むソフトウエアのインフラを提供する 日本では産総研が標準化を主導し OpenRTM-aist パケージを開発している http://www.is.aist.go.jp/rt/openrtmaist/html/index.html
OMG のモデリング PIMレベル仕様 <<PIM>> RTM Specification < <mapping> > <<PIM> SDO model PSM に基づくインターフェース 将来的な標準化作業 <<PSM> RTM CORBA model <<PSM>> RTM EJB model <<PSM>> RTM SOAP model NE DOプロジェクトによる標準仕様 <<use>> 他のプラットフォームにおけるモデル 拡張されたインターフェース <<interface>> OpenRTM ext. interface <<interface>> OpenRTM basic interface 実装 OpenRTM-aist <<im plem ents>> Other RTM AIST による RTM 実装 PIM: Platform Independent Model PSM: Platform Specific Model 他のベンダによる実装 実現済み 未実現
RT-Component Architecture Status Command Main Thread Command/ Status Flow Status Command Data Input Data Flow Data Output 自律型モデル
DAQ ミドルウエアの特徴 DAQ Extension RTミドルウエアの上に独自のステートマシンを構築し RTミドルウエアを基にした新たなDAQ 用のベースクラスを設計 その上に コマンド ステータスを操作する Run control XML を用いた System configuration XML/HTTP プロトコルを用いた System Interface System Configuration DAQ Extension RTM
DAQ ミドルウエア構成例 WEB Server DAQ Operator XML/HTTP 通信 SiTCP TCP/IP 通信 CORBA 通信 Logger SiTCP Gatherer Dispatcher Monitor Gatherer Dispatcher Logger Monitor これらのコンポーネントは DAQOperator の指示に従い 互いに他のコンポーネントと自律協調して動作している
Run control コマンド ステータスを操作する DAQ 独自のステートマシンを持つ ステートの遷移はSystem Interfaceからのコマンドを受け取ることで実現する DAQOperator は各種 DAQ コンポーネントに対応するコマンドを実行し それらの操作する
State Machine RTM State Machine Active state Inactive state activate deactivate DAQ State Machine LOADED unconfigured configure CONFIGURED reset stop start error resume RUNNING pause Error state PAUSED
ユーザが記述すべき 主なメソッド daq_configure() - configure コマンドで構成パラメータを取得 daq_start() - start コマンドで RUN の準備 daq_run() ー daq_start() が呼ばれた後 ひたすら実行される ( このメソッドが何度も呼ばれる ) daq_pause() - pause コマンドを受けて一時データ収集を中止 daq_resume() - resume コマンド受けて一時中止していたデータ収集を再開 daq_stop() - stop コマンドを受けて RUN を終了する daq_unconfigure() - unconfigure コマンドをうけて再び configure コマンドを受け取れるようにする これらのメソッドを自分に合わせて変更しするだけでよい ただし XML のスキーマを変えるような変更の場合は 別途変更が必要
System Configuration XML 言語で記述される DAQOperator はその記述を Document Object Model(DOM) 解析する DAQOperator は解析されたパラメータを DAQ コンポーネントには 名前と値の対 (NVList) にして渡す ( コンポーネントの負担を軽減 ) これにより 汎用 DAQ コンポーネントを実現する
DAQ ミドルウエアの構成 XML ファイル <?xml version="1.0"?> <configinfo> <daqgroups> <daqgroup gid="group1"> <components> <component cid="reader0"> <hostaddr>kensdaqpc5.kek.jp</hostaddr> <hostport>50000</hostport> <instname>reader0.rtc</instname> <execpath>/home/daq/bin/readercomp</execpath> <conffile>/home/daq/rtc.conf</conffile> <startord>4</startord> <inports> </inports> <outports> <outport>reader_out</outport> </outports> <params> <param pid="monrate">100</param> <param pid="portno">1111</param> <param pid="srcaddr">127.0.0.1</param> </params> </component>
System interface メッセージは XML 言語で 通信プロトコルは HTTP で実現される Apache httpd + mod_python モジュールを使用 Python スクリプトと DAQOperator を結びつけるため ParameterClient/ParameterServer クラスを開発 (Python interface + C++ クラス )
システムインターフェイスについて 汎用 HTTP サーバ XML/HTTP XML Request / Response Parameter Server Controller DAQCommand/ Response DAQ- Component Python WEB I/F for Apache (mod_python) Parameter Client DAQ- Component REQUEST <?xml version="1.0" encoding="utf-8"?> <request> <methodname>begin</methodname> <methodparams></methodparams> </request> RESPONSE <?xml version="1.0" encoding="utf-8"?> <response> <returnvalue> <result> <status>ok</status> <message>error Reason</message> </result> </returnvalue> </response> HTTP クライアント
ParameterClient programming HTML programming mod_python programming Python interface for ParameterClient ParameterClient <form name="myform" action="/daq/daq.py/command" method="post"> <input type="text" name="cmd" size=40 maxlength=40 /> <input type="submit" value="submit" /> </form> def command(req, cmd): if not cmd: return "A required parameter is missing..." client = ParameterClient.ParameterClient("localhost", 30000) client.put("command", cmd) return "OK"
ParameterServer programming Pseudo DaqOperator+ ParameterServer int start() { cout << "this is start method" << endl; cout << "gotvalue = " << gotvalue << endl; } RTC::ReturnCode_t DaqOperator::run2() { if(server==null) { server= new ParameterServer(30000); server.bind("command", &command, start); server.bind("status", &status); server.run(); command = NOP ; } // check if(command== START ) { start 処理 } else if (command== ) { } }
開発の現状 RT ミドルウエア 産総研と共同研究を続けている DAQ ミドルウエア 全国大学 研究所向けDAQ-Middleware-1.0.0-RC のリリース (DAQ 講習会で利用しているもの ) DAQ-Middleware が J-PARC 物質 生命科学実験施設 (MLF) の 5 月末の中性子ファーストビームで 初めて本格的な実験に利用された 秋の MLF 実験に向けて DAQ-Middleware を改良中
J-PARC MLF
中性子ファーストビーム実験 スクリーンショット
まとめ DAQ ミドルエアを紹介した 国際標準ロボット技術 RT ミドルウエアを拡張したもの Run Control を開発 XML 言語を使った System configration を実現 Web サーバと連携して XML/HTTP 通信で疎結合可能な仕組みを作った 全国大学 研究所向け DAQ-Middleware-1.0.0-RC をリリース DAQ ミドルウエアは本年 5 月末の J-PARC 中性子ファーストビーム実験で初めて本格的な実験に使用