Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

整数オーバーフローおよびゼロ除算エラーの検出

この例について

以下の節では、sldvdemo_cruise_control_fxp_fixed モデルの整数オーバーフローおよびゼロ除算エラーを解析する方法について説明します。

モデルの解析

モデルを開き、整数オーバーフローおよびゼロ除算エラーがあるかどうかをチェックします。

  1. 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.61012.6096 です。

    • Outport 2 (target) の値の範囲は 0255.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 Design Verifier レポートを参照してください。

関連するトピック