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

Simulink.sdi.Signal クラス

パッケージ: Simulink.sdi

信号データおよびメタデータにアクセスする

説明

信号データとメタデータへのアクセスを提供する Simulink.sdi.Signal オブジェクト。メタデータには、信号を可視化および比較するためのプロパティが含まれています。

構築

signal = Simulink.sdi.getSignal(signalID) は、signalID に対応する Simulink.sdi.Signal オブジェクトを返します。

signal = runObj.getSignal(signalID) は、signalID に対応する Simulink.sdi.Signal オブジェクトを返します。

signal = runObj.getSignalByIndex(index) は、Run オブジェクト runObj 内の index で指定されたインデックスにある signalID に対応する Simulink.sdi.Signal オブジェクトを返します。

入力引数

すべて展開する

シミュレーション データ インスペクターで生成された信号の数値信号識別子。Simulink.sdi.Run オブジェクトのメソッドを使用して、または関数 Simulink.sdi.getSignal を使用して信号の信号 ID を取得できます。

実行内の信号のインデックス。

例: 1

プロパティ

すべて展開する

信号プロパティ

信号を識別する一意の数値。シミュレーション データ インスペクターは一意の数値 ID を各実行と信号に割り当てます。

信号を含む実行の実行識別子。シミュレーション データ インスペクターは一意の数値 ID を各実行と信号に割り当てます。関数 Simulink.sdi.getAllRunIDs を使用して信号の実行 ID にアクセスできます。

信号の名前。

例: 'fuel'

信号の説明。文字配列または string として指定します。Description プロパティを使用して、信号に注釈を付けるか、Name 外の信号成分を特定できます。Simscape™ データをシミュレーション データ インスペクターに記録すると、ノードごとに Description プロパティが自動的に入力されます。

信号の測定単位。

例: 'g/s'

信号データのデータ型

例: 'double'

信号データが実数か複素数かを指定します。

例: 'real'

信号のサンプル時間。'Continuous' の値は、可変ステップ シミュレーションを示します。

例: 'Continuous'

例: 0.1

信号を作成したモデルの名前。

例: 'sldemo_fuelsys'

信号を作成したブロックのパス。

例: 'sldemo_fuelsys/Engine Gas Dynamics'

完全なモデルの階層構造を含む信号を生成するブロックのパス。参照モデル内の信号の場合、FullBlockPath は絶対パスを含む cell 配列です。その他の信号の場合、FullBlockPathBlockPath と同じです。

例: 'sldemo_fuelsys/Engine Gas Dynamics/Mixing & Combustion/MinMax'

信号を定義する出力端子のインデックス。

例: 1

信号を含む行列の次元。

例: [1]

ベクトルまたは行列の一部である信号のインデックス。

信号の時間およびデータ値。バスの場合、Values は構造体です。

MATLAB ワークスペースからインポートされる信号に対する信号を含む高水準なログ構造体の名前。

MATLAB ワークスペースからインポートされる信号に対する信号の時間データを含む変数の名前。

MATLAB ワークスペースからインポートされた信号の信号データを含む配列の名前。

可視化プロパティ

シミュレーション データ インスペクターで複素信号データを表示する方法を指定している複素数形式

  • "real-imaginary" — 信号をプロットすると、信号の実数部と虚数部が一緒に表示されます。信号の虚数部は、[ラインの色] の異なる階調でプロットされます。

  • "magnitude" — 信号をプロットすると、信号の振幅が表示されます。

  • "magnitude-phase" — 信号をプロットすると、信号の振幅と位相が一緒に表示されます。

  • "phase" — 信号をプロットすると、信号の位相が表示されます。位相は、[ラインの色] の異なる階調でプロットされます。

データ型: char | string

信号を任意のサブプロットでプロットするかどうかを示す論理値。Checkedfalse に設定すると、すべてのサブプロットから信号がクリアされます。Checkedtrue に設定すると、アクティブなサブプロットで信号がプロットされます。

データ型: logical

1 行 3 列の RGB ベクトルで指定されたプロット内の信号の色。

例: [0 114 189]

データ型: double

信号線のスタイル。

  • '-' は、実線スタイルを指定します。

  • '--' は、破線スタイルを指定します。

  • ':' は、点線スタイルを指定します。

  • '-.' は、一点鎖線スタイルを指定します。

データの可視化と同期で使用される内挿法。'zoh' はゼロ次ホールド内挿を指定し、'linear' は線形内挿を指定し、'none' は内挿を指定しません。内挿オプションの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

比較プロパティ

信号および比較に使用される信号の絶対許容誤差 (正の値)。シミュレーション データ インスペクターは、[グローバル許容誤差オーバーライド]yes に設定されている場合に、[ベースライン] 信号の信号プロパティで指定された許容誤差を使用します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.1

データ型: double

信号比較に使用される信号の相対許容誤差 (正の値)。シミュレーション データ インスペクターは、[グローバル許容誤差オーバーライド]yes に設定されている場合に、[ベースライン] 信号の信号プロパティで指定された許容誤差を使用します。相対許容誤差は非整数乗数として表されます。たとえば、0.1 は 10 パーセントの許容誤差を指定します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.05

データ型: double

信号比較に使用される信号の時間の許容誤差 (正の値)。シミュレーション データ インスペクターは、[グローバル許容誤差オーバーライド]yes に設定されている場合に、[ベースライン] 信号の信号プロパティで指定された許容誤差を使用します。時間の許容誤差 (秒単位) を指定します。シミュレーション データ インスペクターにおける許容誤差の詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

例: 0.1

データ型: double

比較用の信号時間データの同期に使用されるメソッド。同期オプションの詳細については、シミュレーション データ インスペクターでデータを比較する方法を参照してください。

メソッド

convertUnits 信号単位の変換
export MATLAB timeseries への信号オブジェクトのエクスポート
getAsTall 時間値およびデータ値を持つ tall timetable を返す
plotOnSubPlot 指定されたサブプロットで信号をプロットする

コピーのセマンティクス

ハンドル。ハンドル クラスがコピー操作にどのように影響するかについては、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

信号基底による信号の許容誤差の値を変更し、モデル パラメーターの変更による影響を評価できます。この例では slexAircraftExample モデルとシミュレーション データ インスペクターを使用し、制御入力の後にローパス フィルターの時定数を変更することによる影響を評価します。

設定

モデルを読み込み、q, rad/sec 信号および alpha, rad 信号をログ記録するようマークします。次に、モデルのシミュレーションを実行してベースライン実行を作成します。

% Load example model
load_system('slexAircraftExample')

% Mark the q, rad/sec and alpha, rad signals for logging
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',3,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate system
out_1 = sim('slexAircraftExample');

モデル パラメーターの変更

モデル ワークスペースでモデル パラメーター Ts を変更して、入力ローパス フィルターの時定数を変更します。

% Change input filter time constant
modelWorkspace = get_param('slexAircraftExample','modelworkspace');
assignin(modelWorkspace,'Ts',1)

% Simulate again
out_2 = sim('slexAircraftExample');

実行の比較と結果の検査

関数 Simulink.sdi.compareRuns を使用して、シミュレーションで得たデータを比較します。次に、信号結果の match プロパティを検査し、信号が既定の許容誤差 0 の範囲内にあるかどうかを確認します。

% Get run data
runIDs = Simulink.sdi.getAllRunIDs;
runID1 = runIDs(end - 1);
runID2 = runIDs(end);

% Compare runs
diffRun1 = Simulink.sdi.compareRuns(runID1,runID2);

% Get signal result
sig1Result1 = getResultByIndex(diffRun1,1);
sig2Result1 = getResultByIndex(diffRun1,2);

% Check whether signals matched
sig1Result1.Status
ans = 
OutOfTolerance
sig2Result1.Status
ans = 
OutOfTolerance

信号の許容誤差を使用して実行を比較

信号は既定の許容誤差 0 の範囲内に一致しませんでした。時定数の変更の影響をさらに解析するために、信号の許容誤差をベースライン信号プロパティとの比較に追加し、パスに必要な許容誤差を特定します。この例では、時間の許容誤差と絶対許容誤差の組み合わせを使用します。

% Get signal object for sigID1
run1 = Simulink.sdi.getRun(runID1);
sigID1 = getSignalIDByIndex(run1,1);
sigID2 = getSignalIDByIndex(run1,2);

sig1 = Simulink.sdi.getSignal(sigID1);
sig2 = Simulink.sdi.getSignal(sigID2);

% Set tolerances for q, rad/sec
sig1.AbsTol = 0.1;
sig1.TimeTol = 0.6;

% Set tolerances for alpha, rad
sig2.AbsTol = 0.2;
sig2.TimeTol = 0.8;

% Run the comparison again
diffRun2 = Simulink.sdi.compareRuns(runID1,runID2);
sig1Result2 = getResultByIndex(diffRun2,1);
sig2Result2 = getResultByIndex(diffRun2,2);

% Check the result
sig1Result2.Status
ans = 
WithinTolerance
sig2Result2.Status
ans = 
WithinTolerance

この例では、Simulink.sdi.Signal オブジェクトを取得し、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用してそのプロパティを変更する方法を示します。

Simulink.sdi.Signal オブジェクトの取得

最初に、シミュレーションを実行して実行を作成します。この例では、モデル例 slexAircraftExample を使用します。次に、シミュレーション データ インスペクターのプログラムによるインターフェイスを使用して、関心のある信号の Simulink.sdi.Signal オブジェクトを取得します。

% Configure model "slexAircraftExample" for logging and simulate
simOut = sim('slexAircraftExample','SaveOutput','on',...
                   'SaveFormat','StructureWithTime');
 
% Use Simulink.sdi.createRun to create a run and return the list of signal IDs for signals 
% contained in the run
[~,~,signalIDs] = Simulink.sdi.createRun('My Run','base',{'simOut'});

% Get the signal object corresponding to the first signal ID
signalObj = Simulink.sdi.getSignal(signalIDs(1));

信号プロパティの変更

Simulink.sdi.Signal オブジェクトには、変更可能な比較および可視化プロパティがいくつかあります。

% Define comparison and visualization properties for this signal
signalObj.syncMethod = 'intersection';
signalObj.lineColor = [1,0.4,0.6];
signalObj.lineDashed = '-';
signalObj.checked = true;

信号プロパティの表示

コマンド ウィンドウとシミュレーション データ インスペクターで信号プロパティを表示して、信号にそれらのプロパティが目的どおり定義されているか確認できます。

signalObj
signalObj = 
  Signal with properties:

               ID: 22670
            RunID: 22656
             Name: 'Integrate:CSTATE'
      Description: ""
            Units: ''
         DataType: 'double'
       Complexity: "real"
    ComplexFormat: "real-imaginary"
       SampleTime: ''
            Model: 'slexAircraftExample'
        BlockPath: 'slexAircraftExample/Aircraft Dynamics Model/Vertical Channel/Integrate'
    FullBlockPath: 'slexAircraftExample/Aircraft Dynamics Model/Vertical Channel/Integrate'
        PortIndex: 0
       Dimensions: 1
          Channel: [1x0 int32]
          Checked: 1
        LineColor: [1 0.4000 0.6000]
       LineDashed: '-'
     InterpMethod: 'linear'
           AbsTol: 0
           RelTol: 0
          TimeTol: 0
       SyncMethod: 'intersection'
           Values: [1x1 timeseries]
       RootSource: 'simOut.get('xout')'
       TimeSource: 'simOut.get('xout').time'
       DataSource: 'simOut.get('xout').signals(1).values'

Simulink.sdi.view

この例では、slexAircraftExample モデルを使用して、制御システムの入力信号と出力信号の比較を示します。例では、ストリーミング対象の信号をマークした後に、シミュレーション実行用の実行オブジェクトを取得します。実行オブジェクトの信号 ID で、比較する信号を指定します。

% Load model slexAircraftExample and mark signals for streaming
load_system('slexAircraftExample')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Pilot',1,'on')
Simulink.sdi.markSignalForStreaming('slexAircraftExample/Aircraft Dynamics Model',4,'on')

% Simulate model slexAircraftExample
out = sim('slexAircraftExample');

% Get run IDs for most recent run
allIDs = Simulink.sdi.getAllRunIDs;
runID = allIDs(end);

% Get Run object
aircraftRun = Simulink.sdi.getRun(runID);

% Get signal IDs
signalID1 = getSignalIDByIndex(aircraftRun,1);
signalID2 = getSignalIDByIndex(aircraftRun,2);

if (isValidSignalID(aircraftRun,signalID1))
    % Change signal tolerance
    signal1 = Simulink.sdi.getSignal(signalID1);
    signal1.AbsTol = 0.1;
end

if (isValidSignalID(aircraftRun,signalID1) && isValidSignalID(aircraftRun,signalID2))
    % Compare signals
    sigDiff = Simulink.sdi.compareSignals(signalID1,signalID2);

    % Check whether signal result status
    match = sigDiff.Status
end
match = 
OutOfTolerance

この例では、信号を記録して作成されたシミュレーション データ インスペクター実行の Simulink.sdi.Run オブジェクトにアクセスする方法を示します。Simulink.sdi.Run オブジェクトから、データのプロットに使用できる Simulink.sdi.Signal オブジェクトを取得できます。

シミュレーション実行の作成および Run オブジェクトへのアクセス

sldemo_fuelsys モデルにはログ記録用にマークされている複数の信号が含まれます。ログ データが含まれるシミュレーション実行を作成するには、モデルのシミュレーションを実行します。

sim('ex_vdp');

シミュレーション データ インスペクターは、シミュレーションで作成された各実行を割り当て、データをインポートするか、一意の数値 ID でセッションを開くことによって実行を追跡します。直前に実行したシミュレーションの実行オブジェクトにアクセスするには、関数 Simulink.sdi.getAllRunIDs を使用して、返されるベクトルで最後の実行 ID を取ります。

runIDs = Simulink.sdi.getAllRunIDs;
runID = runIDs(end);

対象の実行の実行 ID を取得すると、関数 Simulink.sdi.getRun を使用して実行に対応する Simulink.sdi.Run オブジェクトを取得できます。Run オブジェクトを使用して、実行内の信号の数など、実行に関連付けられているメタデータをチェックできます。

vdpRun = Simulink.sdi.getRun(runID);

vdpRun.SignalCount
ans = int32
    2

Signal オブジェクトを使用したデータのプロット

関数 getSignalByIndex を使用して、Run オブジェクト fuelRun から対象の信号にアクセスします。

signal1 = getSignalByIndex(vdpRun,1);
signal2 = getSignalByIndex(vdpRun,2);

関数 Simulink.sdi.setSubPlotLayout を使用して 3 行 1 列のレイアウトを指定します。

Simulink.sdi.setSubPlotLayout(2,1)

データをプロットする前に、既にプロットされている任意のデータを関数 Simulink.sdi.clearAllSubPlots を使用して消去します。

Simulink.sdi.clearAllSubPlots

サブプロットごとに 1 つの信号をプロットします。最初のサブプロットで信号をプロットするために、信号の checked プロパティを設定できます。最初のサブプロット以外のサブプロットで信号をプロットするには、関数 plotOnSubPlot を使用します。

signal1.Checked = true;
plotOnSubPlot(signal2,2,1,true);

プロットされたデータの表示

直前に作成したプロットを表示するには、関数 Simulink.sdi.view を使用してシミュレーション データ インスペクターを開きます。

代替方法

シミュレーション データ インスペクター UI を使用して、信号と信号プロパティを表示および変更します。

R2012b で導入