Main Content

In Bus Element ブロックを使用したバスの入力データの読み込み

この例では、In Bus Element ブロックを使用してバス要素の外部入力データを読み込む方法を示します。In Bus Element ブロックを使用すると、バスの外部インターフェイスの柔軟な設計と実装が可能になります。

  • In Bus Element ブロックは、バスの要素に対するデータを読み込むことも、バス全体に対するデータを読み込むこともできます。

  • ブロックがバス全体のデータを読み込む場合を除き、Simulink.Bus オブジェクトを使用して In Bus Element ブロックのデータ型を指定する必要はありません。

  • 複数の In Bus Element ブロックで同じバス要素を選択できます。

  • モデルで必要なバスの要素のみを読み込むことができます。未使用の要素を選択するためにブロックを追加する必要はありません。

  • 指定する外部入力データには、バスのすべての要素のデータ、またはバスの一部の要素のみのデータを含めることができます。

モデルを開いて検査

モデル LoadInBusElement を開きます。モデルには、3 つの In Bus Element ブロックを使用して定義されている InBus という名前の 1 つの端子があります。各 In Bus Element ブロックは Display ブロックに接続されます。In Bus Element ブロックと Display ブロックの各ペアの下にある Dashboard Scope ブロックは、In Bus Element ブロックが読み込まれたデータから作成した信号をプロットします。

mdl = "LoadInBusElement";
open_system(mdl)

The model LoadInBusElement.

各 In Bus Element ブロックのラベルは、ブロックが選択した端子とバス要素の名前を示しています。モデル内の In Bus Element ブロックには、左から右に次のラベルが付いています。

  • InBus.a.x — このブロックは、InBus という名前の端子に関連付けられたバス内に入れ子にされた a という名前のバスから、x という名前のリーフ要素を選択します。

  • InBus.a.y — このブロックは、InBus という名前の端子に関連付けられたバス内に入れ子にされた a という名前のバスから、y という名前のリーフ要素を選択します。

  • InBus.b — このブロックは、InBus という名前の端子に関連付けられたバス内の b という名前のリーフ要素を選択します。

モデルの [入力] パラメーターは、シミュレーション中に読み込む最上位の入力端子用の外部入力データを指定します。モデル ex_load_inbuselement[入力] パラメーターの現在の値を確認するには、以下のようにします。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。Simulink® ツールストリップの [モデル化] タブで [モデル設定] をクリックします。

  2. [データのインポート/エクスポート] ペインで、[入力] パラメーターが選択されていて、inbusdata という名前の変数からデータを読み込むように構成されていることを確認します。

変数 inbusdata は、[In Bus Element] ダイアログ ボックスで定義された [端子番号] に従って、InBus という名前の端子にマッピングされます。

あるいは、関数 get_param を使用して、LoadExternalInput および ExternalInputData パラメーターの値を確認することにより、プログラムによってモデル コンフィギュレーションを確認します。

get_param(mdl,"LoadExternalInput")
ans = 
'on'
get_param(mdl,"ExternalInput")
ans = 
'inbusdata'

バス用の外部入力データの作成

バスの階層および要素名に一致する階層およびフィールド名をもつ構造体としてバスの外部入力データを指定します。各リーフ要素のデータを timeseries オブジェクト、1 列のみにデータを含む timetable、または matlab.io.datastore.SimulationDatastore オブジェクトとして指定します。この例では、バス要素ごとに timetable を使用して構造体を作成します。

ステップ サイズ 1 で、0 から始まり 10 で終わる時間値の列ベクトルを作成します。

t = (0:10)';

時間ベクトルを使用して、正弦波、定数、および直線を表すデータを作成します。

sinedata = sin(t);
constdata = 3*ones(11,1);
linedata = linspace(0,10,11)';

timetable を作成するには、指定する入力値が duration ベクトルでなければなりません。関数 seconds を使用して、時間ベクトルを秒単位の duration ベクトルに変換します。

t = seconds(t);

各信号タイプのデータを格納する timetable オブジェクトを作成します。

sine = timetable(t,sinedata);
const = timetable(t,constdata);
line = timetable(t,linedata);

モデルの端子に入力データを提供する構造体 inbusdata を作成します。構造体フィールドの名前はバス要素の名前と一致していなければなりません。

inbusdata.a.x = const;
inbusdata.a.y = line;
inbusdata.b = sine;

入力データの完全指定

構造体 inbusdata のデータは、モデルの In Bus Element ブロックで選択された信号のデータを完全に指定します。この構造体には次のデータが含まれます。

  • バスの既知のすべての要素

  • モデル内の In Bus Element ブロックによって選択されたすべての要素

モデルをシミュレートし、Dashboard Scope ブロックで信号を観察します。Simulink ツールストリップの [シミュレーション] タブで [実行] をクリックします。

あるいは、関数 sim を使用してシミュレーションを実行します。

out = sim(mdl);

The Dashboard Scope blocks in the model display the In Bus Element block output signals from the simulation.

Dashboard Scope ブロックのプロットは、各 In Bus Element ブロックが構造体 inbusdata で指定されたデータと一致する信号をモデルで生成していることを示しています。

  • 一番左の In Bus Element ブロックは、x という名前の要素を選択し、値 3 の定数信号を生成しています。

  • 中央の In Bus Element ブロックは、y という名前の要素を選択し、直線を形成する値をもつ信号を生成しています。

  • 一番右の In Bus Element ブロックは、b という名前の要素を選択し、正弦波信号を生成しています。

入力データの部分指定

In Bus Element ブロックを使用してバス要素を選択する際に、バスの外部入力データを "部分的に指定" できます。構造体に次の信号が含まれていない場合、構造体はバスの入力データを部分的に指定します。

  • バス内のすべての要素

  • モデル内の In Bus Element ブロックによって選択されたすべての要素

In Bus Element ブロックは、構造内にデータをもたない、シミュレーションで選択された要素全体を通じてグラウンド値を生成します。

たとえば、要素 a.y を選択する In Bus Element ブロックのラベルを編集し、そのブロックで要素 a.z が選択されるようにします。あるいは、関数 set_param を使用して、選択する要素を指定します。

blkpth = mdl + "/Bus Element In1";
set_param(blkpth,Element="a.z")

構造体を変更せずにモデルをシミュレーションします。InBus という名前の端子にマッピングされる構造体には、a という名前の入れ子にされたバス内の z という名前の要素のデータが含まれていないため、この構造体はモデルのデータを部分的に指定します。

out = sim(mdl);

The Dashboard Scope blocks in the model display the In Bus Element block output signals from the simulation.

Dashboard Scope ブロックのプロットは以下を示しています。

  • 一番左の In Bus Element ブロックは、x という名前の要素を選択し、値 3 の定数信号を生成しています。

  • 中央の In Bus Element ブロックは、z という名前の要素を選択し、グラウンド値 (この場合は値 0 の定数信号) を生成しています。

  • 一番右の In Bus Element ブロックは、b という名前の要素を選択し、正弦波信号を生成しています。

要素 a.z を選択する In Bus Element ブロックへの変更を元に戻し、そのブロックで要素 a.y が選択されるようにします。

set_param(blkpth,Element="a.y")

入力データの過剰指定

In Bus Element ブロックを使用してバス要素を選択する際に、バスの外部入力データを "過剰指定" できます。最上位の入力端子に関連付けられた In Bus Element ブロックが選択しないバス要素のデータが構造体に含まれている場合、構造体はバスの入力データを過剰指定します。

たとえば、要素 a.y を選択する In Bus Element ブロックのラベルを編集し、そのブロックで要素 b が選択されるようにします。あるいは、関数 set_param を使用して、選択する要素を指定します。

set_param(blkpth,Element="b")

構造体を変更せずにモデルをシミュレーションします。InBus という名前の端子にマッピングされる構造体は、どの In Bus Element ブロックも要素 a.y を選択しないため、端子の入力データを過剰に指定します。シミュレーションは診断を発行せずに実行されます。

out = sim(mdl);

The Dashboard Scope blocks in the model display the In Bus Element block output signals from the simulation.

Dashboard Scope ブロックのプロットは以下を示しています。

  • 一番左の In Bus Element ブロックは、x という名前のリーフ要素を選択し、値 3 の定数信号を生成しています。

  • 中央と一番右の In Bus Element ブロックは両方とも要素 b を選択し、それぞれ正弦波信号を生成しています。

参考

ブロック

オブジェクト

関数

関連するトピック