このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 ブロックに接続します。inbus
も outbus
も、Simulink.Bus
オブジェクト COUNTERBUS
から型を派生させます。この例の詳細については、Stateflow チャートのカスタム構造体の統合を参照してください。
Stateflow 構造体データ型の要素は "フィールド" と呼ばれます。個別の信号、多重化信号、ベクトル、および他の構造体 ("サブ構造体" とも呼ばれる) を自由に組み合わせてフィールドを作成できます。各フィールドが独自のデータ型をもちます。データ型は、構造体の他のフィールドの型と一致する必要はありません。たとえば、このモデルの構造体 inbus
と構造体 outbus
は、それぞれ次の 2 つのフィールドをもっています。
inputsignal
は、1 つのフィールドinput
をもつサブ構造体です。limits
は、2 つのフィールドupper_saturation_limit
とlower_saturation_limit
をもつサブ構造体です。
Stateflow 構造体の定義
構造体のデータ型を定義するには、Simulink バス オブジェクトの作成 (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
オブジェクトと一致しなければなりません。<date type expression>
[型] フィールドで、
<data type expression>
を、データ型になる式に置き換えます。以下に例を示します。Stateflow 構造体を定義する
Simulink.Bus
オブジェクトの名前を入力します。スコープが
[出力]
以外の構造体の場合は、Stateflowtype
演算子を使用して、別の構造体の型をコピーします。詳細については、type 演算子の呼び出しによる構造体の型の指定を参照してください。
たとえば、sf_bus_demo
モデルでは、入力構造体 inbus
と出力構造体 outbus
は、Bus: COUNTERBUS
という形式の型指定によって型を派生させます。
type
演算子の呼び出しによる構造体の型の指定
構造体の型を指定するには、Stateflow type
演算子を呼び出す式を使用できます。この演算子は、ある構造体の型を、Stateflow チャート内の別の構造体の型に設定します。たとえば、sf_bus_demo
モデルでは、type
演算子式によって、ローカル構造体 counterbus_struct
の型を、入力構造体 inbus
の観点から指定します。いずれの構造体も、Simulink.Bus
オブジェクト COUNTERBUS
から定義されます。詳細については、他のデータ オブジェクトからのデータ型の派生を参照してください。
バーチャル バスと非バーチャル バス
Simulink モデルは、バーチャル バスと非バーチャル バスをサポートしています。非バーチャル バスは連続メモリに格納されたデータ構造体から入力を読み取ります。バーチャル バスは不連続メモリから入力を読み取ります。詳細については、合成インターフェイスのガイドライン (Simulink)を参照してください。
Stateflow チャートは非バーチャル バスのみをサポートします。Stateflow 入力構造体は、バーチャル バス信号を受け入れて、非バーチャル バス信号に変換できます。Stateflow 入力構造体は、バーチャル バス信号からプロパティを継承できません。チャートへの入力がバーチャル バスである場合は、[Bus:
の形式の型指定を使用して、入力構造体の [型] プロパティを設定します。<object name>
]
構造体のデバッグ
Stateflow 構造体をデバッグするには、[Stateflow ブレークポイントと監視ウィンドウ] を開いて、シミュレーション中の構造体フィールドの値を調べます。コマンド ラインで構造体フィールドの値を表示するには、ドット表記を使用して構造体にインデックスを設定します。詳細については、デバッグ中のデータおよびメッセージの検査と変更を参照してください。
構造体のデータ型のガイドライン
構造体はそれぞれ、ベース ワークスペース内の
Simulink.Bus
オブジェクトから定義します。構造体が定数スコープをもつことはできません。
パラメーター スコープの構造体は調整可能でなければなりません。
カスタム コードのバス制限
カスタム コードで定義されたバスに多次元配列が含まれている場合、そのバスをインポートすることはできません。
多次元配列を含むバスをカスタム コードで使用するには、Stateflow でバスを定義し、そのバスをカスタム コードに渡します。
カスタム コードでバスを定義して渡す方法の詳細については、Stateflow チャートのカスタム構造体の統合を参照してください。
参考
Simulink.Bus
(Simulink)