Main Content

チャート内での MATLAB 関数のデバッグ

MATLAB 関数の構文エラーのチェック

モデルのシミュレーション アプリケーションをビルドする前に、構文エラーを修正しなければなりません。以下の手順に従って、MATLAB® 関数 meanstats の構文違反をチェックします。

  1. チャート内での MATLAB 関数のプログラミングで作成した call_stats_function_stateflow モデルのチャート内に含まれる関数 meanstats を開きます。

    エディターは自動的にエラーの関数コードをチェックし、訂正を推奨します。

  2. [アプリ] タブで、[Simulink Coder] をクリックします。[C コード] タブで、[ビルド] をクリックします。

    エラーや警告が存在しない場合は、ビルダー ウィンドウが開いて、正常処理が通知されます。そうでない場合は、エラーがリストされます。たとえば、ローカル関数 avg の名前を meanstats 内に存在しないローカル関数 aug に変更した場合、エラーが診断ビューアーに表示されます。

  3. 診断メッセージでは、エラーの種類と、エラーが発生したコードへのリンクが示されます。また、診断メッセージには、診断レポートへのリンクも含まれます。これは、MATLAB 関数と、これらの関数内の変数および式に関するコンパイル時の型情報へのリンクを提供します。モデルのビルドが失敗した場合、この情報を参考にすると、エラー メッセージの原因を容易に特定したり、型伝播のルールをすぐに理解することができます。このレポートの詳細については、MATLAB Function レポート (Simulink)を参照してください。

  4. 診断メッセージ内の関数名 meanstats に続くリンクをクリックすると、違反したコード行が表示されます。

    問題の行が強調表示されてエディターに表示されます。

  5. エラーを修正するには、augavg に戻して、再コンパイルします。エラーは検出されず、コンパイルが正常に終了します。

チャートの MATLAB 関数の実行時デバッグ

シミュレーションを使用して、Stateflow® では検出できない MATLAB 関数の実行時エラーをテストします。モデルのシミュレーションを実行すると、情報の不足や未定義、および MATLAB 関数の構文エラーのチェック で説明されている論理的な競合の可能性について、MATLAB 関数の診断テストが行われます。エラーが検出されなかった場合は、実際にモデルのシミュレーションが開始されます。

ランタイム条件で meanstats 関数のシミュレーションとデバッグを行うには、以下の手順に従います。

  1. 関数エディター内で、次の行の行番号をクリックします。

    len = length(vals);

    行番号が赤で強調表示され、ブレーク ポイントを設定したことが示されます。

  2. モデルのシミュレーションを開始します。

    エラーまたは警告が表示された場合は、修正してから、シミュレーションを再試行してください。そうでない場合は、設定したブレーク ポイントに到達した時点でシミュレーションの実行が停止されます。コードの行が強調表示され、この一時停止が示されます。

  3. 実行を次の行に進めるには、[ステップ オーバー] を選択します。

    この行はローカル関数 avg を呼び出すことに注意してください。ここで [ステップ オーバー] を選択すると、ローカル関数 avg の実行が省略されて、次の行に進みます。ローカル関数 avg に含まれる行の実行を追跡するには、代わりに [ステップ イン] を選択します。

  4. 呼び出したローカル関数 avg の最初の行に実行を進めるには[ステップ イン] を選択します。

    ローカル関数内では、[ステップ オーバー] ツールを使用して一度に 1 行ずつ実行できます。ローカル関数が別のローカル関数を呼び出す場合は、[ステップ イン] ツールを使用して、呼び出されるローカル関数内に入ります。ローカル関数の残りの行を続行し、ローカル関数の呼び出し後にその行に戻る場合は、[ステップ アウト] を選択します。

  5. [ステップ オーバー] を選択して、avg の唯一の行を実行します。

  6. [ステップ オーバー] を選択して、関数 meanstats に戻ります。

    実行は、avg を呼び出す行の次の行に進みます。

  7. 変数 len の値を表示するには、関数エディターでテキスト len に 1 秒以上ポインターを合わせます。

    len の値がポインターの横に表示されます。

    この方法では、データが関数のどの部分にあるかにかかわらず、MATLAB 関数内の任意の変数の値を表示することができます。たとえば、ベクトル vals の値を表示するには、関数 length の引数にポインターを合わせるか、関数のヘッダーの引数にポインターを合わせます。

    また、シミュレーション時に MATLAB 関数データの値を MATLAB コマンド ウィンドウで表示することもできます。ブレーク ポイントに到達すると、debug>> コマンド プロンプトが MATLAB コマンド ウィンドウ (場合によっては、Enter キーを押して表示する必要があります) に表示されます。このプロンプトでは、以下の例に示すように、データの名前を入力することで関数に対して定義されたデータを確認できます。

    debug>> len
    
    len =
         4

    別のデバッグ方法として、行末のセミコロンを省略することで関数行の実行結果を表示できます。これを行うと、シミュレーション中に実行結果が MATLAB コマンド ウィンドウに表示されます。

  8. 再呼び出し後にブレーク ポイントに到達するまで関数を続けるには、[続行] を選択します。

    関数の任意のポイントで [続行] ツールを使用して、関数の残りの行を最後まで進めて実行できます。関数の末尾に到達した時点で [ステップ オーバー] を選択しても、同じ動作が完了します。

  9. ブレークポイントをクリックして削除し、[停止] をクリックしてシミュレーションを完了します。

    モデルで、計算された meanstdev の値が Display ブロックに表示されます。

    Simulink model with display blocks showing the simulation results.

データ範囲違反のチェック

データ範囲違反に対する診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断][データ有効性] ペインで、[シミュレーション範囲のチェック] パラメーターを [なし][警告]、または [エラー] に設定します。既定の設定は [なし] です。詳細については、シミュレーション範囲のチェック (Simulink)を参照してください。

範囲の指定

入出力データの範囲を指定するには、以下の手順に従います。

  1. モデル エクスプローラーで、対象の MATLAB 関数の入力または出力を選択します。

    [データ] プロパティ ダイアログ ボックスがモデル エクスプローラーの [ダイアログ] ペインに表示されます。

  2. [データ] プロパティ ダイアログ ボックスで、制限範囲 の説明に従って、[一般] タブをクリックして制限範囲を入力します。