このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
テスト ハーネスのカスタマイズ
テスト ハーネスを作成した後、コールバックとして実行される 1 つ以上の関数を使用して、テスト ハーネスをカスタマイズできます。テスト ハーネスをリビルドするためのコールバックとして実行する関数を 1 つ使用できます。この関数内で、テスト ハーネスをカスタマイズするためのコマンドを記述します。たとえば、以下を行う関数を作成できます。
カスタムのソースまたはシンク ブロックを接続する。
閉ループ テスト用のプラント サブシステムを追加する。
コンフィギュレーション セットを変更する。
信号のログを有効にする。
シミュレーションの終了時間を変更する。
コールバック関数を使用してテスト ハーネスをカスタマイズするには、次のようにします。
コールバック関数を作成します。
この関数で、Simulink® のプログラム インターフェイスを使用して、テスト ハーネスをカスタマイズするコマンドをスクリプトとして記述します。詳細については、プログラムによるモデル編集にリストされている関数を参照してください。
作成後コールバックとして 1 つ以上の関数を指定するか、リビルド後コールバックとして単一の関数を指定します。
新しいテスト ハーネスの場合、次のようにします。
UI を使用している場合は、[テスト ハーネスの作成] ダイアログ ボックスで、[作成後コールバック メソッド] に関数名をコンマ区切りで入力するか、[リビルド後コールバック メソッド] に単一の関数名を入力します。
sltest.harness.create
を使用している場合は、関数をPostCreateCallback
またはPostRebuildCallback
値として指定します。PostCreateCallback
には関数を複数指定できます。
既存のテスト ハーネスの場合、次のようにします。
UI を使用している場合、ハーネス プロパティ ダイアログ ボックスの [リビルド後コールバック メソッド] に関数名を入力します。
sltest.harness.set
を使用している場合は、関数をPostRebuildCallback
値として指定します。
テスト ハーネスをカスタマイズするもう 1 つの方法として、ハーネスを作成するための独自の既定値を設定できます。詳細については、Create or Import Test Harnesses and Select Propertiesを参照してください。
コールバック関数の定義とハーネス情報
コールバック関数の宣言は次のとおりです。
function myfun(x)
myfun
は関数名であり、myfun
は入力 x
を受け入れます。入力 x
は、テスト ハーネスがコールバックを使用したときに自動的に作成されるテスト ハーネスに関する情報の struct です。関数名と引数名を選択できます。たとえば、ハーネス コールバック関数 harnessCustomization.m
を定義します。
function harnessCustomization(harnessInfo) % Script commands here to customize your test harness. end
harnessInfo
は struct の名前、harnessCustomization
は関数名です。作成またはリビルド操作で harnessCustomization
が呼び出されると、テスト ハーネス モデル、メイン モデル、テスト ハーネス内のブロックへのハンドルなど、テスト ハーネスに関する情報が harnessInfo
に取り込まれます。 たとえば、次のテスト ハーネスのコールバックとして harnessCustomization
を使用します。
すると、3 つのソース、1 つのシンク、メイン モデル、ハーネス モデル、ハーネス オーナー、テスト対象のコンポーネント、および変換サブシステムへのハンドルが harnessInfo
に取り込まれます。
harnessInfo = struct with fields: MainModel: 2.0001 HarnessModel: 1.1290e+03 Owner: 17.0001 HarnessCUT: 201.0110 DataStoreMemory: [] DataStoreRead: [] DataStoreWrite: [] Goto: [] From: [] GotoTag: [] SimulinkFunctionCaller: [] SimulinkFunctionStub: [] Sources: [1.1530e+03 1.1540e+03 1.1550e+03] Sinks: 1.1630e+03 AssessmentBlock: [] InputConversionSubsystem: 1.1360e+03 OutputConversionSubsystem: 1.1560e+03 CanvasArea: [215 140 770 260]
struct のフィールドを使用してテスト ハーネスをカスタマイズします。以下に例を示します。
ConstInput
という名前の Constant ブロックをテスト ハーネスに追加するには、テスト ハーネス モデルの名前を取得してから、add_block
関数を使用します。harnessName = get_param(harnessInfo.HarnessModel,'Name'); block = add_block('simulink/Sources/Constant',... [harnessName '/ConstInput']);
テスト対象のコンポーネントの端子ハンドルを取得するには、
harnessInfo.HarnessCUT
の'PortHandles'
パラメーターを取得します。CUTPorts = get_param(harnessInfo.HarnessCUT,'PortHandles');
テスト ハーネスのシミュレーション終了時間を取得するには、
harnessInfo.HarnessModel
の'StopTime'
パラメーターを取得します。st = get_param(harnessInfo.HarnessModel,'StopTime');
テスト ハーネスのシミュレーション終了時間を
16
秒に設定するには、harnessInfo.HarnessModel
の'StopTime'
パラメーターを設定します。set_param(harnessInfo.HarnessModel,'StopTime','16');
ハーネス情報 struct の内容を表示
テスト ハーネスのハーネス情報をリストするには、次のようにします。
コールバック関数で次の行を追加します。
disp(harnessInfo)
コールバック関数を使用してテスト ハーネスを作成またはリビルドします。
テスト ハーネスを作成またはリビルドすると、ハーネス情報構造体の内容がコマンド ラインに表示されます。
コールバック間でのデータの共有
コールバック スクリプトは、MATLAB® ベース ワークスペースで評価されます。コールバック スクリプト間でデータを共有するには、assignin
と evalin
を使用して、ベース ワークスペースにデータを保存し、そこからデータを取得します。以下に例を示します。
assignin('base','a',2); a = evalin('base','a');
並列実行の場合、ポストロード コールバックおよびクリーンアップ コールバックは並列 MATLAB ワーカーで評価され、コールバックには独自のベース ワークスペースがあります。テスト ケースのプリロード コールバックで作成された変数、テスト ファイルのセットアップ コールバックで作成された変数、およびテスト スイートのセットアップ コールバックで作成された変数も、並列 MATLAB ワーカーのベース ワークスペースで使用できます。実行前に、ベース ワークスペース変数はクライアント MATLAB から並列 MATLAB ワーカーに転送されます。
混在ソース タイプを作成するためのテスト ハーネスのカスタマイズ
このハーネス コールバック関数の例では、Constant ブロックをこのテスト ハーネス例の 3 番目のコンポーネント入力に接続します。
この関数は次の手順に従います。
ハーネス モデル名を取得します。
Constant ブロックを追加します。
Constant ブロックの端子ハンドルを取得します。
入力変換サブシステムの端子ハンドルを取得します。
入力変換サブシステムに接続されたラインのハンドルを取得します。
既存の Inport ブロックを削除します。
残りのラインを削除します。
Constant ブロックからの新しいラインを入力変換サブシステムの入力
3
に接続します。
function harnessCustomization(harnessInfo) % Get harness model name: harnessName = get_param(harnessInfo.HarnessModel,'Name'); % Add Constant block: constBlock = add_block('simulink/Sources/Constant',... [harnessName '/ConstInput']); % Get handles for relevant ports and lines: constPorts = get_param(constBlock,'PortHandles'); icsPorts = get_param(harnessInfo.InputConversionSubsystem,... 'PortHandles'); icsLineHandles = get_param... (harnessInfo.InputConversionSubsystem,'LineHandles'); % Delete the existing Inport block and the adjacent line: delete_block(harnessInfo.Sources(3)); delete_line(icsLineHandles.Inport(3)); % Connect the Constant block to the input % conversion subsystem: add_line(harnessInfo.HarnessModel,constPorts.Outport,... icsPorts.Inport(3),'autorouting','on'); end
テスト ハーネス コールバックの例
この例では、作成後コールバックを使用してテスト ハーネスをカスタマイズする方法を示します。このコールバックでは、1 つのハーネス ソースを Inport ブロックから Constant ブロックに変更し、テスト ハーネスで信号のログを有効にします。
モデル
この例では、Roll Reference
サブシステムのテスト ハーネスを作成します。
open_system('RollAutopilotMdlRef')
ハーネス カスタマイズ関数へのパスの取得
cbFile = 'harnessSourceLogCustomization.m';
カスタマイズ関数とテスト ハーネス情報
関数 harnessSourceLogCustomization
は 3 番目のソース ブロックを変更し、テスト対象のコンポーネントの入力と出力での信号のログを有効にします。次のように入力して関数を読み取ることができます。
type(cbFile)
コールバックに出力のログのコードを含める代わりに、ハーネスを新規作成するダイアログ ボックスで [出力信号のログ] を使用するか、'LogOutputs',true
を sltest.harness.create
への入力として使用することもできます。これらのオプションを使用すると、テスト ハーネス内のテスト対象のコンポーネントのすべての出力信号がログ記録され、それらの信号のテスト結果が返されます。
関数 harnessSourceLogCustomization
は引数を使用します。引数は、テスト ハーネス情報をリストする struct です。この情報には、次のようなテスト ハーネス内のブロックへのハンドルが含まれます。
テスト対象のコンポーネント
入力サブシステム
ソースとシンク
メイン モデルのハーネス オーナー
たとえば、harnessInfo.Sources
はテスト ハーネス ソース ブロックへのハンドルをリストします。
カスタマイズしたテスト ハーネスの作成
1.RollAutopilotMdlRef
モデルで Roll Reference
サブシステムを右クリックし、[テスト ハーネス]、[Roll Reference 用に作成] を選択します。
2.ハーネス作成ダイアログ ボックスの [作成後コールバック メソッド] に「harnessSourceLogCustomization
」と入力します。
3.[OK] をクリックしてテスト ハーネスを作成します。ハーネスでは、コールバック関数で指定された信号のログとシミュレーション終了時間が表示されます。
'PostCreateCallback'
の名前と値のペアを指定してコールバック関数を指定し、sltest.harness.create
関数を使用してテスト ハーネスを作成することもできます。
sltest.harness.create('RollAutopilotMdlRef/Roll Reference',... 'Name','LoggingHarness',... 'PostCreateCallback','harnessSourceLogCustomization'); sltest.harness.open('RollAutopilotMdlRef/Roll Reference', ... 'LoggingHarness');
close_system('RollAutopilotMdlRef',0);
参考
sltest.harness.create
| sltest.harness.set