NI製品ディスカッション

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

GPIB測定器からのデータサンプリング間隔

お世話になります。
GPIB測定器からのデータ収集について教えてください。
LABVIEW7.1を使用しています。
 
現在GPIB読み取り関数ととファイル書き込み関数を結んでデータ(文字列になっています)を読み込んでいます。
(1)データのサンプリング間隔を1秒間に1回にしたいのですが、どのようにすればよろしいでしょうか?
今は特に指定していないせいか、1秒間に3回だったり1回だったりとランダムに読み込まれています。
 
(2)データ読み込み10個(10秒間)分のデータを平均して1個だけファイルに書き込むようにする事は可能でしょうか?
 
よろしく御願いします。
0 件の賞賛
メッセージ1/9
5,087件の閲覧回数
何時もお世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。
 
お客様は計測器にコマンドを送りそれに対する返事を受け取るということをですが、Forループか
Whileループで回していますでしょうか。そうした場合、ループ内に1000msの待機時間を設定
して頂ければ、この操作は1秒に一回行われます。待機関数ですが、全関数→時間&ダイアログ
パレットにある「次のミリ秒倍数まで待機」関数を使って下さい。
 
お客様は10回だけデータ収得したいので、Forループを使用したほうが簡単です。Forループの反復
回数Nに10を設定するだけで良いです。そして、データ自体は文字列ですので、それを数値に変換する必要
があります。変換には、全関数→文字列→文字列/数値変換パレットにある関数をお使いください。Forループ
内で毎回のデータをシフトレジスタを使って前回のデータと足して、ループから10個のデータの和を出力して
それを10で割って頂ければ平均が出ます。この平均値をループの外でファイルに書き込んで頂ければ
良いと思います。ファイルに書き込むことですが、テキストファイルとして書き込みたい場合、平均値をまた
文字列に変換し、全関数→ファイルI/Oパレットにある、文字列をファイルに書き込み関数を使用してください。
 
以上の内容で何かご不明な点がございましたら、ご連絡願います。
今後とも宜しくお願いします。
 
サハ|技術部|日本ナショナルインスツルメンツ
0 件の賞賛
メッセージ2/9
5,065件の閲覧回数
サハ様
ありがとうございます。
無事処理できました。
さらに質問があります。ちょっとややこしいのですが、
(1)GPIBから読み込んでいるデータで、測定開始から最新測定値の間で最小値を判断し、
(2)最新測定値が最小値より、例えば1以上大きくなる事が連続3回発生したら、
(3)別の制御機器をONにする。
(4)同様に、最大値を判断し、最新測定値が最大値より1以上小さくなることが3回つづけば
(5)制御器の設定を変えて(1)に戻る。
というような制御をしたいのです。
 
が初心者なので、どのようにつくったらよいか全く検討がつきません。
昔VBでつくった時はIF分を駆使してつくりました。
ご教授御願いします。
 
よろしくお願いします。
 
0 件の賞賛
メッセージ3/9
5,038件の閲覧回数
いつもお世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。
 
お客様が行いたい事はForループ内にケースストラクチャ及びシフトレジスタをお使い頂ければ
簡単にできます。VBで使ってきましたIF文はケースストラクチャにあたります。添付のVIを見て
ください。乱数を0.5以上である場合、ケースストラクチャからTureの値が右側のシフトレジスタ
に入ります。シフトレジスタの作り方ですが、Forループの枠を右クリックし、「シフトレジスタを追加」
を選択して頂ければ、一個のシフトレジスタが追加されます。左側のシフトレジスタを右クリックし、
「要素を追加」を選択して、3つにしてください。これで、乱数が0.5以上であるかないかによって
3つのレジスタにTrue及びFalseの値が保存されます。これらの値を配列にして、そのなかにFlase
が入っているかを「1D配列検索」関数を使って検索し、Falseがなければ(即ち、すべてがTrueの場合)
別のケースストラクチャを使ってLEDを光らしています。これを参考にして、お客様がお考えのVIを簡単
に作成できると思います。
 
以上の内容で何かご不明な点がありましたら、ご連絡願います。
 
サハ|技術部|日本ナショナルインスツルメンツ
 
 
0 件の賞賛
メッセージ4/9
5,016件の閲覧回数
サハ様
 
ありがとうございます。
いきなりハードルが高くなりました。なんとなくわかりましたが、もう少し簡単な部分でご教授御願いします。
 
例えば、測定データを、(以上?)関数のx、yにつなぎ、
x>=yの場合は次の測定データがxに入るようにし、yはそのまま。
x<yの場合は、その時のxの値がyに入り、次の測定データがxに入るようにしたいのですが、
この辺がわかりません。
 
お手数ですがよろしく御願いします。
 
0 件の賞賛
メッセージ5/9
5,000件の閲覧回数
サハ様
 
最大最小の関数を併用したら、解決できました。
ありがとうございました!
0 件の賞賛
メッセージ6/9
4,976件の閲覧回数

いつもお世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。

お客様が行いたい事もケースストラクチャをしようして簡単にできます。
簡単なサンプルを作成してみましたので、添付させて頂きます。データは
乱数ですので、シフトレジスタを1で初期化しています。即ち、一回目の
ループでは中のFalseケースを実行させる必要があります。

以上の内容で何かご不明な点がありましたら、ご連絡願います。
今後ともよろしくお願いします。

サハ|技術部|日本ナショナルインスツルメンツ

0 件の賞賛
メッセージ7/9
4,973件の閲覧回数
サハ様
 
お世話になります。
 
ご教授いただいたサンプルプログラムをもとに希望の測定ができるようになりました。
ありがとうございました。
 
最後に1点だけわからない点があり、題名の内容からははずれてしまいますがご教授ください。
 
スタックシーケンスストラクチャとループ関数を組み合わせたプログラムになっています。
測定データをリアルタイムで一つのチャートや数値表示させたいのですが、ループの中でデータ収集しているデータや、
シーケンス番号が変わった後に取り込むデータを連続してリアルタイムで同じチャートに表示する事は可能でしょうか?
 
今は、各シーケンス番号の中のWhileループの中にチャートを置いているため、フロントパネルはチャートだらけになっています。
 
よろしく御願いします。
 
 
0 件の賞賛
メッセージ8/9
4,939件の閲覧回数

いつもお世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。

お客様が行いたい事は、複数のシーケンス内にある複数のループ内
のデータを一つの波形チャートに表示したいということでよろしいでしょうか。
波形チャートのローカル変数を使用して頂ければ、これは簡単にできます。具体
的な方法として、最初のシーケンスに波形チャートを使用してください。この
波形チャートを右クリックして「作成」からローカル変数を作成して、このローアル
変数を次のシーケンスに使ってください。もっと必要な場合、このローカル変数
のコピーを作成してご使用ください。ローカル変数はメモリ上にオブジェクト
(制御器また表示器)のコピーですので、メモリが余分に使用されますので、使い
過ぎないように心がけて頂ければ思います。

以上の内容で何かご不明な点がありましたら、ご連絡願います。

サハ|技術部|日本ナショナルインスツルメンツ

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