TestStand API使用したプログラミング

概要

このドキュメントでは、TestStandの優れた機能を柔軟に使用することができるNI TestStand APIの使用方法について説明します。TestStand APIは、TestStandのすべての機能に対応したオブジェクト指向のインタフェースを提供します。基本的なアプリケーションの場合、オブジェクトモデルと直接やり取りする必要はほとんどありませんが、TestStandの内部動作を理解すると、高度なTestStandソリューションを短期間で作成することができます。

内容

TestStandアーキテクチャTestStand API


優れた設計のモジュール式テストアーキテクチャは、計り知れない価値をもたらします。一般化された適応性のあるアーキテクチャを様々なテストシステムに再利用して、テストシステムの寿命を延ばし、テスト開発コストを削減できます。TestStandではモジュール式のプラットフォームを提供しており、テストシステムの開発と対応するテストを簡素化します。TestStandの強みはオープンアーキテクチャにあります。開発者はオープンアーキテクチャを使用して複雑かつ柔軟なテストソリューションを作成できます。

TestStandエンジンは、TestStand APIを介してエンジンと通信するTestStandコンポーネントに機能を提供


TestStandは、プレゼンテーション層(ユーザが見るもの)とビジネスロジック層(ユーザアクションの背後にあるアクション)が明確に分かれています。この2つの層はTestStand APIを使用して通信します。このアプローチでは、TestStand APIを介してTestStandエンジンを使用する追加コンポーネントを構築することでTestStandを拡張できます。たとえば、カスタムユーザインタフェースの作成、テストフローの動的制御、シーケンスのオンザフライ作成、その他の高度なソリューションの開発などが考えられます。

TestStand APIアーキテクチャ

TestStandエンジンは、APIを介して機能を公開するActiveX/COMオートメーションサーバです。Microsoftは、アプリケーション間の通信方法を提供するために、ActiveXアプリケーション通信規格を開発しました。長年にわたって業界で幅広く使用されているActiveXは、COM技術に基づいて構築されています。TestStandはCOM上に構築されているので、ActiveXの存続期間を超えて、Windows OSの将来のバージョンでも引き続き機能します。

ActiveXはクライアント/サーバ方式を使用します。ActiveXサーバは、ActiveX標準に準拠したクライアントに特定の機能を公開するアプリケーションです。また、ActiveXアプリケーションはオブジェクト指向プログラミング(OOP)を使用します。

ActiveXサーバアーキテクチャにより、LabVIEW、LabWindows™/CVI™、C#、VB .NET、C++など、ActiveXコードを呼び出すことができる任意のプログラミング言語を使用してTestStandエンジンとやり取りできます。TestStand APIを使用してプログラミングを行う場合、その実装は、使用する言語によって異なります。たとえば次のとおりです。

  • LabVIEWは、プロパティおよびインボークノードを使用してAPI呼び出しを行います。
  • LabWindows/CVIは、API呼び出しの周囲に計測器ドライバラッパーを使用します。
  • C#やVB .NETは、TestStandが提供するInteropアセンブリを使用してAPIを呼び出します。
  • TestStand自体は、APIにアクセスするためにActiveX/COMアダプタを提供します。また、式を使用してAPIに直接アクセスすることもできます。

APIにアクセスする方法にかかわらず、結果として生じる動作はどの環境でも同じです。使用するインタフェースに関係なく、機能がTestStandエンジン内に実装されるからです。

APIクラス

TestStand APIは、SequenceFileクラスやExecutionクラスなど、TestStandオブジェクトのタイプを表すために、様々なクラスを定義しています。各クラスは、関連データにアクセスしたり、アクションを実行したりするためのプロパティやメソッドを定義します。たとえば、SequenceFileクラスはシーケンスファイルのパスをディスクに格納するパスプロパティや、シーケンスファイルを保存する保存メソッドを定義します。

TestStand APIで定義されている利用可能なクラスの一覧は、TestStand APIリファレンスヘルプトピックを参照してください。特定のクラスをクリックすると、そのクラスの詳細な情報と、定義するプロパティとメソッドを確認できます。 

 

クラス継承

TestStandの多くのクラスは、継承を通じて関連付けられており、より特定のクラスは、より一般的なクラスからプロパティやメソッドを継承できます。たとえば、SequenceFileクラスは、PropertyObjectクラスのより特定のバージョンです。TestStand APIはこのようなクラス間の継承関係を定義して、より特定のクラスのオブジェクトが、より一般的なクラスのプロパティやメソッドにアクセスできるようにします。

SequenceFileクラスは、より一般的なPropertyObjectFileクラスとPropertyObjectクラスからプロパティとメソッドを継承

 

ほとんど全てのTestStand APIクラスは、ベースのPropertyObjectクラスから、TestStandが共有する共通のメソッドおよびプロパティなどを継承します。PropertyObjectクラスは、NameやNumeric Formatなどの一般的なプロパティを定義し、クローン化、値の設定と取得、オブジェクトの作成と削除、配列の操作などのオブジェクト管理用の共通メソッドを提供します。ほとんどのTestStand APIクラスはPropertyObjectクラスから継承するので、このような一般的なプロパティやメソッドにもアクセスできます。たとえば、PropertyObject.Clone()メソッドを使用して、ステップ、シーケンス、シーケンスファイルオブジェクトのコピーを作成できます。

多くの開発環境では、親クラスのプロパティに直接アクセスできません。同様に、TestStandでは、SequenceFileオブジェクトでClone()メソッドを直接呼び出すことができません。ただし、TestStand APIには、より一般的なクラスのプロパティやメソッドにアクセスするためにオブジェクトをキャストするメソッドが用意されています。PropertyObjectクラスで定義されるプロパティやメソッドにアクセスするために、AsPropertyObjectメソッドを呼び出すことで親クラスにオブジェクトをキャストすることができます。たとえば、シーケンスファイルオブジェクトのClone()メソッドにアクセスするには、以下を使用します。
SequenceFile.AsPropertyObject.Clone()

APIの継承およびPropertyObjectクラスのプロパティとメソッドの詳細については、NI TestStandヘルプを参照してください。


動的プロパティプロパティ

TestStandオブジェクトには2種類のプロパティがあります。

  • 組込プロパティ(APIプロパティ)はオブジェクトのクラスによって定義され、特定のクラスの全てのオブジェクトに存在します。
  • 動的プロパティ(サブプロパティ)はオブジェクトによって定義され、同じクラスのオブジェクトごとに異なる場合があります。

ステップオブジェクトには、ステップタイプに基づいて異なる動的プロパティと、TestStand APIのStepクラスによって定義される静的プロパティがある


どちらも“.”演算子を使用してTestStand式でアクセスできるため、この2種類のプロパティは混同しやすい可能性が あります。ただし、その他のプログラミング言語でAPIを使用する場合、LabVIEWでプロパティノードを使用するなどして直接アクセスする場合は、組込プロパティしか利用できません。


動的プロパティにアクセスするには、LookupStringで動的プロパティの名前を指定しながら、GetValString()やGetValNumber()などのPropertyObject APIメソッドを使用します。



場合によっては、動的プロパティまたは組込プロパティのどちらかを使用して、複数の方法でプロパティにアクセスできることがあります。TestStand APIをコードモジュールで使用する場合、組込プロパティはルックアップ文字列を維持することなく直接アクセスできるので、組込プロパティを使用することをお勧めします。 

 

TestStandオブジェクト関係

TestStandオブジェクトには別のクラスのその他のオブジェクトを含めることができます。これはAPIコンテインメントと呼ばれます。たとえば、SequenceFileオブジェクトには、シーケンスファイルで定義されたシーケンス用のSequenceオブジェクトが含まれます。同様に、SequenceオブジェクトにはそれぞれStepオブジェクトが含まれます。

TestStand APIのオブジェクトは、通常、別のクラスのその他のオブジェクトを包含

オブジェクト間のコンテインメントの関係を理解することは、特定のオブジェクトを移動する際に役に立ちます。親オブジェクトに特定クラスの複数の子オブジェクトが含まれる場合、目的の子オブジェクトを指定するためにはプロパティ名かインデックスを提供する必要があります。ほとんどの子オブジェクトの場合、オブジェクト名またはインデックスをパラメータとして受け入れる特定のgetterメソッドを使用して、親オブジェクトから包含するオブジェクトにアクセスします。たとえば、シーケンスファイル内のステップにアクセスするには、以下を使用します。

SequenceFile.getSequenceByName(“MainSequence”).GetStepByName(“RAM Test”, StepGroup_Main)

また、子オブジェクトはその親にAPIを介してアクセスできます。子オブジェクトは常に1つの親しか持てないため、getterメソッドではなく、プロパティを使用して直接親にアクセスします。たとえば、SequenceContextオブジェクトを持っていて、親の実行にアクセスする必要がある場合、以下を使用できます。

ThisContext.Thread.Execution

多くの場合、組込プロパティはもっと離れた先祖にアクセスするために提供されます。たとえば、次のようにして、Sequence Contextオブジェクトから実行オブジェクトに直接アクセスできます。

ThisContext.Execution

 

TestStand APIオブジェクト移動する

コンテインメントの関係を使用して移動するほかに、多くのクラスではその他の関連オブジェクトにアクセスするためのプロパティやメソッドが用意されています。たとえば、Moduleクラスには、実行中の対応アダプタにアクセスできるAdapterプロパティがあります。 

TestStand APIリファレンスヘルプトピックで提供されているチャートを使用して、現在のオブジェクトから目的のオブジェクトにアクセスする方法を決定することができます。このチャートの一部を以下に示します。
 

sequenceContextオブジェクトから、オブジェクトの関係をナビゲートしてその他のオブジェクトにアクセス可能

TestStand APIアクセスする

作成しているアプリケーションのタイプに応じて、通常2つの方法でAPIにアクセスすることができます。

  • スタンドアロンアプリケーションの場合、TestStandエンジンの新しいインスタンスを作成する必要があります。
  • 既存のアプリケーションから呼び出されるコードモジュールまたはその他のツールの場合、既存のリファレンスをTestStandエンジンに渡す必要があります。

 

スタンドアロンTestStandアプリケーション作成する

新しいアプリケーションでTestStand APIを使用するには、まず、TestStandエンジンのインスタンスを作成する必要があります。TestStandユーザインタフェース、シーケンスエディタ、カスタムユーティリティなど、TestStandアプリケーションまたはプロセスは、TestStand関数を実行するために、エンジンの単一のインスタンス(シングルトン)を維持します。エンジンは、全てのメモリ内オブジェクトへのリファレンスを維持し、実行を設定および制御し、TestStandセッションのコンテキストデータをステーショングローバルやユーザ情報とともに格納します。

TestStandエンジンには、その他のTestStandオブジェクトを作成するために使用するメソッドが用意されています。これには、以下のように「new」というキーワードが付いています。

  • Engine.NewSequenceFile()
  • Engine.NewStep()
  • Engine.NewExecution()
  • Engine.NewPropertyObject()

Engineオブジェクトから利用できるプロパティとメソッドの一覧については、TestStandエンジンのトピックを参照してください。

アプリケーションが完成したら、アプリケーションを終了する前にTestStandエンジンをシャットダウンする必要があります。ユーザが実行中のすべてのプロセスを確実に終了するために、2段階のシャットダウンプロセスが必要になっています。詳しくは、TestStandヘルプのエンジンのシャットダウントピックを参照してください。

プログラムの複雑さを軽減するために、NIは、TestStandエンジンオブジェクトを直接作成するのではなく、TestStand UI制御器を使用してTestStandアプリケーションとユーザインタフェースを開発することをお勧めします。TestStand UI制御器は、TestStand APIの上に抽象化レイヤを提供します。これにより、スタンドアロンのTestStandアプリケーションの開発が容易になります。UI制御器の使用に関する詳細は、このドキュメントのUI制御器APIのセクションを参照してください。


既存アプリケーションからコードモジュールまたはツール呼び出す

別のTestStandアプリケーションから呼び出すコードモジュールまたはツールでAPIを使用する場合、トップレベルアプリケーションによって作成されたTestStandエンジンを使用します。コードが、コードモジュールなどの既存のシーケンスから呼び出される場合、SequenceContextの入力パラメータを使用して行うことが最善です。シーケンスコンテキストが、TestStandエンジンオブジェクトに加えて、実行の現在の状態へのアクセスを提供するので、TestStandエンジンを直接渡すよりも、この方法をお勧めします。

SequenceContextはシーケンスの現在の実行状態を表し、特定の実行シーケンスの全データのスナップショットへのアクセスを提供します。どのスレッドでも各実行シーケンスに独自のSequenceContextがあります。

変数ビューを参照する場合、表示されるリストはSequence Contextの第1レベルのプロパティで、全ての変数タイプ、現在のステップ、RunStateプロパティが含まれています。SequenceContextはまた、その他多数のオブジェクトへのリファレンスを組込プロパティとして提供します。

 

RunStateSequenceContext


RunStateプロパティとSequenceContextはどちらも、現在の実行、スレッド、シーケンスファイル、シーケンスなど、多くの同じオブジェクトへのアクセスを提供します。ただし、このようなオブジェクトを組込プロパティとして公開するSequenceContextと異なり、RunStateプロパティはオブジェクトを動的プロパティとして含みます。

このため、TestStand式の状態に関する情報にアクセスするときはRunStateプロパティを使用します。SequenceContextは、動的プロパティに直接アクセスできないコードモジュールにより適しています。


 SequenceContextは、組込および動的プロパティを介して実行状態の情報を提供し、RunStateプロパティは動的プロパティのみを介して状態情報を提供します。

シーケンスデータ持続性

シーケンス内のステップを実行する前に、TestStandはシーケンスのランタイムコピーを作成して、シーケンス呼び出しごとに個別のローカル変数とステッププロパティ値を維持します。多くの場合、実行シーケンス内でRunstateまたはSequenceContextからオブジェクトにアクセスするとき、そのオブジェクトはこのランタイムコピーです。つまり、これらのオブジェクトに対して行った変更は、実行が終了した後は持続しません。たとえば、ローカル変数の値の変更や、プログラム的に作成したパラメータのサブプロパティなどはディスク上のシーケンスファイルに影響を与えません。

Locals.SetValString("RuntimeVariable",1, "value")

SequenceFileオブジェクトなど、PropertyObjectFileクラスから継承されたオブジェクトには、個別のランタイムコピーがありません。このため、このようなオブジェクトを介して行った変更は、実行が完了した後も持続されます。たとえば、SequenceFileオブジェクトを介してLocalsプロパティにアクセスすると、永続的なローカル変数を作成できます。

RunState.sequencefile.GetSequenceByName("MainSequence").Locals.SetValString("PersistantVariable",1, "value")

TestStand API代表アプリケーション

TestStand APIは、全てのTestStand機能を自動化する機能を提供しますが、このAPIには代表的なアプリケーションがいくつかあります。

  • カスタムプロパティの作成
  • 新規シーケンスファイルの作成
  • 既存のシーケンスの変更

 

カスタムプロパテ作成

TestStand APIを使用して、実行時にカスタムプロパティを動的に生成することができます。たとえば、特定のコンポーネントでテストが失敗した場合にテスト結果に具体的な診断データを追加したり、カスタムデータをレポートヘッダに追加したりできます。 

APIを介してカスタムプロパティを作成する方法は多数あります。プリミティブデータタイプの場合、“SetVal”メソッドにInsertIfMissingオプションを指定して使用すると、新しいプロパティを最も簡単に作成することができます。たとえば、次の式を使用して、新しいプロパティを数値制限テストステップに追加できます。

RunState.Sequence.Main["Numeric Limit Test"].AsPropertyObject.SetValString(
"Result.extraResult",
PropOption_InsertIfMissing,
"this string is an extra result")

カスタムプロパティをレポートに追加するには、オブジェクトにIncludeInReportフラグを設定する必要もあります。レポートジェネレータはこれを使用して記録する結果プロパティを選択します。

RunState.Sequence.Main["Numeric Limit Test"].AsPropertyObject.SetFlags(
"Result.extraResult",
0,
PropFlags_IncludeInReport)

APIを使用してデータをテストレポートに追加する方法の詳細については、「レポートにカスタムデータを追加する」のサンプルを参照してください。

コンテナなど、より複雑なプロパティの場合は、NewSubProperty()メソッドを使用して直接プロパティを作成する必要があります。これにより、コンテナ、データタイプのインスタンス、および配列を作成できます。たとえば、Errorタイプの新しいローカル変数を作成するには、以下の式を使用します。

Locals.NewSubProperty("ComplexContainer.Error",PropValType_NamedType, False, "Error",0)

APIを使用してプロパティを作成する方法の詳細については、[APIを使用して新しいプロパティを作成する]のサンプルを参照してください。

 

新規シーケンス作成する

ユーザ入力に基づいてシーケンスファイルの作成プロセスを自動化するには、TestStand APIを使用して、新規シーケンスファイルを生成するか、既存ファイルの修正したコピーを作成することができます。たとえば、特定のユーザ入力に基づいて開始点シーケンスファイルを生成したり、既存のシーケンスファイルのステップに特定の変更を実行したりするツールを作成できます。

APIを使用した新規シーケンスファイルの作成の詳細については、「APIを使用してシーケンスを構築する」のサンプルを参照してください。

また、TestStand APIを使用して、カスタムファイル形式を使用してシーケンスファイルを生成するシーケンスファイル変換器を開発することもできます。シーケンスファイル変換器を作成する場合、TestStand APIを使用して、指定したファイルのデータに基づいて、シーケンスファイル、シーケンス、ステップ、およびプロパティを生成します。変換フレームワークを使用すると、このコードをTestStandに統合して、ファイルをカスタム形式で直接開くことができます。 

シーケンスファイル変換器の使用に関する詳細は、TestStandヘルプのシーケンスファイル変換器トピックを参照してください。


シーケンス修正する

既存のシーケンスファイルを修正するために使用するカスタムツールでTestStand APIを使用することができます。たとえば、絶対パスで指定されたコードモジュールをチェックして、相対パスに置き換えるツールを作成できます。 

詳細については、「シーケンスファイル反復ツールを作成する」のサンプルを参照してください。

その他TestStand API

コアTestStand API以外にも、TestStandには、機能を拡張し、追加機能を提供する、次のようなAPIがあります。

  • UI制御器API
  • アダプタAPI
  • 同期サーバAPI

コアTestStand APIと異なり、上記のAPIは式を介して直接アクセスできません。ActiveXステップまたは別のコードモジュールを介して使用します。


UI制御API

TestStandには一連のユーザインタフェース制御器が含まれており、これにより、TestStandユーザインタフェースを迅速に開発できます。このような制御器には、ステップビューや変数ビューなど、TestStandデータを表示するための表示制御器と、TestStandユーザインタフェースでTestStandエンジンAPIとの多くの通信を処理する非表示マネージャ表示器があります。

スタンドアロンのTestStandアプリケーションを開発する場合、NIは、TestStandエンジンのインスタンスを直接作成するのではなく、UI制御器を使用してアプリケーションを開発することをお勧めします。

UI制御器APIを使用すると、マネージャ制御器を介して、シーケンスファイルのオープンと実行、UIメッセージへの応答、アプリケーションのシャットダウンの処理など、一般的なユーザインタフェースタスクを実装することができます。UI制御器APIには、UI制御器を構成するために使用される接続メソッドも用意されています。 

ユーザインタフェース制御器およびUI制御器APIの使用方法の詳細については、以下のヘルプトピックを参照してください。


TestStand UI制御器は、TestStandエンジンAPIの上にあるソフトウェアの層と考えることができます。このような制御器は、シーケンスを開く、テストを実行する、テストの進行状況を表示するなど、ユーザインタフェースで必要とする多くの機能をカプセル化しています。TestStand UI制御器は機能が豊富で、独自のAPIが含まれています。ユーザインタフェース制御器の機能を取り上げることは、このドキュメントの範囲外ですが、重要なことなので、このような制御器がTestStandエンジンAPIに基づいた機能を提供することを述べておきます。

 

アダプタAPI

アダプタAPIは、TestStandに含まれる様々なアダプタに特定のクラスを提供します。通常、コアAPIでアダプタまたはモジュールクラスを使用するときは、アダプタ固有の情報または機能のアダプタAPIを使用します。この場合、オブジェクトを適切なアダプタAPIクラスに型変換します。たとえば、LabVIEWModuleクラスを使用して、LabVIEWステップでモジュールオブジェクト用のLabVIEW固有のプロパティおよびメソッドにアクセスできます。

アダプタAPIを使用してModuleクラスまたはAdapterクラスのアダプタ固有のプロパティやメソッドにアクセス

 

アダプタAPIに用意されているクラスのリストについては、TestStandアダプタAPIリファレンスを参照してください。

 

同期サーバAPI

同期サーバAPIは、キュー、ロック、通知など、TestStand同期オブジェクトへの直接アクセスを提供します。このAPIを使用するには、まずEngine.GetSyncManagerメソッドを使用して同期マネージャへのリファレンスを取得します。このオブジェクトを同期サーバAPIで定義されている同期マネージャクラスにキャストすると、これを使用して新しい同期オブジェクトへのアクセスや、同オブジェクトを新規作成したりできます。


SyncManagerおよび同期サーバAPIを使用して、コード内でTestStand同期オブジェクトを作成およびアクセス

 

このAPIは、TestStandテストと平行して実行され、ステータスモニタアプリケーションなど、実行状態についての情報にアクセスする必要があるアプリケーションを開発するときに便利です。

利用可能なクラスの詳細については、同期サーバAPIリファレンストピックを参照してください。

Was this information helpful?

Yes

No