信号ログ データの可視化およびアクセス
信号ログを使用すると、モデルにブロックを追加することなくシミュレーションからのデータを保存できます。詳細については、信号ログを使用した信号データの保存を参照してください。信号ログを使用してシミュレーション データを保存すると、データはワークスペースに保存され、シミュレーション データ インスペクターにストリーミングされます。
記録された信号データは、シミュレーション中はシミュレーション データ インスペクターを使用して、シミュレーションが一時停止または停止している場合は、その他の可視化インターフェイスを使用して表示できます。シミュレーション データの可視化方法の決定を参照してください。
または、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: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 1
Values: [1×1 timeseries]
Methods, Superclasses
信号データは、Simulink.SimulationData.Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。時間値は timeseries オブジェクトの Time プロパティにあります。信号値は Data プロパティにあります。
el9.Values
timeseries
Common Properties:
Name: 'throttle'
Time: [203009x1 double]
TimeInfo: [1x1 tsdata.timemetadata]
Data: [203009x1 double]
DataInfo: [1x1 tsdata.datametadata]
More properties, Methods
el9.Values.Data
ans = 203009×1
10.0000
10.0028
10.0169
10.0500
10.1000
10.1500
10.2000
10.2155
10.2155
10.2155
10.2500
10.2845
10.3000
10.3500
10.4000
⋮
Simulink.SimulationOutput オブジェクト内の信号ログ データへのアクセス
モデル vdp を開きます。このモデルはファン デル ポールの 2 階微分方程式をモデル化します。モデルの詳細については、ファン デル ポール振動子を参照してください。
mdl = "vdp";
open_system(mdl)x1、x2、および 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: [87x1 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: [1×1 Simulink.SimulationData.BlockPath]
PortType: 'outport'
PortIndex: 1
Values: [1×1 timeseries]
Methods, Superclasses
信号データは、Simulink.SimulationData.Signal オブジェクトの Values プロパティに timeseries オブジェクトとして格納されています。時間値は timeseries オブジェクトの Time プロパティにあります。信号値は Data プロパティにあります。
x1sig.Values
timeseries
Common Properties:
Name: 'x1'
Time: [87x1 double]
TimeInfo: [1x1 tsdata.timemetadata]
Data: [87x1 double]
DataInfo: [1x1 tsdata.datametadata]
More properties, Methods
参考
モデル設定
関数
オブジェクト
Simulink.SimulationData.Dataset|Simulink.SimulationData.Signal|Simulink.SimulationData.BlockPath|Simulink.SimulationOutput