VeriStand用カスタムデバイスのパラメータやエラーの情報を確認してデバッグを進める

更新しました Jan 20, 2025

環境

ソフトウェア

  • VeriStand
  • VeriStand Custom Devices
  • LabVIEW

VeriStand用カスタムデバイスはLabVIEWで開発することができ、VeriStandの組み込みの機能では実現できないような複雑あるいは特殊な処理を実装するのに必要となります。
この記事では、カスタムデバイスのデバッグ方法の中でも、開発時、デプロイ後を問わず有効なアプローチとなるファイル保存を通してデバッグを進める手段について紹介しています。
その他カスタムデバイスの一般的なデバッグ方法についてはこちらの記事 を確認してください。

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

  1. LabVIEWを開いて新規プロジェクトを作成します。新規プロジェクトの一覧にあるCONSOLIDATED NI VeriStand Custom Deviceを選択します。
    installcomplete.png
  2. カスタムデバイスの名前と保存先を決定します。カスタムデバイス名はDebug Exampleとし、任意の場所にDebug Exampleというフォルダを用意してここに保存されるようにします。また、Custom Device Execution ModeはAsynchronousとし、Custom Device Extra Page NamesにはMyCustomChannelを指定しています。
    create project.png
  3. 作成されたプロジェクトで、<カスタムデバイス名> Shared.lvlibの下のSharedフォルダにあるConstants.viを開きます。
    constants.png
  4. Propertiesのタブを選択し、以下の図のようにCompiled.Settings以外の文字列制御器を2つ追加します。制御器のラベルと文字列は必ずしも一致させる必要はありませんが、同じ名前にすることでプログラム編集時の各グローバル変数の識別を行いやすくします。
    constants front.png
    注意:
    他のviでこれらのグローバル変数を使用する際には、文字列に入っている値が参照されることになります。そのため、文字列制御器に値を入力したらその値をその文字列制御器のデフォルト値として設定しておく必要があります。
  5. プロジェクトエクスプローラに戻り、カスタムデバイスのプロジェクト上で<カスタムデバイス名> System Explorer.lvlibの下にあるInitialization VI.viを選択しブロックダイアグラムを開きます。
    init.png
    Initialization VI.viのケースストラクチャのTrueケースにあった処理は全て削除し、以下の図のように関数を配置します。この図のように配置することで、このカスタムデバイスをVeriStand上で使用した場合、MyTestSectionというセクションにMyCustomChannel1とMyCustomXChannel2という入力チャンネルが作成されます。グローバル変数はConstants.viを使用します。
    initblock.png
  6. プロジェクトエクスプローラに戻り、<カスタムデバイス名> Explorer.lvlibの下のSystem Explorer >> Dynamically Called >> Extra Pages下にあるMyCustomChannel.viを開き編集します。
    1. MyCustomChannel.viのフロントパネルに以下の図のように数値制御器とブール制御器を配置します。
      customchannel.png
    2. ブロックダイアグラムに移り、ブロックダイアグラムの最初にあるシーケンスストラクチャ内でGet Item Property.viを使用して以下のように構成します。グローバル変数についてはConstants.viを使用します。
      customchannelblock.png
    3. MyCustomChannel.viの制御器であるChannel Property 1の値変更イベントを追加します。
      customchannelevent.png
    4. 同様にChannel Property 2の値変更イベントを追加します。編集を終えたらMyCustomChannel.viを保存します。
      customchannelevent2.png
  7. プロジェクトエクスプローラに戻り、<カスタムデバイス名> Shared.lvlib下にあるSharedフォルダに対して新規のviを作成します。ここではFile Save Sub.viと名前を付けています。
    creaet vi in shared.png
  8. File Save Sub.viを開き編集します。
    1. フロントパネルを開いて列挙体を二つ(Enum、Data Type)とバリアント制御器を配置します。各列挙体については
      • Enum : Init、Write、End
      • Data Type : String, Error
      の項目を定義しています。
      subfront.png
    2. ブロックダイアグラムに移り、以下のように構成します。Initステートではファイルを開く関数を使用し、データを保存するためのファイルを準備します。
      subblock.png
      注意:
      開発およびデバッグ時やデプロイ時でも対応できるように条件無効ストラクチャで特定の環境下で実行される際のパスの指定の仕方を変えることができます。
    3. 他のケースについても編集します。
  9. プロジェクトエクスプローラに戻り、<カスタムデバイス名> Engine.lvlibにあるRT Driver.viを開いて、ブロックダイアグラムを以下のように編集します。プログラムの最初と最後にFile Save Sub.viのinitとendケースが実行されるようにしています。また、Forループの中では、RT Driver.vi側で読み取ることができた、各チャンネルに対するProperty1とProperty2の値を取得してこれをファイルに書き込んでいます。Forループを抜けた後には存在しないファイルを読もうとしてわざとエラーを発生させそのエラーの情報をファイルに書き込んでいます。
    rtdriver.png
  10. プロジェクトエクスプローラに戻りビルド仕様を右クリックしBuild Allですべてビルドします。
  11. ビルド後、VeriStandを開いて、システムエクスプローラ上でカスタムデバイスを追加します。カスタムデバイスのツリーに以下の図のような表示がされるかを確認します。
    vsdef.png
  12. VeriStandプロジェクトをデプロイすると、File Save Sub.viで指定したパスにログファイルが作成されます。ファイルを見て、各チャンネルに対して設定したプロパティが正しくRT Driver.viで読み取れているか、エラーの情報が保存されているかを確認します。
    vsresult.png


 
 

次のステップ

この記事では、VeriStandのデバッグに有効な方法の一つである、RT Driver.viから読み取れる各チャンネルの中身やエラーの有無をファイルに保存する方法を確認しました。
期待通りの動作をしなかった際にカスタムデバイスが実際にどのような値を扱っているのか、どこでエラーが起きているのかを調べるために、適宜ファイル保存する場所を増やしてデバッグを進めてください。