NI製品ディスカッション

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

任意デジタル信号

"0100........110"のような15bitの任意の2進を入力すると、
それに対応したデジタル信号のパターンをDigital I/Oの1つのラインから出力させたいと考えています。
また信号の周期も調節できるようにしようとしています。
 
Labview初心者なのですが、お願いします。
 
0 件の賞賛
メッセージ1/9
4,204件の閲覧回数
平素は弊社製品をご利用いただき誠にありがとうございます。
日本ナショナルインスツルメンツ 技術部の岩見と申します。
ご返信が大変遅くなってしまい申し訳ございません。

ご希望の動作は、カウンタ出力とデジタル出力を使用して実装可能です。
●カウンタ(パルス)出力
1.COパルス周波数タスクで、サンプル数=15回、サンプルモード=有限実行、に設定します
2.DAQmxチャネルを作成VIの、「周波数」を操作することにより、異なる周波数でのパルスの生成が可能となります

●デジタル出力
1.DAQmxタイミングVIにて、クロックソースをカウンタ出力に指定することにより、カウンタ出力パルスのタイミングでデジタル出力を行います
2.DAQmx書き込み関数で、15ビット分の出力パターンを指定します

NI サンプルファインダより、下記のサンプルをご覧いただけます。
 ハードウェア入力と出力→DAQmx→デジタルパルス生成→Gen Dig Pulse Train-Finite.vi
 ハードウェア入力と出力→DAQmx→デジタル生成→Cont Write Dig Port-Ext Clk.vi

サンプルをご確認いただき、ご不明な点がございましたらご連絡いただけますでしょうか。
お手数ですがよろしくお願いいたします。

日本ナショナルインスツルメンツ 技術部
岩見

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

すみません、便乗質問です。

LabVIEW 13.0.1f2 (32bit) を使用して、スレ主 SDDさんと同様のことをしたいのですが、

 

LabVIEW 2013のサンプルファインダで、

 ハードウェア入力と出力→DAQmx→デジタルパルス生成→Gen Dig Pulse Train-Finite.vi
 ハードウェア入力と出力→DAQmx→デジタル生成→Cont Write Dig Port-Ext Clk.vi

が見当たりませんでした。

サンプルファイルの名前が変わったのか、ファイルが削除されたのか、、、わかりませんが、

どのサンプルを参考にすればよいでしょうか??

 

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

DAQmxはインストールされていますか?

 

http://www.ni.com/download/ni-daqmx-9.9/4707/en/

TailOfGon
Certified LabVIEW Architect 2013
0 件の賞賛
メッセージ4/9
3,306件の閲覧回数

LabVIEW 2013をインストールするとき、DAQmx ver 9.8.0 が自動的にインストールされました。

ブロックダイアグラムからは、添付図のように、DAQmxが見えます。

ですが、

サンプルファインダ(添付図)には、

 ハードウェア入力と出力→DAQmx→デジタルパルス生成→Gen Dig Pulse Train-Finite.vi
 ハードウェア入力と出力→DAQmx→デジタル生成→Cont Write Dig Port-Ext Clk.vi

は表示されませんでした。

 

結局、

 Gen Dig Pulse Train-Finite.vi は、 https://decibel.ni.com/content/docs/DOC-12165

 Cont Write Dig Port-Ext Clk.vi は、 https://decibel.ni.com/content/docs/DOC-12403

にて見つけました。

いずれも LabVIEW 8.5 という古いバージョンのものです。

 

それで、

Gen Dig Pulse Train-Finite.vi の 「COパルス周波数+DAQmx Timing.vi 」を、

Cont Write Dig Port-Ext Clk.vi の 「DAQmx Write.vi 」 につなげばいいのでしょうか?

 「DAQmx Write.vi 」 の Pattern U32 のところに、32ビット分のデータを設定するということでしょうか?

すみません、わからないことだらけです。。。

 

すべてをダウンロード
0 件の賞賛
メッセージ5/9
3,297件の閲覧回数

こんにちは。

 

以前のサンプルはまとまりにかけていて、すこし分かりにくい部分があるということで

LabVIEW 2012 から付属しているほぼ全てのサンプルが更新された様で、古いサンプルが表示されないのはそういう理由かと。

ただ使われている関数は全て同じなので、古いのも参考にできることはできます。

 

今回のもとのスレッドは少し古い内容なので、必要ないかもしれません。(新しいスレッドを作ることをお勧めします)

ハードの機種によってプログラミングが少し変わるので、使おうとされているハードの型番は知ってますか?

 

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

すでに別スレッドで解決されているみたいですね。失礼しました。

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

任意デジタル信号を出力する方法について、解決しましたので、要点をまとめて報告いたします。
(当方は初心者ですので、至らない記述があれば、フォローをお願いします)

 

まず、基本的な構成として、
 1.COパルス周波数から始まるカウンタ出力用のタスク
 2.デジタル符号列を出力するタスク
 3.任意のデジタル符号列を生成する部分
の3つが存在します。
ふたつのタスクが同時に動作するということが、初心者のわたしには理解できていませんでした。
上記2のタスクのエラー出力を、
上記1のタスクのエラーに結合させることで、デジタル符号列の出力タスクが終わったら、カウンタ出力タスクも終わるようにできます。

 

上記1のタスクですが、
Gen Dig Pulse Train-Finite.viとの違いとして、
カウンタ出力のデフォルト端子をデジタル出力の外部ソース端子に設定する「DAQmxチャンネル」というものを
「DAQmxタイミング」の後ろ、「DAQmxタスクを開始」の手前にいれます。

 

上記2のタスクは、
Cont Write Dig Port-Ext Clk.vi と大きく変更するところはありません。
ただし、「DAQmx書き込み」へ入力されていたPattern (U32)には、上記3で生成する任意符号列を接続します。

 

上記3が重要でした。
当方の所有するI/Oモジュールは、32本のDIOをひとつのポートに割り当てています。
たとえば、32ビットの符号列 10010000_00000000_00000000_00000000 をDAQmxに書き込むと、
Port 0/Line 0と、Port 0/Line 3にのみ符号1が出力され、残りのPortはすべて0が出力されます。
すなわち、1つのビットが、1つのラインに割り当てられてしまいます。
ポート全体が同時に出力され、ポートの一部分だけに書き込むという動作にはなりません。
しかし、
上記の32ビット符号列を、特定のラインに時系列でシリアル出力したいので、これではいけません。

 

これを解決するため、「配列連結追加 関数」「2D配列転置」「ブール配列からデジタルに変換」を用います。
たとえば、
12ビットの符号列を出力したいときは、符号列を連結して 12行×32列のデータを作ります。
 10000000_00000000_00000000_00000000
 00000000_00000000_00000000_00000000
 00000000_00000000_00000000_00000000
 10000000_00000000_00000000_00000000
   ~
   ~
 10000000_00000000_00000000_00000000
 10000000_00000000_00000000_00000000
 10000000_00000000_00000000_00000000
といった具合です。
これを32行×12列に配列転置します。
 100100001111
 000000000000
 000000000000
   ~
   ~
 000000000000
 000000000000
そして、これをデジタル変換したものを、上記2のタスクへ入力します。

 

以上です。 ご指導いただいた皆様に御礼申し上げます。

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

すみません、最後の部分は間違っていましたので、訂正します。

 

たとえば、
時系列に出力したい12ビットの符号列を、32個用意します。配列転置は必要に応じて使用します。
 100100001111
 000000000000
 000000000000
   ~
   ~
 000000000000
 000000000000
これを「デジタル信号を連結」して得られる32ビットの信号出力を、時系列に上記2のタスクへ入力します。
 10000000_00000000_00000000_00000000
   ↓
 00000000_00000000_00000000_00000000
   ↓
 00000000_00000000_00000000_00000000
   ↓
 10000000_00000000_00000000_00000000
   ~
   ~
 10000000_00000000_00000000_00000000
   ↓
 10000000_00000000_00000000_00000000
   ↓
 10000000_00000000_00000000_00000000
この場合、Port 0/Line 0に12ビットの符号列 100100001111 が出力されます。


以上です。 ご指導いただいた皆様に御礼申し上げます。

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