Bus オブジェクトを使ったインターフェイス指定
この例では、バスを参照モデルに伝播する方法を示します。また、親モデルからのログ信号データを使用して参照モデルを個別にシミュレートする方法も説明します
モデル例を開く
モデル例 sldemo_mdlref_bus
を開いて、シミュレートします。
モデルの確認
このモデルには、単純なカウンターのモデルである sldemo_mdlref_counter_bus
を参照する CounterA という名前の Model ブロックが含まれています。
COUNTERBUS という名前のバス配列により、データと、このカウンターの飽和の上限および下限が、モデルに入力されます。COUNTERBUS という名前のバスにはそれぞれ 2 つの要素 (データ信号と LIMITBUS という名前の入れ子のバス) が含まれています。データはカウントに使用され、LIMITBUS にはカウンターの上限値および下限値が含まれています。
Model ブロックには、INCREMENTBUS という名前のバスに接続する 2 つ目の入力端子があります。このバスには、インクリメントの変更とカウンターのリセットを行う要素が含まれています。
このモデルは sldemo_mdlref_bus.sldd
という名前のデータ ディクショナリ ファイルを使用します。このファイルには、COUNTERBUS、LIMITBUS、INCREMENTBUS の要素を定義する
オブジェクトが含まれています。Simulink.Bus
Bus
オブジェクトを表示するには、型エディターを開きます。Simulink® ツールストリップの [モデル化] タブの [設計] ギャラリーで、[型エディター] をクリックします。
Bus
オブジェクトは、以下の Bus Creator ブロックの出力を指定するためにモデルで使用されます。
COUNTERBUSCreator1
COUNTERBUSCreator2
LIMITBUSCreator1
LIMITBUSCreator2
IncrementBusCreator
sldemo_mdlref_counter_bus
内にある counter_input という名前の Inport ブロックは、COUNTERBUS
という名前の Bus
オブジェクトを指定します。ブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスの [信号属性] タブで、[データ型] を Bus: COUNTERBUS
に設定します。
increment_input という名前の Inport ブロックも同様に、INCREMENTBUS
という名前の Bus
オブジェクトを使用するように設定されます。
信号データのログ
以下の信号は、信号ログ記録用にマークされています。
COUNTERBUS
INCREMENTBUS
OUTERDATA
INNERDATA
このモデルのシミュレーション後、ログ信号は、ベース ワークスペース内で変数 topOut
として使用できます。
topOut = Simulink.SimulationData.Dataset 'topOut' with 4 elements Name BlockPath ____________ ________________________________________ 1 [1x1 Signal] COUNTERBUS sldemo_mdlref_bus/Concatenate 2 [1x1 Signal] OUTERDATA sldemo_mdlref_bus/CounterA 3 [1x1 Signal] INCREMENTBUS sldemo_mdlref_bus/IncrementBusCreator 4 [1x1 Signal] INNERDATA ...erA|sldemo_mdlref_counter_bus/COUNTER - Use braces { } to access, modify, or add elements using index.
このモデルでは、信号のログに Dataset
形式を使用します。与えられた信号の Dataset
形式のログ データにアクセスするには、getElement
メソッドを使用します。
topOut.getElement('COUNTERBUS')
ans = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: Name: 'COUNTERBUS' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [2x1 struct]
バス データは、MATLAB® 構造体として Values
フィールドにログが作成されます。
topOut.getElement('COUNTERBUS').Values
ans = 2x1 struct array with fields: data limits
この構造体は、各バスの MATLAB timeseries
オブジェクトを含みます。
topOut.getElement('COUNTERBUS').Values(1).data
timeseries Common Properties: Name: 'data' Time: [301x1 double] TimeInfo: tsdata.timemetadata Data: [301x1 int32] DataInfo: tsdata.datametadata
topOut.getElement('COUNTERBUS').Values(2).data
timeseries Common Properties: Name: 'data' Time: [301x1 double] TimeInfo: tsdata.timemetadata Data: [301x1 int32] DataInfo: tsdata.datametadata
ログ データを関数 plot
を使用してプロットすることもできます。
topOut.getElement('OUTERDATA').Values.plot()
参照モデル信号のログ作成
参照モデルに信号を記録するには、Model ブロックを選択し、[Model ブロック] タブで [信号のログ] をクリックします。
このモデルでは、[ログ モード] が Log all signals as specified in model
に設定されています。sldemo_mdlref_counter_bus
を最上位モデルとしてシミュレーションするときにログ記録されるすべての信号は、参照モデルとしてシミュレーションするときにもログ記録されます。これらの信号のいずれかのログを変更するか、信号のサブセットのログを作成する場合は、以下の手順に従います。
[ログ モード] を [
Override signals
] に設定します。このモデルでは
Log all signals as specified in model
設定を使用すべきでないことを示すために、[モデルの階層構造] ペインの [CounterA (sldemo_mdlref_counter_bus)] チェック ボックスをクリアします。最上位モデルのシミュレーション時にログを作成する信号をテーブルで選択します。
この変更を保存するには、最上位モデルを保存します。
データの読み込み
Model ブロックの左下隅にある [最上位モデルとして開く] バッジをクリックして、参照モデル sldemo_mdlref_counter_bus
を最上位モデルとして開きます。
参照モデルは、ログが作成された信号データをルートの Inport ブロックを通じて読み取るように設定されています。この構成を確認するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。Simulink ツールストリップの [モデル化] タブで [モデル設定] をクリックします。[データのインポート/エクスポート] タブの [入力] では、コンマ区切りのリストを使用して 2 つの入力端子の topOut
からのログ データを指定します。counter_input 端子は timeseries 構造体の配列を使用して COUNTERBUS のデータを読み込み、increment_input 端子は timeseries 構造体を使用して INCREMENTBUS のデータを読み込みます。
topOut.getElement('COUNTERBUS')
topOut.getElement('INCREMENTBUS')
[入力] フィールドは、[入力の接続] ボタンをクリックすると設定できます。ルート Inport マッパー ツールが開きます。この例では、ツールはマッピング アルゴリズムを使用してベース ワークスペースのログ データから [入力] フィールドを設定します。
インポートするデータを選択するには、次の手順を実行します。
ルート Inport マッパーで、[ワークスペースから] をクリックします。
ログが作成されたデータ
topOut
を選択し、[OK] をクリックします。開いたダイアログ ボックスでファイル名を指定して、[保存] をクリックします。
データがルート Inport マッパー ツールに読み込まれたので、入力データを割り当てるルートの入力端子を決定できます。Simulink は、これらの基準 (ブロック名、ブロック パス、信号名、端子の順序、カスタム アルゴリズム) のいずれかに基づいて、入力データと入力端子を対応させます。モデルから信号名を使用して topOut
のログが作成されるため、マッピングの基準には [信号名] が最適な選択です。この基準を使用すると、Simulink は入力データの変数名と入力信号の名前を対応させようと試みます。
このオプションを選択するには、以下のようにします。
[ルート Inport マッパー] 階層ペインで、シナリオ データセット
topOut
を選択します。ドロップダウンから [信号名] ラジオ ボタンをクリックします。
[マップの準備状態のチェック] ボタンの矢印をクリックしてから、[すべてをマッピング] をクリックします。
データをマッピングする際、Simulink は入力データに対して入力端子を評価し、互換性を判断します。[ルート Inport マッパー] テーブルには、この互換性のステータスが、緑のチェック マーク、オレンジの警告三角マーク、または赤のエラー感嘆符マークで示されます。この例では、テーブルには緑のステータスが表示され、互換性の問題がないことを示します。入力データから入力端子へのこのようなマッピングを使用して、モデルをシミュレートできます。マッピングによって、[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] タブの [入力] に適切な入力のコンマ区切りリストが設定されます。変更内容をモデルに適用するには、[コンフィギュレーション パラメーター] ダイアログにて [適用] をクリックします。
インポート データを使用したモデルのシミュレーション
sldemo_mdlref_counter_bus
をシミュレートします。
シミュレーション後、sldemo_mdlref_bus
(OUTERDATA
) と sldemo_mdlref_counter_bus
(INNERDATA
) からの Scope に同じトレースが表示されます。
参照モデルの Scope に入力する信号もログが作成されます。ログ データは、変数 subOut
の下で MATLAB ワークスペースで利用可能です。topOut.getElement('OUTERDATA')
と subOut.getElement('INNERDATA')
のデータが同じであることを検証できます。