07-31-2007 12:55 AM
08-28-2007 04:36 AM
06-10-2014 08:24 PM
すみません、便乗質問です。
LabVIEW 13.0.1f2 (32bit) を使用して、スレ主 SDDさんと同様のことをしたいのですが、
LabVIEW 2013のサンプルファインダで、
ハードウェア入力と出力→DAQmx→デジタルパルス生成→Gen Dig Pulse Train-Finite.vi
ハードウェア入力と出力→DAQmx→デジタル生成→Cont Write Dig Port-Ext Clk.vi
が見当たりませんでした。
サンプルファイルの名前が変わったのか、ファイルが削除されたのか、、、わかりませんが、
どのサンプルを参考にすればよいでしょうか??
06-10-2014 09:37 PM
DAQmxはインストールされていますか?
http://www.ni.com/download/ni-daqmx-9.9/4707/en/
06-10-2014 11:26 PM
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ビット分のデータを設定するということでしょうか?
すみません、わからないことだらけです。。。
06-14-2014 05:19 PM
こんにちは。
以前のサンプルはまとまりにかけていて、すこし分かりにくい部分があるということで
LabVIEW 2012 から付属しているほぼ全てのサンプルが更新された様で、古いサンプルが表示されないのはそういう理由かと。
ただ使われている関数は全て同じなので、古いのも参考にできることはできます。
今回のもとのスレッドは少し古い内容なので、必要ないかもしれません。(新しいスレッドを作ることをお勧めします)
ハードの機種によってプログラミングが少し変わるので、使おうとされているハードの型番は知ってますか?
06-14-2014 06:10 PM - 編集済み 06-14-2014 06:10 PM
すでに別スレッドで解決されているみたいですね。失礼しました。
06-30-2014 08:53 PM
任意デジタル信号を出力する方法について、解決しましたので、要点をまとめて報告いたします。
(当方は初心者ですので、至らない記述があれば、フォローをお願いします)
まず、基本的な構成として、
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のタスクへ入力します。
以上です。 ご指導いただいた皆様に御礼申し上げます。
06-30-2014 09:18 PM
すみません、最後の部分は間違っていましたので、訂正します。
たとえば、
時系列に出力したい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 が出力されます。
以上です。 ご指導いただいた皆様に御礼申し上げます。