メインコンテンツ

Scope ブロックの一般的なタスク

シミュレーション結果を時間の経過に沿って可視化するには、Scope ブロックか Time Scope (DSP System Toolbox) ブロックを使用します。

複数の信号のスコープへの接続

複数の信号をスコープに接続するには、追加の信号を Scope ブロックにドラッグします。追加の端子が自動的に作成されます。

Animated GIF of automatically created input ports on a scope block

入力端子の数を指定するには、次を実行します。

  1. [Scope] ウィンドウを開きます。

  2. ツール バーから、[スコープ][設定] を選択します。

  3. [一般][入力数] ボックスに、入力端子の数を最大 96 まで入力します。

非バーチャル バスおよびバス配列からの信号

非バーチャル バスおよびバス配列からの信号を Scope ブロックに接続できます。バス信号を表示するには、ノーマルまたはアクセラレータのシミュレーション モードを使用します。Scope ブロックに、各バス要素がバスに表示される順序で上から下に表示されます。入れ子にされたバス要素はフラットにされます。たとえば、このモデルでは、Scope ブロックは TopBus という名前のバスに接続されており、このバスには要素 NestedBus および Step が含まれています。NestedBusTopBus の作成に使用される Bus Creator ブロックの最初の端子に接続され、Step は 2 番目の端子に接続されます。NestedBus には Chirp 信号と Sine 信号が含まれており、ChirpNestedBus の形成に使用される Bus Creator ブロックの Sine の上にある端子に接続されています。Scope ブロックの凡例では、Step 信号の上に NestedBus の 2 つの信号が表示されます。

Simulink model of a scope connected to a bus hierarchy.

Scope window showing the three signals and their names in the Scope legend: TopBus.NestedBus.Chirp, TopBus.NestedBus.Sine, TopBus.Step.

Scope ブロックを使用したシミュレーション データの保存

この例では、Scope ブロックを使用して信号を MATLAB ワークスペースに保存する方法を説明します。Scope ブロックまたは Time Scope ブロックにこれらのステップを使用できます。Floating Scope またはスコープ ビューアーのデータを保存するには、フローティング スコープからのシミュレーション データの保存を参照してください。

vdp モデルは、ファン デル ポール (VDP) の 2 階微分方程式を表します。モデルの詳細については、ファン デル ポール振動子を参照してください。

Scope ブロックを使用して、データのログをワークスペースに記録します。

  • [スコープ]、[設定] を選択します。

  • [ログ][ワークスペースにデータのログを作成] を選択します。

  • シミュレーションを実行して、スコープ データのログをワークスペースに記録します。

あるいは、Scope ブロックでプロットされたデータのログを、プログラムによって Dataset 形式でワークスペースに記録できます。

mdl = "vdp";
open_system(mdl);
scopeConfig = get_param("vdp/Scope","ScopeConfiguration");
scopeConfig.DataLogging = true;
scopeConfig.DataLoggingSaveFormat = "Dataset";
out = sim(mdl);

既定では、ワークスペースにログ記録されたすべてのシミュレーション データが out という名前の単一の Simulink.SimulationOutput オブジェクトとして返されます。ログに記録されたスコープ データは、既定の変数名 ScopeData をもつプロパティとして SimulationOutput オブジェクト内に保存されます。データにアクセスするには、ドット表記を使用します。

out.ScopeData
ans = 

Simulink.SimulationData.Dataset 'ScopeData' with 2 elements

                         Name  BlockPath 
                         ____  _________ 
    1  [1x1 Signal]      x1    vdp/Scope
    2  [1x1 Signal]      x2    vdp/Scope

  - Use braces { } to access, modify, or add elements using index.

MATLAB Figure でワークスペースからデータをプロットすることもできます。たとえば、x1 信号をプロットします。

x1_data = out.ScopeData{1}.Values.Data(:,1);
x1_time = out.ScopeData{1}.Values.Time;
plot(x1_time,x1_data)

実行中の表示の停止

[スナップショット] ボタンを使用して、シミュレーションがバックグラウンドで実行している間にスコープの表示を停止します。

  1. スコープ ウィンドウを開いてシミュレーションを開始します。

  2. [スコープ][スナップショット] を選択します。

    The Scope block with the Snapshot button selected

    左下の [Scope] ウィンドウのステータスは [フリーズ] ですが、シミュレーションはバックグラウンドで引き続き実行されます。

  3. 停止された表示を操作します。たとえば、測定値を使用して、スコープ イメージをコピーしたり、ズーム インまたはズーム アウトを行います。

  4. 表示の静止を解除するには、[スコープ][スナップショット] を再度選択します。

スコープ イメージのコピー

スコープ イメージをコピーし、ドキュメントに貼り付けることができます。

  1. スコープ ウィンドウを開いて、シミュレーションを実行します。

  2. [スコープ][表示をコピー] を選択します。

    The Scope block with the Copy Display option selected

  3. イメージをドキュメントに貼り付けます。

    vdp scope visualization with a white background for printing

    既定では、[表示をコピー] は、背景が白色で線が見やすい印刷対応バージョンのスコープを保存します。表示されているスコープ プロットを厳密に貼り付ける場合は、[スコープ][設定] を選択します。次に、[座標軸のスタイル][コピーで色を保持] を選択します。

Scope の x 軸の変更

この例では、[時間範囲] および [時間表示オフセット] パラメーターを使用して Scope ブロックの x 軸の値を変更する方法を示します。[時間範囲] パラメーターは、表示されるシミュレーション時間を変更し、x 軸ラベルをオフセットします。[時間表示オフセット] パラメーターは x 軸で使用されるラベルを変更します。

Time Scope ブロック、Floating Scope ブロック、またはスコープ ビューアーでこの手順を使用することもできます。

モデルを開いて、シミュレーションを実行し、元のスコープ出力を表示します。シミュレーションは 10 のタイム ステップで実行され、タイム ステップごとに 1 ずつ増えていきます。

model = "ModifyScopeXAxis";
sim(model);

表示される時間範囲の変更

スコープに表示される時間範囲を 2 に変更します。[Scope] ウィンドウで、[スコープ]、[設定] を選択します。次に、[時間][時間範囲]2 に設定します。

あるいは、スコープの時間範囲をプログラムによって設定できます。

scopeConfig = get_param(model+"/Scope","ScopeConfiguration");
scopeConfig.TimeSpan = "2";
sim(model);

スコープの "x" 軸には最後の 2 つのタイム ステップのみ表示され、"x" 軸がオフセットされて 0 ~ 2 が示されています。ボタン ツール バーには、x 軸が 8 でオフセットされることが示されています。このオフセットは、[時間表示オフセット] の値とは異なります。

[時間範囲] パラメーターは、シミュレーションの開始時に信号の初期化またはその他の起動タスクを可視化しない場合に役立ちます。

x 軸ラベルのオフセット

"x" 軸のラベルを、5 ~ 7 の値を表示するように変更します。[スコープ]、[設定] を選択します。次に、[時間][時間表示オフセット]5 に設定します。

あるいは、表示される "x" 軸ラベルをプログラムによって変更できます。

scopeConfig.TimeDisplayOffset = "5";
sim(model);

ここでは、2 の同じ時間範囲が [Scope] に表示されていますが、"x" 軸ラベルは 5 でオフセットされ、5 から始まり 7 で終了しています。

表示領域の数とレイアウトの選択

  1. [Scope] ウィンドウで、[スコープ][グリッドの表示] を選択します。

  2. 必要な表示領域の数とレイアウトを選択します。最大 5 行 5 列のグリッドを選択できます。

    The scope window with the Display Grid option expanded

  3. クリックすると、選択したレイアウトが [Scope] ウィンドウに適用されます。

MATLAB デスクトップへの [Scope] ウィンドウのドックとアンドック

スコープをドックするには、次を行います。

  1. [Scope] ウィンドウで、[スコープ] タブを選択します。

  2. スコープをドックするには、[ドックに入れる] をクリックします。ドロップダウン メニューの [スコープをドッキング] をクリックして、個々のスコープをドックすることもできます。開いているすべてのスコープをドックするには、[すべてのスコープをドッキング] を選択します。

    The scope window showing the Dock Scope and Dock All Scopes options

    スコープがドックされると、[Scope] ウィンドウはスコープ コンテナーに配置されます。スコープ コンテナーは、Simulink モデルの複数の [Scope] ウィンドウのドックに使用できる単一のウィンドウです。

スコープをアンドックするには、次を行います。

  1. スコープ コンテナーで、[ホーム] タブを選択します。

  2. [ドックから出す] をクリックします。

    The Undock button in the scope container

スコープ表示での信号単位の表示

信号単位は、Inport ブロックと Outport ブロックを使用してモデル コンポーネントの境界 (Subsystem ブロックと Model ブロック) で指定できます。Simulink モデルでの単位の指定を参照してください。Scope ブロックは Outport ブロックまたは Outport ブロックから派生する信号に接続できます。この例では、Out1 ブロックの [単位] プロパティが m/s に設定されています。

Sample model with units specified

スコープ表示での単位の表示

  1. [Scope] ウィンドウのツール バーで、[スコープ][設定] を選択します。

  2. [Y 軸][Y 軸ラベル] ボックスに、y 軸のタイトルに続けて (%<SignalUnits>) を入力します。たとえば、「Velocity (%<SignalUnits>)」と入力します。

    信号単位は、y 軸ラベルにメートル/秒 (m/s) として表示されます。スコープでは、データ カーソルをポイントしたときにも単位が表示されます。

    Scope window with the units displayed in the cursor measurements and y-axis label.

プログラムによるスコープ表示での単位の表示

  1. スコープのプロパティを取得します。コマンド ウィンドウで次のコマンドを入力します。

    load_system("my_model")
    s = get_param("my_model/Scope","ScopeConfiguration");
    
  2. y 軸ラベルを最初の表示に追加します。

    s.ActiveDisplay = 1
    s.YLabel = "Velocity (%<SignalUnits>)";
    

モデル パラメーター ShowPortUnits'on' に設定することもできます。モデル内のすべてのスコープは、(%<SignalUnits>)[Y ラベル] プロパティにあるかないかに関係なく、表示領域に単位を示します。

load_system("my_model")
get_param("my_model","ShowPortUnits")
ans =
off
set_param("my_model","ShowPortUnits","on")
ans =
on

記録されたデータ オブジェクトからの単位の特定

シミュレーション データをスコープから [データセット] 形式で保存する場合、単位情報をログに記録されたデータ オブジェクトで見つけることができます。

メモ

スコープがサポートする信号の単位は [データセット] ログ形式でのみ確認でき、古いログ形式の [配列][構造体][時間付き構造体] では確認できません。

  1. データのログを記録するように Scope ブロックを設定します。[スコープ][設定] を選択します。次に、[ログ][ワークスペースにデータのログを作成] を選択します。

  2. シミュレーションを実行します。

  3. モデルが結果を単一のシミュレーション出力として返すように構成されている場合、スコープ データは SimulationOutput オブジェクトのプロパティとして保存されます。

    out.ScopeData.getElement(1).Values.DataInfo
    Package: tsdata
    Common Properties:
                 Units: m/s (Simulink.SimulationData.Unit)
         Interpolation: linear (tsdata.interpolation)
    

    モデルが結果を単一のシミュレーション出力として返すように構成されていない場合、スコープ データは Simulink.SimulationData.Dataset オブジェクトとして保存されます。

    ScopeData.getElement(1).Values.DataInfo
    Package: tsdata
    Common Properties:
                 Units: m/s (Simulink.SimulationData.Unit)
         Interpolation: linear (tsdata.interpolation)
    

単位の異なる信号のスコープへの接続

スコープに複数の端子がある場合、各端子は 1 つの単位のみでデータを受け取ります。たとえば Bus Creator ブロックを使用することで信号をさまざまな単位で結合しようとすると、エラーが返されます。

スコープに表示される単位は端子と表示領域の数に依存します。

  • 端子の数は表示領域の数と等しい — 1 つの端子は y 軸ラベルに示されるその端子信号の単位で 1 つの表示領域に割り当てられます。

  • 表示領域の数よりも多い — 1 つの端子は他の信号に割り当てられた最後の表示領域と共に、1 つの表示領域に割り当てられます。最後の y 軸ラベルにさまざまな単位がコンマ区切りリストとして表示されます。

信号の配列のプロット

この例では、スコープが信号の配列をプロットする方法を説明します。

この簡単なモデルでは、Sine Wave ブロックが Scope ブロックに接続されています。Sine Wave ブロックは、振幅が [10, 20; 30 40] の 4 つの信号を出力します。Scope ブロックには、配列内の各正弦波が行列の次数 (1,1)、(2,1)、(1,2)、(2,2) で別々に表示されます。

参照モデルのスコープ

この例では、参照モデルにおけるスコープの動作を説明します。参照モデルでスコープを使用するとき、モデルの階層構造の情報が、スコープを含むモデルを最上位モデルとして実行する場合とは異なる出力結果になる可能性があります。

メモ

スコープ ウィンドウには、直近に開いた最上位モデルのシミュレーション結果が表示されます。Scope ブロックおよびビューアーの再生制御は、そのブロックまたはビューアーを含むモデルをシミュレートします。

この例では、sldemo_mdlref_counter モデルを、最上位モデルとして使用するとともに、sldemo_mdlref_basic モデルの参照モデルとして使用します。

モデルを開きます。

openExample("simulink/FindMdlrefsFindReferencedModelsinModelReferenceHierarchyExample","supportingfile","sldemo_mdlref_basic")

CounterA という名前の Model ブロックをダブルクリックします。エクスプローラー バーからわかるとおり、sldemo_mdlref_counter モデルが参照モデルとして開きます。

sldemo_mdlref_counter model with the breadcrumb highlighted to show you are in the CounterA referenced model from the sldemo_mdlref_basic model.

シミュレーションを実行します。次に、ScopeA という名前の Scope ブロックを開きます。スコープに、モデル全体のデータが可視化されます。

Scope window with model simulation results

特定の参照モデルを単独で可視化する場合は、そのモデルを最上位モデルとして開きます。sldemo_mdlref_basic モデルでは、CounterA Model ブロックを右クリックして [最上位モデルとして開く] を選択します。モデルが別のウィンドウで開き、例のバーに sldemo_mdlref_counter モデルの名前だけが表示されます。

sldemo_mdlref_counter model with the breadcrumb highlighted to show you are in a non-referenced version of the model

Simulink ウィンドウまたはスコープ ウィンドウからシミュレーションを実行すると、スコープに別のモデルへの参照なしでモデルが可視化されます。この場合、モデルの入力は常にゼロになります。

Scope window showing a constant zero line

Enabled Subsystem 内のスコープ

Enabled Subsystem ブロック内に配置すると、スコープはシミュレーション モードによって異なった動作をします。

  • ノーマル モード — スコープはサブシステムが有効になったときにデータをプロットします。サブシステムが無効になると、表示のプロットにギャップが示されます。

    Sample scope window with gaps where the subsystem is disabled

  • エクスターナル モード、アクセラレータ モード、ラピッド アクセラレータ モード — スコープはサブシステムが有効になったときにデータをプロットします。表示では、ギャップは直線で接続されます。

    Sample scope window with straight lines where the subsystem is disabled

参考

|

トピック