最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Dataset 形式へのログ データの変換

データセットへのワークスペース データの変換

この例では、MATLAB® 時系列データを Dataset 形式に変換する方法を示します。myvdp_timeseries は、MATLAB 時系列の形式でデータのログを作成する vdp モデルで、simout および simout1 用に構成された 2 つの To Workspace ブロックを使用します。To Workspace ブロックを使用して MATLAB 時系列の形式でデータのログを作成するモデルでは、次のような手順を使用することを検討してください。

Simulink.SimulationData.Dataset コンストラクターを使用して MATLAB 時系列データを Dataset 形式に変換してから、2 つのデータセットを連結します。

  1. 図に示すように、vdp モデルに To Workspace ブロックを 2 つ追加します。

  2. 両方のブロックの [保存形式] パラメーターを 設定します。[時系列] に設定します。

  3. モデルを myvdp_timeseries という名前で保存します。

  4. モデルのシミュレーションを実行します。

    To Workspace ブロックを使用してデータのログが作成されます。

  5. 信号ログ形式 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
  6. 両方の To Workspace ブロックの MATLAB 時系列データを Dataset に変換します。

    ds = Simulink.SimulationData.Dataset(simout);
    ds1 = Simulink.SimulationData.Dataset(simout1);

    ds は 1 つ目の To Workspace ブロックのデータの変数名で、ds1 は 2 つ目の To Workspace ブロックのデータの変数名です。

  7. 両方のデータセットを 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 形式に変換することを検討してください。

  1. 図に示すように、vdp モデルに To Workspace ブロックを 2 つ追加します。

  2. 両方のブロックの [保存形式] パラメーターで 構造体 を選択します。

  3. 2 つの To Workspace ブロックに対する 2 つの入力信号を Ds 形式でログに記録するように信号のログを有効にします。

  4. モデルを myvdp_structure という名前で保存します。

  5. モデルのシミュレーションを実行します。

    To Workspace ブロックを使用してデータのログが作成されます。

  6. 両方の To Workspace ブロックの構造体データを Dataset に変換します。

    ds = Simulink.SimulationData.Dataset(simout);
    ds1 = Simulink.SimulationData.Dataset(simout1);

    simout は 1 つ目の To Workspace ブロックのデータの変数名で、simout1 は 2 つ目の To Workspace ブロックのデータの変数名です。

    時間なしの構造体または配列の変換では、時間は t=0 で始まり、1 ずつインクリメントします。

  7. ds の最初の要素の値を取得します。

    ds.get(1).Values.Time
    ans =
    
         0
         1
         2
         3
         .
         .
         .
        61
        62
        63
  8. 信号ログから最初の要素の時間値を取得します。

    logsout.get(1).Values.Time
    ans =
    
             0
        0.0001
        0.0006
        0.0031
        .
        .
        .
       19.2802
       19.6802
       20.0000
  9. 次の間でタイムスタンプが異なることを確認します。

    • 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.get

getElement メソッドも使用できます。このメソッドの構文と動作は、get メソッドと同じです。

インデックス、名前、またはブロック パスに基づいて、データセットから要素または要素のコレクションを取得します。

Simulink.SimulationData.DataSet.numElements

データセット内の要素の数を取得します。

[データセット] 形式を使用する信号ログ データにアクセスする例については、Simulink.SimulationData.Dataset を参照してください。

バス配列の信号ログ データへのアクセス

バス信号の配列ログ データは、[データセット] 信号ログ形式を使用しています。

バス配列に含まれる特定の信号のデータにアクセスするための一般的な方法は次のとおりです。

  1. Simulink.SimulationData.Dataset.get (または getElement) メソッドを使用して、ログ データ (既定の設定では変数 logsout) 内の特定の信号にアクセスします。

  2. 値を取得するために、バス配列内のインデックスを指定します。

  3. 再度インデックスを指定して、特定のバスのデータを取得します。

たとえば、ex_log_nested_aob モデル内の Constant6 ブロックの信号ログ データを取得するには、Terminator ブロックに接続する topBus 信号の場合、次のように入力します。

logsout.getElement('topBus').Values.a(2,2).firstConst.data

バス配列の信号ログ データにアクセスするその他の例を以下に示します。バス配列のデータのログを作成する方法を示すその他の例は、sldemo_mdlref_bus を参照してください。

 シンプルなバス配列

 バスでのバス配列

 バスの入れ子配列

重複する名前による信号のデータへのアクセス

同じ信号名の複数の信号のあるモデルの場合、信号ログ データには重複した名前のある信号ごとに Simulink.SimulationData.Signal オブジェクトが含まれます。

重複した名前のある特定の信号にアクセスするには、以下の方法のうちの "1つ" を使用します。

  • 特定の信号に対するデータを見つけ出すために、Simulink.SimulationData.Signal オブジェクトの表示された出力を視覚的に検証します。

  • 信号のソース ブロックに対するブロック パスを指定して Simulink.SimulationData.Dataset.getElement メソッドを使用します。

  • 重複した信号名で信号全体を反復するには、インデックス引数付きで Simulink.SimulationData.Dataset.getElement メソッドを使用するスクリプトを作成します。

  • [信号プロパティ] ダイアログ ボックスを使用して異なる名前を指定します。重複する名前の信号がノーマル モードで参照モデルの複数のインスタンスには表示されない場合、以下の方法を使用することを検討してください。

    1. モデルで信号を右クリックします。

    2. コンテキスト メニューで [プロパティ] を選択します。

    3. [信号プロパティ] ダイアログ ボックスで、[ログ名][カスタム] に設定して信号名とは異なる名前を指定します。

    4. モデルをシミュレーションして、名前引数付きで Simulink.SimulationData.Dataset.getElement メソッドを使用します。

ヒント

信号ログ セレクターを使用して特定の信号にアクセスすることもできます。詳細については、信号ログ セレクターによる信号ログ設定のオーバーライドを参照してください。

信号ログ データでの改行文字の取り扱い

[データセット] 形式を使用する信号ログ データでログ名の改行文字を取り扱うために、getElement 呼び出し内で sprintf コマンドを使用します。次に例を示します。

topOut.getElement(sprintf('INCREMENT\nBUS'))

参考

関連する例

詳細