VeriStand用カスタムデバイスでセクションやチャンネルにプロパティを設定する

更新しました Jun 28, 2024

環境

ソフトウェア

  • VeriStand
  • LabVIEW
  • VeriStand Custom Devices

VeriStand用カスタムデバイスはLabVIEWで開発することができ、VeriStandの組み込みの機能では実現できないような複雑あるいは特殊な処理を実装するのに必要となります。
この記事では、カスタムデバイス上で使用できるセクションやチャンネルに対してプロパティを設けることにより、このプロパティ値を使用してターゲット上での処理に与えるパラメタを設定する方法を確認します。

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

  1. LabVIEWを開いて新規プロジェクトを作成します。プロジェクトテンプレートから、新規プロジェクトの一覧にあるCONSOLIDATED NI VeriStand Custom Deviceを選択してカスタムデバイスのプロジェクトを作成します。
    installcomplete.png
  2. カスタムデバイスの名前と保存先を決定します。カスタムデバイス名はProperty Testとし、任意の場所にProperty Testというフォルダを用意してここに保存されるようにします。また、Custom Device Execution ModeはAsynchronousとし、Custom Device Extra Page NamesにはMyCustomSectionMyInputChannelMyOutputChannelの3つを指定しています。
    createproject.png
  3. 作成されたプロジェクトで、<カスタムデバイス名> Shared.lvlibの下のSharedフォルダにあるConstants.viを開きます。
  4. Constants.viPropertiesタブを開いて、以下の図のように3つの文字列を追加します。これらはグローバル変数として以降で作成するページ用のviやRT Driver.viで使用します。
    createconstants.png
  5. プロジェクトに戻り、<カスタムデバイス名> System Explorer.lvlib >> System Explorer >> Dynamically CalledにあるInitialization VI.viを選択します。ブロックダイアグラムを開き、ケースストラクチャのTrueケースにあった処理は全て削除し、以下の図のように関数を配置します。この図のように配置することで、このカスタムデバイスをVeriStand上で使用した場合、MySectionというセクションに2つの入力チャンネルと、2つの出力チャンネルが作成されます。グローバル変数は、Constants.viを使用しています。
    initializationblock.png
  6. 次にプロジェクトエクスプローラに戻り、<カスタムデバイス名> System Explorer.lvlibの下のSystem Explorer >> Dynamically Called >> Extra Pagesの中にあるMyInputChannel.viを開いて編集します。
    1. フロントパネルに二つの制御器を配置します。
      inputchannel.png
    2. ブロックダイアグラムに移り、イベントストラクチャが含まれたケースストラクチャよりも前にあるフラットシーケンスストラクチャにて、以下の図のようにGet Item Property.viを配置して、二つのパラメタのグローバル変数(Constants.vi)をProperty Nameに配線し、Valueを対応する数値制御器のローカル変数に割り当てます。これにより、VeriStandのシステムエクスプローラの編集中に一度このページに対して値を決定した後、再度このページを開いたときに、最後に決定した値を制御器に表示した状態にすることができます。
      inputchannelblock.png
    3. 制御器に対してイベントを以下のように設定します。これにより、このページに対してparameter aというプロパティにparameter a数値制御器の値を割り当てることができます。
      parametera.png
    4. 同様にparameter bのプロパティにparameter b数値制御器の値を割り当てます。
      parameterb.png
    5. 編集を終えたらviを保存します。
  7. プロジェクトエクスプローラに戻り、MyOutputChannel.viを開いて、編集します。 
    1. フロントパネル上にコンボボックスを配置します。コンボボックスの項目には以下の二つを加えます。
      • Use Input Channel
      • Use Constant
      output.png
    2. ブロックダイアグラムに移り、MyInputChannel.viに対して行ったのと同様に、まずはイベントストラクチャのあるループに入る前のフラットシーケンスストラクチャを以下のように編集します。
      outputflat.png
    3. イベントストラクチャにコンボボックスの値変更イベントを追加します。 
      outputevent.png
  8. プロジェクトエクスプローラに戻り、MyCustomSection.viを開いて編集します。
    1. フロントパネル上に4つの数値制御器と一つの文字列配列を配置します。数値制御器には、このセクションに入っているチャンネルのプロパティをそれぞれ表示させます。
      customsectionfront.png
    2. ブロックダイアグラムに移り以下の図のように編集します。Initialization VI.viで設定したように、このセクションページの下にはMyInputChannel.viMyOutputChannel.viが入っていることから、チャンネルのページはこのセクションの子要素となっています。このとき、Get Item Children.viを使用することで、子要素のリファレンスを取得することができます。このリファレンスをGet Item Property.viに配線し、プロパティ名を指定することで、そのプロパティを取得しています。また、Get Item Data.viを使用することで、子要素のリファレンスがそれぞれどのチャンネルのリファレンスであるかを、出力のName要素で取得することができます。sectionflat.png
    3. ここまでの編集が終わったらviを保存します。
  9. プロジェクトエクスプローラに戻り、<カスタムデバイス名> Engine.lvlibにあるRT Driver.viを選択して開き編集します。
    1. 処理ループに入る前に、各InputおよびOutputのチャンネルで設定したプロパティをRT Driver.vi上で読み出して使用するために、各チャンネルのリファレンスをGet Item Property.viに配線します。
      rtdriverblock.png
    2. 処理ループのを以下のように編集します。今回のプログラムでは、Inputチャンネルで指定したparameter aとparameter bを、Inputチャンネルのそれぞれの入力値への演算として使用しています。また、Outputチャンネルで指定した文字列をケースストラクチャに渡して、Use Input Channelの場合にはInputチャンネルの値を演算に使用するのに対し、Use Constantの場合には定数を演算に与えるようにしています。
      rtdriverblock2.png

       

      rtdriverblock3.png
  10. プログラムの編集が終わったらプロジェクトエクスプローラ上でビルド仕様を選択し右クリックしてBuild Allですべてビルドします。
  11. VeriStandを開き、システムエクスプローラ上でカスタムデバイスを選択します。自動でMySection、およびこの下にMyInputとMyOutputのチャンネルが2つずつ生成されることを確認します。
    sysdef.png
  12. 各チャンネルのプロパティを決めます。MySectionでは、指定したプロパティが表示されていることが確認できます。また、セクションに属しているチャンネル名のリストを取得することができます。
    sysdef2.png
  13. カスタムデバイスの構成が終わったら、VeriStandプロジェクトをデプロイします。指定した各チャンネルのプロパティに応じた結果となっているかを確認します。
  • OutputのチャンネルでUse Input Channelを選択していた場合には、Inputチャンネルで指定した二つのプロパティ値a、bを用いて(Inputチャンネル値×a + b)の結果がOutputに表示されます。
  • OutputのチャンネルでUse Constantを選択していた場合には、Inputチャンネルの値に依らず(5×a + b)の結果がOutputに表示されます。
    result.png

注意:
一つのチャンネルに複数のプロパティを設定することができます。また、設定できるプロパティは上記で紹介したような数値や文字列以外にもあります。Set Item Property.viあるいはGet Item Property.viの多態性ラベルで選べるオプションを確認してください。
 
 

次のステップ

セクションやチャンネルに対しプロパティを設定し、これがターゲット上で実行されるプログラムであるRT Driver.vi上で参照できるようになりました。
実際はターゲット上で処理したい内容にあわせてカスタムデバイスのセクションやチャンネルの各ページを設計し、正しくプロパティが反映できるかを確認しながら開発を進めてください。