バス信号へのアクセス
R2026bStateflow® バスは、Simulink.Bus (Simulink) オブジェクトから定義するデータ型です。Stateflow バスを使用すると、サイズや型の異なるデータをまとめて、以下を作成できます。
Stateflow チャート、Truth Table ブロック、および MATLAB Function ブロックから Simulink® バス信号にアクセスする入出力。
Stateflow チャート、真理値表、グラフィカル関数、MATLAB® 関数、およびボックスのローカル データ。
Stateflow グラフィカル関数、真理値表、および MATLAB 関数の一時データ。
詳細については、Create Simulink Bus Objects (Simulink)を参照してください。
Stateflow バスの例
この例では、Stateflow チャートが入力 inbus を使用してバス入力信号を Simulink から受信し、outbus からバス信号を出力します。入力信号は、他の 2 つの Bus Creator ブロックからの信号をまとめる Simulink Bus Creator ブロック COUNTERBUSCreator から渡されます。出力 outbus は Simulink Bus Selector ブロックに接続します。inbus も outbus も、Simulink.Bus オブジェクト COUNTERBUS から型を派生させます。この例の詳細については、Stateflow チャートのカスタム構造体の統合を参照してください。

Stateflow バス データ型の要素はフィールドと呼ばれます。個別の信号、多重化信号、ベクトル、および他のバス (サブバスとも呼ばれる) を自由に組み合わせてフィールドを作成できます。各フィールドが独自のデータ型をもちます。データ型は、バスの他のフィールドの型と一致する必要はありません。たとえば、このモデルのバス inbus とバス outbus は、それぞれ次の 2 つのフィールドをもっています。
inputsignalは、1 つのフィールドinputをもつサブバスです。limitsは、2 つのフィールドupper_saturation_limitとlower_saturation_limitをもつサブバスです。
Stateflow バスの定義
バスのデータ型を定義するには、Create Simulink Bus Objects (Simulink)の説明に従って、ベース ワークスペースで Simulink バス オブジェクトを作成します。
Stateflow データの追加の説明に従って、データ オブジェクトをチャートに追加します。
真理値表、グラフィカル関数および MATLAB 関数で一時バスを定義するには、データ オブジェクトを関数に追加します。
バスの [スコープ] プロパティを設定します。選択肢は以下のとおりです。
入力出力ローカルパラメーターデータ ストア メモリ一時的(C をアクション言語として使用するチャートでのみサポートされる)
バスの [型] プロパティを設定します。スコープに応じて、Stateflow バスは以下のいずれかのデータ型をもつことができます。
型 説明 Inherit: Same as Simulinkこのオプションは入力バスのみで使用可能です。入力バスは、接続しているモデル内の Simulink バス信号からデータ型を継承します。Simulink バス信号は非バーチャル バスでなければなりません。詳細については、バーチャル バスと非バーチャル バスを参照してください。
ベース ワークスペースで、Stateflow 入力バスに接続するバス信号と同じプロパティをもつ
Simulink.Busオブジェクトを指定します。これらのプロパティは、以下が一致しなければなりません。入力の数、名前および型
次元
サンプル時間
実数/複素数
サンプリング モード
入力信号が Bus Creator ブロックから派生している場合は、[Bus Creator] ダイアログ ボックスの [出力データ型] フィールドで適切なバス オブジェクトを指定します。バス オブジェクトを指定すると、Simulink によって、ベース ワークスペース内の
Simulink.Busオブジェクトのプロパティが Simulink バス信号のプロパティと一致していることが検証されます。Bus: <object name>[型] フィールドで、
<object name>を、Stateflow バスを定義するSimulink.Busオブジェクトの名前に置き換えます。入力バスまたは出力バスの場合は、Stateflow バスに接続する Simulink モデル内でバス信号を指定する必要はありません。バス信号を指定する場合は、そのプロパティが、Stateflow バスを定義する
Simulink.Busオブジェクトと一致しなければなりません。<data type expression>スコープが
[出力]以外のバスの場合は、type演算子を呼び出す式を使用します。この演算子は、あるバスの型を、Stateflow チャート内の別のバスの型に設定します。たとえば、sf_bus_demoモデルでは、type演算子式によって、ローカル バスcounterbus_structの型を、入力バスinbusの観点から指定します。いずれのバスも、Simulink.BusオブジェクトCOUNTERBUSから定義されます。
Stateflow バスの初期化
Stateflow バスをデータ オブジェクトとして定義した後、ステートまたは遷移でデータ オブジェクトに値を代入できます。あるいは、プロパティ インスペクターから以下のいずれかの方法でデータ オブジェクトを初期化できます。
struct関数を使用して初期値を直接代入する。MATLAB ワークスペース内の変数をパラメーターとして代入する。
初期値を直接代入する
[シンボル] ペインで、バスを右クリックし、[検査] を選択します。
[プロパティ インスペクター] の [サイズ] をバスまたはバス配列の次元に設定します。スカラーのバスは、これらのバスに含まれるフィールドの数に関係なく
1のサイズをもちます。[初期値] フィールドで、
struct関数を使用してバスを作成します。
[詳細設定] セクションの [初期化メソッド] ドロップダウンで、
[パラメーター]を選択します。
MATLAB ワークスペース内の変数をパラメーターとして代入する
MATLAB コマンド ウィンドウで、
Simulink.Bus.createMATLABStruct(Simulink) 関数を使用して MATLAB 構造体を変数に代入します。[シンボル] ペインで、バスを右クリックし、[検査] を選択します。
[プロパティ インスペクター] の [サイズ] をバスまたはバス配列の次元に設定します。スカラーのバスは、これらのバスに含まれるフィールドの数に関係なく
1のサイズをもちます。[初期値] フィールドに、変数の名前を入力します。
変数とバスの名前が同じ場合、この値の入力はオプションです。
[詳細設定] セクションの [初期化メソッド] を
[パラメーター]に設定します。
制限
プロパティ インスペクターでは、以下の初期化はサポートされません。
HDL コード生成を使用するモデル内のバス
[初期値] フィールドが
0またはフィールドのない構造体のいずれかに設定されているバススコープが
Input、Constant、Parameter、またはData Store Memoryのバス制限なしのバスまたは string を含むバス
Stateflow チャートでは、Simulink.BusElement (Simulink) オブジェクトの Min プロパティおよび Max プロパティで指定された範囲がチェックされません。シミュレーション中にその範囲外の値をローカル バス要素に代入しても、チャートではエラーや警告は生成されません。
バーチャル バスと非バーチャル バス
Simulink モデルは、バーチャル バスと非バーチャル バスをサポートしています。非バーチャル バスは連続メモリに格納されたデータ構造体から入力を読み取ります。バーチャル バスは不連続メモリから入力を読み取ります。詳細については、合成インターフェイスのガイドライン (Simulink)を参照してください。
Stateflow チャートは非バーチャル バスのみをサポートします。Stateflow 入力バスは、バーチャル バス信号を受け入れて、非バーチャル バス信号に変換できます。Stateflow 入力バスは、バーチャル バス信号からプロパティを継承できません。チャートへの入力がバーチャル バスである場合は、[Bus: の形式の型指定を使用して、入力バスの [型] プロパティを設定します。<object name>]
バスのデバッグ
Stateflow バスをデバッグするには、[Stateflow ブレークポイントと監視ウィンドウ] を開いて、シミュレーション中のバス フィールドの値を調べます。コマンド ラインでバス フィールドの値を表示するには、ドット表記を使用してバスにインデックスを設定します。詳細については、デバッグ中のデータおよびメッセージの検査と変更を参照してください。
参考
Simulink.Bus (Simulink)