Stateflow チャートの作成
R2026bこのチュートリアルでは、Stateflow® チャートを使用して、充電式バッテリー システムのロジックをモデル化します。
バッテリー システムには次の要件があります。
バッテリーは、外部電源に接続されているときに充電します。それ以外の場合は放電します。
バッテリー容量は、総充電量の 4% の割合で充電され、3% の割合で放電します。
充電中は、バッテリーは電力を出力しません。放電中は、バッテリーは 3.5 ワットの電力を出力します。

これらの要件をモデル化するために、バッテリー システムの動作モードを表す Charge および Discharge という 2 つのステートを含むチャートを作成します。
チャートの作成
空の Chart ブロックを含む新しい Simulink® モデルを作成します。
MATLAB® を起動します。MATLAB ツールストリップの [ホーム] タブで、[Simulink]

をクリックします。
スタート ページの [Stateflow] セクションで、[空白チャート] テンプレートをクリックします。
Simulink エディターが開き、Chart ブロックを含むモデルが表示されます。

Chart ブロックをダブルクリックして、Stateflow エディターを開きます。
Stateflow エディターには次のコンポーネントがあります。
キャンバス — ステートと遷移を配置するグラフィカル環境。キャンバスの背景は既定ではクリーム色です。
エクスプローラー バー — キャンバスの上部にある長方形の領域。開いているチャートまたはグラフィカル要素へのパスが表示されます。矢印ボタンまたはモデル要素をクリックすると、Stateflow エディターと Simulink エディターの間を移動できます。
パレット — キャンバスの左側にあるメニュー。ここから、キャンバスにオブジェクトを追加します。ステート
やその他のチャート要素のアイコンが含まれています。オブジェクト名を表示するには、パレットを右クリックして [名前を表示] をクリックします。オブジェクト名を非表示にするには、右クリックして [名前を非表示] をクリックします。
[シンボル] ペイン — 既定ではキャンバスの右側にあるペイン。ここでは、チャートが Simulink モデルの残りの部分と通信できるようにするためのデータ、イベント、メッセージを作成および管理します。
[シンボル] ペインを開いたり閉じたりするには、[モデル化] タブで [[シンボル] ペイン] をクリックします。

ステートの追加
バッテリー システムには 2 つのステート (充電と放電に 1 つずつ) が必要です。パレットを使用して、この 2 つのステートをキャンバスに追加します。
パレットで、ステート アイコン
をクリックします。ステートを配置するには、キャンバスの空白のセクションにカーソルを合わせてクリックします。
ステートを配置すると、ステートの左上隅にステート名を入力するよう求めるメッセージがエディターに表示されます。「
Charge」と入力します。ステート名を確定するには、キャンバスの空白のセクションをクリックします。既存のステート名を編集するには、ステート内のテキストをクリックします。
メモ
ステート名にはスペースを含めることはできず、数字で開始することもできません。各ステート名は一意でなければなりません。
2 つ目のステートを追加し、
Dischargeという名前を付けます。
メモ
ステートの境界はオーバーラップしてはなりません。

ステートの接続
遷移は、チャートがステート間を移動する方法とタイミングを決定します。
デフォルト遷移を使用した最初のアクティブ ステートの指定
青い円
は "デフォルト遷移" を示し、これによりシミュレーションの開始時にアクティブになるステートが決まります。
このチャートでは、キャンバスに最初に追加したステートにデフォルト遷移が配置されます。この例では、デフォルト遷移が Charge ステートに接続されます。デフォルト遷移アイコン
をクリックしてステートの端をクリックすると、パレットから別のデフォルト遷移を追加できます。
要件により、バッテリーは充電モードで開始する必要があるため、デフォルト遷移を移動する必要はありません。
ステート間の遷移の追加
ステート間の遷移により、チャートは 1 つのステートから別のステートに移動できます。
最初の遷移を作成するには、
Chargeステートの端にカーソルを合わせ、カーソルがプラス記号
に変わるまで待ちます。クリックして、Dischargeステートの端にドラッグします。
ヒント
既存の遷移を移動するには、矢印をクリックしてドラッグします。
DischargeからChargeへの遷移を作成します。
モデルのシミュレーションを実行します。[シミュレーション] タブで [実行] をクリックします。
ステートがアクティブになると、チャートでステートの境界が強調表示されます。チャートが遷移に沿って移動すると、遷移が一時的に強調表示されます。シミュレーション中、チャートでは、各ステップで
ChargeステートとDischargeステートが切り替わります。

ヒント
アニメーション速度を変更するには、[デバッグ] タブの [アニメーション速度] ドロップダウン メニューをクリックし、オプションを選択します。
遷移ラベルの追加
遷移の動作を変更するために、"遷移ラベル" を追加できます。遷移ラベルには、次の 3 つのオプション コンポーネントがあります。
遷移がチャートまたはモデル内の別のオブジェクトからイベントまたはメッセージのブロードキャストを受け取るまで、チャートが遷移に沿って移動するのを阻止する "イベント トリガー" または "メッセージ トリガー"。
チャートが遷移に沿って移動する前に、満たされていなければならない条件。条件を指定するには、大かっこを使用します。
ヒント
チャートが条件なしの遷移を評価する場合、チャートは常に遷移に沿って移動します。
チャートが遷移に沿って移動するときに実行されるアクション。アクションを指定するには、中かっこを使用します。

遷移を初めて作成すると、ラベルを入力するよう求めるメッセージがエディターに表示されます。または、遷移をダブルクリックして遷移ラベルを追加することもできます。
ステート間の遷移に条件を追加します。
バッテリーが充電中でないときのみ
ChargeからDischargeに遷移するには、遷移をダブルクリックしてラベル[~isCharging]を入力します。ラベルを確定するには、キャンバスをクリックします。ラベルを移動するには、ラベル テキストの中央をクリックしてドラッグします。

バッテリーが充電中のときのみ
DischargeからChargeに遷移するには、ラベル[isCharging]を入力します。
実行可能コードの追加
ステート ラベルに "ステート アクション" を追加すると、アクティブ ステートでコードを実行できます。ステート アクションには、キーワードが含まれ、その後にコロンと実行可能コードのブロックが続きます。
この例では、3 種類のステート アクションを使用します。
| ステート アクション | 動作 |
|---|---|
entry | ステートがアクティブになると実行されます。 |
during | ステートがアクティブなすべてのステップで実行されます。ステートがアクティブになるステップまたはステートが非アクティブになるステップでは実行されません。 |
exit | ステートが非アクティブになると実行されます。 |
動作モードに応じて、バッテリーの出力と充電量を変更するステート アクションを追加します。
Chargeステートで、ステート名をクリックしてステート ラベルを編集します。新しい行を追加し、以下のテキストを入力します。Enter キーを押すと、新しい行を追加できます。entry:sentPower=0;during:charge=charge+4;entryアクションは、sentPowerという名前の変数を0に設定します。duringアクションは、chargeという名前の変数を4だけインクリメントします。ヒント
ステートのサイズを手動で変更するには、任意の角をクリックしてドラッグします。キャンバス上のすべてのオブジェクトを自動的に再配置するには、キャンバスの空白のセクションをクリックして、選択されているオブジェクトの選択を解除します。その後、Ctrl+Shift+A を押します。

Dischargeステートで、sentPowerを3.5に設定するentryアクションと、chargeを3だけデクリメントするduringアクションを追加します。
チャート データの定義と Simulink モデルとの共有
遷移またはステートで変数を使用する場合は、その変数を "入力データ"、"出力データ"、または "ローカル データ" として定義する必要があります。[シンボル] ペインでは、警告バッジ
によって未定義のデータが示されます。
| アイコン | タイプ | 動作 |
|---|---|---|
![]() | 入力データ | シミュレーション中に、このデータは入力信号の値を受け取ります。 入力データを定義すると、Simulink の Chart ブロックに入力端子が追加されます。入力データに手動で値を代入することはできません。 |
![]() | 出力データ | シミュレーション中に、チャートはこのデータの値を Simulink に出力します。 出力データを定義すると、Simulink の Chart ブロックに出力端子が追加されます。 |
![]() | ローカル データ | シミュレーション中に、このデータには、チャートでのみアクセスできる情報が格納されます。 |
チャートは、コンテキストに基づいて各データのタイプを推定します。たとえば、チャートは、isCharging は入力データ、sentPower は出力データ、charge はローカル データであると推定します。

チャート データのタイプと値を定義します。
推定されたデータのタイプを受け入れるには、[シンボル] ペインで [未定義のシンボルを解決] ボタン
をクリックします。未定義データの横にある警告バッジが消えます。バッテリーの初期充電量を設定します。[シンボル] ペインの [値] 列は、シミュレーション時の各データの初期値を指定します。値が未定義のデータは、既定値の
0に設定されます。charge行で、[値] 列をクリックして「50」と入力します。
During simulation, the Value column updates as the value of each data changes. When the simulation ends, the Value column returns to the original assigned value. You cannot edit data in the Symbols pane during simulation.
Simulink モデルの最上位に戻るには、エクスプローラー バーの [親に移動] ボタン
をクリックします。Chart ブロックには入力端子と出力端子があります。端子名を確認するには、Chart ブロックの角をクリックし、外側に向けてドラッグして拡大します。

チャートへの Simulink ブロックの接続
モデルを完成させるには、ソース ブロックとシンク ブロックを Chart ブロックの入力端子と出力端子に接続します。
外部電源との接続または切断を行うバッテリー システムを表すために、Manual Switch ブロックを Simulink キャンバスに追加します。その出力を Chart ブロックの入力に接続します。
値
1の Constant ブロックを追加します。その出力を Manual Switch ブロックの最初の入力端子に接続します。値
0の Constant ブロックを追加します。その出力を Manual Switch ブロックの 2 番目の入力端子に接続します。Scope ブロックを追加します。Chart ブロックの出力端子を Scope ブロックの入力端子に接続します。
Chart ブロックに
Batteryという名前を付けます。
モデルのシミュレーション
完成したモデルのシミュレーションを実行します。
[シミュレーション] タブで、[終了時間] を
Infに設定します。Chart ブロックをダブルクリックして開きます。
モデルのシミュレーションを実行するには、[モデル化] タブで [実行] をクリックします。
Chargeステートの周囲が青色で強調表示されているのを確認します。Simulink エディターに戻ります。
Manual Switch ブロックを切り替えるには、ブロックをダブルクリックします。
Stateflow エディターを開きます。
Dischargeステートの周囲が青色で強調表示されているのを確認します。シミュレーションを終了するには、[モデル化] タブで [停止] をクリックします。
Manual Switch を
1に切り替えます。
チュートリアルの次のステップでは、アクティブ ステートの出力、ログ、およびブレークポイントを使用して、バッテリー モデルの検証とデバッグを行います。


