Scope ブロックの一般的なタスク
シミュレーション結果を時間の経過に沿って可視化するには、Scope ブロックか Time Scope (DSP System Toolbox) ブロックを使用します。
複数の信号のスコープへの接続
複数の信号をスコープに接続するには、追加の信号を Scope ブロックにドラッグします。追加の端子が自動的に作成されます。
入力端子の数を指定するには、次を実行します。
[Scope] ウィンドウを開きます。
ツール バーから、[ファイル] 、 [入力端子の数] 、 [詳細] を選択します。
入力端子の数を最大 96 まで入力します。
非バーチャル バスおよびバス配列からの信号
非バーチャル バスおよびバス配列からの信号を Scope ブロックに接続できます。バス信号を表示するには、ノーマルまたはアクセラレータのシミュレーション モードを使用します。Scope ブロックに、各バス要素信号がバスに表示される順序で上から下に表示されます。入れ子にされたバス要素はフラットにされます。たとえば、このモデル内では、nestedBus
信号には const
、subSignal
および step
信号が要素として含まれています。subSignal
サブバスには、chirp
信号と sine
信号がバス要素として含まれています。Scope ブロックでは、subSignal
バスの 2 つの要素が const
信号と step
信号の間に表示されます。
Scope ブロックを使用したシミュレーション データの保存
この例では、Scope ブロックを使用して信号を MATLAB ワークスペースに保存する方法を説明します。Scope ブロックまたは Time Scope ブロックにこれらのステップを使用できます。Floating Scope またはスコープ ビューアーのデータを保存するには、フローティング スコープからのシミュレーション データの保存を参照してください。
vdp
モデルを使用して、ワークスペースへのログ記録を有効にします。以下のコマンドに従うか、[Scope] ウィンドウで、[コンフィギュレーション プロパティ] ボタンをクリックして、[ログ] タブを開き、[ワークスペースにデータのログを作成] を有効にします。
vdp scopeConfig = get_param('vdp/Scope','ScopeConfiguration'); scopeConfig.DataLogging = true; scopeConfig.DataLoggingSaveFormat = 'Dataset'; out = sim('vdp');
MATLAB コマンド ウィンドウで、out.ScopeData
構造体からのログ データを表示します。
x1_data = out.ScopeData{1}.Values.Data(:,1); x1_time = out.ScopeData{1}.Values.Time; plot(x1_time,x1_data)
実行中の表示の停止
この Simulink スナップショットを使用して、シミュレーションがバックグラウンドで実行している間にスコープの表示を停止します。
スコープ ウィンドウを開いてシミュレーションを開始します。
[シミュレーション] 、 [Simulink スナップショット] を選択します。
左下のスコープ ウィンドウのステータスは [フリーズ] ですが、シミュレーションはバックグラウンドで引き続き実行されます。
停止された表示を操作します。たとえば、測定値を使用して、スコープ イメージをコピーしたり、ズーム インまたはズーム アウトを行います。
表示の静止を解除するには、[シミュレーション] 、 [Simulink スナップショット] を再度選択します。
スコープ イメージのコピー
この例では、モデル vdp を使用して、スコープ イメージをコピーして貼り付ける方法を説明します。
Scope ブロックをモデルに追加します。
信号を Scope 端子に接続します。複数の信号のスコープへの接続を参照してください。たとえば、
vdp
モデルでは、信号x1
とx2
をスコープに接続します。スコープ ウィンドウを開いて、シミュレーションを実行します。
[ファイル] 、 [クリップボードにコピー] を選択します。
イメージをドキュメントに貼り付けます。
既定では、[クリップボードにコピー] は、背景が白色で線が見やすい印刷対応バージョンのスコープを保存します。表示されているスコープ プロットを厳密に貼り付ける場合は、[表示] 、 [スタイル] を選択してから、[クリップボードへのコピーで色を保持] チェック ボックスを選択します。
信号の配列のプロット
この例では、スコープが信号の配列をプロットする方法を説明します。
この簡単なモデルでは、Sine Wave ブロックが Scope ブロックに接続されています。Sine Wave ブロックは、振幅が [10, 20; 30 40]
の 4 つの信号を出力します。スコープには、配列内の各正弦波が行列の次数 (1,1)、(2,1)、(1,2)、(2,2) で別々に表示されます。
参照モデルのスコープ
この例では、参照モデルにおけるスコープの動作を説明します。参照モデルでスコープを使用するとき、シミュレーションを最上位モデルから開始したか、参照モデルのスコープから開始したかによって、スコープに表示される出力が変わります。
メモ
スコープ ウィンドウには、直近に開いた最上位モデルのシミュレーション結果が表示されます。Scope ブロックおよびビューアーの再生制御は、そのブロックまたはビューアーを含むモデルをシミュレートします。
この例では、sldemo_mdlref_counter
モデルを、最上位モデルとして使用するとともに、sldemo_mdlref_basic
モデルからの参照モデルとして使用します。
モデルを開きます。
openExample('sldemo_mdlref_basic')
CounterA ブロックをダブルクリックします。キャンバス上部の階層リンクからわかるとおり、sldemo_mdlref_counter
モデルが参照モデルとして開きます。
メインの [実行] ボタンを使用してシミュレーションを実行し、ScopeA スコープを開きます。スコープに、モデル全体のデータが可視化されます。
特定の参照モデルを単独で可視化する場合は、そのモデルを最上位モデルとして開きます。この例では、CounterA ブロックを右クリックして [最上位モデルとして開く]
を選択します。モデルが別のウィンドウで開き、階層リンクに参照モデルの名前だけが表示されます。
Simulink ウィンドウまたはスコープ ウィンドウからシミュレーションを実行すると、スコープに別のモデルへの参照なしでモデルが可視化されます。この場合、モデルの入力は常にゼロになります。
Enabled Subsystem 内のスコープ
Enabled Subsystem ブロック内に配置すると、スコープはシミュレーション モードによって異なった動作をします。
ノーマル モード — スコープはサブシステムが有効になったときにデータをプロットします。サブシステムが無効になると、表示のプロットにギャップが示されます。
エクスターナル モード、アクセラレータ モード、ラピッド モード — スコープはサブシステムが有効になったときにデータをプロットします。表示では、ギャップは直線で接続されます。
Scope の x 軸の変更
この例では、[時間範囲] および [時間表示オフセット] パラメーターを使用して Scope ブロックの x 軸の値を変更する方法を示します。[時間範囲] パラメーターは、表示されるシミュレーション時間を変更し、x 軸ラベルをオフセットします。[時間表示オフセット] パラメーターは x 軸で使用されるラベルを変更します。
Time Scope ブロック、Floating Scope ブロック、またはスコープ ビューアーでこの手順を使用することもできます。
モデルを開いて、シミュレーションを実行し、元のスコープ出力を表示します。シミュレーションは 10 のタイム ステップで実行され、タイム ステップごとに 1 ずつ増えていきます。
model = 'ModifyScopeXAxis'; open_system(model); sim(model); open_system([model,'/Scope']);
表示される時間範囲の変更
[時間範囲] パラメーターを 2 に変更します。以下のコマンドを実行するか、[Scope] ウィンドウで、[コンフィギュレーション プロパティ] ボタンをクリックし、[時間] タブに移動します。
scopeConfig = get_param([model,'/Scope'],'ScopeConfiguration'); scopeConfig.TimeSpan = '2'; sim(model); open_system([model,'/Scope']);
スコープの x 軸には最後の 2 つのタイム ステップのみ表示され、x 軸がオフセットされて 0 ~ 2 が示されています。ボタン ツール バーには、x 軸が 8 でオフセットされることが示されています。このオフセットは、[時間表示オフセット] の値とは異なります。
[時間範囲] パラメーターは、シミュレーションの開始時に信号の初期化またはその他の起動タスクを可視化しない場合に役立ちます。[Span x-axis] ボタンをクリックしても、シミュレーション全体の時間範囲を確認できます。
x 軸ラベルのオフセット
[時間表示オフセット] パラメーターを 5 に変更します。また、以下のコマンドを使用するか、[Scope] ウィンドウで、[コンフィギュレーション プロパティ] ボタンをクリックし、[時間] タブを開きます。
scopeConfig.TimeDisplayOffset = '5'; sim(model); open_system([model,'/Scope']);
ここでは、2 の同じ時間範囲が [Scope] に表示されていますが、x 軸ラベルは 5 でオフセットされ、5 から始まり 7 で終了しています。[Span x-axis] ボタンをクリックしても、x 軸ラベルは 5 から始まります。
スコープ表示での信号単位の表示
信号単位は、Inport ブロックと Outport ブロックを使用してモデル コンポーネントの境界 (Subsystem ブロックと Model ブロック) で指定できます。Simulink モデルでの単位の指定を参照してください。Scope ブロックは Outport ブロックまたは Outport ブロックから派生する信号に接続できます。この例では、Out1 ブロックの [単位] プロパティが m/s
に設定されています。
スコープ表示での単位の表示
[Scope] ウィンドウのツール バーで、[コンフィギュレーション プロパティ] ボタン
を選択します。
[コンフィギュレーション プロパティ] で次を行います。[Scope] ダイアログ ボックスで、[表示] タブを選択します。
[Y ラベル] ボックスに、Y 軸のタイトルに続けて
(%<SignalUnits>)
を入力します。たとえば、次のように入力します。Velocity (%<SignalUnits>)
[OK] または [適用] をクリックします。
信号単位は、y 軸ラベルにメートル/秒 (
m/s
) として、[カーソルの測定] パネルにミリメートル/秒 (mm/s
) として表示されます。
Simulink ツールストリップから、[デバッグ] 、 [情報のオーバーレイ] 、 の [単位] を選択することもできます。[Y ラベル] プロパティに (%<SignalUnits>)
を入力する必要はありません。
プログラムによるスコープ表示での単位の表示
スコープのプロパティを取得します。コマンド ウィンドウで次を入力します。
load_system('my_model') s = get_param('my_model/Scope','ScopeConfiguration');
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
記録されたデータ オブジェクトからの単位の特定
シミュレーション データをスコープから [データセット]
形式で保存する場合、単位情報を timeseries オブジェクトの DataInfo
フィールドで見つけることができます。
メモ
スコープがサポートする信号の単位は [データセット]
ログ形式のみであり、古いログ形式の [配列]
、[構造体]
、[時間付き構造体]
はサポートしていません。
[Scope] ウィンドウのツール バーで、[コンフィギュレーション プロパティ] ボタン
を選択します。
[コンフィギュレーション プロパティ] ウィンドウで、[ログ] タブを選択します。
[ワークスペースにデータのログを作成] チェック ボックスをオンにします。テキスト ボックスにシミュレーション データを保存する変数名を入力します。たとえば「
ScopeData
」と入力します。[Scope] ウィンドウのツール バーで、[実行] ボタン
を選択します。
コマンド ウィンドウで次を入力します。
ScopeData.getElement(1).Values.DataInfo
Package: tsdata Common Properties: Units: m/s (Simulink.SimulationData.Unit) Interpolation: linear (tsdata.interpolation)
単位の異なる信号のスコープへの接続
スコープに複数の端子がある場合、Simulink® は各端子が 1 つの単位のみでデータを受け取るようにします。(たとえば Bus Creator ブロックを使用することで) 信号をさまざまな単位で結合しようとすると、Simulink はエラーを返します。
スコープに表示される単位は端子と表示領域の数に依存します。
端子の数は表示領域の数と等しい — 1 つの端子は y 軸ラベルに示されるその端子信号の単位で 1 つの表示領域に割り当てられます。
表示領域の数よりも多い — 1 つの端子は他の信号に割り当てられた最後の表示領域と共に、1 つの表示領域に割り当てられます。最後の y 軸ラベルにさまざまな単位がコンマ区切りリストとして表示されます。
表示領域の数とレイアウトの選択
[Scope] ウィンドウで、[コンフィギュレーション プロパティ] ボタン
を選択します。
[コンフィギュレーション プロパティ] ダイアログ ボックスで、[メイン] タブを選択してから [レイアウト] ボタンを選択します。
必要な表示領域の数とレイアウトを選択します。
1 行または 1 列に 4 つを超える表示領域を選択できます。レイアウト内をクリックしてマウス ポインターをドラッグし、最大 16 行 16 列までレイアウトを拡張します。
クリックすると、選択したレイアウトが [Scope] ウィンドウに適用されます。
MATLAB デスクトップへの [Scope] ウィンドウのドックとアンドック
[Scope] ウィンドウの右上で、[Scope をドックに入れる] ボタンをクリックします。
[Scope] ウィンドウは MATLAB® デスクトップでコマンド ウィンドウの上に配置されます。
[Scope アクションの表示] ボタンをクリックしてから、[Scope をドックから出す] をクリックします。
参考
Scope | Floating Scope | Scope Viewer