チャート内での MATLAB 関数のデバッグ
MATLAB 関数の構文エラーのチェック
モデルのシミュレーション アプリケーションをビルドする前に、構文エラーを修正しなければなりません。以下の手順に従って、MATLAB® 関数 meanstats
の構文違反をチェックします。
チャート内での MATLAB 関数のプログラミングで作成した
call_stats_function_stateflow
モデルのチャート内に含まれる関数meanstats
を開きます。エディターは自動的にエラーの関数コードをチェックし、訂正を推奨します。
[アプリ] タブで、[Simulink Coder] をクリックします。[C コード] タブで、[ビルド] をクリックします。
エラーや警告が存在しない場合は、ビルダー ウィンドウが開いて、正常処理が通知されます。そうでない場合は、エラーがリストされます。たとえば、ローカル関数
avg
の名前をmeanstats
内に存在しないローカル関数aug
に変更した場合、エラーが診断ビューアーに表示されます。診断メッセージでは、エラーの種類と、エラーが発生したコードへのリンクが示されます。また、診断メッセージには、診断レポートへのリンクも含まれます。これは、MATLAB 関数と、これらの関数内の変数および式に関するコンパイル時の型情報へのリンクを提供します。モデルのビルドが失敗した場合、この情報を参考にすると、エラー メッセージの原因を容易に特定したり、型伝播のルールをすぐに理解することができます。このレポートの詳細については、MATLAB Function レポート (Simulink)を参照してください。
診断メッセージ内の関数名
meanstats
に続くリンクをクリックすると、違反したコード行が表示されます。問題の行が強調表示されてエディターに表示されます。
エラーを修正するには、
aug
をavg
に戻して、再コンパイルします。エラーは検出されず、コンパイルが正常に終了します。
チャートの MATLAB 関数の実行時デバッグ
シミュレーションを使用して、Stateflow® では検出できない MATLAB 関数の実行時エラーをテストします。モデルのシミュレーションを実行すると、情報の不足や未定義、および MATLAB 関数の構文エラーのチェック で説明されている論理的な競合の可能性について、MATLAB 関数の診断テストが行われます。エラーが検出されなかった場合は、実際にモデルのシミュレーションが開始されます。
ランタイム条件で meanstats
関数のシミュレーションとデバッグを行うには、以下の手順に従います。
関数エディター内で、次の行の行番号をクリックします。
len = length(vals);
行番号が赤で強調表示され、ブレーク ポイントを設定したことが示されます。
モデルのシミュレーションを開始します。
エラーまたは警告が表示された場合は、修正してから、シミュレーションを再試行してください。そうでない場合は、設定したブレーク ポイントに到達した時点でシミュレーションの実行が停止されます。コードの行が強調表示され、この一時停止が示されます。
実行を次の行に進めるには、[ステップ オーバー] を選択します。
この行はローカル関数
avg
を呼び出すことに注意してください。ここで [ステップ オーバー] を選択すると、ローカル関数avg
の実行が省略されて、次の行に進みます。ローカル関数avg
に含まれる行の実行を追跡するには、代わりに [ステップ イン] を選択します。呼び出したローカル関数
avg
の最初の行に実行を進めるには[ステップ イン] を選択します。ローカル関数内では、[ステップ オーバー] ツールを使用して一度に 1 行ずつ実行できます。ローカル関数が別のローカル関数を呼び出す場合は、[ステップ イン] ツールを使用して、呼び出されるローカル関数内に入ります。ローカル関数の残りの行を続行し、ローカル関数の呼び出し後にその行に戻る場合は、[ステップ アウト] を選択します。
[ステップ オーバー] を選択して、
avg
の唯一の行を実行します。[ステップ オーバー] を選択して、関数
meanstats
に戻ります。実行は、
avg
を呼び出す行の次の行に進みます。変数
len
の値を表示するには、関数エディターでテキストlen
に 1 秒以上ポインターを合わせます。len
の値がポインターの横に表示されます。この方法では、データが関数のどの部分にあるかにかかわらず、MATLAB 関数内の任意の変数の値を表示することができます。たとえば、ベクトル
vals
の値を表示するには、関数length
の引数にポインターを合わせるか、関数のヘッダーの引数にポインターを合わせます。また、シミュレーション時に MATLAB 関数データの値を MATLAB コマンド ウィンドウで表示することもできます。ブレーク ポイントに到達すると、
debug>>
コマンド プロンプトが MATLAB コマンド ウィンドウ (場合によっては、Enter キーを押して表示する必要があります) に表示されます。このプロンプトでは、以下の例に示すように、データの名前を入力することで関数に対して定義されたデータを確認できます。debug>> len
len = 4
別のデバッグ方法として、行末のセミコロンを省略することで関数行の実行結果を表示できます。これを行うと、シミュレーション中に実行結果が MATLAB コマンド ウィンドウに表示されます。
再呼び出し後にブレーク ポイントに到達するまで関数を続けるには、[続行] を選択します。
関数の任意のポイントで [続行] ツールを使用して、関数の残りの行を最後まで進めて実行できます。関数の末尾に到達した時点で [ステップ オーバー] を選択しても、同じ動作が完了します。
ブレークポイントをクリックして削除し、[停止] をクリックしてシミュレーションを完了します。
モデルで、計算された
mean
とstdev
の値が Display ブロックに表示されます。
データ範囲違反のチェック
データ範囲違反に対する診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [データ有効性] ペインで、[シミュレーション範囲のチェック] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [なし]
です。詳細については、シミュレーション範囲のチェック (Simulink)を参照してください。
範囲の指定
入出力データの範囲を指定するには、以下の手順に従います。
モデル エクスプローラーで、対象の MATLAB 関数の入力または出力を選択します。
[データ] プロパティ ダイアログ ボックスがモデル エクスプローラーの [ダイアログ] ペインに表示されます。
[データ] プロパティ ダイアログ ボックスで、制限範囲 の説明に従って、[一般] タブをクリックして制限範囲を入力します。