ドキュメンテーション

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

Bus オブジェクトを使ったインターフェイス指定

この例では、バス信号を参照モデルに伝播する方法を示します。また、親モデルからのログ信号データを使用して参照モデルを個別にシミュレートする方法も説明します(モデル参照の簡単な紹介については、モデル参照によるコンポーネントベースのモデル化を参照してください。データのログを作成するための信号設定の詳細については、Simulink® ドキュメンテーションを参照してください)。

モデル例を開く

モデル例を開きます。

例の要件

この例の実行中、Simulink と Simulink® Coder™ は、現在の作業ディレクトリ内に作成されたコード生成フォルダーにコードを生成することがあります。このディレクトリにファイルを生成したくない (または生成できない) 場合は、作業ディレクトリを適切なディレクトリに変更する必要があります。スタンドアロン アプリケーションに配布するコードを生成するには、Simulink Coder が必要です。

例のバス信号設定の説明

このモデル sldemo_mdlref_bus には、単純なカウンターのモデル sldemo_mdlref_counter_bus を参照する Model ブロック CounterA が含まれています。COUNTERBUS と呼ばれるバス信号により、データと、このカウンターの飽和の上限および下限が、モデルに入力されます。COUNTERBUS には、データと LIMITBUS の 2 つの信号が含まれています。データ信号はカウントに使用され、LIMITBUS にはカウンターの上限値および下限値が含まれています。COUNTERBUS の構造は以下のとおりです。

  * COUNTERBUS (bus signal)
             * data
             * LIMITBUS (bus signal)
                      * upper_saturation_limit
                      * lower_saturation_limit

Model ブロックの CounterA には、INCREMENTBUS タイプのバス信号を送る 2 つ目の入力端子が含まれています。この信号は、インクリメントの変更とカウンターのリセットに使用されます。INCREMENTBUS の構造は以下のとおりです。

  * INCREMENTBUS (bus signal)
               * increment
               * reset

この例には sldemo_mdlref_counter_bus.mat という名前の MAT ファイルも含まれています。このファイルにより、COUNTERBUS、LIMITBUS、INCREMENTBUS の要素を定義するバス オブジェクトが作成されます。このモデルが読み込まれると、sldemo_mdlref_bus のプリロード関数によってこの MAT ファイルが読み込まれ、バス オブジェクトが MATLAB® ワークスペースに作成されます。

メモ: モデル エクスプローラーで [Base Workspace] を選択することにより、これらのオブジェクトを表示できます。バス構造体はバス エディターでも表示できます。バス エディターを開くには、MATLAB コマンド プロンプトで「buseditor」と入力します。これらのバス オブジェクトは、以下の Bus Creator ブロックの出力を指定するためにモデルで使用されます。

  • COUNTERBUSCreator1

  • COUNTERBUSCreator2

  • LIMITBUSCreator1

  • LIMITBUSCreator2

  • IncrementBusCreator

参照モデル sldemo_mdlref_counter_bus の Inport の counter_input は、[信号属性] タブのその [データ型] フィールドでバス オブジェクト COUNTERBUS を指定します。Inport の increment_input も同様に、バス オブジェクトとして INCREMENTBUS を使用するように設定されます。

信号データのロギング

これで、sldemo_mdlref_bus をシミュレートし、Scope ウィンドウで出力を表示することができます。

以下の信号は、信号のログ用にマークされています。

  • 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')
  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
  2x1 struct array with fields:

    data
    limits

この構造体は、各バス信号の MATLAB timeseries オブジェクトを含みます。

   >> topOut.getElement('COUNTERBUS').Values(1).data
and
   >> topOut.getElement('COUNTERBUS').Values(2).data
  timeseries

  Common Properties:
            Name: 'data'
            Time: [301x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [301x1 int32]
        DataInfo: tsdata.datametadata

  timeseries

  Common Properties:
            Name: 'data'
            Time: [301x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [301x1 int32]
        DataInfo: tsdata.datametadata

ログに記録されたデータを plot コマンドでプロットすることもできます。

   >> topOut.getElement('OUTERDATA').Values.plot()

モデル参照信号のログ

最上位モデル sldemo_mdlref_bus をシミュレーションする際には、信号ログ セレクターを使用して、ログ対象の参照モデル sldemo_mdlref_counter_bus 内の信号を選択できます。最上位モデルの Model ブロック CounterA を右クリックして [信号と端子]、[モデル参照の信号のログ] を選択し、ログ対象とする参照モデルからの信号を選択します。

このモデルには、ログ モードとして [すべての信号をモデルで指定されたようにログを取る] が選択されていることに注意してください。つまり、sldemo_mdlref_counter_bus スタンドアロンのシミュレーション中にログ記録されたすべての信号は、最上位モデルのシミュレーション中にログ記録されるということです。これらの信号のいずれかのログを変更するか、信号のサブセットのログを作成する場合は、以下の手順に従います。

  • ログ モードを "信号をオーバーライドする" に設定します。

  • 左側の階層表示にある最上位の Model ブロックのチェックを外して、このモデルが "モデルで指定されたとおりにログ" を使用しないことを示します。

  • 右側のリストを使用して、最上位モデルのシミュレーション時にログを作成する信号を指定します。

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

データの読み込み

参照モデル sldemo_mdlref_counter_bus を開きます。

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

  • topOut.getElement('COUNTERBUS')

  • topOut.getElement('INCREMENTBUS')

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

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

  1. [ルート Inport マッパー] ツールストリップで、[ワークスペースから] ボタンを選択します。

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

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

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

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

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

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

データをマッピングする際、Simulink は入力データに対して入力端子を評価し、互換性を判断します。[ルート Inport マッパー] テーブルには、この互換性のステータスが、緑のチェック マーク、オレンジの警告三角マーク、または赤のエラー感嘆符マークで示されます。この例では、テーブルには緑のステータスが表示され、互換性の問題がないことを示します。入力データから入力端子へのこのようなマッピングを使用して、モデルをシミュレートできます。また、[マップ] アクションによっても、[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] タブで、[入力] フィールドにコンマ区切りリストにて入力が正しく設定されます。変更内容をモデルに適用するには、[コンフィギュレーション パラメーター] ダイアログにて [適用] をクリックします。

sldemo_mdlref_counter_bus をシミュレート し、Scope ウィンドウで出力を表示することができます。シミュレーション後、sldemo_mdlref_bussldemo_mdlref_counter_bus からの Scope に同じトレースが表示されます。参照モデルの Scope に入力する信号もログが作成されます。ログ データは、変数 subOut の下で MATLAB ワークスペースで利用可能です。topOut.getElement('OUTERDATA')subOut.getElement('INNERDATA') のデータが同じであることを検証できます。

スタンドアロン アプリケーションに対するコード生成 (Simulink Coder が必要)

実行可能ファイルを作成し、sldemo_mdlref_bus のコードを調べます。

終了

sldemo_mdlref_counter_bussldemo_mdlref_bus を閉じます