NI製品ディスカッション

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

スマートなエラー処理方法を教えてください。

超初心者質問で恐縮ですが、皆さんはエラー処理をどのようにしているのかセオリーと言うかルール的なものを教えて頂けますでしょうか?
(WINDOWS7 / Labview2010 使用しています。)


私は何も考えずに、単純にVIのエラー入出力端子をつなげているだけでしたが、その方法ですとエラーが発生した後のサブVIが実行されない

トラブルに遭遇し、今回の疑問が発生した次第です。

以下の様に配線した場合、特にエラーが発生していなければ、A B C 全てのVI実行に問題ありませんが、例えば、何らかのエラーが[A]の

サブVI で発生した場合には、後段のサブVIの[B][C] が前段エラーのために実行されないケースがありました。

-----[A]-------[B]-------[C]


はっきりと原因をつかみ切れてはいませんが、サブVIの[B][C]の内容により前段でエラーがあると実行される場合と、されない場合が

ある様です。
感覚的には、GPIB等通信目的のサブVIだと実行されない様です。

各VIの出力でエラーチェックして、エラー発生後に対処していくのでは大変ですし無駄にファイルサイズが大きくなってしまうでしょうし、

かと言ってエラー端子を接続せず解放というのも何だか違うと思いますし…

ふと皆さんはどうしているのかなと疑問に思い質問させて頂きました。

エラー発生後の実行がされていないと、対応するにもどこが原因なのかを探すのが大変で、例えば、全部で10項目の測定をした時、

2項目目でエラーが発生したら、手掛かりとなる測定データーを見ると、2項目目以降全てエラーでデーターが無いと言う状態だと、

どこに原因があるのか調べのが大変で…
前から順番に1つずつ確認して潰していけば良いのでしょうが、実行形式で配布して自分が現場に行けない時には手間がかかり過ぎで、

なんとかスマートに対処する方法がわかると助かります。

以上よろしくお願いいたします。

 

0 件の賞賛
メッセージ1/5
5,959件の閲覧回数

一般的に、エラーの配線がされていてある特定の所でエラーが起きた場合、

その其後の関数は処理をせずにエラーの情報だけを受け渡します。

 

エラーの情報には、3つのデータが入っていて、ステータス・コード・ソースがありますが、

ステータスがTrueの場合はエラーありという意味で、

コードはエラーコード、

ソースはどこでそのエラーが発生したかを示しています。

 

このソースを使うことにより、エラーの発生部位が特定できるのではないかと思いますがどうでしょうか。

 

もし、エラーが発生しても、その後の処理をしたい場合は、

マニュアルでエラーを消す(エラーをクリア関数)必要があるいかと思います。

 

0 件の賞賛
メッセージ2/5
5,934件の閲覧回数

こんにちは。

 

Yayoy さんの言う通り大抵のサブVI やLabviewの関数はエラーが入力されると、

内部のケースストラクチャでエラー情報のみが渡されるという処理になっています。(エラーのケースでエラー配線をするだけ)

 

もちろんVI によってはエラー情報の扱い方は異なります

リファレンスを閉じるや、ファイルを閉じるといった関数はエラーが発生していても、普段と処理は異なりません。

 

測定データでエラー発生時を判断をされているということですが、測定項目が増えるとすこしややこしいことになるかと思います。

ですので、一つ一つの測定を別々のステートもしくはシーケンスに分け、測定終了後のデータと処理結果を別々のログに残す方法というのはいかがでしょう。

 

そして行う処理によってエラー発生時の対応が異なるかと思います。

FFT解析や平均といった処理はプログラムの流れに深い影響をおよばさないので、エラー発生時はエラー情報を渡すだけという処理でもいいと思います。

ただGPIB 通信などを行うVI があれば、エラー発生時に通信を中断するというメッセージを接続機器に送る、といった処理を行いエラー情報を渡すといった方法もあります。

 

ルールみたいなものはありませが、必要に応じてサブVI のエラー処理を変えるといったところでしょうか。

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

 Yayoy 様  doradorachan 様

 

コメントありがとうございました。

やはりケースバイケースで対応せざるを得ないんですね。

主にGPIBでマルチメーターを接続した計測をする場合が多いのですが、エラーが出ていても、とりあえずデーターが

収集されていれば、問題点は何かを考え易い体質になってしまっているので、事前にエラー処理をしっかり想定して

作っておく事が、面倒臭がりな私には苦痛でして… そんな事ではいけないとは思うのですが、なかなか抜け出せなくて、

だからプログラムの完成度が低いとよく同僚に指摘される訳ですが。。。

もっと初心者の頃には、エラー配線自体をしてなかったのですが、その方が結構原因の究明が楽だった気がするのは

気のせいですね、きっと。

どうもありがとうございました。

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

まぁ、はっきりいうとエラー処理はめんどくさいですよね。ただ怠るとデバッグなどが難しくなったり、

予期せぬケースにたいしてプログラムの動作がすごく不安定になります。

 

ちなみにLabVIEWの設定で、エラー配線がされていないVI でエラーが発生したときにメッセージを自動的にポップアップするというものがあるとおもいます。

開発環境のみでVI を使用するのであればエラーの場所などがすぐさまわかってそこそこ便利なですが、

実行ファイルに変換するとなると、現場の方にとっては意味不明なエラーですので役にたたないんですよね

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