Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Stateflow 構造体を介したバス信号へのアクセス

Stateflow® 構造体は、Simulink.Bus (Simulink) オブジェクトから定義するデータ型です。Stateflow 構造体を使用すると、サイズや型の異なるデータをまとめて、以下を作成できます。

  • Stateflow チャート、Truth Table ブロック、および MATLAB Function ブロックから Simulink® バス信号にアクセスする入出力。

  • Stateflow チャート、真理値表、グラフィカル関数、MATLAB® 関数、およびボックスのローカル データ。

  • Stateflow グラフィカル関数、真理値表、および MATLAB 関数の一時データ。

詳細については、Simulink バス オブジェクトの作成 (Simulink)を参照してください。

Stateflow 構造体の例

この例では、Stateflow チャートが構造体 inbus を使用してバス入力信号を受信し、構造体 outbus からバス信号を出力します。入力信号は、他の 2 つの Bus Creator ブロックからの信号をまとめる Simulink Bus Creator ブロック COUNTERBUSCreator から渡されます。出力構造体 outbus は Simulink Bus Selector ブロックに接続します。inbusoutbus も、Simulink.Bus オブジェクト COUNTERBUS から型を派生させます。この例の詳細については、Stateflow チャートのカスタム構造体の統合を参照してください。

Stateflow 構造体データ型の要素は "フィールド" と呼ばれます。個別の信号、多重化信号、ベクトル、および他の構造体 ("サブ構造体" とも呼ばれる) を自由に組み合わせてフィールドを作成できます。各フィールドが独自のデータ型をもちます。データ型は、構造体の他のフィールドの型と一致する必要はありません。たとえば、このモデルの構造体 inbus と構造体 outbus は、それぞれ次の 2 つのフィールドをもっています。

  • inputsignal は、1 つのフィールド input をもつサブ構造体です。

  • limits は、2 つのフィールド upper_saturation_limitlower_saturation_limit をもつサブ構造体です。

Stateflow 構造体の定義

  1. 構造体のデータ型を定義するには、Simulink バス オブジェクトの作成 (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 オブジェクトと一致しなければなりません。

    <date type expression>

    [型] フィールドで、<data type expression> を、データ型として評価される式に置き換えます。以下に例を示します。

    • Stateflow 構造体を定義する Simulink.Bus オブジェクトの名前を入力します。

    • スコープが [出力] 以外の構造体の場合は、Stateflow type 演算子を使用して、別の構造体の型をコピーします。詳細については、type 演算子の呼び出しによる構造体の型の指定を参照してください。

たとえば、sf_bus_demo モデルでは、入力構造体 inbus と出力構造体 outbus は、Bus: COUNTERBUS という形式の型指定によって型を派生させます。

Model Explorer showing the specification for the data object inbus.

type 演算子の呼び出しによる構造体の型の指定

構造体の型を指定するには、Stateflow type 演算子を呼び出す式を使用できます。この演算子は、ある構造体の型を、Stateflow チャート内の別の構造体の型に設定します。たとえば、sf_bus_demo モデルでは、type 演算子式によって、ローカル構造体 counterbus_struct の型を、入力構造体 inbus の観点から指定します。いずれの構造体も、Simulink.Bus オブジェクト COUNTERBUS から定義されます。詳細については、他のデータ オブジェクトからのデータ型の派生を参照してください。

Model Explorer showing the specification for the data object counterbus_struct.

バーチャル バスと非バーチャル バス

Simulink モデルは、バーチャル バスと非バーチャル バスをサポートしています。非バーチャル バスは連続メモリに格納されたデータ構造体から入力を読み取ります。バーチャル バスは不連続メモリから入力を読み取ります。詳細については、合成インターフェイスのガイドライン (Simulink)を参照してください。

Stateflow チャートは非バーチャル バスのみをサポートします。Stateflow 入力構造体は、バーチャル バス信号を受け入れて、非バーチャル バス信号に変換できます。Stateflow 入力構造体は、バーチャル バス信号からプロパティを継承できません。チャートへの入力がバーチャル バスである場合は、[Bus: <object name>] の形式の型指定を使用して、入力構造体の [型] プロパティを設定します。

構造体のデバッグ

Stateflow 構造体をデバッグするには、[Stateflow ブレークポイントと監視ウィンドウ] を開いて、シミュレーション中の構造体フィールドの値を調べます。コマンド ラインで構造体フィールドの値を表示するには、ドット表記を使用して構造体にインデックスを設定します。詳細については、デバッグ中のデータおよびメッセージの検査と変更を参照してください。

構造体のデータ型のガイドライン

  • 構造体はそれぞれ、ベース ワークスペース内の Simulink.Bus オブジェクトから定義します。

  • 構造体が定数スコープをもつことはできません。

  • パラメーター スコープの構造体は調整可能でなければなりません。

参考

(Simulink)

関連するトピック