Kinoko Module Driver リファレンス |
[注意] このページでは,CC/NET をネットワーク経由で使用する場合を記述しています.CC/NET をローカルに使用する(CC/NET 上に Kinoko をインストールして直接使用する)場合は,「CC/NET (直接アクセス)」を参照してください.
[注意] ここに説明されている内容は,十分にテストされたものではありません.現段階では,KiNOKO の開発の参考として参照してください.
種別 Network-CAMAC ブリッジ 製造者 東陽テクニカ・KEK (http://www-online.kek.jp/~inoue/para-CAMAC/) 参照名 Toyo-CCNET-Remote または KEK-CCNET-Remote 読み出し blockRead() サービス要求 シングル・ポーリング
CC/NET のリモートアクセス機能を使用するためには,CC/NET 上で製品付属のサーバプログラム(ccnet_server)が走っている必要があります.CC/NET 起動時に自動で ccnet_server プログラムが走るように設定しておくと便利です.
CC/NET をネットワーク経由で使用する場合,Kinoko の Network-CAMAC ブリッジとして透過的に CAMAC コントローラとして使用する方法と,独立した NetworkModule として使用する方法があります.前者の場合は,CAMAC トランザクションごとのネットワークオーバーヘッドが大きくなり,性能が出ません.CamacController として使用する場合は,CC/NETを直接使用する方が適しています.後者の場合,データ処理が若干煩雑になりますが,CC/NET のパイプライン実行機能を利用して高速な処理が可能です.
- executeSingleCamac(int station, int function, int address)
- executeSingleCamac(int station, int function, int address, Register data)
- executeSingleCamac(int station, int function, int address, Register data, Register q, Register x)
- CAMAC のシングルサイクルを実行する.引数に data, q, x が渡されていれば,データ,Q レスポンス,X レスポンスがそれぞれ返される.
- executeSingleDaq(int function);
- executeSingleDaq(int function, Register data);
- executeSingleDaq(int function, Register data, Register status);
- DAQ シングルサイクルを実行する.引数に data, status が渡されていれば,データおよびステータスがそれぞれ返される.
- initializeCommandBuffer()
- コマンドバッファを初期化
- loadCamacCommand(int station, int function, int address)
- loadCamacCommand(int station, int function, int address, int data)
- コマンドバッファに CAMAC コマンドを追加
- loadDaqCommand(int function)
- loadDaqCommand(int function, int data)
- コマンドバッファに DAQ コマンドを追加
- execute()
- executePio()
- executeDma()
- executeDmaSequence()
- コマンドバッファの内容を実行
- blockRead()
- execute() により実行した結果を読み出す.データフォーマットは製品付属のライブラリと同じ(pcc.h の cam_extract_XXX() 関数が使える)
string host = "ccnet.u-kinoko.ac.jp"; int port = 2003; datasource NetworkCamacBridge { NetworkCamacBridge controller("TOYO-CCNET-Remote"); controller.connect(host, port); CamacCrate crate; CamacModule adc("Rinei-RPC022"); int adc_station = 8; int adc_channels = #0..#3; crate.installController(controller); crate.installModule(adc, adc_station); on trigger(adc) { adc.read(adc_channels); adc.clear(); } }
CC/NET をネットワークモジュールとして使用する例
string host = "ccnet.u-kinoko.ac.jp"; int port = 2003; datasource CCNET { NetworkModule ccnet("TOYO-CCNET-Remote"); ccnet.connect(host, port); on run_begin { // コマンドバッファ初期化 // ccnet.initializeCommandBuffer(); // コマンドリストを構築 // int n, f, a; ccnet.loadCamacCommand(n = 10, f = 0, a = 0); // READ ccnet.loadCamacCommand(n = 10, f = 0, a = 1); ccnet.loadCamacCommand(n = 10, f = 0, a = 2); ccnet.loadCamacCommand(n = 10, f = 0, a = 3); ccnet.loadCamacCommand(n = 12, f = 0, a = 0); ccnet.loadCamacCommand(n = 12, f = 0, a = 1); ccnet.loadCamacCommand(n = 12, f = 0, a = 2); ccnet.loadCamacCommand(n = 12, f = 0, a = 3); ccnet.loadCamacCommand(n = 10, f = 10, a = 0); // CLEAR LAM ccnet.loadCamacCommand(n = 10, f = 9, a = 0); // CLEAR ccnet.loadCamacCommand(n = 12, f = 9, a = 0); } on trigger(ccnet) { // CAMAC トランザクションを実行 // ccnet.execute(); // block 型のデータとして読み出す // ccnet.blockRead(); } }