InterDAQ制御プロトコル仕様
この文書ではInterDAQ Control Protocol(以下IDCPと略)に関する技術情報について解説しています。目次
- InterDAQ Control Protocol Specification
- 目次
- overview
- 各コマンドの詳細
- 基本コマンド
- RS232c制御コマンド
- A/D変換制御コマンド
- ID_CMD_GETAINPUT
- ID_CMD_SETAOUTPUT
- ID_CMD_GETAOUTPUT
- ID_CMD_GETDINPUT
- ID_CMD_SETDOUTPUT
- ID_CMD_GETDOUTPUT
- ID_CMD_SETACHOPT
- ID_CMD_GETACHOPT
- ID_CMD_SETSMODE
- ID_CMD_GETSMODE
- ID_CMD_SETSRATE
- ID_CMD_GETSRATE
- ID_CMD_SETSPOINT
- ID_CMD_GETSPOINT
- ID_CMD_SETTRIGGER
- ID_CMD_GETTRIGGER
- ID_CMD_SSTART
- ID_CMD_SSTOP
- ID_CMD_SSTAT
- ID_CMD_GETBUFDATA
- ID_CMD_GETBUFDATA2
- ID_CMD_GETADDAINFO
- ID_CMD_SETSCHANNEL
- ID_CMD_GETSCHANNEL
Overview
OverView
IDCPはInterDAQの制御を行うために設計されたプロトコルです.IDCPを 使用することで,InterDAQの様々な設定を変更したり,A/D変換機能を 制御することができます.
物理層
IDCPを使用するためにはInterDAQと,InterDAQを制御する機器(クライアント) 側で何らかの物理的な接続が必要となります.現在のところ物理的な接続には Ethernetを使用することができます.
コマンドパケット
IDCPでは以下のようなデータ構造を用いてコマンドやデータを交換します.これを コマンドパケットと呼ぶことにします.
(long) コマンド番号 (long) 全体の長さ (word) オプションデータ0 (word) オプションデータ1 ...... ................. (word) オプションデータnコマンド番号はIDCPにより定義されているlong(4byte)の整数で,各コマンド 毎に重複しない値が割当てられています.
オプションデータにはコマンド毎に定義されているパラメータなどを含めます. オプションデータの数はコマンド毎に異なります.またコマンドによってはオ プションデータをlong(4byte)のデータとして扱ったり,char(1byte)として扱 うこともあります.この場合にもオプションデータ全体の大きさはwordの倍数 に制限されます.
全体の長さはlongの整数で,上のデータ構造全体のbyte数です. オプションデータが0個の場合8(byte)となります.
エラーパケット
コマンドパケットのうち,コマンド番号が ID_CMD_ERROR のものを特にエラーパケットと呼び ます.エラーパケットは以下のようなコマンドパケットとなります.
(long) ID_CMD_ERROR (long) 12 (long) エラー番号全体の長さは固定で12(byte)となります.オプションデータはlong(4byte)の 整数として扱われ,エラーの種類毎に重複しないエラー番号が入っています.
エラーパケットはクライアントからInterDAQへのコマンドに対し,そのコマン ドが成功したかエラーになったかという状況をクライアントへ知らせるために 使用されます. エラーパケットはコマンドの結果に関係なく常に返送されます.ただし例外的 にID_CMD_PINGコマンドパケットに対してエラー パケットを返送しません.
データパケット
コマンドパケットのうち,コマンド番号が ID_CMD_DATA のものを特にデータパケットと呼び ます.データパケットは以下のようなコマンドパケットとなります.
(long) ID_CMD_DATA (long) 8 + 2n (word) オプションデータデータパケットはクライアントからのコマンドにより得られたデータを交換す るために使用されます.クライアントからInterDAQヘデータパケットが送られ ることはありません.
シーケンス
接続
IDCPの接続は下位プロトコルに依存します.例えばIDCP/UDPでは接続という概念は 存在しませんが,IDCP/TCPではTCPのコネクションを確立することでIDCPの接続 を行います.InterDAQでは同時に接続できるIDCPクライアント数を制限しています.下位プ ロトコルの接続が確立するとInterDAQからクライアントへエラーパケットが送 信されます.既に他のクライアントが接続している場合にはID_ERR_BUSYを含 むエラーパケットが送信されます.他のクライアントが接続していない場合に はID_ERR_NOERRを含むエラーパケットが送信されます.
認証
一部の例外をのぞいたほとんどのコマンドは認証が必要です.認証には InterDAQに設定されているパスワードを使用します.認証を行うには ID_CMD_AUTHやID_CMD_AUTH2を使用します.認証が成功すると,その接続が有効なあいだすべてのコマンドが実行できるよ うになります.接続の概念の存在しない下位プロトコルを使用するIDCP/UDPで は認証の必要なコマンドを実行することはできません.
コマンドシーケンス
実際のコマンドの実行は以下のようなコマンドパケットの交換で行われます.- クライアントからのコマンドパケットの送信
- InterDAQからのエラーパケットの送信
- InterDAQからのデータパケットの送信(optional)
ほとんどのコマンドパケットに対してエラーパケットが送信されます. エラーが発生しなかった場合にはエラー番号はID_ERR_NOERRとなります. その他のエラーはコマンドによって意味が異ります.
コマンドによっては実行結果をデータパケットでクライアントに返送するもの があります.ただしエラーが発生した場合にはデータパケットは送信されませ ん.
切断
IDCPにはコネクションを切断するコマンドなどはありません. 接続と同様に下位プロトコルの切断機能を使用します. 切断時にはInterDAQからエラーパケットが送信されます.エラー番号は 固定でID_ERR_NOTCONNが入ります.IDCP接続中にクライアントが応答不可能になった場合に他のクライアントが接 続できなくなることを防ぐために,一定時間コマンドパケットの交換を実行し ない接続はタイムアウトします.タイムアウトの場合にも切断と同様にエラー パケットが送信され,エラー番号としてID_ERR_NOTCONNが入ります.
各コマンドの詳細
IDCPコマンドは機能毎にいくつかのカテゴリに分けられています. 現在のところ以下の3つのカテゴリがあります.- 基本コマンド
- InterDAQの各種設定コマンド等,基本機能を制御するためのコマンド群です
- RS232c制御コマンド
- IDCPからInterDAQのシリアルインターフェイスを制御するためのコマンド群です
- A/D変換制御コマンド
- InterDAQのA/D変換機能を制御するためのコマンド群です
基本コマンド
ID_CMD_DATA
InterDAQからクライアントへデータを送信するためのコマンドです.InterDAQ → (long) ID_CMD_DATA (long) 8 + n (char) nバイトのデータ(ただしnは正数でかつ2の倍数)
ID_CMD_ERROR
エラーコード送信用のコマンドです.クライアント側からInterDAQへ送信した 場合,無視されます.エラーコードはすべてこのパケットを使用して送信され ます.パケットの大きさは固定で,12バイトとなっています.InterDAQ → (long) ID_CMD_ERROR (long) 12 (long) エラーコード
ID_CMD_PING
InterDAQに対して,ID_CMD_PONG応答を要求します.UDPを使用して,ネットワー ク上のInterDAQを探すためのコマンドです.エラーパケット応答はなく, ID_CMD_PONGパケットが返ります.認証の必要はありません.InterDAQ ← (long) ID_CMD_PING (long) 8
ID_CMD_PONG
ID_CMD_PINGパケットに対する応答パケットです.同時にInterDAQに設定され ている名前情報を返します.名前は64バイト以内です.名前文字列は0でター ミネートされていない場合があります.InterDAQへ送信された場合,無視され ます.InterDAQ → (long) ID_CMD_PONG (long) 8+2n (char) name 2n bytes
ID_CMD_AUTH
認証を行います.認証されていない状態で認証の必要なコマンドを実行すると, エラーID_ERR_NOTAUTHが発生します.パスワードが8文字に満たない場合0でパ ディングしてください.このコマンドでは,ネットワーク上にパスワードが平 文のまま送出されます.盗聴される可能性のあるネットワークを通る経路で InterDAQを制御する場合にはID_CMD_AUTH2を使用してください.InterDAQ ← (long) ID_CMD_AUTH (long) 16 (char) password 8 bytes InterDAQ → ID_ERR_NOERR 成功 ID_ERR_NOTAUTH 失敗
ID_CMD_NEWMEM
ID_CMD_DOWNLOADコマンド用にバッファメモリの確保を行います.バッファモー ドでサンプリング中はメモリの確保ができません.ID_CMD_SSTOPを実行後に ID_CMD_NEWMEMしてください.InterDAQ ← (long) ID_CMD_NEWMEM (long) 12 (long) 確保するサイズ InterDAQ → ID_ERR_NOERR 成功 ID_ERR_NOMEM 失敗 ID_ERR_BUSY バッファモードでサンプリング中
ID_CMD_COMMIT
ID_CMD_DOWNLOADコマンドでダウンロード済みの設定を保存します.成功した 場合はコネクションが切断され,InterDAQが再起動します.再起動にはおよそ 30秒かかります.InterDAQ ← (long) ID_CMD_COMMIT (long) 8 InterDAQ → ID_ERR_NOMEM メモリが確保されていない ID_ERR_INV ダウンロードされていない ID_ERR_NOERR 成功
ID_CMD_DOWNLOAD
InterDAQへ各種設定をダウンロードします.このコマンドに先立ち ID_CMD_NEWMEMコマンドを実行する必要があります.ID_CMD_NEWMEMで確保する サイズはこのコマンドパケットサイズ以上を指定します.ダウンロード後は ID_CMD_COMMITコマンドで保存されます.InterDAQ ← (long) ID_CMD_DOWNLOAD (long) 28 + len0 + len1 + len2 + len3 (long) type 0bit: len0をプログラムとしてダウンロード 1bit: len0を出荷時用プログラムとしてダウンロード 2bit: len1をIPLプログラムとしてダウンロード 3bit: len2をハードウェア情報としてダウンロード 4bit: len3を設定としてダウンロード (long) len0 (long) len1 (long) len2 (long) len3 (char) file0 ... (char) file1 ... (char) file2 ... (char) file3 ... InterDAQ → ID_ERR_NOMEM メモリが確保されていない ID_ERR_FORMAT ダウンロードしたファイルのフォーマットがおかしい ID_ERR_NOERR 成功
ID_CMD_UPLOAD
InterDAQから各種設定をダウンロードします.一度にダウンロードできるのは 一つだけです.応答としてエラーパケットの後,データパケットがかえります.InterDAQ ← (long) ID_CMD_UPLOAD (long) 12 (long) type 0bit: プログラムをダウンロード 1bit: 出荷時用プログラムをダウンロード 2bit: IPLプログラムをダウンロード 3bit: ハードウェア情報をダウンロード 4bit: 設定をダウンロード InterDAQ → ID_ERR_INV typeが変 ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) 8 + size (char) prog ; size bytes
ID_CMD_GETHWINFO
ハードウェア情報をダウンロードします.InterDAQ ← (long) ID_CMD_GETHWINFO (long) 8 InterDAQ → ID_ERR_NOMEM ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) size + 8 (char) ;size bytes
ID_CMD_GETSWINFO
ソフトウェア情報をダウンロードします.InterDAQ ← (long) ID_CMD_GETHWINFO (long) 12 (long) type 0: IPL 1: 現在のプログラム 2: 初期プログラム InterDAQ → ID_ERR_INV ID_ERR_NOMEM ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) size + 8 (char) ;size bytes
ID_CMD_SETPASSWD
パスワードを設定します.パスワード8文字に満たない場合は0でうめるInterDAQ ← (long) ID_CMD_SETPASSWD (long) 16 (char) InterDAQ → ID_ERR_NOERR
ID_CMD_SETDATE
時刻の設定を行います.InterDAQ ← (long) ID_CMD_SETDATE (long) 16 (long) GMTからlocaltimeへのオフセット(単位は分 (±12 * 60)) (long) 1970/1/1 0:0:0からのオフセット(単位は秒)(GMT) InterDAQ → ID_ERR_NOERR ID_ERR_INV オフセットがおかしい
ID_CMD_GETDATE
時刻の取得InterDAQ ← (long) ID_CMD_GETDATE (long) 8 InterDAQ → (long) ID_CMD_ERROR (long) 12 (long) ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) 16 (long) GMTからlocaltimeへのオフセット(単位は分 (±12 * 60)) (long) 1970/1/1 0:0:0からのオフセット(単位は秒)(GMT)
ID_CMD_SETNAME
InterDAQの名前を設定します.名前は最大64byteです.名前の長さが奇数の場 合,0でパディングします.InterDAQ ← (long) ID_CMD_SETNAME (long) 8 + 2n (char) 2n bytes InterDAQ → ID_ERR_NOERR ID_ERR_INV
ID_CMD_GETNAME
InterDAQの名前を返します.InterDAQ ← (long) ID_CMD_GETNAME (long) 8 InterDAQ → ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) 8 + 2n (char) 2n bytes
ID_CMD_GETUNIQUE
InterDAQからユニークな文字列を得ます.このコマンドで得られた文字列を使用して,ID_CMD_AUTH2を実行します.認証の必要はありません.InterDAQ ← (long) ID_CMD_GETUNIQUE (long) 8 InterDAQ → ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) 8 + 2n (char) 2n bytes string
ID_CMD_AUTH2
認証を行います.InterDAQ ← (long) ID_CMD_AUTH2 (long) 8 + 16 (long) (MD5 digest) (16bytes) InterDAQ → ID_ERR_NOERR ID_ERR_AUTHID_CMD_AUTHと比べると パスワードがネットワーク上に送出されないという点 が異なります.このコマンドを使用した認証は以下の手順で実行します. MD5アルゴリズムについてはRFC1329-1233を参照してください.
{
unsigned char *uniq_id;
unsigned long digest[4];
uniq_id = ID_CMD_GETUNIQUE ();
strcat (uniq_id, password);
md5digest (digest, uniq_id);
error = ID_CMD_AUTH2 (digest);
}
ID_CMD_PROXY
PROXY経由でInterDAQに接続します.ただしAppleTalkはサポートされません. 詳しくはproxy.txtを参照してください.InterDAQ ← (long) ID_CMD_PROXY (long) 8 + 8 (long) dst ipaddr (long) dst port InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP
RS232c制御コマンド
ID_CMD_SET232C
ID_CMD_GET232C
ID_CMD_WRITE232C
ID_CMD_READ232C
ID_ERR_NOTSUP
A/D変換制御コマンド
ID_CMD_GETAINPUT
指定したアナログチャンネルの現在値を返します.チャンネルビットマップは 最下位ビットが,1チャンネルに相当します.最上位ビットが32チャンネルに 相当します.認証の必要はありません.InterDAQ ← (long) ID_CMD_GETAINPUT (long) 12 (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_INV ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 8+n*2 (word) 現在値 指定したチャンネル数分続きます.
ID_CMD_SETAOUTPUT
InterDAQのアナログ出力値を設定します.InterDAQ ← (long) ID_CMD_SETAVAL (long) 16 (long) channel bitmap (long) value InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP
ID_CMD_GETAOUTPUT
InterDAQのアナログ出力値を返します.InterDAQ ← (long) ID_CMD_GETAOUTPUT (long) 12 (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 8 + 4n (long) value ....
ID_CMD_GETDINPUT
InterDAQのデジタル入力値を返します.認証の必要はありません.InterDAQ ← (long) ID_CMD_GETDINPUT (long) 12 (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) size (long) DATA
ID_CMD_SETDOUTPUT
InterDAQのデジタル出力値を設定します.InterDAQ ← (long) ID_CMD_SETDOUTPUT (long) 16 (long) channel bitmap (long) value InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP
ID_CMD_GETDOUTPUT
InterDAQのデジタル出力値を返します.InterDAQ ← (long) ID_CMD_GETDOUTPUT (long) 12 (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 8 + 4n (long) value ......
ID_CMD_SETACHOPT
InterDAQのアナログ入力のレンジなどを設定します.InterDAQ ← (long) ID_CMD_SETACHOPT (long) 16 (long) channel bitmap (long) 設定値 InterDAQ → ID_ERR_NOERR ID_ERR_INV ID_ERR_NOTSUP ID_ERR_BUSY バッファモード中
ID_CMD_GETACHOPT
InterDAQのアナログ入力のレンジなどを返します.InterDAQ ← (long) ID_CMD_GETACHOPT (long) 12 (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_INV ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 8+4n (long) value .....
ID_CMD_SETSMODE
サンプリングモードの設定を行います.このコマンドで指定したチャンネルは バッファモードでのみ有効です.バッファモードでは指定したチャンネルをサ ンプリングします.スレーブモードは内部タイマを使用する代りに,外部同期信号入力を使用しま す.外部同期の場合にもID_CMD_SETSRATEを使用して外部から入力されるサン プリングレートを指定する必要があります.
InterDAQ ← (long) ID_CMD_SETSMODE (long) 16 (long) モード ID_SM_DIRECT or ID_SM_BUFFER or ID_SM_BUFFER_SLAVE (long) channel bitmap InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP ID_ERR_BUSY バッファモード中
ID_CMD_GETSMODE
InterDAQ ← (long) ID_CMD_GETSMODE (long) 8 InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 16 (long) ID_SM_DIRECT ID_SM_BUFFER ID_SM_BUFFER_SLAVE (long) channel bitmap
ID_CMD_SETSRATE
バッファモードでのサンプリングレートを指定します.実際のサンプリングレー トはここで指定した値×2μ秒になります.またここで指定したサンプリング レートは16bit×16bitに分割されてタイマーに設定されるため,誤差が生じる 場合があります.InterDAQ ← (long) ID_CMD_SETSRATE (long) 12 (long) サンプリングレート InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP ID_ERR_BUSY サンプリング中
ID_CMD_GETSRATE
InterDAQ ← (long) ID_CMD_GETSRATE (long) 8 InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 12 (long) サンプリングレート
ID_CMD_SETSPOINT
バッファモードでサンプリングするバイト数を設定します.1データは2byteで 保存されます.8チャンネル,各4000個のデータをサンプリングする場合, 8*4000*2を指定します.0を指定した場合,リングバッファモードになります.InterDAQ ← (long) ID_CMD_SETSPOINT (long) 8 + 4 (long) sampling count InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP ID_ERR_INV ID_ERR_BUSY サンプリング中
ID_CMD_GETSPOINT
InterDAQ ← (long) ID_CMD_GETSPOINT (long) 8 InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP
ID_CMD_SETTRIGGER
トリガーの設定を行います.InterDAQ ← (long) ID_CMD_SETTRIGGER (long) 8 + 20 (long) mode 0: off 1: analog 2: digital 3: switch 4: digital bittest (long) point +ならpost trigger (long) slope 0 LtoH 1 HtoL (long) channel (0 <= ch <= 31) (long) level InterDAQ → ID_ERR_NOERR ID_ERR_BUSY サンプリング中mode 4のdigital bittest triggerはlevelにテストするビットマスク(複数 ビット可)を指定します.slopeは
0 0 to 1 1 1 to 0 2 反転です. ビットテストは以下の擬似コードのように実行されます.
BOOL
trigger_test ()
{
old_stat = level & old_data;
new_stat = level & new_data;
switch (slope)
{
case 0:
if (old_stat != level)
{
new_stat |= old_stat;
if (old_stat ^ new_stat)
return TRUE;
}
break;
case 1:
if (old_stat != 0)
{
new_stat &= old_stat;
if (old_stat ^ new_stat)
return TRUE;
}
break;
case 2:
if (old_stat ^ new_stat)
return TRUE;
break;
}
return FALSE;
}
ID_CMD_GETTRIGGER
トリガーの設定を返します.InterDAQ ← (long) ID_CMD_GETTRIGGER (long) 8 InterDAQ → ID_ERR_NOERR InterDAQ → (long) ID_CMD_DATA (long) 8 + 20 (long) mode (long) point (long) slope (long) chnnel (long) level
ID_CMD_SSTART
バッファモードサンプリングををスタートします.InterDAQ ← (long) ID_CMD_SSTART (long) 8 InterDAQ → ID_ERR_BUSY すでに実行中 ID_ERR_INV バッファーモードでない ID_ERR_NOERR 成功
ID_CMD_SSTOP
バッファモードをストップします.InterDAQ ← (long) ID_CMD_SSTOP (long) 8 InterDAQ → ID_ERR_NOERR
ID_CMD_SSTAT
バッファモードステータスを返します.InterDAQ ← (long) ID_CMD_SSTAT (long) 8 InterDAQ → ID_ERR_NOERR ID_ERR_NOTSUP InterDAQ → (long) ID_CMD_DATA (long) 8 + 32 (long) mode ID_SM_* (long) max buffer size (bytes) (long) count bufferd size (bytes) (long) rest unsampled size (bytes) (long) untrans untranspher size (bytes) (long) status 0: stoped 1: waiting trigger 2: sampling (long) トリガーのかかった時間 (long) バッファ先頭アドレスの時間(サンプリングレートが1秒以上の場合は常に0)
ID_CMD_GETBUFDATA
バッファリングされているデータを返します.タイムアウトが指定された場合できるだけmax sizeを満たすデータを得るまで粘ります.InterDAQ ← (long) ID_CMD_GETBUFDATA (long) 24 (long) データ番号(GMT 1970年1月1日0時0分0秒からの経過時間(GMT)) (long) max size 一度に受け取る最大長(<= 1024バイト) (long) timeout 0: すぐに返る 単位は秒 (long) mode 0: 読み出したあと削除 1: 削除しない InterDAQ → ID_ERR_NOERR (成功) InterDAQ → (long) ID_CMD_DATA (long) サイズ (long) 先頭データの時間 (word) データ ...
ID_CMD_GETBUFDATA2
stream sizeで指定したサイズ分返送があります.途中で状態変化(サンプリング終了,バッファオーバーフロー)がおきた場合は残りデータは不定です.ID_CMD_DATAとの違いは,データパケットの大きさが指定したサイズから決定されること,およびデータが取り込まれるとすぐ送信されることです.GET_BUFDATAではタイムアウトもしくはmaxサイズの取り込みのいずれかの条件が満たされないとデータの送信は行われません.InterDAQ ← (long) ID_CMD_GET_BUFDATA2 (long) 12 (long) stream size InterDAQ → (long) ID_CMD_ERR (long) 12 (long) error code InterDAQ → (long) ID_CMD_DATA (long) stream size + 8 + 36 (word) DATA ..... ..... (long) mode ID_SM_* (long) max buffer size (bytes) (long) count bufferd size (bytes) (long) rest unsampled size (bytes) (long) untrans untranspher size (bytes) (long) status 0: stoped 1: waiting trigger 2: sampling (long) トリガーのかかった時間 (long) バッファ先頭アドレスの時間 (long) 有効データ長
ID_CMD_GETADDAINFO
InterDAQに実装されているAD/DAチャンネルの情報を返します.InterDAQ ← (long) ID_CMD_GETADDAINFO (long) 8 InterDAQ → (long) ID_CMD_ERR (long) 12 (long) error code InterDAQ → (long) ID_CMD_DATA (long) 8 + 32 (long) アナログ入力チャンネル数 (long) アナログ出力チャンネル数 (long) デジタル入力チャンネル数 (long) デジタル出力チャンネル数 (long) アナログ入出力の有効ビット数 (long) デジタル入出力の有効ビット数 (long) ADDAタイプ (long) 補足情報
ID_CMD_SETSCHANNEL
バッファモードでサンプリングするチャンネルを指定します.ID_CMD_SETSMODEと違い32個以上のチャンネルを指定することができます.ID_CMD_SETSMODEを使用するとID_CMD_SETSCHANNELで指定した情報が失われます.ID_CMD_SETSMODEを実行したあとにID_CMD_SETSCHANNELを実行するようにしてください. チャンネルxはチャンネルビットマップ(x / 32)のビット(x % 32)に相当します.ただしビット0は最下位ビットとします.InterDAQ ← (long) ID_CMD_GET_BUFDATA2 (long) 8 + 4n (long) チャンネルビットマップ0 (long) チャンネルビットマップ1 ......... (long) チャンネルビットマップn InterDAQ → (long) ID_CMD_ERR (long) 12 (long) error code
ID_CMD_GETSCHANNEL
ID_CMD_SETSCHANNELで指定したサンプリングチャンネルの設定を取得します.InterDAQ ← (long) ID_CMD_GETSCHANNEL (long) 12 (long) max (=4n) InterDAQ → (long) ID_CMD_ERR (long) 12 (long) error code InterDAQ → (long) ID_CMD_DATA (long) max(=4n) + 8 (long) チャンネルビットマップ0 (long) チャンネルビットマップ1 ......... (long) チャンネルビットマップn
