08-01-2016 10:09 PM
USB-6002を使用しているのですが、開始トリガーをPFI0に与えて
そのタイミングでアナログ電圧をAO0、AO1から出そうとしています。
DAQmx書き込みでNチャンネル1サンプルの設定で
2チャンネル分の電圧データを1次元配列として与えています。
ですがプログラムを走らせると、バッファーサイズが2以上でないと
受け付けないというエラーが出て、動きません。
例えばNチャンネルNサンプルで、2サンプル以上の配列データを
渡してやると動くのですが、1サンプルだと同様に動作しません。
DAQmxの仕様のバグか何かでしょうか。
解決法についてご教授いただけると幸いです。
よろしくお願いします。
08-09-2016 03:58 AM
Yab731様
恐れ入りますが現時点でお伺いしている情報の範囲では、正確な状況を把握できかねますので、
さらに以下の点についてお伺いしてもよろしいでしょうか。
また、Yab731様が開発を行っていらっしゃるコードを再現して解決策を検討する方がご提案できる内容も増えるかと思いますので、
お手数ですが上記内容とともに該当のviについてのスクリーンショットを添付していただけますでしょうか。
お忙しいところ恐れ入りますが、よろしくお願い致します。
08-09-2016 09:06 PM
アドバイスありがとうございます。
下記ブロックダイアグラム中ではパラメータを定数で書き込みましたので
比較的状況がクリアになるのではないかと思います。
接続しているデータのサイズは1です。
USB6003をパソコンにつないだ状態でこのプログラムを
走らせるとエラーが表示されるのが再現できるはずです。
バッファーのエラーはDAQmx Timing (sampling clock)に
サンプルサイズを大きめ(2)に与えた場合に言われるもので下記のものです。
もちろん送り出すデータとサンプルサイズを合わせるべきというのはわかるので
合わせれば(sample per channel=1)よいだろうと思ったのですが、そうすると
今度は下記のエラーが出ます。
1サンプルを出力するライブラリに渡そうと1サンプルをつなぐと
サンプル数が足りないといわれるとても面白い状況なのですが
どうしようもないので目下別の方法でデバイスを使用してます。
DAQmx Timing (sampling clock)の内部コードがsample per channel>=2
を要求するように書かれているんじゃないかと思われます。
外部クロックで動くか外部トリガで電圧を一つずつ出せるとよかったのですが
どうにも無理そうなので、将来的には外部クロックで動くUSBDAQに
置き換えようかと検討しているところです。
08-22-2016 02:21 AM
ご連絡が遅くなってしまい申し訳ございません。
コードを添付していただきありがとうございます。
私の方でUSB-6002で添付していただいたコードをそのままのパラメータで実行してみると、
エラーコード-200077を確認しました。
しかし、DAQmx Timing (sampling clock)のバッファサイズを2にしてコードを走らせても、
エラーコード-200609が再現できない状況です。
また、以下のリンクにございます、yab731様の英語のご投稿のほうも拝見させていただきました。
How can I send one analog output from USB-6002? - Discussion Forums - National Instruments
http://forums.ni.com/t5/LabVIEW/How-can-I-send-one-analog-output-from-USB-6002/m-p/3329933
この投稿によりますと、PFI0からトリガを5KHZで出力し、
トリガのタイミングにあわせてAO0とAO1から異なる電圧値を0.2msごとに出力したい、とのお話ですが、
どのようなアナログ出力を行おうとしていらっしゃるのか、測定条件や詳細をお聞かせ願えますでしょうか。
以下のような点も含め詳細をお伺いできれば幸いです。お手数ですがよろしくお願いいたします。
・2つのアナログchから提供する電圧は(AO0,AO1,AO0,AO1...というように)互い違いに出力する予定でしょうか。
それともランダムに出力する予定でしょうか。
・2つのアナログchから提供する電圧は、例えばAO0は常に2V, AO1は3V、、、というように一定の値でしょうか。
08-27-2016 09:22 PM
返答が遅くなってしまいました。また説明が不足していて申し訳ありません。
ご指摘のとおり、お見せしたプログラムの目的は
「PFI0にパルスが来たタイミング ( t[i] ) で、AO0=V0[i] を書き出す。」
というもので、AO1には出力していません。
最終的には t[i] のタイミングで AO0=V0[i] 、AO1=5V(一定) を同時に書き出したいですが
問題解決のため簡単化してAO0のみ書き出しとしてプログラムを示した次第です。
DAQmxWriteに要素数1の配列をつなぎ、DAQmx Timingにバッファサイズ2を
与えるとエラーコード-200609が出るかと思います。
(DAQmxWriteに要素数2の配列をつないだ場合にはエラーは出ません)