Dataset 形式へのログ データの変換
データセットへのワークスペース データの変換
この例では、MATLAB® 時系列データを Dataset
形式に変換する方法を示します。myvdp_timeseries
は、MATLAB 時系列の形式でデータのログを作成する vdp
モデルで、simout および simout1 用に構成された 2 つの To Workspace ブロックを使用します。To Workspace ブロックを使用して MATLAB 時系列の形式でデータのログを作成するモデルでは、次のような手順を使用することを検討してください。
Simulink.SimulationData.Dataset
コンストラクターを使用して MATLAB 時系列データを Dataset
形式に変換してから、2 つのデータセットを連結します。
図に示すように、
vdp
モデルに To Workspace ブロックを 2 つ追加します。両方のブロックの [保存形式] パラメーターを 設定します。
[時系列]
に設定します。モデルを
myvdp_timeseries
という名前で保存します。モデルのシミュレーションを実行します。
To Workspace ブロックを使用してデータのログが作成されます。
信号ログ形式
logsout
にアクセスします。logsout
logsout = Simulink.SimulationData.Dataset Package: Simulink.SimulationData Characteristics: Name: 'logsout' Total Elements: 2 Elements: 1: 'x1' 2: 'x2' -Use get or getElement to access elements by index or name. -Use addElement or setElement to add or modify elements. Methods, Superclasses
両方の To Workspace ブロックの MATLAB 時系列データを
Dataset
に変換します。ds = Simulink.SimulationData.Dataset(simout); ds1 = Simulink.SimulationData.Dataset(simout1);
ds は 1 つ目の To Workspace ブロックのデータの変数名で、ds1 は 2 つ目の To Workspace ブロックのデータの変数名です。
両方のデータセットを dsfinal に連結します。dsfinal の形式が
logsout
の形式と一致していることを確認します。dsfinal = ds.concat(ds1)
dsfinal = Simulink.SimulationData.Dataset Package: Simulink.SimulationData Characteristics: Name: 'simout' Total Elements: 2 Elements: 1: 'x1' 2: 'x2' -Use get or getElement to access elements by index or name. -Use addElement or setElement to add or modify elements. Methods, Superclasses
時間なしの構造体のデータセットへの変換
この例では、時間なしの構造体のデータを Dataset
形式に変換する方法を示します。myvdp_structure
は、次に示すように、構造体の形式でデータのログを作成する vdp
モデルで、simout および simout1 用に構成された 2 つの To Workspace ブロックを使用します。
To Workspace ブロックを使用して構造体の形式でデータのログを作成するモデルでは、次のような手順を使用して Dataset
形式に変換することを検討してください。
図に示すように、
vdp
モデルに To Workspace ブロックを 2 つ追加します。両方のブロックの [保存形式] パラメーターで
構造体
を選択します。2 つの To Workspace ブロックに対する 2 つの入力信号を
Ds
形式でログに記録するように信号のログを有効にします。モデルを
myvdp_structure
という名前で保存します。モデルのシミュレーションを実行します。
To Workspace ブロックを使用してデータのログが作成されます。
両方の To Workspace ブロックの構造体データを
Dataset
に変換します。ds = Simulink.SimulationData.Dataset(simout); ds1 = Simulink.SimulationData.Dataset(simout1);
simout は 1 つ目の To Workspace ブロックのデータの変数名で、simout1 は 2 つ目の To Workspace ブロックのデータの変数名です。
時間なしの構造体または配列の変換では、時間は t=0 で始まり、1 ずつインクリメントします。
ds の最初の要素の値を取得します。
ds.get(1).Values.Time
ans = 0 1 2 3 . . . 61 62 63
信号ログから最初の要素の時間値を取得します。
logsout.get(1).Values.Time
ans = 0 0.0001 0.0006 0.0031 . . . 19.2802 19.6802 20.0000
次の間でタイムスタンプが異なることを確認します。
Dataset
形式に変換した時間なしの構造体のログ データDataset
形式のログ データ
Dataset 形式のログ データへのプログラムによるアクセス
既定の Dataset
信号ログ形式を使用する場合、Simulink® はログ データを Simulink.SimulationData.Dataset
オブジェクトに保存します。オブジェクトから信号データを抽出する方法の詳細については、
リファレンス ページを参照してください。Simulink.SimulationData.Dataset
Simulink.SimulationData.Dataset
オブジェクトにはそれぞれのログ信号の
オブジェクトが含まれています。Simulink.SimulationData.Signal
バス信号の場合、Simulink.SimulationData.Signal
オブジェクトには MATLAB
オブジェクトの構造体が含まれています。timeseries
Simulink.SimulationData.Dataset
クラスは、信号ログ データとその関連情報にアクセスするための 2 つのメソッドを提供します。
名前 | 説明 |
---|---|
| インデックス、名前、またはブロック パスに基づいて、データセットから要素または要素のコレクションを取得します。 |
データセット内の要素の数を取得します。 |
[データセット]
形式を使用する信号ログ データにアクセスする例については、
を参照してください。Simulink.SimulationData.Dataset
バス配列の信号ログ データへのアクセス
バス信号の配列ログ データは、[データセット]
信号ログ形式を使用しています。
バス配列に含まれる特定の信号のデータにアクセスするための一般的な方法は次のとおりです。
Simulink.SimulationData.Dataset.get
(またはgetElement
) メソッドを使用して、ログ データ (既定の設定では変数logsout
) 内の特定の信号にアクセスします。値を取得するために、バス配列内のインデックスを指定します。
再度インデックスを指定して、特定のバスのデータを取得します。
たとえば、ex_log_nested_aob
モデル内の Constant6 ブロックの信号ログ データを取得するには、Terminator ブロックに接続する topBus
信号の場合、次のように入力します。
logsout.getElement('topBus').Values.a(2,2).firstConst.data
バス配列の信号ログ データにアクセスするその他の例を以下に示します。
バス配列のデータのログを作成する方法を示すその他の例は、Bus オブジェクトを使ったインターフェイス指定を参照してください。
重複する名前による信号のデータへのアクセス
同じ信号名の複数の信号のあるモデルの場合、信号ログ データには重複した名前のある信号ごとに Simulink.SimulationData.Signal
オブジェクトが含まれます。
重複した名前のある特定の信号にアクセスするには、以下の方法のうちの "1つ" を使用します。
特定の信号に対するデータを見つけ出すために、
Simulink.SimulationData.Signal
オブジェクトの表示された出力を視覚的に検証します。信号のソース ブロックに対するブロック パスを指定して
Simulink.SimulationData.Dataset.getElement
メソッドを使用します。重複した信号名で信号全体を反復するには、インデックス引数付きで
Simulink.SimulationData.Dataset.getElement
メソッドを使用するスクリプトを作成します。[信号プロパティ] ダイアログ ボックスを使用して異なる名前を指定します。重複する名前の信号がノーマル モードで参照モデルの複数のインスタンスには表示されない場合、以下の方法を使用することを検討してください。
モデルで信号を右クリックします。
コンテキスト メニューで [プロパティ] を選択します。
[信号プロパティ] ダイアログ ボックスで、[ログ名] を
[カスタム]
に設定して信号名とは異なる名前を指定します。モデルをシミュレーションして、名前引数付きで
Simulink.SimulationData.Dataset.getElement
メソッドを使用します。
ヒント
信号ログ セレクターを使用して特定の信号にアクセスすることもできます。詳細については、信号ログ セレクターによる信号ログ設定のオーバーライドを参照してください。
信号ログ データでの改行文字の取り扱い
[データセット]
形式を使用する信号ログ データでログ名の改行文字を取り扱うために、getElement
呼び出し内で sprintf
コマンドを使用します。次に例を示します。
topOut.getElement(sprintf('INCREMENT\nBUS'))
参考
Simulink.SimulationData.Dataset