■イベントドリブン

   VisualBasicでは、「数値が変わった時」「ボタンをクリックした時」「フォーカスが移った時」のようにイベントに対する処理を記述
   することは簡単にできます。
   しかし、LabVIEWでは、これらのことをやろうとすると割と面倒ですし、結構できないこともあります。
   ここでは、オカーレント等のイベントや同期を取るVIを使用しないで、イベントに対して処理をおこなえる方法を紹介します。

   1.値が変わったら処理を実行する
    下図左のようにしてもいいのですが、これだと常に処理をおこなうことになり、処理内容によっては、動作が大変遅くなります。
    下図右では、シフトレジスタを使用し、前の値との比較をおこない、変化があった時のみ処理をおこなうようにしてあります。
    このようにすることにより、変化があった時のみ処理をおこなうダイアグラムを作成できます。
    クラスタの比較もできますので、複数のイベントを一ヶ所で監視することもできます。(比較アイコンを基礎群の比較にする)


   2.フォーカスが移ったら処理を実行する
    制御器のプロパティノードに「KeyFocus」というプロパティがあります。
    これを監視するループ作成し、値がTrueからFalseに変化した時(フォーカスを失った時)に処理を実行します。(下図参照)


    逆にフォーカスを得た時に処理をおこなうには、プロパティノードの値がFalseからTrueに変化することを監視します。


   3.ファンクションキーが押されたら処理を実行する
    ブール制御器をフロントパネルに配置し、右クリックでプルダウンメニューを出します。
    メニューの「上級→キー操作...」でキー操作画面を出します。
    この中の「キー定義」でブール制御器にファンクションキーを定義(ファンクションキーが押されて時、Trueになる)できます。
    ブール制御器の端子をループの中で監視すれば、ファンクションキーのイベントを取得できます。
    このブール制御器をユーザーに見せたくない場合は、制御器を隠しておきます。


   4.キャンセルできるウエイト
    ダイアグラムの中で定期的にViを実行させたい場合、ループを廻し、「Wait Until Next ms Multiple」関数を使用します。
    この関数は、ループ内の処理が終了後、指定時間待って次のループに移ります。
    待っている間は、ループ内の処理は止まっているので、終了させるのにウエイトが終了するまで待つ必要があります。
    (下図左参照)

    ウエイト時間が長いとキーを押しても反応しないように見えてしまいす。
    このような状態を回避するためには、上図右のように、タイマーを自分で作る必要があります。
    END端子は、100mSごとに監視されるので、ボタンが押された場合、タイムラグなく反応します。

    LabVIEWでユーザーインタフェースを開発するには、少し工夫が必要です。
    ここで紹介したように、ただ端子を監視するのではなく、シフトレジスタを使用すると、効率的な処理を実現できます。

  [Home] [前へ] [次へ]

   このWebサイトに関するご質問やご感想などについては、info@ocs-lv.co.jpまで電子メールでお送りください。
   本ホームページに関する著作権は、(有)オーシーエスに帰属します。 又、記載されている会社名・商品名称等は各社の商標または登録商標です。
   掲載されている内容の使用に関して、直接的及び間接的に生じる一切の損害についていかなる責任もおいません。
   当社は、日本ナショナルインスツルメンツ(株)社のアライアンスプログラムのアソシエイト会員です。
   Copyright(C)2001 (有)オーシーエス
   最終更新日:2003-04-04