ドキュメンテーション

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

ルート レベルの入力端子へのバス データの読み込み

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

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

バス (バーチャル、非バーチャル、バス配列) データをバス オブジェクトで定義した最上位レベルの入力端子にインポートできます (Simulink.Bus を参照)。最上位の Inport ブロックで、[データ型][バス] に設定し、バス オブジェクトの名前を指定します。バス信号のデータ値を指定するには、次の構造体を使用します。

  • MATLAB® timeseries オブジェクト

  • MATLAB timetable オブジェクト

  • timeseries オブジェクトと timetable オブジェクトの組み合わせ

構造体のフィールドに含めないバス要素は、グラウンド値を使用します。空行列を使用して、グラウンド値を使用するように指定できます。

メモ

読み込む timetable データを指定するとき、timetable には 1 つの信号のみのデータを含めなければなりません。

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

  • 階層

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

  • データ型

  • 次元

  • 実数/複素数

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

構造体を Dataset オブジェクトの要素として含めることができます。構造体はコンマ区切りのリストで使用できます。コンマ区切りのリストには空の行列を指定できます。空の行列は、バス信号にグラウンド値を使用します。

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

in1, [], in3

メモ

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

バス信号の初期化

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

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

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

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

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

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

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

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 オブジェクト、MATLAB timetable オブジェクト、またはこれらのオブジェクトのタイプの組み合わせで構成できる入力構造体を作成します。グラウンド値を使用しないリーフ バス要素ごとに 1 つの timeseries または timetable オブジェクトを作成します。この例では b バス要素のグラウンド値を使用するため、この要素の timeseries または timetable オブジェクトは必要ありません。

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

    作成した 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
    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});

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

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

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

メモ

EnableTriggerFrom 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 に設定します。

参考

関連する例

詳細