01-06-2017 07:06 AM
いつもお世話になっております。
私が作成したviにおいて、ソフトを継続して数日間起動させると、メモリの増加が起こり、物理メモリ使用率が90%近くになったときには、open file.vi等でエラーが発生する現象が起こっています。
作成したviは、複数のwhileループを並行して走らせており、主に下記のような処理を行っています。
①各測定機器とのシリアル通信
②製品基板との通信
③測定機器、基板等で受信した各データのロギング
④別のロガーソフトで吐き出されたcsvファイルのデータ抽出
どのようなものが原因として考えられるでしょうか?
参考として、作成したviの一部を抽出したものを添付します。③、④の処理を行っているものです。前述の受信した各データは、都合により消去しております。実際は、各データを別ループで抽出し、ローカル変数でこちらのループに持ってきてまとめています。
ローカル変数の多用も原因の一つとして疑っております。
考え得る原因をご教授いただければ幸いです。
解決済! 解決策の投稿を見る。
01-16-2017 05:27 AM
ダイアグラムが大きくて動作を追う気になれず、ほとんど動作を把握できていないのですが、エラーは下の「ロガーデータの結合とロギング」ループで起きているんですよね?
下のループのファイルオープンのノードのファイルパス入力にプローブを置いて動作させて、入力ファイルパスが意図したパスになっているか確認されてはいかがでしょう。openモードでリファレンスを開くようになっているので、エラーの内容からして、そこに存在しないファイルパスが入っている可能性が高いです。下のループが別ループで作成したファイルを処理するループならば、発生するのは並列ループ間のタイミングに問題があり、まだ作られていないファイルを処理しようとしているのだと思います。
現状、メモリの問題ではないような気がします。
01-24-2017 03:53 AM
ご回答ありがとうございます。
お返事が大変遅くなってしまい申し訳ございません。
ご意見を参考にさせていただき、プローブ監視をしながらviを走らせました。
> 入力ファイルパス
ファイルオープン時の入力ファイルパスは、意図したパスが入力されておりました。
> 下のルー
ロギングスタート時は問題なくファイルへ書き込めているため、作られていないファイルを処理しようとしているわけではないと思われます。
しかし、下記の2つのパターンにおいて、ループしているリファレンスが“0”になる現象が確認されました。
・ロギング中のファイルを読み取り専用で開こうとするタイミングと、LabVIEWのファイル書き込みタイミングがバッティングしたとき(「ファイル位置を設定」でエラーコード8が発生)。
・ネットワークへのアクセス不良かなにかで、ロギング中ファイルへのアクセスができなかったとき(「ファイル位置を設定」でエラーコード6が発生)。
引き続き、原因調査を進めております。
もし上記の現象を回避する方法をご存知の方がいらっしゃいましたら、ご教授よろしくお願いいたします。
01-24-2017 05:45 AM
そもそも、並列ループ間で同一ファイルへの書き込みと読み込みがバッティングする状況が起こる設計にしたのが致命的だと思います。
計測の詳細がわからないので的外れかもしれませんが、簡単に回避したいのであれば、「ロガーデータの結合とロギング」は計測終了後に別で行うようにするのが良いと思います。それができない事情があるのであれば、そういった状況が起こらないようプログラムの設計からやり直したほうが良いです。
例えば、「ロガーデータの結合とロギング」ループを指定時刻やボタン押下などでトリガがかかるようにし、トリガがかかった時点でデータのロギングを行うループは新たにファイルを作成してそちらにログを行うようにし、「ロガーデータの結合とロギング」で処理する旧ファイルへのアクセスを行わないようにする、などが考えられます。
03-21-2017 04:08 AM
大変申し訳ございません。
しばらくの間、LabVIEW以外のことで手一杯の状態になってしまい、お返事ができない状況でした。
ご回答ありがとうございます。
まずは同一ファイルへの同時アクセスが起こらぬよう、システムの見直しを行いたいと思います。
ご丁寧にご対応いただきまして、誠にありがとうございました。