信号ログ データの表示およびアクセス
記録された信号データは、シミュレーション中はシミュレーション データ インスペクターを使用して、シミュレーションが一時停止または停止している場合は、その他の可視化インターフェイスを使用して表示できます。シミュレーション データの可視化方法の決定を参照してください。
または、このトピックで説明するように、MATLAB® コマンドを使用して、プログラムで信号ログ データにアクセスすることもできます。
ヒント
信号ログ記録用のモデルでマークした信号のログ データが表示されない場合、ログ コンフィギュレーションを確認します。信号ログ セレクターを使用して、ログ生成がオーバーライドされている信号のログ生成を有効にします。詳細については、信号ログ コンフィギュレーションの表示と信号ログ設定のオーバーライドを参照してください。
信号のログ オブジェクト
Simulink® は、MATLAB ワークスペース変数である Simulink.SimulationData.Dataset
オブジェクトに信号ログ データを格納します。信号ログ変数の既定名は、logsout
です。変数名は変更できます。詳細については、信号ログ データへの名前の指定を参照してください。
データセット内の個別の信号のデータで MATLAB timeseries
または timetable
要素を使用するかを指定できます。[データセットの信号形式] コンフィギュレーション パラメーターを設定します (詳細については、データセットの信号形式を参照)。
R2016a 以前のリリースでも ModelDataLogs
形式をサポートしています。詳細については、レガシ ModelDataLogs API を使用するスクリプトの移行を参照してください。
プログラムによるデータへのアクセス
Simulink.SimulationData.Dataset
API を使用して信号ログ データにプログラムでアクセスできます。Dataset
オブジェクトの要素にアクセスするには、中かっこを使ったインデックスを使用します。たとえば、topOut
信号ログ Dataset
オブジェクトの最初の要素に、インデックス 1
を使用してアクセスできます。次の例は、データセット要素に対する timeseries
の既定の設定に基づいています。timeseries
と timetable
形式のデータの詳細については、データセットの信号形式を参照してください。
open_system(docpath(fullfile(docroot,'toolbox','simulink',... 'examples','ex_bus_logging'))); open_system(docpath(fullfile(docroot,'toolbox','simulink',... 'examples','ex_mdlref_counter_bus'))); sim('ex_bus_logging') topOut
Simulink.SimulationData.Dataset 'topOut' with 4 elements Name BlockPath ____________ ________________________________________ 1 [1x1 Signal] COUNTERBUS ex_bus_logging/COUNTERBUSCreator 2 [1x1 Signal] OUTPUTBUS ex_bus_logging/CounterA 3 [1x1 Signal] INCREMENTBUS ex_bus_logging/IncrementBusCreator 4 [1x1 Signal] inner_bus ...erA|ex_mdlref_counter_bus/Bus Creator - Use braces { } to access, modify, or add elements using index.
element1 = topOut{1}
element1 = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: Name: 'COUNTERBUS' PropagatedName: '' BlockPath: [1x1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1x1 struct] Methods, Superclasses
element1.Values
ans = data: [1x1 timeseries] limits: [1x1 struct]
特定の要素を Dataset
オブジェクトで検索するには、find
メソッドを使用します。Dataset
オブジェクト要素の名前を返すには、getNames
メソッドを使用します。
ヒント
指定した各 MATLAB timeseries
オブジェクトについて関数を呼び出すには、関数 Simulink.SimulationData.forEachTimeseries
を使用できます。たとえば、この関数を使用すると、バス信号のログ記録によって取得された timeseries
オブジェクトの構造体の各要素を簡単にリサンプルできます。
ログ名のスペースと改行の処理
この例では、信号が名前をログ記録する方法を説明する 3 つの信号を示します。
名前にスペースを含む信号
名前に改行を含む信号
名前に改行を含むブロックから発生している名前のない信号
モデルのシミュレーションを行い、変数 logsout
で信号のログ記録の結果を確認します。Dataset
オブジェクト内の名前は、信号名にスペースが含まれている場合はスペースを使用し、名前に改行が含まれている場合は改行を使用していることがわかります。名前のない信号は、名前として空の文字配列をもっています。
logsout
logsout = Simulink.SimulationData.Dataset 'logsout' with 3 elements Name BlockPath ____ ______________________________________ 1 [1x1 Signal] x y ex_signal_names_with_spaces/Sine Wave 2 [1x1 Signal] a b ex_signal_names_with_spaces/Sine Wave1 3 [1x1 Signal] '' ex_signal_names_with_spaces/Sine Wave2 - Use braces { } to access, modify, or add elements using index.
スペースを含む名前をもつ信号には、名前で、またはインデックスでアクセスできます。関数 getElement
に渡す名前にはスペースを含める必要があります。改行を含む名前をもつ信号にアクセスするには、インデックスを使用します。
>> logsout{2}
ans = Simulink.SimulationData.Signal Package: Simulink.SimulationData Properties: Name: 'a↵b' PropagatedName: '' BlockPath: [1×1 Simulink.SimulationData.BlockPath] PortType: 'outport' PortIndex: 1 Values: [1×1 timeseries]
ModelDataLogs
形式の信号データのログへのアクセス
R2016a 以前は、ModelDataLogs
形式で信号を記録できました。R2016a 以降は、データを [ModelDataLogs]
形式で記録することはできません。信号ログでは、[データセット]
形式が使用されます。
ただし、前のリリースで [ModelDataLogs]
形式を使用してログ記録されたデータは使用できます。
詳細については、
を参照してください。 Simulink.ModelDataLogs
参考
get
| find
| getElementNames
| numElements
| setElement
| Simulink.SimulationData.Dataset
| Simulink.SimulationData.Signal
| Simulink.SimulationData.BlockPath
| Simulink.SimulationData.forEachTimeseries