Main Content

信号ログ データの可視化およびアクセス

信号ログを使用すると、モデルにブロックを追加することなくシミュレーションからのデータを保存できます。詳細については、信号ログを使用した信号データの保存を参照してください。信号ログを使用してシミュレーション データを保存すると、データはワークスペースに保存され、シミュレーション データ インスペクターにストリーミングされます。

記録された信号データは、シミュレーション中はシミュレーション データ インスペクターを使用して、シミュレーションが一時停止または停止している場合は、その他の可視化インターフェイスを使用して表示できます。シミュレーション データの可視化方法の決定を参照してください。

または、MATLAB® コマンドを使用して、プログラムで信号ログ データにアクセスすることもできます。

ヒント

信号ログ記録用のモデルでマークした信号の信号ログ データが表示されない場合、ログ コンフィギュレーションを調べて、[信号のログ] が選択されていることを確認します。あるいは、信号ログ セレクターを使用して、ログ生成がオーバーライドされている信号のログ生成を有効にします。詳細については、信号ログ コンフィギュレーションの表示信号ログ設定のオーバーライドを参照してください。

その他のタイプのデータのログ記録および各種ログ技法の詳細については、シミュレーション データの保存を参照してください。

シミュレーション データ インスペクターを使用した信号ログ データの表示

対話形式で、ログに記録された信号データを視覚的に検査して比較するには、シミュレーション データ インスペクターの使用を検討します。シミュレーション データ インスペクターを使用すれば、複数のサブプロットで複数のシミュレーションとソースのデータを表示できます。プロット内をズームとパンで移動したり、データ カーソルを使用して信号の値を詳しく調べたり、データを再生して信号の関係を解析したりできます。詳細については、シミュレーション データの検証を参照してください。また、シミュレーション データ インスペクターを使用して、シミュレーションでログに記録したデータおよびメタデータやワークスペースまたはファイルからインポートしたデータおよびメタデータを比較することもできます。信号プロパティ、比較の制約、および許容誤差を指定することで、ニーズに合わせて比較をカスタマイズします。シミュレーション データの比較を参照してください。

信号ログ データは、シミュレーション中にシミュレーション データ インスペクターに自動的にストリーミングされます。そのため、シミュレーション中に無限のシミュレーション時間またはリアルタイムのモデルを使用してモデルからのデータを表示および解析できます。詳細については、View Streaming Data in the Simulation Data Inspectorを参照してください。

プログラムによるワークスペース データへのアクセス

ワークスペースにログ記録されたデータにはプログラムでアクセスして解析できます。既定では、ワークスペースにログ記録されたすべてのシミュレーション データが単一の Simulink.SimulationOutput オブジェクトとして out という既定の名前をもつ変数で返されます。SimulationOutput オブジェクトには、完全なシミュレーション メタデータと、ワークスペースにログ記録されたすべてのシミュレーション データが含まれます。

すべてのシミュレーション データを単一の SimulationOutput オブジェクトで返すようにモデルを構成すると、信号ログ データは SimulationOutput オブジェクトのプロパティとして logsout という既定の変数名をもつ Simulink.SimulationData.Dataset オブジェクトに保存されます。単一のシミュレーション出力を返すようにモデルが構成されていない場合は、信号ログ データは logsout という既定の変数名をもつ Dataset オブジェクトに入れてワークスペースに返されます。

Dataset オブジェクト内の特定の要素にアクセスするには、中かっこ、関数 find、または関数 get を使用します。Dataset オブジェクトの要素の名前を返すには、関数 getElementNames を使用します。

ヒント

指定した各 MATLAB timeseries オブジェクトについて関数を呼び出すには、関数 Simulink.SimulationData.forEachTimeseries を使用できます。たとえば、この関数を使用して、バスのログ記録によって取得された timeseries オブジェクトの構造体の各要素をリサンプルできます。

プログラムによる Dataset オブジェクトおよび要素へのアクセス

モデル sldemo_fuelsys を開きます。このモデルはフォールトトレラント燃料制御システムをモデル化します。モデルの詳細については、フォールトトレラント燃料制御システムのモデル化を参照してください。

mdl = "sldemo_fuelsys";
open_system(mdl)

[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、以下に留意してください。

  • モデルは単一の Simulink.SimulationOutput オブジェクトとしてシミュレーション出力を返すように構成されていません。

  • モデルでは信号ログ データ用に変数名 sldemo_fuelsys_output を使用しています。

モデルをシミュレートします。

sim(mdl);

信号ログ データが格納された Dataset オブジェクト sldemo_fuelsys_output にアクセスします。

sldemo_fuelsys_output
sldemo_fuelsys_output = 
Simulink.SimulationData.Dataset 'sldemo_fuelsys_output' with 10 elements

                         Name            BlockPath                                
                         ______________  ________________________________________ 
    1  [1x1 Signal]      ''              sldemo_fuelsys/EGO Fault Switch         
    2  [1x1 Signal]      air_fuel_ratio  sldemo_fuelsys/Engine Gas Dynamics      
    3  [1x1 Signal]      ''              sldemo_fuelsys/Engine Speed Fault Switch
    4  [1x1 Signal]      speed           sldemo_fuelsys/Engine_Speed_Selector    
    5  [1x1 Signal]      ''              sldemo_fuelsys/MAP Fault Switch         
    6  [1x1 Signal]      map             sldemo_fuelsys/MAP_Selector             
    7  [1x1 Signal]      ego             sldemo_fuelsys/O2_Voltage_Selector      
    8  [1x1 Signal]      ''              ...o_fuelsys/Throttle Angle Fault Switch
    9  [1x1 Signal]      throttle        sldemo_fuelsys/Throttle_Angle_Selector  
   10  [1x1 Signal]      fuel            sldemo_fuelsys/To Plant                 

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

Dataset オブジェクトの要素へのアクセスには、中かっこを使ったインデックスを使用できます。たとえば、インデックス 9 を使用して信号ログの Dataset オブジェクトの throttle 要素にアクセスします。

el9 = sldemo_fuelsys_output{9}
el9 = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'throttle'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 timeseries]

信号データは、Simulink.SimulationData.Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。時間値は timeseries オブジェクトの Time プロパティにあります。信号値は Data プロパティにあります。

el9.Values
  timeseries

  Common Properties:
            Name: 'throttle'
            Time: [204508x1 double]
        TimeInfo: tsdata.timemetadata
            Data: [204508x1 double]
        DataInfo: tsdata.datametadata
el9.Values.Data
ans = 204508×1

   10.0000
   10.0028
   10.0169
   10.0500
   10.1000
   10.1500
   10.2000
   10.2500
   10.2766
   10.2766
      ⋮

Simulink.SimulationOutput オブジェクト内の信号ログ データへのアクセス

モデル vdp を開きます。このモデルはファン デル ポールの 2 階微分方程式をモデル化します。モデルの詳細については、Van der Pol Oscillatorを参照してください。

mdl = "vdp";
open_system(mdl)

x1x2、および Mu ブロックからの信号をログ記録用にマークします。その後、モデルをシミュレートします。

Simulink.sdi.markSignalForStreaming("vdp/x1",1,"on")
Simulink.sdi.markSignalForStreaming("vdp/x2",1,"on")
Simulink.sdi.markSignalForStreaming("vdp/Mu",1,"on")
out = sim("vdp")
out = 
  Simulink.SimulationOutput:
                logsout: [1x1 Simulink.SimulationData.Dataset] 
                   tout: [64x1 double] 
                   yout: [1x1 Simulink.SimulationData.Dataset] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

ログ記録されたすべてのデータが out というワークスペース変数名をもつ単一のSimulink.SimulationOutputオブジェクトで返されます。信号ログ データは、既定の名前 logsout をもつ Dataset オブジェクトとして SimulationOutput オブジェクトに含まれます。ログ記録された信号データにはドット表記を使用してアクセスできます。あるいは、SimulationOutput オブジェクト関数getまたはfindを使用することもできます。ドット表記を使用して logsout にアクセスします。

out.logsout
ans = 
Simulink.SimulationData.Dataset 'logsout' with 3 elements

                         Name  BlockPath 
                         ____  _________ 
    1  [1x1 Signal]      ''    vdp/Mu   
    2  [1x1 Signal]      x1    vdp/x1   
    3  [1x1 Signal]      x2    vdp/x2   

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

logsout Dataset オブジェクトの要素にアクセスするには、中かっこを使用するか、Dataset オブジェクト関数getまたはfindを使用できます。中かっこを使用して logsout の 2 番目の要素にアクセスします。

x1sig = out.logsout{2}
x1sig = 
  Simulink.SimulationData.Signal
  Package: Simulink.SimulationData

  Properties:
              Name: 'x1'
    PropagatedName: ''
         BlockPath: [1x1 Simulink.SimulationData.BlockPath]
          PortType: 'outport'
         PortIndex: 1
            Values: [1x1 timeseries]

信号データは、Simulink.SimulationData.Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。時間値は timeseries オブジェクトの Time プロパティにあります。信号値は Data プロパティにあります。

x1sig.Values
  timeseries

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

参考

モデル設定

関数

オブジェクト

関連するトピック