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

For Each Subsystem における信号のログ記録

For Each Subsystem 内の信号をログ データに記録するために使用するアプローチは、信号が以下のいずれであるかによって異なります。

  • 非バス信号 — For Each Subsystem 内で直接ログを記録します。

  • バス信号またはバス配列の信号 — 以下のいずれかのアプローチを使用してください。

    • Bus Selector ブロックを使用してログ記録する信号を選択し、ログ記録用に信号をマークします。このアプローチは、多くのモデルでうまくいきます。

    • その信号を Outport ブロックに付加し、For Each Subsystem の外部で信号のログを記録します。このアプローチは、バス信号全体をログ記録する場合で、そのバス信号に多くのバス要素信号が含まれている場合に使用します。

メモ

For Each Subsystem にバス信号のログを直接記録することはできません。

次のいずれかの条件が成立する場合、For Each Subsystem 内にある参照モデル内の信号のログを記録することができない。

  • For Each Subsystem が、ラピッド アクセラレータ モードでシミュレート中のモデル内にある場合。

  • For Each Subsystem 自体が Model ブロックによってアクセラレータ モードで参照されているモデル内にある場合。

For Each Subsystem 内でログ記録される各信号のデータは、別々の Dataset 要素に Simulink.SimulationData.Signal オブジェクトとして保存されます。ログ記録された信号データの形式は、[データセットの信号形式] コンフィギュレーション パラメーターの設定に応じて異なります。

  • 設定が timeseries の場合、各信号オブジェクトには MATLAB® timeseries オブジェクトの配列が含まれます。この配列は、異なる For Each 反復からのデータを個別に保持します。

  • 設定が timetable の場合は、各信号オブジェクトに MATLAB timetable オブジェクトの cell 配列が含まれます。この配列の次元は For Each の反復回数と一致します。たとえば、For Each Subsystem の反復回数が 3 回の場合、ログ データには timeseries オブジェクトまたは timetable オブジェクトの 3x1 配列が含まれます。入れ子にされた For Each Subsystem の場合、入れ子の各層でログ データに別の次元が追加されます。

入れ子にされた For Each Subsystem 内の信号のログ記録

この例では、入れ子にされた For Each Subsystem 内の信号のログを記録します。

ex_loginsideforeach_nested モデルを開きます。

open_system(docpath(fullfile(docroot,'toolbox','simulink',...
'examples','ex_loginsideforeach_nested.slx')))

Simulink® エディターで、その For Each Subsystem1 ブロックを開き、そのサブシステムの中の For Each Subsystem2 ブロックを開きます。

モデルをシミュレートし、トップ サブシステムの 1 回目の反復とボトム サブシステムの 3 回目の反復に関する信号ログ データを確認します。2x3 timeseries は、最初の For Each レベルで反復回数が 2 回、2 番目の (入れ子にされた) レベルで反復回数が 3 回行われた結果です。

sim('ex_loginsideforeach_nested');
logsout.get('nestedDelay')
ans = 

  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
  struct with fields:

              Name: 'nestedDelay'
    PropagatedName: ''
         BlockPath: [1×1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [2×3 timeseries]

nestedDelay オブジェクトの値を返します。

logsout.get('nestedDelay').Values(1,3)
timeseries

  Common Properties:
            Name: 'nestedDelay'
            Time: [5x1 double]
        TimeInfo: [1x1 tsdata.timemetadata]
            Data: [1x1x5 double]
        DataInfo: [1x1 tsdata.datametadata]

For Each Subsystem 内のバス信号のログ記録

この例では、1 つの For Each Subsystem 内の 2 つのバス信号のログを記録します。一方のバス信号には Bus Selector ブロックを使用して、選択したそれぞれの信号のログを記録します。もう一方のバス信号には Outport ブロックを使用して、For Each Subsystem の外部でログを記録します。

ex_for_each_log_bus モデルを開きます。

open_system(docpath(fullfile(docroot,'toolbox','simulink',...
'examples','ex_for_each_log_bus.slx')))

Simulink エディターで、For Each Subsystem ブロックを開きます。

limits バス信号内の信号のログを記録する場合、信号が Bus Selector ブロックに分岐され、各バス要素信号が信号ログ記録用にマークされます。

COUNTERBUS 信号全体のログを記録する場合、バス信号が Outport ブロックに接続されます。For Each Subsystem からの出力信号は、信号ログ記録用にマークされます。バス信号がサブシステムの境界を越えられるようにするには、COUNTERBUS 信号を生成する Bus Creator ブロックの [出力データ型] パラメーターが [Bus: COUNTERBUS] に設定されており、[非バーチャル バスとして出力] チェック ボックスがオンになっている必要があります。

モデルをシミュレートし、信号ログ出力を検証します。For Each Subsystem 内でログ記録されたバス要素信号の 1 つと、For Each Subsystem 外でログ記録されたバス信号に注目します。

sim('ex_for_each_log_bus');
logsout
Simulink.SimulationData.Dataset 'logsout' with 3 elements

                         Name                      BlockPath                                
                         ________________________  ________________________________________ 
    1  [1x1 Signal]      OutsideForEach            ex_for_each_log_bus/For Each Subsystem  
    2  [1x1 Signal]      <lower_saturation_limit>  ...g_bus/For Each Subsystem/Bus Selector
    3  [1x1 Signal]      <upper_saturation_limit>  ...g_bus/For Each Subsystem/Bus Selector

  - Use braces { } to access, modify, or add elements using index.

lower_saturation_limit オブジェクトの値を返します。

logsout{2}.Values
3×1 timeseries array with properties:

    Events
    Name
    UserData
    Data
    DataInfo
    Time
    TimeInfo
    Quality
    QualityInfo
    IsTimeFirst
    TreatNaNasMissing
    Length

OutsideForEach オブジェクトの値を返します。

logsout{1}.Values
 ans = 

  3×1 struct array with fields:

    data
    limits

Dataset 信号形式が timetable の場合、出力は timetable オブジェクトの cell 配列です。以下に例を示します。

out = sim('ex_for_each_log_bus','DatasetSignalFormat','timetable');
out.logsout{2}.Values
ans =
 3x1 cell array

  {11x1 timetable}
  {11x1 timetable}
  {11x1 timetable}
  

参考

ブロック

関数

関連するトピック