メインコンテンツ

バス信号へのアクセス

R2026b

Stateflow® バスは、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 バスの定義

  1. バスのデータ型を定義するには、Create Simulink Bus Objects (Simulink)の説明に従って、ベース ワークスペースで Simulink バス オブジェクトを作成します。

  2. Stateflow データの追加の説明に従って、データ オブジェクトをチャートに追加します。

    真理値表、グラフィカル関数および MATLAB 関数で一時バスを定義するには、データ オブジェクトを関数に追加します。

  3. バスの [スコープ] プロパティを設定します。選択肢は以下のとおりです。

    • 入力

    • 出力

    • ローカル

    • パラメーター

    • データ ストア メモリ

    • 一時的 (C をアクション言語として使用するチャートでのみサポートされる)

  4. バスの [型] プロパティを設定します。スコープに応じて、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. [シンボル] ペインで、バスを右クリックし、[検査] を選択します。

  2. [プロパティ インスペクター] の [サイズ] をバスまたはバス配列の次元に設定します。スカラーのバスは、これらのバスに含まれるフィールドの数に関係なく 1 のサイズをもちます。

  3. [初期値] フィールドで、struct 関数を使用してバスを作成します。

    The 'Initial value' field in the Property Inspector for a bus with two elements in the Property Inspector.

  4. [詳細設定] セクションの [初期化メソッド] ドロップダウンで、[パラメーター] を選択します。

MATLAB ワークスペース内の変数をパラメーターとして代入する

  1. MATLAB コマンド ウィンドウで、Simulink.Bus.createMATLABStruct (Simulink) 関数を使用して MATLAB 構造体を変数に代入します。

  2. [シンボル] ペインで、バスを右クリックし、[検査] を選択します。

  3. [プロパティ インスペクター] の [サイズ] をバスまたはバス配列の次元に設定します。スカラーのバスは、これらのバスに含まれるフィールドの数に関係なく 1 のサイズをもちます。

  4. [初期値] フィールドに、変数の名前を入力します。

    変数とバスの名前が同じ場合、この値の入力はオプションです。

  5. [詳細設定] セクションの [初期化メソッド] を [パラメーター] に設定します。

制限

プロパティ インスペクターでは、以下の初期化はサポートされません。

  • 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)

トピック