ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink.Bus.createMATLABStruct

バス信号と同じ階層と属性を使用して MATLAB 構造体を作成

説明

structFromBus = Simulink.Bus.createMATLABStruct(busSource) は、busSource で指定されたバスと同じ階層や属性 (型や次元など) をもつ MATLAB® 構造体を作成します。結果として得られる構造体は、バス信号のグラウンド値を使用します。

structFromBus = Simulink.Bus.createMATLABStruct(busSource,partialValues) は、対応するバス信号のグラウンド値ではなく、partialValues で指定された値を使用する構造体を作成します。

structFromBus = Simulink.Bus.createMATLABStruct(busSource,partialValues,dims) は、指定された次元をもつ構造体を作成します。バス配列に対する構造体を作成するには、dims を使用します。

structsForBuses = Simulink.Bus.createMATLABStruct(portHandles) は、端子ハンドルで指定されたバス信号端子に対する構造体の cell 配列を作成します。結果として得られる構造体の cell 配列は、グラウンド値を使用します。複数のバス端子用の初期化構造体を作成するには、この構文を使用してください。この構文を使用すると、Simulink.Bus.createMATLABStruct を個別に呼び出して構造体を作成する場合に比べ、パフォーマンスが向上します。

structsForBuses = Simulink.Bus.createMATLABStruct(portHandles,partialStructures) は、グラウンド値ではなく partialStructures で指定された値を使用する構造体の cell 配列を作成します。

structsForBuses = Simulink.Bus.createMATLABStruct(busObjectNames) は、指定されたバス オブジェクトに基づく構造体の cell 配列を作成します。

すべて折りたたむ

モデル ex_bus_initial_conditions を開いてシミュレーションを実行します。

model = fullfile(matlabroot,'examples','simulink','ex_bus_initial_conditions');
open_system(model);
sim('ex_bus_initial_conditions')

ex_bus_initial_conditions モデルが読み込むバス オブジェクト Top を使って MATLAB 構造体を作成します。

mStruct = Simulink.Bus.createMATLABStruct('Top');

バス A のバス要素 A1 に対応する構造体 mStruct のフィールドに値を設定します。

mStruct.A.A1 = 3;
mStruct.A
ans = 

  struct with fields:

    A1: 3
    A2: [5x1 int8]

Simulink は、構造体内の他のフィールドを、対応するバス要素のグラウンド値に設定します。

Unit Delay ブロックの初期状態構造体として mStruct を使用することもできます。

信号要素が double 以外のデータ型を使用するバスに対して MATLAB 構造体を作成します。部分構造体を使用して要素のサブセットの初期化値を指定します。部分構造体を作成する場合は、フィールドのデータ型を対応する要素のデータ型と一致させます。

モデル ex_bus_initial_conditions を開いてシミュレーションを実行します。

open_system('ex_bus_initial_conditions')
sim('ex_bus_initial_conditions');

Constant5 というラベルの付いたブロックが生成する C1 信号要素は、データ型 int16 を使用します。

Top バス信号を生成する Bus Creator ブロック端子用の端子ハンドルを検出します。

ph = get_param('ex_bus_initial_conditions/TopBus','PortHandles');

TopBus ブロックによって作成されたバス信号の要素のサブセット値を指定する部分構造体を作成します。C.C1 フィールドの値を設定するには、型付き式を使用します。表現のデータ型をモデルの信号要素のデータ型 (int16) と一致させます。

PartialstructForK = struct('B',3,'C',struct('C1',int16(5)));

TopBus ブロックの端子ハンドル (ph) を使用して完全な構造体を作成します。C.C1 要素および B 要素のグラウンド値をオーバーライドします。

outPort = ph.Outport;
mStruct = Simulink.Bus.createMATLABStruct(outPort,PartialstructForK);

出力構造体のフィールド C.C1 は、引き続きデータ型 int16 を使用します。

モデル ex_bus_initial_conditions を開いてシミュレーションを実行します。

model = fullfile(matlabroot,'examples','simulink','ex_bus_initial_conditions');
open_system(model);
sim('ex_bus_initial_conditions')

TopBus ブロックによって作成されたバスのバス要素のサブセットに対して部分構造体を作成します。

PartialStructForK = struct('A',struct('A1',4),'B',3)
PartialStructForK = 

  struct with fields:

    A: [1x1 struct]
    B: 3

バス オブジェクト Top、部分構造体および結果として得られる構造体の次元を使用して、MATLAB 構造体を作成します。

structFromBus = Simulink.Bus.createMATLABStruct...
     ('Top',PartialStructForK,[2 3])
structFromBus = 

  2x3 struct array with fields:

    A
    B
    C

複数のバス端子用の初期化構造体を作成するには、Simulink.Bus.createMATLABStruct の引数として端子ハンドルを指定します。結果として得られる構造体の cell 配列は、グラウンド値を使用します。

モデル ex_two_outports_create_struct を開いてシミュレーションを実行します。

open_system('ex_two_outports_create_struct')
sim('ex_two_outports_create_struct');

Bus Creator ブロック (Bus1 および Bus2) に対する端子ハンドルを探します。

ph_1 = get_param...
     ('ex_two_outports_create_struct/Bus Creator','PortHandles');
ph_2 = get_param...
     ('ex_two_outports_create_struct/Bus Creator1','PortHandles');

端子ハンドルの配列を使用して MATLAB® 構造体を作成します。

mStruct = Simulink.Bus.createMATLABStruct([ph_1.Outport ph_2.Outport])
mStruct =

  2x1 cell array

    {1x1 struct}
    {1x1 struct}

バス信号に接続する端子に基づいて MATLAB 構造体を作成します。部分構造体を使用して、端子に接続するバスのバス要素のサブセットに値を指定します。

モデル ex_bus_initial_conditions を開いてシミュレーションを実行します。

model = fullfile(matlabroot,'examples','simulink','ex_bus_initial_conditions');
open_system(model);
sim('ex_bus_initial_conditions')

Top バス信号を生成する Bus Creator ブロック端子用の端子ハンドルを検出します。ハンドル Outport が必要です。

ph = get_param('ex_bus_initial_conditions/TopBus','PortHandles')
ph = 

  struct with fields:

      Inport: [29.0017 31.0017 41.0017]
     Outport: 44.0017
      Enable: []
     Trigger: []
       State: []
       LConn: []
       RConn: []
    Ifaction: []
       Reset: []

TopBus ブロックによって作成されたバス信号に対して部分構造体を作成します。部分構造体を使用して、バス要素のサブセットに値を指定できます。

PartialstructForK = struct('A',struct('A1',4),'B',3)
PartialstructForK = 

  struct with fields:

    A: [1x1 struct]
    B: 3

構造体フィールド Top.B および Top.A によって表されるバス要素は、バス階層で同じレベルです。この部分構造体を使用して、B および A のバス信号要素のグラウンド値をオーバーライドできます。

バス オブジェクトまたはバス端子から構造体を作成するときに、オプションの引数として部分構造体を使用できます。

TopBus ブロックの端子ハンドル (ph) を使用して MATLAB 構造体を作成します。A.A1 および B バス要素のグラウンド値をオーバーライドします。

outPort = ph.Outport;
mStruct = Simulink.Bus.createMATLABStruct(outPort,PartialstructForK)
mStruct = 

  struct with fields:

    A: [1x1 struct]
    B: 3
    C: [1x1 struct]

入力引数

すべて折りたたむ

MATLAB 構造体を作成するために使用するバス信号を表すソース。バス オブジェクトの名前または端子ハンドルとして指定。

  • dims 引数を使用する場合、busSource に対してバス オブジェクトを指定してください。

  • バス配列の信号の場合、端子ハンドルを使用できません。

  • バス オブジェクト名を使用する場合、そのバス オブジェクトは MATLAB のベース ワークスペース内になければなりません。バス オブジェクト名のデータ型は char です。

  • 端子ハンドルを使用する場合、createMATLABStruct メソッドを使用する前に、モデルを正常にコンパイルしなければなりません。端子ハンドルのデータ型は double です。

例: structFromBus = Simulink.Bus.createMATLABStruct('myBusObject')

例: structForPortHandle = Simulink.Bus.createMATLABStruct(port_handle_1)

結果として得られる構造体のリーフ ノードのサブセットに対する値。部分構造体または空の配列で指定。部分構造体で指定する各フィールドは、対応するバス要素のデータ属性と完全に一致しなくてはなりません。詳細については、初期化用の部分構造体の作成を参照してください。

dims 引数を使用し、なおかつ結果として得られる構造体のすべてのノードに対してグラウンド値を使用する場合は、空の行列 [] を使用してください。

データ型: struct

結果として得られる構造体の次元。ベクトルとして指定。

各次元要素は 1 以上の整数でなければなりません。partialValues を指定した場合、dims で指定される各次元要素は、部分構造体において対応する次元要素以上の値でなければなりません。

グラウンド値を使用するには、partialValues で空の行列 ([]) を指定します。

データ型: double

バス信号端子のハンドル。配列として指定。partialStructures 引数を使用する場合、portHandles で指定する端子ハンドルの数は、部分構造体の数と同じでなければなりません。

データ型: double

cell 配列として指定する部分構造体。portHandles で指定する端子ハンドルの数は、部分構造体の数と同じでなければなりません。

データ型: cell

cell 配列として指定するバス オブジェクト名。

データ型: cell

出力引数

すべて折りたたむ

バス信号の階層および属性。MATLAB 構造体として返される。

structFromBus の次元は、入力引数により異なります。

  • busSource のみを指定した場合、次元は 1 になります。

  • partialValues も指定した場合、partialValues で指定される次元になります。

  • dims 引数を指定した場合、dims で指定される次元になります。

バス信号と同じ階層と属性をもつ構造体は、端子ハンドルの配列で指定したバス信号と同じ階層と属性をもつデータの構造体の cell 配列として返されます。この構造体の cell 配列は、バス信号のグラウンド値を使用します。

StructsForBuses の次元は、入力引数により異なります。

  • portHandles のみを指定した場合、次元は 1 になります。

  • partialStructures も指定した場合、partialStructures で指定される次元になります。

ヒント

  • 同じモデルに対して関数 Simulink.Bus.createMATLABStruct を繰り返し使用する場合は (スクリプト内のループなど)、モデルの複数コンパイルを回避するとパフォーマンスを向上できます。速度を向上させるには、関数を複数回使用する前にモデルをコンパイル状態にします。たとえば、vdp モデルをコンパイル状態にするには、次のコマンドを使用します。

    [sys,x0,str,ts] = vdp([],[],[],'compile')

    MATLAB 構造体の作成後にコンパイルを終了します。次に例を示します。

    vdp([],[],[],'term')
  • バス エディターを使用して、関数 Simulink.Bus.createMATLABStruct を実行できます。次のいずれかの方法を使用します。

    • [ファイル][MATLAB 構造体の作成] メニュー項目を選択します。

    • MATLAB 構造体を作成するバス オブジェクトを選択します。その後、ツール バーで [MATLAB 構造体の作成] ボタン () をクリックします。

    この MATLAB 構造体を MATLAB エディターで編集し、この構造体の値を作成したり更新するためのコードを評価できます。

  • 関数 Simulink.Bus.createMATLABStruct を使用して、参照モデルの出力の初期値を指定できます。詳細は、「モデル参照によるデータ管理の詳細ワークフロー」例の「参照モデル: バス出力の初期値の設定」の節を参照してください。

R2010a で導入