VeriStand用カスタムデバイスでセクションや他チャンネルのプロパティ値を参照する

更新しました Jun 28, 2024

環境

ソフトウェア

  • VeriStand
  • VeriStand Custom Devices
  • LabVIEW

VeriStand用カスタムデバイスはLabVIEWで開発することができ、VeriStandの組み込みの機能では実現できないような複雑あるいは特殊な処理を実装するのに必要となります。
この記事では、カスタムデバイスの個々のセクションやチャンネル間をまたいでプロパティにアクセスする方法について確認します。

もし、カスタムデバイス作成に必要なプロジェクトテンプレートがない場合には、こちらの記事 に従ってまずはプロジェクトテンプレートを使用できるまでの準備を完了してください。
 

  1. LabVIEWを開いて新規プロジェクトを作成します。プロジェクトテンプレートから、新規プロジェクトの一覧にあるCONSOLIDATED NI VeriStand Custom Deviceを選択してカスタムデバイスのプロジェクトを作成します。
    installcomplete.png
  2. カスタムデバイスの名前と保存先を決定します。カスタムデバイス名はPage hierarchyとし、任意の場所にPage hierarchyというフォルダを用意してここに保存されるようにします。また、Custom Device Execution ModeはAsynchronousとし、Custom Device Extra Page Namesには、MyCustomSectionMyCustomChannel1MyCustomChannel2という三つの項目を追加します。
    createproject.png
  3. 作成されたプロジェクトで、<カスタムデバイス名> Shared.lvlibの下のSharedフォルダにあるConstants.viを開きます。
    constant.png
    Propertiesのタブを選択し、以下の図のようにCompiled.Settings以外の文字列制御器を5つ追加します。制御器のラベルと文字列は必ずしも一致させる必要はありませんが、同じ名前にすることでプログラム編集時の各グローバル変数の識別を行いやすくします。
    constant2.png
    注意:
    他のviでこれらのグローバル変数を使用する際には、文字列に入っている値が参照されることになります。そのため、文字列制御器に値を入力したらその値をその文字列制御器のデフォルト値として設定しておく必要があります。
  4. プロジェクト上で<カスタムデバイス名> System Explorer.lvlib >> System Explorer >> Dynamically Calledの下にあるInitialization VI.viを選択します。
    initialization.png
    ブロックダイアグラムを開いて、Initialization VI.viのケースストラクチャのTrueケースにあった処理は全て削除し、以下の図のように関数を配置します。この図のように配置することで、このカスタムデバイスをVeriStand上で使用した場合、MyCustomSectionというセクションにMyCustomChannel1という入力チャンネルとMyCustomChannel2という出力チャンネルが一つずつ作成されます。グローバル変数はConstants.viを使用します。
    initialization2.png
  5. プロジェクトエクスプローラに戻り、<カスタムデバイス名> Explorer.lvlibの下のSystem Explorer >> Dynamically Called >> Extra Pagesフォルダに進んで、プロジェクト作成時に指定した名前のページ用のviが3つできていることを確認します。
  6. MyCustomSection.viを開いて編集します。
    1. 以下の図のようにフロントパネルに制御器や表示器を配置します。
      customsectionfront.png
    2. 次にブロックダイアグラム上で以下のように構成します。グローバル変数については、Constants.viを使用します。MyCustomSectionの子要素にあたるMyChannel1などのチャンネルのプロパティを取得するためにGet Item Children.viを使用していることに注意してください。
      customsectionblock.png
    3. MyCustomSectionのイベントを追加します。以下の図のようにMySectionNumberPropertyの値変更イベントを追加します。
      customsectionblock2.png
    4. MySectionPathPropertyにも値変更イベントを追加します。編集を終えたらMyCustomSection.viを保存します。
      customsectionblock3.png
  7. 次にプロジェクトエクスプローラでMyCustomChannel1.viを開き編集します。
    1. 以下の図のようにフロントパネルを構成します。
      channel1front.png
    2. MyCustomChannel1.viのブロックダイアグラムを開いて以下の図のように構成します。MyCustomChannel1が属しているセクション、MyCustomSectionはMyCustomChannel1にとって親要素になるため、Get Item Parent.viでその親要素のリファレンスを取得していることに注意します。また、MyCustomChannel2はMyCustomChannel1にとって兄弟要素となりますが、そのリファレンスを取得する方法として、親要素のリファレンスを使用してGet Item Reference by Name.viで名前を指定することでMyCustomChannel2のリファレンスを取得していることに注意します。
      channel1block.png
    3. MyCustomChannel1.viの制御器であるMyChannel1ArrayPropertyの値変更イベントを追加します。
      channel1block2.png
    4. MyChannel1BooleanPropertyの値変更イベントを以下のように追加します。編集を終えたらMyCustomChannel1.viを保存します。
      channel1block3.png
  8. 次にプロジェクトエクスプローラでMyCustomChannel2.viを開き編集します。
    1. 以下の図のようにフロントパネルを構成します。
      channel2front.png
    2. MyCustomChannel2.viのブロックダイアグラムを開いて以下の図のように構成します。MyCustomChannel1.viではGet Item Reference by Name.viによって兄弟要素のリファレンスを取得していましたが、ここではGet Item Reference by Path.viで兄弟要素のパスを指定する方法でもリファレンスを取得できることに注意します。このとき、パスはVeriStandのシステム定義ファイル上で表示されるチャンネルパスを書くようにします。
      channel2block.png
    3. MyCustomChannel2.viの制御器、MyChannel2StringPropertyについての値変更イベントを追加します。編集を終えたらMyCustomChannel2.viを保存します。
      channel2block2.png
  9. プロジェクト上で<カスタムデバイス名> Engine.lvlibにあるRT Driver.viを開いて、ブロックダイアグラムを以下のように編集します。このようにすることで、Outputチャンネルとして構成したMyCustomChannel2のMyChannel2StringPropertyの値と、Inputチャンネルとして構成したMyCustomChannel1のMyChannel1ArrayPropertyとMyChannel1BooleanPropertyの値をRT Driver.viで取得しRT Driver.vi内の処理で使用できることを確認します。編集が終わったらRT Driver.viを保存します。
    rtdriver.png
    注意:
    1ボタンダイアログを使用するプログラムは、このカスタムデバイスを使用するVeriStandプロジェクトをWindowsにデプロイする場合のみ機能します。もしRTターゲットにデプロイする場合には1ボタンダイアログではなく、コンソールに表示するなど別の方法で確かめます。
  10. プロジェクトのビルド仕様を右クリックしBuild Allですべてビルドします。
  11. ビルド後、VeriStandを開いて、システムエクスプローラ上でカスタムデバイスを追加します。カスタムデバイスのツリーに以下の図のような表示がされるかを確認します。
    vsdef.png
  12. MyCustomSectionおよびこの下にある二つのチャンネルページ上でそれぞれ制御器の値を変更します。セクションやページを切りかえると、セクションや他のチャンネルで変更した値が表示器に表示されることを確認します。
    vsdef2.png
  13. プロジェクトをデプロイします。Windowsに対してデプロイした場合、1ボタンダイアログにより、各チャンネルに対して設定した値がポップアップ表示されることを確認します。これにより、システムエクスプローラ上で各チャンネルに対して指定したプロパティ値がターゲット上で動作するRT Driver.viから参照できることを確認できます。
    result.png


 
 

次のステップ

各セクションやページそれぞれで設定したプロパティについて、親要素や子要素、兄弟要素のリファレンスを取得することで、相互にプロパティ値を取得することができます。
このようにすることで、例えばあるセクションに属するチャンネルすべてに共通のプロパティを用意しこれを各チャンネルのページで使用する場合にセクションのプロパティを取得したり、あるセクション内の各チャンネルで構成したプロパティをそのセクションのページ上で一覧表示するといった使い方ができるようになります。