ドキュメンテーション

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

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® ワークスペースに作成されます。

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

  • COUNTERBUSCreator1

  • COUNTERBUSCreator2

  • LIMITBUSCreator1

  • LIMITBUSCreator2

  • IncrementBusCreator

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

信号データのロギング

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

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

  • COUNTERBUS

  • INCREMENTBUS

  • OUTERDATA

  • INNERDATA

このモデルのシミュレーション後、ログ信号は、変数 topOut 内の MATLAB ワークスペースで使用できます。

topOut = 

  Simulink.SimulationData.Dataset
  Package: Simulink.SimulationData

  Characteristics:
              Name: 'topOut'
    Total Elements: 4

  Elements:
    1: 'COUNTERBUS'
    2: 'OUTERDATA'
    3: 'INCREMENTBUS'
    4: 'INNERDATA'

  -Use 'get' or 'getElement' to access elements by index or name.
  -Use 'addElement' or 'setElement' to modify elements.

このモデルでは、信号のログにデータセット形式を使用します。与えられた信号のデータセット形式のログ データにアクセスするには、メソッド getElementgetElement を使用します。

   >> topOut.getElement('COUNTERBUS')
ans = 

  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
         Name: 'COUNTERBUS'
    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 を開く

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

  • topOut.getElement('COUNTERBUS')

  • topOut.getElement('INCREMENTBUS')

sldemo_mdlref_counter_bus をシミュレート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 を閉じますsldemo_mdlref_counter_bussldemo_mdlref_bus を閉じます

この情報は役に立ちましたか?