KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

読みだしスクリプト
2005 年 9 月 2 日 21 時 1 分
投稿者: 市原佳代子


こんにちは 市原です。

32 チャンネル QADC を使いたいのですが、読みだしスクリプトで
adc.read(#0..#30);
までは読み出してくれるのですが、adc.read(#0..#31);
とすると、0 チャンネルと31チャンネルだけが読み出されてしまいます。
なぜか教えて頂けませんでしょうか?

本当は、adc.read(#1..#32);と
読み出したいのですが、良い方法はございますでしょうか?



2005 年 9 月 3 日 13 時 46 分
投稿者: 榎本 三四郎

# 演算子や .. 演算子はDAQで頻繁に使われるビット演算を容易に行えるように
するために導入された演算子で、演算の結果は普通の int 型です。
よく例にあるように、

int channel_list = #0..#3;

のように書くと、channel_list の値は 0 ビット目から 3 ビット目が立った整数値、
すなわち 0x000f となります。整数を引数に read() を呼ぶと、引数のビットパターンに
対応するチャンネルからデータを読み出すので、read(0x000f) は、0ch から 3ch を
読み出すことになります。

この場合の read() は、引数が符号つき整数なので、現在のほとんどのコンピュータ
環境では、0 ビット目から 30 ビット目までの 31 ビットしか有効ではありません。
read(#0..#31) が意図したとおりに動作しないのはこのためです。

別の方法として、ChannelList クラスを使って読み出しチャンネルを指定することが
できます。

ChannelList channel_list;
for (int i = 1; i <= 32; i++) {
    channel_list.add(i);
}

on trigger (my_trigger_module) {
    //...
    my_module.read(channel_list);
}

繁雑ですが、機能的にはこっちの方がいろいろと優れています。int を渡すのは、
むしろ簡略手法です。シーケンス実行時の性能はどちらも厳密に同等です。


このスレッドに記事を投稿する