参照モデルの複数のインスタンスに対するモデル カバレッジ
Model ブロックのカバレッジについて
Model ブロックはカバレッジの直接の対象にはなりません。Model ブロックのシミュレーション モードを [ノーマル]
、[SIL]
または [PIL]
に設定すると、Simulink® Coverage™ ソフトウェアは Model ブロックが参照しているモデルのカバレッジを記録します。Model ブロックのシミュレーション モードが [ノーマル]
、[SIL]
または [PIL]
以外の場合、参照モデルのカバレッジは記録されません。
Simulink モデルでは、同じシミュレーション モードに設定されている複数の Model ブロックが同じモデルを参照することができます。カバレッジの記録時に、参照モデルの各インスタンスをそれぞれ異なる入力やパラメーターを使用して実行することができます。この場合、参照モデルのカバレッジ データが追加されることがあります。
Simulink Coverage ソフトウェアは、同じシミュレーション モードに設定されている参照モデルのすべてのインスタンスに対するカバレッジを記録し、その参照モデルのカバレッジ データを結合して最終結果を生成します。
参照モデルの複数のインスタンスに対するカバレッジの記録
この機能を確認するには、モデルのシミュレーションを 2 回実行します。1 回目は、1 つの Model ブロックに対するカバレッジを [ノーマル]
シミュレーション モードで記録します。2 回目は、2 つの Model ブロックに対するカバレッジを [ノーマル]
シミュレーション モードで記録します。どちらの Model ブロックも同じモデルを参照します。
参照モデルの最初のインスタンスに対するカバレッジの記録
1 つの Model ブロックのカバレッジを記録します。
最上位モデルを開きます。この例では、モデル参照によるデータ管理の紹介の例にある
sldemo_mdlref_datamngt
モデルを使用します。openExample('sldemo_mdlref_datamngt')
このモデルには、
sldemo_mdlref_counter_datamngt
モデル例を参照する Model ブロックが 3 つあります。各 Model ブロックの角は、[シミュレーション モード] パラメーターの値を示しています。Counter1 — シミュレーション モード:
[ノーマル]
Counter2 — シミュレーション モード:
[アクセラレータ]
Counter3 — シミュレーション モード:
[アクセラレータ]
モデルがシミュレーション時にカバレッジを記録するよう設定します。
Simulink エディターの [モデル化] タブで [モデル設定] を選択します。
[コンフィギュレーション パラメーター] ダイアログ ボックスの [カバレッジ] ペインで、以下を選択します。
カバレッジ解析を有効にする
参照モデル
[モデルを選択] をクリックします。[カバレッジ解析用のモデルを選択] ダイアログ ボックスでは、シミュレーション モードが
[ノーマル]
、[SIL]
または[PIL]
の参照モデルしか選択できません。この例では、sldemo_mdlref_counter_datamngt
を参照している最初の Model ブロックのみをカバレッジの記録に使用できます。[OK] をクリックして、[カバレッジ解析用のモデルを選択] ダイアログ ボックスを終了します。
[OK] をクリックしてカバレッジ設定を保存し、[コンフィギュレーション パラメーター] ダイアログ ボックスを終了します。
モデルのシミュレーションを実行します。
シミュレーションが完了すると、HTML カバレッジ レポートが開きます。この例では、参照モデル
sldemo_mdlref_counter_datamngt
のカバレッジ データが表示され、このモデルのカバレッジが 69% であることがわかります。レポート内で参照モデルへのハイパーリンクをクリックします。
参照モデルの詳細なカバレッジ レポートが開きます。また、参照モデルが表示され、カバレッジ結果が強調表示されます。
この例では、Range Check サブシステムのカバレッジについて、次の点に注意してください。
Saturate Count ブロックが 100 回実行されています。このブロックには 4 つの boolean 判定があります。4 つの判定のうち 2 つは記録されなかったため、判定カバレッジは 50% です。
判定
input > lower limit
は 1 回もfalse
になっていません。判定
input >= upper limit
は 1 回もtrue
になっていません。
関数
DetectOverflow
は 50 回実行されています。このスクリプトには 5 つの判定があります。DetectOverflow
スクリプトの 5 つの判定のうち 2 つが記録されなかったため、カバレッジは 60% です。式
count >= CounterParams.UpperLimit
は 1 回もtrue
になっていません。式
count > CounterParams.LowerLimit
は 1 回もfalse
になっていません。
参照モデルの 2 番目のインスタンスに対するカバレッジの記録
2 つの Model ブロックのカバレッジを記録します。2 番目の Model ブロックのシミュレーション モードを [ノーマル]
に設定して、モデルのシミュレーションを実行します。この例では、両方の Model ブロックから参照されているモデルのカバレッジに Counter2 ブロックが追加されます。
Simulink エディターの最上位モデルで、2 番目の Model ブロックを右クリックして、[ブロック パラメーター (ModelReference)] を選択します。
[関数ブロック パラメーター] ダイアログ ボックスが開きます。
[シミュレーション モード] パラメーターを
[ノーマル]
に設定します。[OK] をクリックして変更を保存し、[Function ブロック パラメーター] ダイアログ ボックスを終了します。
Model ブロックの角が次の例のように変わり、このブロックのシミュレーション モードが
[ノーマル]
であることを示します。このモデルの両方のインスタンスのカバレッジが記録されるようにするには、次の手順に従います。
Simulink エディターの [モデル化] タブで [モデル設定] を選択します。
[カバレッジ] ペインで、[カバレッジ解析を有効にする] を選択します。
[参照モデル] を選択して [モデルを選択] をクリックします。
[カバレッジ解析用のモデルを選択] ダイアログ ボックスで、参照モデルの両方のインスタンスが選択されていることを確認します。この例では、次のようなリストが表示されます。
参照モデルの複数のインスタンスが
[ノーマル]
モードである場合、当該のインスタンスすべてのカバレッジを記録するように設定することも、いずれも記録しないように設定することもできます。[OK] をクリックして、[カバレッジ解析用のモデルを選択] ダイアログ ボックスを閉じます。
モデルのシミュレーションを再度実行します。
シミュレーションが完了すると、HTML カバレッジ レポートが開きます。
この例では、参照モデルのカバレッジは 85% です。Range Check サブシステムのカバレッジ データについて、次の点に注意してください。
Saturate Count ブロックが 179 回実行されています。Counter2 ブロックのシミュレーションにより Saturate Count ブロックが追加で 79 回実行されているため、合計の実行回数が 179 回となっています。
最初のシミュレーションでは、判定
input >= upper limit
がtrue
になった回数は 0 回でしたが、今回のシミュレーションでは 21 回でした。4 番目の判定input > lower limit
は 1 回もfalse
になっていません。このシミュレーションでは 4 つの判定のうち 3 つが記録されたため、このブロックのカバレッジは 75% です。関数
DetectOverflow
は 100 回実行されています。Counter2 ブロックのシミュレーションでは関数DetectOverflow
が追加で 50 回実行されています。関数
DetectOverflow
には 5 つの判定があります。最初のシミュレーションでは、式count >= CounterParams.UpperLimit
がtrue
になった回数は 0 回でしたが、今回のシミュレーションでは 21 回でした。式count > CounterParams.LowerLimit
は 1 回もfalse
になっていません。このシミュレーションでは 5 つの判定のうち 4 つが記録されたため、関数DetectOverflow
のカバレッジは 80% です。