VC でバイナリデータ取得する方法
- 2 名前: 匿名488 投稿日:2004/08/26(木) 07:42 ID:???
- CF8400 については、詳しい方に譲るとして、バイナリデータ一般について
説明しますと、GPIB バス上の転送に限って言えば、いわゆるアスキーデータ
(=人間が読める数値などのキャラクタ文字列での転送)と同じで、
特にモードに区別があるわけではありません。
下記で説明するように、データエンドを自動認識する都合上、API 自体バイナリ、
アスキーに分かれている場合もありますが、ほとんどの API では、
格納先はどちらも unsigned char[] (あるいは byte 型として確保した
メモリのポインタ)になるはずです。
バイナリデータの場合、アスキーデータと取り扱いが異なるのは2点ありまして、
1)使用するキャラクタの範囲がアスキーデータの場合のように
いわゆる alpha-numeric('A-Z','0-9','+/-' 等) に限定できない、
ため、CR(0x0D) や LF(0x0A) をデータのエンドマークとして使えません。
したがって、
a)常にデータのレコード長を決めた転送をする
b)データの先頭など、固定位置に転送データ数(バイト数)を埋め込んで、
受信側でデータ区切り(転送終了)を知る
c)GPIB バスに備わっている EOI 信号線を用いて、データライン外で
データ区切り(転送終了)を通知する
などの方法をとることになります。
上記のどれを使用する必要があるのかについては、API と
計測器の仕様によりますので、マニュアルをご覧ください。
2)アスキーデータの場合は、1)でも説明しましたように
可読文字列(簡単なデジボル等で説明しますと) '+1.345E3' 等の
データ(unsigned char[],あるいは char[])として戻ってくるため、
見た目から取り扱いが想定できますが、バイナリデータの場合、
フォーマットがあらかじめ固定(仕様で)されていて、
しかも計測器によってまちまちなため、一概になんとも言えません。
よって説明のしようがないのですが、あくまでも「仮定の仕様」の一例で説明しますと、
'+1.345E3' を返す仕様を考えますと、
「仮定仕様」
有効数字4桁、指数部1桁、固定データ、4バイト長
1バイト目:符号 (0x00:+ , 0xFF:- , その他:エラーコード)
2バイト目:有効数字上位2桁 Packed BCD (上位4bit,下位4bit がそれぞれ 10 進数値)
3バイト目:有効数字下位2桁 Packed BCD
4バイト目:上位 4bit:指数部符号 , 下位 4bit:指数部1桁
等が想定され(実際の計測器の場合、マニュアルに記述があるはずです)
API から取得したデータは、以下のように返されることが考えられます。
unsigned char result[] = { 0x00 , 0x13 , 0x45 , 0x03 }
返されたデータの処理は、上記の仕様にしたがって実数型や文字列等に
「自分で変換」することになるのが一般的です。
参考になりますでしょうか。
新着レスの表示