06-10-2014 07:54 PM
LabVIEW初心者で、サンプルプログラム Digital - Finite Output.vi についてお聞きします。
環境
- LabVIEW 13.0.1f2 (32bit)
- PXIe-6363
- ライン=PXI 1Slot3/port0/line7
- サンプルクロックソース=OnboardClock
- サンプルレート=1000 (デフォルト値)
- トリガなし
質問
サンプルの、
フロントパネルで、「書き込むデータ」欄に配列があります。
ブロックダイアグラムで、DAQmx Write.viにつながっている配列です。
この配列はどのような意味があるのか教えてください。
状況
配列には8個の値(1,2,4,8,16,32,64,128)があり、
128以外の数値を変更しても、出力信号に変化がみられません。(オシロで観測)
一方、128の数値を127以下にするとパルス列は出力されなくなり、
128~255の間だけパルス列が出力されます。
数値の意味についてヘルプ等探しましたがわかりませんでした。
添付図
FrontPanel.png サンプルのフロントパネル
8番目の値=128(デフォルト) デフォルトのまま実行したときの波形
8番目の値=127(値を変更) 8番目の値だけを127に変更したときの波形
以上、よろしくお願いします。
解決済! 解決策の投稿を見る。
06-11-2014 08:23 PM
質問に回答します。
Digital - Finite Output.viの中で呼び出されるDAQmx読み取り VIには、「ポート形式」でデータが渡されています。
(「デジタル1D U32 1チャンネルNサンプル」と書かれた箇所を左クリックすると、デジタル > 1チャンネル > 複数サンプル > 1D U32 (ポート形式) の順にチェックが入っていることが確認できるはずです)
この「ポート形式」は、指定された整数の値に応じて、複数のデジタルラインから信号を並列に出力するものです。
そして、PXIe-6363のポート1の場合、0から7までの8ラインで構成されていますが、これら8つのラインを用いて、整数値を2進法で表記した際の各ビットを伝送することとなります。
例えば、10進法で「200」という数値は、2新法では「11001000」と表わされますが、この2進法表記の最下位のビットから最上位のビットへ順にライン0, 1, …, 7が対応しています。
そのため、ライン3, 6, 7からは正論理、その他のラインは負論理となり、アクティブHIGHの状態だとライン3, 6, 7はHIGHとなります。
06-12-2014 07:24 PM
n.hayataさん、ご回答ありがとうございました。
元の質問に戻りまして、お聞きしたいポイントは、配列の意味です。
FrontPanel.pngファイルの赤印に示した書き込むデータ欄の左側にBOXがあり、
ここに0をいれておくと、1,2,4,8,16,32,64,128の8個の数字が右側に表示されます。
ここに7をいれると、128の数字が一番上にきて、残りは0になります。
左側のBOXは何を意味しているのでしょう?
左側のBOXに0をいれると、右側の数字のどれが選択されるのでしょう?
例1
チャネル設定=Port0/line7として、左側のBOXに0をいれて実行すると、P0.7にパルスが観測できます。
そして、左側のBOXを7に変えても、P0.7にパルスが観測できます。
配列の表示が変わっても、P0.7にはパルスが出るので、配列の意味がわかりません。
例2
チャネル設定=Port0/line6に変更して、例1と同様のことをすると、P0.6にパルスが観測できます。
左側のBOXに7をいれ、右側の数字が128だけになったとき、P0.6にパルスが出るということです。
わたしの理解が不十分なのだと思われますが、
「128」(十進)=「10000000」(二進)
ですので、ポート7に1が立っていて、ポート6は0になっていると思いますが、P0.6にパルスが出ます。
以上のような状況で、FrontPanel.pngファイルに示した配列の意味がわからずにいます。
どなたかご教示いただけますと幸いです。 以上
06-12-2014 08:06 PM
お聞きされたいのは、LabVIEWの配列制御器に関することなのですね。
左側のBOXには、配列の指標番号を指定して、どの要素を表示させるかを決めます。
例えば、要素が1, 2, 4, 8, 16, 32, 64, 128の配列がある場合、左側のBOXに7を指定すると、指標7 (最初の要素は指標0なので、前から8番目の要素を指す) の128が、配列制御器の一番上に表示されます。
そのため、左側のBOXの値を変更しても、配列制御器に表示させる要素を変更しているだけで、配列データそのものは変化しません。
詳しい内容はヘルプを確認してください。
配列やクラスタでデータをグループ化する - LabVIEW 2013ヘルプ - National Instruments
http://zone.ni.com/reference/ja-XX/help/371361K-0112/lvconcepts/grouping_data_with/
なお、DAQmx読み取り VIに、要素が1, 2, 4, 8, 16, 32, 64, 128の配列が入力されて、かつ、DAQmxタイミング VIのサンプル数に、例えば100が指定されている場合、VIを実行すると、1, 2, 4, 8, 16, 32, 64, 128, 1, 2, 4, … といった形で、出力するサンプルが100に至るまで繰り返し出力がなされます。
[例1] でP0.7が正論理となるのは128というサンプルが出力される際で、[例2] でP0.6が正論理となるのは64というサンプルが出力された際なのではないかと考えられます。
06-12-2014 09:07 PM
n.hayataさん、早速のご回答ありがとうございました。
> VIを実行すると、1, 2, 4, 8, 16, 32, 64, 128, 1, 2, 4, … といった形で、出力するサンプルが100に至るまで繰り返し出力がなされます。
この一文で動作が理解できました。
ありがとうございます。
ところで、
配列には、8ライン分の情報が含まれているのに、
このVIでは、チャンネル設定欄に指定したラインにしかパルス出力が観測できませんでした。
8ラインすべてに出力するには、このVIを 8つコピーして並べるしかないのでしょうか?
06-12-2014 11:12 PM - 編集済み 06-12-2014 11:13 PM
ポート0の8つのラインすべてを指定するには、DAQmx物理チャンネル制御器に、「PXI1Slot3/port0/line0:7」のように指定してください。
上ではチャンネルの指定にコロン(:)を使用していますが、物理チャンネルを指定する際の構文の詳細に関しては下記のWebページをご確認ください。
DAQmx の物理チャンネル指定の構文について - National Instruments
http://digital.ni.com/public.nsf/allkb/89A915DE6A394DCD8625781B001B6ABC
06-13-2014 12:08 AM
n.hayataさん、いろいろありがとうございました。
ご教示くださった方法で解決できましたこと、報告いたします。
添付図は、VI画面とオシロ観測画面です。
オシロ画面は、
Ch1(黄色)=Port0/line0
Ch3(桃色)=Port0/line6
Ch4(緑色)=Port0/lilne7
です。
1=00000001
2=00000010
4=00000100
8=00001000
16=00010000
32=00100000
64=01000000
128=10000000
の順に出力してます。
ちゃんとすべてのlineに出力できることが確認できました。
06-15-2014 07:30 PM
解決されたとのことで、安心しました。
ご報告ありがとうございます。