この記事で扱っていること
- プログラムを動作させた累計の時間を知る
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWで作るプログラムの中には、長時間動かすことを前提にしたアプリケーションも数多く存在すると思います。
ハードウェア操作に強みを持つ言語と言われるくらいなので、大学や会社の工場などでずっと測定を行う、みたいな使われ方も多いと思いますが、そんな中で「総稼働時間」を記録しておくことが必要な場面があると思います。
ただ、LabVIEW個々のプログラムにそのような実行時間に対する記録をプログラム自身が保持する機能はありません。やるとしたらファイルに時間の情報を残しておくくらいです。
ということで、外部ファイルに時間情報を記録することで、プログラム実行時に前回までの実行時間を読み取り、現在の実行中に累計時間を確認するための機能を持った機能的グローバル変数を作ってみました。
この機能的グローバル変数を使用すると、あるプログラムを実行、終了し、もう一度実行すると前までの実行時間を含めて総稼働時間がわかるようになります。
汎用的な構造としているので、一つこれを作るとどんなプログラムでも使用することができます。
どんな結果になるか
この機能的グローバル変数を使用した場合の例を紹介します。
効果を確かめるために以下のような簡単なプログラムを考えます。(本来はイベントストラクチャで実装すべきでしょうが、まぁこれはダミーのプログラムなので・・・)
プログラムを実行した際に、もし特定の外部ファイル(例えばtimerecord.txt)があればそこから前回までの累積実行時間の値を読み取り、なければ0から数え始めます。
ブールのボタンが押されるたびにcheckが実行されて累積時間を表示させることができます。
そしてプログラムの最後には累積時間をtimerecord.txtに保存します。
プログラムの構造
実装はいたってシンプルです。ケースが3つだけの機能的グローバル変数です。
以下で各ケースの中身を紹介します。
まずは、最初に実行されるべきinitケースです。こちらでは、「これまでのプログラムの総実行時間」を記録したファイルの有無を調べ、なければ0から数え始め、あればファイルからその数値を読み出して後で使用します。
以下ではtimerecord.txtというファイル名にしていますが、別にどんな名前でも構いません。
次はcheckケースです。こちらが実行されると、累計時間をtotal timeに表示できるようになります。日付/時間を秒で取得関数が最後に実行されたときと今実行されたときとの差分をとりこれを今までの累計実行時間に足し合わせています。
最後はfinishケースです。累計時間をファイル保存しているだけです。こちらもファイル名は何でも構いませんが、基本的にはinitケースと同じになる必要があります。
この機能的グローバル変数を実際に使用する際には、メインの(実行時間を測りたい)プログラムの最初と最後にそれぞれinitとfinishのケースが実行されるようにする必要があります。
checkのステートは別に必ず実行されなければいけないものでもないので、もしプログラムの途中で知りたいという場合には使う程度です。
注意点
上の機能的グローバル変数、使用する際にはいくつか注意点があります。
まずは、累計時間を保存しているファイルのパスおよびファイル名です。もし累計時間を測りたいプログラムが複数あり、それらが同じディレクトリにある場合などは、相対パスでtimerecord.txtを指定していると、それら複数のプログラム全体で累計時間を合算した値となってしまう場合があります。
なので、時間を測りたいプログラムごとに、ファイル名をtimerecord.txtではなく固有の名前にした状態で機能的グローバル変数を使用する必要があります。ファイルパス名を制御器にして、メインVIから指定できるようにコネクタペーンを設定するのもいいと思います。
また、今回紹介している機能的グローバル変数については、時間を測りたいプログラムが「正しく」終了することを前提にしています。言い換えれば、ユーザーが意図的に停止ボタンを押して、プログラムが最後まで進まない場合には終了処理が実行されないため正しく記録することができません。
まぁ、こういった機能が必要になるのは、本格的に作られたプログラム(ユーザーが停止ボタンを押すことなくエラー処理なども考えられたプログラム)くらいだと思いますが、ここは注意が必要です。
こちらについては、強制終了をさせなくするために、停止ボタンをそもそも表示させなくするという方法が予防策として考えられます(ただし、強制終了ができなくなることで不都合が生じるようなプログラムに対しては好ましくないですが)。
この記事では、プログラムを一番最初に実行してから、停止しても次に実行した際に前回までの累計時間を考慮して総実行時間を計算できるプログラムを紹介しました。
頻繁に使う機能ではないと思いますが、参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント