NI製品ディスカッション

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

計測器から取得したデータの保存方法

現在、LabVIEWのサンプルプログラムに書き加え、計測器から取得したデータを保存するプログラムを作成しております。エクセルの1列目に取得回数を、2列目に電圧値を保存したいと考えそこまでは実現できました。しかしそれぞれの列が何を示しているのかを表すヘッダが上手く表示されません。何が原因でしょうか。

また、もう一点データ取得時の時刻を表示させたいのですが、私が所持しているLabVIEWの書籍には載っておらず、分かりません。タイムスタンプではフロントパネルに時刻を表示するだけになってしまいます。

 

プログラムを添付いたしますので、どなたかご助言頂けたら幸いです。よろしくお願いいたします。

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

「上手く表示されない」というのがどういう状態かわかりませんが、ヘッダが保存されていないのであれば、「計測ファイルに書き込む」Express VIを既存ファイルに追加するように構成すれば解決するのではないでしょうか。また、「データ取得時の時刻を表示させたい」というのは、ファイルに保存するのではなく、表示だけですか?表示だけなら「日付/時間を秒で取得」関数に表示器を作成するだけです。もし保存したいのであれば、「日付/時間文字列をフォーマット」などを使用して、タイムスタンプを文字列に変換してデータとともに保存すればよいです。その場合は、「計測ファイルに書き込む」VIを使うのではなく、「文字列にフォーマット」関数などを使用して文字列にした後、ファイル書き込み関数を使用した方が楽ですね。

 

あと、1点アドバイスを申し上げますと、ループの中でExpress VIは使わない方が良いです。各ループごとには必要ない処理を繰り返し行うことになり、パフォーマンスが低下します。今のプログラムで性能の要件が満たされており、今後も拡張の予定がないのであれば問題ありませんが、さらに拡張していく予定があるのであれば、生産者/消費者デザインパターンなどを使って早いうちに書き換えた方が良いでしょう。テンプレートやサンプルなどにあるので参考にしてみてください。

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

Merly様 

ご回答ありがとうございます。

アドバイスをいただいたので、計測ファイルに書き込むVIをやめて、シートスプレッダに書き込みを使用してみました。そうしたところ、excelファイルに上手くヘッダも表示させることができました。

 

時間取得の件ですが説明が足りずに申し訳ありません。こちらも同様にexcelファイルに書き込んでいきたいのです。1列目に計測時間(計測を行っている時刻)、2列目に値取得回数、3列目に計測値を表示させたいと考えております。しかし、エラーが起こってしまい、どう直せばよいのか見当もつきません。修正したデータを添付いたしますので、ご教授頂けたらと思います。データ名はVOAC75シリーズ_LV_Sample2-1.viです。よろしくお願いします。

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

今のプログラムで一番簡単に時間を保存したいのであれば、

(1)計測を行うWhileループの中に、現在の時間を取得する関数を配置。

(2)「文字列にフォーマット」を使用して、時間、i、データを配線。「文字列にフォーマット」の入力は端子の下端をドラッグすると増やせます。

(3)形式指定子を使用して、配線したデータを文字列にフォーマット。形式指定子は「文字列にフォーマット」ノードをダブルクリックして編集 or 直接打ち込む。構文はヘルプやWeb上にあります。

(4)(3)でフォーマットした文字列をシフトレジスタを使用して連結していき、計測ループ終了後にまとめて書き込む、あるいは各ループごとに直接ファイルに書き込む(「スプレッドシートファイルに書き込む」ではなく、「テキストファイルに書き込む」を使用)。

 

これがおそらく簡単な方法です。ただし、(4)で採用する方法によって、以下のデメリットがあります。

・シフトレジスタを使用して最後にまとめて書き込む方法

各ループごとにメモリの再割り当てが必要で各ループ反復が遅くなる。

データ数によってはメモリ不足が起こる。

・各ループごとにファイルに書き込む方法

データ保存が終わるまで次の計測に進まないので、計測が遅くなる。

 

これらのデメリットを回避するためには、前回も申し上げましたが、生産者/消費者デザインパターンで書き換える必要があります。生産者/消費者デザインパターンについては下記を参照してください。

一般的な設計テクニック - National Instruments

今お使いのプログラムはそれほど大きくもなく、書き換えはそれほど難しくないと思うので、いろいろ機能拡張してしまって書き換えが難しくなる前に、「プロジェクトを作成」から作れるサンプルプロジェクトの「連続測定とログ」などをテンプレートにして書き換えてはいかがでしょうか。

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

Melry様

まだLabVIEWを始めて日が浅いため、度々の質問で申し訳ありません。(1)に関してですが、計測のwhileループの中に「日付/時間を秒で取得」と「秒を日付/時間に変換する」を接続したものを配置しました。

(2)で「文字列にフォーマット」にデータを配線するのは、計測のwhileループの外側で正しいでしょうか。また、「秒を日付/時間に変換する」をデータ配線したところ、タイプが異なるとエラーが発生します。この他に変換が必要だと考えましたが、何が必要なのでしょうか。

(3)(4)に関しましては(2)が解決していませんのでまだ進められていませんが、解決次第実践したいと思います。

 

手さぐりな部分が多く計測に関する知識も乏しいですが、30秒ごとに1回電圧を取得し、10分間の計測を考えており、タイミングに余裕があるためMelry様が教えてくださったデメリットは大きく影響しないと考えております。もし、この考えが見当違いであればご指導いただければと思います。

 

稚拙な文章で申し訳ありませんが、よろしくお願いします。

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

30秒に1回ファイルに書き込みであれば時間には余裕があるので、書き直さなくてもループ中で書き込んで問題なさそうですね。

(2)に関しては、私のミスで、「秒を日付/時間に変換する」は必要ありません。申し訳ありません。時間の精度が秒単位でよいのであれば、添付した画像の方法でOKだと思います。2つ目のI32の入力にループ繰り返し回数、Dataに読み取ったデータ(文字列)を配線してください。計測ループの前でファイルを開き、ヘッダを書き込んで、各ループで添付した画像のとおり書き込みを実行、ループ終了後にファイルを閉じればOKです。

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

Merly様

ご回答ありがとうございます。

話はそれてしまいますが、プログラムは以前添付したものを書き換えて実行を繰り返していたところ、DMMとの通信ができなくなってしまいました。

以前は通信のCOMポートを選択する部分に複数のCOMポートが表示されており、DMMと接続するためのケーブルが使用しているCOMポートを選択すれば通信できていたのですが、「更新」と表示されるのみになってしまいました。更新を押しても何もならず…。

LLBマネージャから「VISA Configure Serial Port」を選択したところ、添付資料のようなエラーが発生し、これが原因かと考えております。しかし直前までは通信できていたものが突然できなくなるのもおかしな話だとも思っております。LabVIEWのバージョンも通信できていた時と変わりはありません。

 

エラーコードについて調べましたが、このプログラムは岩通さんのHPからDLしたものですので、自分ではどうすることもできないのかと途方に暮れております。

なにか改善策をご存じでしたら教えていただきたいです。よろしくお願いします。

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

上記の件については解決し、通信が再び行えるようになりました。

 

改めてですが、添付データのようにプログラムを再度書き直してみました。

あとはエクセルに書き込んだ際に縦にデータが書き込まれず、横に書き込まれてしまうのが問題となっています。

スプレッドシートには転置がありましたが、テキストファイルに書き込むの場合には転置に当たる方法が何かあるのかお聞きしたいです。よろしくお願いします。

 

 

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

返信遅くなって申し訳ありません。

ループ内の「文字列にフォーマット」の後に、文字列に改行を挿入すれば縦に記録できるようになると思います。

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