信号ログ データの可視化およびアクセス
信号ログを使用すると、モデルにブロックを追加することなくシミュレーションからのデータを保存できます。詳細については、信号ログを使用した信号データの保存を参照してください。信号ログを使用してシミュレーション データを保存すると、データはワークスペースに保存され、シミュレーション データ インスペクターにストリーミングされます。
記録された信号データは、シミュレーション中はシミュレーション データ インスペクターを使用して、シミュレーションが一時停止または停止している場合は、その他の可視化インターフェイスを使用して表示できます。シミュレーション データの可視化方法の決定を参照してください。
または、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)
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: [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
参考
モデル設定
関数
オブジェクト
Simulink.SimulationData.Dataset
|Simulink.SimulationData.Signal
|Simulink.SimulationData.BlockPath
|Simulink.SimulationOutput