Main Content

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 を最上位モデルとしてシミュレーションするときにログ記録されるすべての信号は、参照モデルとしてシミュレーションするときにもログ記録されます。これらの信号のいずれかのログを変更するか、信号のサブセットのログを作成する場合は、以下の手順に従います。

  1. [ログ モード] を [Override signals] に設定します。

  2. このモデルでは Log all signals as specified in model 設定を使用すべきでないことを示すために、[モデルの階層構造] ペインの [CounterA (sldemo_mdlref_counter_bus)] チェック ボックスをクリアします。

  3. 最上位モデルのシミュレーション時にログを作成する信号をテーブルで選択します。

  4. この変更を保存するには、最上位モデルを保存します。

データの読み込み

Model ブロックの左下隅にある [最上位モデルとして開く] バッジをクリックして、参照モデル sldemo_mdlref_counter_bus を最上位モデルとして開きます。

参照モデルは、ログが作成された信号データをルートの Inport ブロックを通じて読み取るように設定されています。この構成を確認するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。Simulink ツールストリップの [モデル化] タブで [モデル設定] をクリックします。[データのインポート/エクスポート] タブの [入力] では、コンマ区切りのリストを使用して 2 つの入力端子の topOut からのログ データを指定します。counter_input 端子は時系列構造体の配列を使用して COUNTERBUS のデータを読み込み、increment_input 端子は時系列構造体を使用して INCREMENTBUS のデータを読み込みます。

  • topOut.getElement('COUNTERBUS')

  • topOut.getElement('INCREMENTBUS')

[入力] フィールドは、[入力の接続] ボタンをクリックすると設定できます。ルート Inport マッパー ツールが開きます。この例では、ツールはマッピング アルゴリズムを使用してベース ワークスペースのログ データから [入力] フィールドを設定します。

インポートするデータを選択するには、次の手順を実行します。

  1. ルート Inport マッパーで、[ワークスペースから] をクリックします。

  2. ログが作成されたデータ topOut を選択し、[OK] をクリックします。

  3. 開いたダイアログ ボックスでファイル名を指定して、[保存] をクリックします。

データがルート Inport マッパー ツールに読み込まれたので、入力データを割り当てるルートの入力端子を決定できます。Simulink は、これらの基準 (ブロック名、ブロック パス、信号名、端子の順序、カスタム アルゴリズム) のいずれかに基づいて、入力データと入力端子を対応させます。モデルから信号名を使用して topOut のログが作成されるため、マッピングの基準には [信号名] が最適な選択です。この基準を使用すると、Simulink は入力データの変数名と入力信号の名前を対応させようと試みます。

このオプションを選択するには、以下のようにします。

  1. [ルート Inport マッパー] 階層ペインで、シナリオ データセット topOut を選択します。

  2. [信号名] ラジオ ボタンをクリックします。

  3. [モデルにマッピング] ボタンの矢印をクリックしてから、[すべてをマッピング] をクリックします。

データをマッピングする際、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') のデータが同じであることを検証できます。

参考

関連するトピック