非バーチャル バスの作成
非バーチャル バスは C コードの struct に似ています。非バーチャル バスは次の目的で使用します。
バス配列の構成。
バス データが MATLAB® Function ブロックまたは Stateflow® チャートの境界を越えるように設定。
バス データを生成された C コードの構造体としてパッケージ化。
S-Function を介した外部コードとのインターフェイス接続。
生成コードのサブコンポーネントに渡される関数の引数の数を削減。
Simulink.Bus
オブジェクト データ型では、非バーチャルにするバスを定義しなければなりません。[非バーチャル バスとして出力] などのブロック パラメーターを選択すると、バスは非バーチャルになります。バスを非バーチャルにすると、シミュレーションとコード生成で Bus
オブジェクトによって定義された構造体が適用されます。バスがバーチャルな場合、Bus
オブジェクトはバスのプロパティのみを検証します。
非バーチャル バスを含むモデルをシミュレーションするには、参照 Bus
オブジェクトがベース ワークスペースまたはモデルで使用されるデータ ディクショナリになければなりません。詳細については、Simulink.Bus オブジェクト データ型でのバス プロパティの指定を参照してください。
非バーチャル バスでは、バスの要素がすべて同じサンプル時間をもつことも必要です。詳細については、非バーチャル バスのサンプル時間の変更を参照してください。
非バーチャル バスを作成する方法は、バスの場所と、バスを作成するブロックによって異なります。
基本ステップに集中するために、これらの例はシンプルです。ただし、バスは、多くの信号を結合する場合に最も役立ちます。
非バーチャル バスのコンポーネント内での作成
Bus Creator ブロックを使用して、非バーチャル バスをコンポーネント内に作成できます。
モデル例を開いてコンパイルします。このモデル例では Bus Creator ブロックを使用してバーチャル バスの階層を作成します。モデルをコンパイルするには、Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックします。モデルをコンパイルするとライン スタイルが更新されます。このライン スタイルは、バスを視覚的に識別するのに使用できます。
このモデルの作成については、コンポーネント内の信号線のグループ化を参照してください。
このモデルのバーチャル バスは Simulink.Bus
オブジェクトで定義されていません。Bus Creator ブロックの出力を非バーチャル バスに変更するには、バスの階層と一致する Bus
オブジェクトがなければなりません。
TopBus
および NestedBus
に対応する Bus
オブジェクトを作成するには、関数Simulink.Bus.createObject
を使用します。MATLAB コマンド ウィンドウで次を入力します。
Simulink.Bus.createObject('NonvirtualBusCreationModel',... 'NonvirtualBusCreationModel/Bus Creator1');
この関数は、指定されたブロックの出力バスに対応する Bus
オブジェクトを作成します。入れ子にされたバスが出力バスに含まれている場合、関数は入れ子にされたバスに対応する Bus
オブジェクトも作成します。この例では、関数は対応するバス TopBus
と NestedBus
の名前が付いた 2 つの Bus
オブジェクトを作成します。
Bus
オブジェクトを表示するには、[型エディター] を開きます。MATLAB コマンド ウィンドウで次を入力します。
typeeditor
作成する非バーチャル バスに対応する Bus
オブジェクトができたので、非バーチャル バスを作成します。Simulink エディターで、Bus Creator1 という名前の Bus Creator ブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスで、[出力データ型] を Bus: TopBus
に設定し、[非バーチャル バスとして出力] チェック ボックスをオンにして [OK] をクリックします。TopBus
は非バーチャル バスになりますが、NestedBus
はバーチャル バスのままです。ライン スタイルで非バーチャル バスを特定するには、モデルをコンパイルします。
Bus Creator
という名前のブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスで、[出力データ型] を Bus: NestedBus
に設定し、[非バーチャル バスとして出力] チェック ボックスをオンにして [OK] をクリックします。NestedBus
は非バーチャル バスになりました。バスのライン スタイルを更新するには、モデルをコンパイルします。
Bus
オブジェクトを保存しない場合、そのモデルを再度開くときに、Bus
オブジェクトを再作成しなければなりません。Bus
オブジェクトを保存する方法の詳細については、Simulink.Bus オブジェクト データ型でのバス プロパティの指定を参照してください。
インターフェイスでの非バーチャル バスの作成
インターフェイスで非バーチャル バスを作成するには、バスの要素を Out Bus Element ブロックに接続し、出力バスが非バーチャルであると指定します。
モデル例を開きます。このモデル例では 3 つのOut Bus Elementブロックを使用して、出力端子でバーチャル バス OutBus
を作成します。
このモデルの作成については、複数の出力信号を 1 つの端子に接続を参照してください。
非バーチャル バスは
オブジェクト データ型でなければなりません。出力バスに対応する Simulink.Bus
Bus
オブジェクトを作成します。
Simulink ツールストリップの [モデル化] タブの [設計] ギャラリーで、[型エディター] を選択します。
Type Editorで 2 つの
Bus
オブジェクトを作成します。ツールストリップで [バス] を 2 回クリックします。Bus
オブジェクトに名前を付けます。Bus
オブジェクトの 1 つを選択し、[名前] をOutBus
に設定します。もう 1 つのBus
オブジェクトを選択し、[名前] をNestedBus
に設定します。それぞれの
Bus
オブジェクトについて、バスの要素に対応する
オブジェクトを作成します。Simulink.BusElement
NestedBus
を選択してから、ツールストリップで [バス要素] を 2 回クリックします。要素Sine
および要素Step
に名前を付けます。OutBus
を選択してから、[バス要素] を 2 回クリックします。要素Chirp
および要素NestedBus
に名前を付けます。任意の入れ子にされたバスに対して
Bus
オブジェクト データ型を指定します。NestedBus
オブジェクトを選択した状態で、[データ型] をBus: NestedBus
に設定します。
非バーチャル バスを出力するには、Bus
オブジェクト データ型とバスの仮想性を指定します。
Out Bus Element ブロックの 1 つをダブルクリックして、端子のダイアログ ボックスを開きます。
ダイアログ ボックスのツリー階層で、
OutBus
の上にマウスをポイントし、OutBus
の隣に表示される鉛筆アイコンをクリックします。Bus
オブジェクト データ型を指定します。[データ型] をBus: OutBus
に設定します。ダイアログ ボックスのツリー階層で、
OutBus
の隣に表示される信号の属性をクリックします。バスの仮想性を指定します。[バスの仮想性] を
nonvirtual
に設定し、ダイアログ ボックスを閉じます。
モデルの出力は非バーチャル バスです。非バーチャル バスを確認するには、別のモデル内のモデルを参照するか、Out Bus Element ブロックをサブシステムに移動します。モデルをコンパイルするとライン スタイルが更新されます。モデルをコンパイルするには、Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックします。
Bus
オブジェクトを保存しない場合、そのモデルを再度開くときに、Bus
オブジェクトを再作成しなければなりません。Bus
オブジェクトを保存する方法の詳細については、Simulink.Bus オブジェクト データ型でのバス プロパティの指定を参照してください。
ルート (最上位) のInportブロックとOutportブロックでも、インターフェイスに非バーチャル バスを作成できます。バスの仮想性を指定するには次のようにします。
ルートの Inport ブロックについて、ダイアログ ボックスの [信号属性] タブで [非バーチャル バスとして出力] を選択します。
ルートの Outport ブロックについて、ダイアログ ボックスの [信号属性] タブで [親モデル内の非バーチャル バスとして出力] を選択します。
In Bus Elementブロックは [バスの仮想性] パラメーターを使用して、ブロックがバスの仮想性を継承するか、または定義するかを決定します。ブロックがバスの仮想性を定義し、入力バスの仮想性が一致しない場合、モデルをコンパイルするとエラーが発生します。
バーチャル バスの非バーチャル バスへの変換
Signal Conversionブロックを使用して、モデル内の任意の場所でバーチャル バスを非バーチャル バスに変換できます。
モデル例を開いてコンパイルします。このモデル例には、Bus Creator ブロックによって作成されたバーチャル バス階層が含まれています。モデルをコンパイルするには、Simulink ツールストリップの [モデル化] タブで、[モデルの更新] または [実行] をクリックします。モデルをコンパイルするとライン スタイルが更新されます。このライン スタイルは、バスを視覚的に識別するのに使用できます。
バスを定義して非バーチャル バスへの変換をサポートするため、Bus Creator ブロックは Simulink.Bus
オブジェクト データ型を指定します。モデルが読み込まれるときにベース ワークスペースで Bus
オブジェクトを作成するために、モデルは PreLoadFcn
コールバックを使用します。
コールバックを表示するには、Simulink ツールストリップの [モデル化] タブで [モデル設定]、[モデル プロパティ] をクリックします。[モデル プロパティ] ダイアログ ボックスで [コールバック] タブを開き、PreLoadFcn モデル コールバックを選択します。
バーチャル バスを非バーチャル バスに変換するには To Nonvirtual Bus ブロックを使用します。このブロックは、[出力] が Nonvirtual bus
に設定されている、事前構成されたバージョンのSignal Conversionブロックです。
モデル例で次のようにします。
モデルに To Nonvirtual Bus ブロックを追加します。
Bus Creator1 ブロックと Scope ブロックの間のライン上に To Nonvirtual Bus ブロックをドラッグします。ライン上にブロックをドラッグすると、ブロックの両端がラインに接続されます。
変換するバスのデータ型が Bus
オブジェクトによって指定されていないとします。次の追加のアクションを実行する必要が生じます。
対応する
Bus
オブジェクトの作成。バスに対する
Bus
オブジェクト データ型の指定。たとえば、To Nonvirtual Bus ブロックの [データ型] パラメーターを、入力バスに対応するBus
オブジェクトに設定するなどです。
To Nonvirtual Bus ブロックへの入力はバーチャル バスであり、出力は非バーチャル バスです。非バーチャル バスのライン スタイルを確認するには、モデルをコンパイルします。
MATLAB 構造体からの非バーチャル バスの作成
Constant ブロックを使用して、定数値の要素をもつ非バーチャル バスを簡潔に表すことができます。
Constant ブロックで次のように指定します。
[定数値] に MATLAB 構造体。
[出力データ型] として
Simulink.Bus
オブジェクト。
出力データ型が Bus
オブジェクトの場合にのみ、Constant ブロックで MATLAB 構造体がサポートされます。
たとえば、Offset
、Gain
、および Threshold
という名前の要素をもつ const_param_struct
という名前の MATLAB 構造体を定義します。
const_param_struct.Offset = 197; const_param_struct.Gain = 4.32; const_param_struct.Threshold = 795.68;
対応する Bus
オブジェクト データ型を定義します。
Simulink.Bus.createObject(const_param_struct)
新しい Bus
オブジェクトは既定の名前 slBus1
を使用します。
[定数値] が const_param_struct
に、[出力データ型] が Bus: slBus1
に設定された Constant ブロックを含むモデル例を開いてシミュレーションします。
open_system('NonvirtualBusFromStructModel') sim('NonvirtualBusFromStructModel');
Constant ブロックの出力は非バーチャル バスです。