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