ドキュメンテーション

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

最上位の入力端子へのバス データのインポート

[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターでデータを手動で指定するか、ルート Inport マッピング ツールを使用することで、バス データを最上位の入力端子にインポートできます。ルート Inport マッピング ツールを使用したバス データのインポートの詳細については、バス データのインポートを参照してください。

インポートされたバス データの要件

最上位の入力端子にバス データをインポートするには、MATLAB® timeseries オブジェクトの構造体を使用します。timeseries オブジェクトは、値を指定するバス要素を表します。構造体のフィールドに含めないバス要素は、グラウンド値を使用します。timeseries オブジェクトの構造体を Dataset オブジェクトの要素として含めることができます。

最上位の Inport ブロックで、[データ型][バス] に設定し、バス オブジェクトの名前を指定します。

バス オブジェクトによって定義される最上位の入力端子 (Simulink.Bus を参照) は、データを Simulink.SimulationData.Dataset オブジェクトから、もしくは MATLAB timeseries オブジェクトの構造体からインポートできます。Dataset オブジェクトまたは構造体は、値を指定するバス要素を表します。構造体のフィールドに含めないバス要素は、グラウンド値を使用します。

MATLAB timeseries オブジェクトの構造体は、以下についてバス要素と一致しなければなりません。

  • 階層

  • 構造体の名前は、バス要素名と一致しなければなりません。timeseries オブジェクトのname プロパティは、バス要素名と一致する必要はありません。

  • データ型 (調整可能なパラメーターの場合)

  • 次元

  • 実数/複素数

構造体フィールドの順序は、バス要素の順序と一致する必要はありません。

コンマ区切りのリストには空の行列を指定できます。空の行列は、バス信号にグラウンド値を使用します。

たとえば、入力端子 in1 および in3 のデータを読み込み、端子 in2 にグラウンド値を使用して、[入力] パラメーターに次を入力します。

in1, [], in3

    メモ:   複数のルート Inport ブロックをもつモデル内の 1 つのルート Inport ブロックに MATLAB timeseries オブジェクトの構造体を使用する場合、すべてのルート Inport ブロックは MATLAB timeseries オブジェクトを使用しなければなりません。Simulink.TsArray オブジェクトまたは Simulink.Timeseries オブジェクトを使用するルート Inport ブロック データはすべて MATLAB timeseries オブジェクトに変換してください。

バス信号の初期化

初期化データの部分仕様の使用を含む、バス信号を初期化できます。詳細は、「バス信号の初期条件の指定」を参照してください。

バス データの配列をルートの Import ブロックにインポートする場合の詳細は、バス データの配列のインポートを参照してください。

最上位の入力へのバス データのインポートの制限

ルート Inport マッピング ツールを使用した最上位の Inport ブロックへのインポートおよびマッピングを行う信号データには、バス データを含めることができます。このツールを使用して、バス信号を最上位の Enable ブロックまたは Trigger ブロックにマッピングすることはできません。

エクスターナル モードで入力端子を使用してバスをインポートすることはできません。ラピッド アクセラレータ モードでバス データをインポートするには、Dataset 形式を使用します。

最上位の Inport へのバス データのインポート

このモデルには、Scope ブロックに接続された Inport ブロックが 2 つあります。In1 ブロックのデータ型は継承 (非バス データ) であり、In2 ブロックのデータ型はバス オブジェクト BusObject によって定義されます。モデルには BusObject を読み込むコールバックがあります。

BusObject バス オブジェクトには以下の 2 つの要素があります。

  • c

  • s1、これは次の 2 つの要素をもつサブバスです。

    • a

    • b

  1. model を開きます。

  2. 非バス データをインポートするための、In1 の MATLAB timeseries オブジェクトを作成します。

    以下に例を示します。

    t1 = (1:10)';
    d1 = sin(t1);
    in1 = timeseries(d1,t1);
  3. MATLAB timeseries オブジェクトの構造体を作成します。グラウンドの値を使用しないリーフ バス要素ごとに 1 つの timeseries オブジェクトの構造体を作成します。この例では b バス要素のグラウンド値を使用するため、この要素の timeseries オブジェクトは必要ありません。

    t2 = (1:5)';
    d2 = cos(t2);
    in2.c = timeseries(d1,t1);
    in2.s1.a = timeseries(d2,t2);

    作成した MATLAB timeseries オブジェクトは、インポートされたバス データの要件で説明されているように、対応するバス要素と一致しなければなりません。

  4. Dataset オブジェクトを作成し、in1 および in2 をデータセットに追加します。

    ds = Simulink.SimulationData.Dataset;
    ds = ds.addElement(in1,'in1_signal');
    ds = ds.addElement(in2,'in2_signal');
  5. [コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターのエディット ボックスに、Dataset オブジェクト ds を入力します。

  6. モデルのシミュレーションを実行します。In2 に接続された Scope ブロックは、インポートされたバス データを表示します。

バス オブジェクトの情報の取得

バスから timeseries オブジェクトの構造体を作成するために必要な MATLAB timeseries オブジェクトの数とデータ型、実数/複素数、次元を判断するには、以下のメソッドを使用します。

  • Simulink.Bus.getNumLeafBusElements

  • Simulink.Bus.getLeafBusElements

たとえば、バス オブジェクト BusObject の場合、以下のようにします。

num_el = BusObject.getNumLeafBusElements
num_el =

     3
el_list = BusObject.getLeafBusElements
el_list = 

  3x1 BusElement array with properties:

    Min
    Max
    DimensionsMode
    SamplingMode
    SampleTime
    Description
    Units
    Name
    DataType
    Complexity
    Dimensions
el_list(1).Dimensions
ans =

     1

Timeseries オブジェクトの構造体のバスからの作成

定義された timeseries オブジェクトがある場合、これを使用して、バス オブジェクトに基づいて timeseries オブジェクトの構造体を作成できます。関数 Simulink.SimulationData.createStructOfTimeseries を使用します。たとえば、timeseries オブジェクト ts1ts2 および ts3 を定義して、バス オブジェクト MyBusObject を定義している場合、次のコマンドを使用して、timeseries オブジェクトの構造体を作成できます。

input = Simulink.SimulationData.createStructOfTimeseries('MyBusObject',...
{ts1,ts2,ts3});

セル配列内の timeseries オブジェクトの数は、バス オブジェクト内のリーフ要素の数と一致しなければなりません。各 timeseries オブジェクトのデータ型、次元および実数/複素数は、対応するバス オブジェクトのリーフ ノードの各属性と一致しなければなりません。

バス データの配列のインポート

ルート Inport ブロックを使用してバス データの配列をインポート (読み込み) するには、MATLAB timeseries オブジェクトの構造体の配列を使用します。

    メモ:   Enable、Trigger、From Workspace または From File の各ブロックを使用して、バス データの配列をインポートすることはできません。

データのフル仕様

以前のシミュレーションで取得したバス信号の配列のログ データを後続のシミュレーション実行でルートレベルの Inport へのラウンド トリップ入力として使用できます。ログ データは、Inport ブロックのデータのフル仕様に該当します。

MATLAB timeseries オブジェクトの構造体の配列を作成して、インポートするデータを完全に指定する場合、以下のようにします。

  • バス信号内の信号と同じ順序で構造体のフィールドを指定してください。

  • バス内の信号よりも多くのフィールドを構造体に含めないでください。

    リーフ フィールドについては、バス内の対応する信号のデータ型、次元および複雑度と正確に一致させてください。

データの部分的仕様

バスの配列の部分データを指定するには、リーフ ノードで MATLAB timeseries オブジェクトを使用して構造体の MATLAB 配列を作成します。

部分データを指定する目的で作成する構造体は、以下のルールに従わなければなりません。

  • リーフ ノードやサブ分岐など、フィールドを省略できます。次元も省略できます。フィールドを指定しない場合、Simulink® はそのフィールドのグラウンド値を使用します。

  • サブバス ノードについては、バスの配列の対応するノードの次元以下に各フィールドの次元を設定します。

この例は、データ型がバス オブジェクト MyBus として定義されたルート Inport ブロックを使用して、インポート対象の部分データを指定する方法を示します。モデル (ex_partial_loading_aob_model) と、インポートするデータを定義する MATLAB コード (ex_partial_loading_aob_data.m) を開くことができます。

ex_partial_loading_aob_model のシミュレーションを実行すると、以下が表示されます。

input Inport ブロックは、MyBus バス オブジェクトをデータ型として使用します。

バスの MyBus 配列には、MyBus(1)MyBus(2) が含まれます。バスの配列に含まれる 2 つのバスを反映するため、端子の次元は 2 に設定されて、[非バーチャル バスとして出力] が有効になります。

MyBus(1)MyBus(2) を含む、バスの配列の要素を以下に示します。強調色は、データがインポートされるバスの配列のノードを強調表示します。

インポートするデータを定義する MATLAB コードを以下に示します。コードを強調表示する色は、バスの配列の対応するノードの色と一致します。このモデルで使用されたコードを表示するには、MATLAB コード ファイル ex_partial_loading_aob_data.m を開きます。

インポート データを定義するコードは、以下のように規定されます。

  • timeseries オブジェクト MyBusValue は、強調表示されたノードのデータを指定します。

  • MyBus(2)timeseries オブジェクト BT は、BT がリーフ ノードに該当するので、対応するバス要素の次元、データ型および複雑度と正確に一致しなければなりません。

  • 構造体は、Y(2) のデータを指定します。Y の最初のサブバスと最後のサブバス (つまり、Y(1)Y(3)) は省略できます。

この例では、Y(2) のデータを指定します。Y の最初のサブバスと最後のサブバス (つまり、Y(1)Y(3)) は省略できます。

インポート データの MyBusValue 変数を指定したら、[コンフィギュレーション パラメーター][データのインポート/エクスポート][入力] パラメーターを MyBusValue に設定します。

参考

関連する例

詳細

この情報は役に立ちましたか?