このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
整数オーバーフローおよびゼロ除算エラーの検出
以下の節では、sldvdemo_cruise_control_fxp_fixed
モデルの整数オーバーフローおよびゼロ除算エラーを解析する方法について説明します。
モデルの解析
モデルを開き、整数オーバーフローおよびゼロ除算エラーがあるかどうかをチェックします。
1.sldvdemo_cruise_control_fxp_fixed
モデルを開きます。
open_system('sldvdemo_cruise_control_fxp_fixed');
2.[Design Verifier] タブの [準備] セクションのモード設定のドロップダウン メニューから、[設定] をクリックします。
3.[コンフィギュレーション パラメーター] ダイアログ ボックスで、[Design Verifier]、[設計エラー検出] を選択します。
4.[設計エラー検出] ペインで以下を選択します。
整数のオーバーフロー
ゼロ除算
5.[コンフィギュレーション パラメーター] ダイアログ ボックスの [診断]、[データ有効性] ペインにおいて [信号] の [オーバーフロー時にラップ]、[信号] の [オーバーフローで飽和]、および [パラメーター] の [オーバーフローの検出] の設定を [エラー] にします。
6.[OK] をクリックしてそれらの設定を保存し、[コンフィギュレーション パラメーター] ダイアログ ボックスを閉じます。
7.[モード] セクションで、[設計エラー検出] を選択します。
8.[設計エラーの検出] をクリックします。
解析が完了すると、
解析結果に基づいてモデルが強調表示されます。
Simulink® Design Verifier™ の [結果] ダイアログ ボックスが開き、解析の概要が表示されます。
解析結果のレビュー
モデルの結果のレビュー
以下の手順からわかるように、派生範囲を使用することで取り得る信号値が特定され、エラーの原因把握に役立ちます。
1.sldvdemo_cruise_control_fxp_fixed
モデルの最上位で、Fixed-Point Controller サブシステムをクリックします。
Simulink® Design Verifier™ の [結果] ウィンドウに、解析で計算された Outport の取り得る信号値の派生範囲が表示されます。
Outport 1 (throt) の値の範囲は –2.6101 ~ 2.6096 です。
Outport 2 (target) の値の範囲は 0 ~ 255.9960 です。
2.sldvdemo_cruise_control_fxp_fixed
モデルのそれぞれの Outport ブロックをクリックして、信号範囲の値が同じであることを確認します。
3.Fixed-Point Controller サブシステムを開きます。
このサブシステムの 2 つのオブジェクトがレッドの輪郭で表示されています。PI Controller サブシステムはグリーンの輪郭で表示されています。
4.レッドの輪郭の Sum ブロックをクリックします。これは PI Controller サブシステムにエラー入力を提供しています。
この Sum ブロックはオーバーフロー エラーを生成できます。この解析では、Sum ブロックの出力が [–128..127.9960] の範囲を超える計算結果となり得るテスト ケースが見つかりました。
5.このエラーについてより詳細に理解するには、Sum ブロックへの入力を提供する 2 つのブロックをクリックします。Simulink® Design Verifier™ の [結果] ウィンドウに、その派生範囲が表示されます。
Bus ブロックからの 3 番目の Outport の範囲は、[0..256] です。
Switch ブロックからの Outport の範囲は、[0..256] です。
これらの信号範囲の加算操作により Sum ブロックの Outport の範囲 [–128..128] を超える値が算出される可能性があることがわかります。
解析により、Sum ブロックのオーバーフロー エラーがレポートされます。解析はこのエラーを伝播せず、Sum ブロック出力がその後の計算で有効範囲内になると仮定します。
6.グリーンの輪郭の PI Controller サブシステムをクリックします。PI Controller サブシステム内のブロックは、オーバーフローまたはゼロ除算エラーを生成できません。PI Controller サブシステムが解析される際に、Sum ブロックからのオーバーフローは無視され、サブシステムへの入力は有効であると仮定されます。
sldvdemo_cruise_control_fxp_fixed
モデルは開いたままにしておきます。次のセクションでは、Sum ブロックのオーバーフロー エラーを生成するテスト ケースを確認するためのハーネス モデルを作成します。
ハーネス モデルのレビュー
エラーの実例を示すテスト ケースを確認するため、Simulink® Design Verifier™ の [結果] ウィンドウからハーネス モデルを生成します。
1.sldvdemo_cruise_control_fxp_fixed
モデル内で、Fixed-Point Controller サブシステムを開きます。
2.レッドの輪郭の Sum ブロックをクリックします。これは PI Controller サブシステムにエラー入力を提供しています。
Simulink® Design Verifier™ の [結果] ウィンドウには、オーバーフロー エラーが発生したという情報が表示されます。
3.Simulink® Design Verifier™ の [結果] ウィンドウで、[反例を表示] をクリックします。
このオーバーフロー エラーの原因となる信号値をもつテスト ケースを含むハーネス モデルが作成されます。
ハーネス モデルで [Signal Builder] ダイアログ ボックスが開き、Test Case 2 が表示されます。
4.[シミュレーションの開始] ボタンをクリックして、このテスト ケースを含むモデルのシミュレーションを実行します。
シミュレーションは想定されたとおり、Fixed-Point Controller サブシステムの Sum ブロックにおけるオーバーフロー エラーにより失敗します。
詳細については、Simulink Design Verifier ハーネス モデルの管理を参照してください。
解析レポートのレビュー
sldvdemo_cruise_control_fxp_fixed
モデルの解析レポートに関する詳細情報を含む HTML レポートは、次の手順で表示します。
1.Simulink® Design Verifier™ の [結果] ウィンドウで、結果概要を再表示するには [概要に戻る] をクリックします。
2.[詳細な解析レポートを生成] をクリックします。
詳細な解析レポートが生成されます。これはブラウザーで開きます。
sldvdemo_cruise_control_fxp_fixed
モデルについて、レポートの [設計エラー検出オブジェクティブのステータス] の章に詳細な結果が次の 2 つのカテゴリで表示されます。
有効なオブジェクティブ — エラーが生成されなかったモデル オブジェクト
反例によって反証されたオブジェクティブ — テスト ケースがエラーを生成したモデル オブジェクト
判定結果または条件結果をもつモデル オブジェクトは、デッド ロジック検出を受けます。判定オブジェクティブまたは条件オブジェクティブをもつモデル オブジェクトの完全なリストの詳細については、カバレッジの対象となるモデル オブジェクト (Simulink Coverage)を参照してください。
詳細については、結果の確認を参照してください。