メインコンテンツ

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

バス信号へのアクセス

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

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

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

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

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

Stateflow バスの例

この例では、Stateflow チャートが入力 inbus を使用してバス入力信号を Simulink から受信し、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 オブジェクトと一致しなければなりません。

    <data type expression>

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

Stateflow バスの初期化

Stateflow バスをデータ オブジェクトとして定義した後、ステートまたは遷移でデータ オブジェクトに値を代入できます。あるいは、プロパティ インスペクターから以下のいずれかの方法でデータ オブジェクトを初期化できます。

  • struct 関数を使用して初期値を直接代入する。

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

初期値を直接代入する

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

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

    Setting the 'Initial value' field in the Property Inspector.

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

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

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

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

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

    変数とバスが名前を共有する場合、初期値の入力はオプションです。バスで変数名が推定されます。

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

制限

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

  • HDL コード生成を使用するモデル内のバス

  • [初期値] フィールドが 0 またはフィールドのない構造体のいずれかに設定されているバス

  • スコープが InputConstantParameter、または Data Store Memory のバス

  • 制限なしのバスまたは string を含むバス

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

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

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

バスのデバッグ

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

参考

(Simulink)

トピック