NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

複数チャンネルで同時にアナログ入力を行う場合のレンジの設定方法

DAQmx Create Virtual Channel.vi を使用して,2CH同時に波形を取り込む場合,
普通に指定すると,2つのチャンネルのレンジが同じになってしまうような気がしているのですが,
レンジを個別に指定することは可能でしょうか?
0 件の賞賛
メッセージ1/9
5,501件の閲覧回数
平素よりNI製品をご利用頂きまして誠に有難うございます。
日本ナショナルインスツルメンツ技術部の幾田と申します。
お問い合わせの件に関して、以下のとおり回答いたします。
 
複数チャンネル使用した際の各チャンネルにおけるレンジの設定ですが、代表的な設定方法を幾つかご紹介させていただきたいと思います。
 
一つはDAQmx Create Virtual Channel.vi を使用するチャンネルの数だけ直列に接続し、それぞれのチャンネルにおいてレンジを設定します。
恐らくこちらの方法がプログラム的にはシンプルな形になるかと思います。
 
二つ目といたしまして、DAQmx Create Virtual Channel.vi を一つ使用する際は各チャンネルのレンジを配列化し、Forループを使用して入力します。
こちらのVIの簡単な確認方法といたしましては、DAQアシスタントを使用して複数チャンネル設定し、各チャンネルのレンジを設定します。
次に作成したDAQアシスタントにて右クリックから”フロントパネルを開く”を選択します。
開いたVIのブロックダイアグラムをご確認いただければ上記各チャンネルのレンジの設定方法にてVIのデバックの参照になるかと思われます。
 
上記内容にて一度ご確認いただき、プログラミングの参照にしていただければと思いますので宜しくお願いいたします。
メッセージ2/9
5,468件の閲覧回数
分かりました.
ありがとうございました.
0 件の賞賛
メッセージ3/9
5,441件の閲覧回数

同様の問題に対しまして、一つ目の方法として紹介がありますDQQmx Create Virtual Channel.vi を直列に接続する方法を試みていますが、汎用的なデータロガーソフトを構築しており、16個のviを配置し、その時使用するチャンネルのみに各々の設定値を与えようとすると、使わないチャンネルに対してphysical channels(有効にする物理チャンネル)制御器が空欄となりタスクエラーとなってしまいます。プログラム的にはフロントパネルに入力欄を残しつつ、その時使用するチャンネル数に対してのみ設定値を入力するためにはどのようにすれば良いでしょうか?

0 件の賞賛
メッセージ4/9
3,850件の閲覧回数

ぱっと思いつくものでは以下のような方法がありますが、いかがでしょうか。

チャンネル名を配列にしてForループに渡し、空文字列の場合にはTrueケースで何も実行せずに、空のTask nameを渡しています。

空のTask nameは後の処理に必要ないので、条件付きトンネルで空でないものだけ取り出しています。

 

CreateMultipleTask.png

メッセージ5/9
3,834件の閲覧回数

gustav2525様

返信ありがとうございます。

 

Trueケースの処理について、

無処理のためトンネル出入口をワイヤしようとしましたが、

入り口が物理チャンネルで出口がタスク名となり配線できませんでした。

 

また、上図のTask name outを次のタスク(DAQmxタイミング)に渡してあげると理解したのですが

これもデータタイプが異なり配線できませんでした。

 

このあたりを詳しく教示いただけませんでしょうか?

 

0 件の賞賛
メッセージ6/9
3,804件の閲覧回数

Trueケースを表示してタイミングの処理を加えたものを添付します。

(あと、前のはMacで作っておりDAQmxの仕様が少し違いましたので、WindowsのLabVIEW2012で作り直しました。Falseケースは前回と同様です。)

タイミングの例にあるように、各処理はパラメータを配列化してForループで行ってください。各DAQmx関数への入力はタスク名で大丈夫だと思います。

 

MultipleDAQ.png

 

また、添付している画像はVIスニペットなので、画像をブロックダイアグラムにドラッグアンドドロップで貼り付ければTrue、Falseケースともに見ることができます。

参考URL: VIスニペットで再利用を促進 - National Instruments

http://www.ni.com/tutorial/9330/ja/

メッセージ7/9
3,790件の閲覧回数

Merly様

レスポンス遅くなってしまいましたが、投稿頂きましたサンプルを参考に自分なりに検討しまして、

題記の問題を解決するVI構築することができました。

VIスニペットの件もありがとうございました。

 

ですが、私のVIにも不完全な箇所があり、継続して検討する必要があります。

 

Merly様のサンプルですが、

最終的なタスクアウトが配列となると思うのですが、

タイミング関数の次に来る「DAQmxタスクを開始関数」を配列処理できませんでした。

 

また、「チャンネル作成関数」の次にチャンネルごとのレンジ設定処理を配置したかったのですが、

この処理方法だと、なぜか最後のチャンネルに設定したレンジが全てのレンジに割り当てられてしまい、

思った動作となりませんでした。

 

そこで、ループトンネルをシフトレジスタにしないと、各ループ処理がタスクに継承されないことに気づき、

今回私が構築したような形になりました。

 

この方法で一応動くものとなりましたが、

シフトレジスタとした事で、条件付きトンネルで無くなったため、

Physical channel が空欄であるかどうかの判定ができず、

ケースストラクチャが無意味な状態となっています。

 

Physical channel に空欄があるとタスクエラーとなるので、

使わない欄はフロントパネル上で「要素を削除」をする必要があります。

(つまりTRUEケースに入らない)

 

このあたりを改善する必要があり、継続して検討して行きます。

 

ですがMerly様のおかげで配列処理等に関しまして、大変勉強になりました。

どうもありがとうございました。

 

メッセージ8/9
3,710件の閲覧回数

スニペットを添付ではなく挿入にして再投稿致します。

複数チャンネルのレンジ設定.png

メッセージ9/9
3,704件の閲覧回数