このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
簡単なモデルの作成
Simulink® を使用して、システムをモデル化し、そのシステムの動的な振る舞いをシミュレーションすることができます。このチュートリアルで簡単なモデルの作成に用いる基礎的な手法は、複雑なモデルで使用されるものと同じです。この例では、簡略化された車の動きをシミュレーションします。通常、車はアクセル ペダルを踏んでいる間は動いています。ペダルを放すと、車はアイドリング状態になり、停止します。
Simulink ブロックは、入力と出力間の数学的関係を定義するモデル要素です。この簡単なモデルを作成するには、次の 4 つの Simulink ブロックが必要です。
ブロック名 | ブロックの目的 | モデルの目的 |
---|---|---|
Pulse Generator | モデルの入力信号を生成する | アクセル ペダルを表す |
Gain | 入力信号を定数値で乗算する | アクセルを踏むことによる車の加速への影響を計算する |
Integrator, Second-Order | 入力信号を 2 回積分 | 加速度から位置を取得する |
Outport | 信号をモデルからの出力として指定する | 位置をモデルからの出力として指定する |
このモデルのシミュレーションでは、短いパルスを 2 回積分してランプを取得します。スコープ ウィンドウに結果が表示されます。入力パルスは、アクセルの踏み込みを表します。ペダルが踏まれているときは 1、踏まれていないときは 0 です。出力ランプは、増大する始点からの距離を表します。
新しいモデルを開く
Simulink エディターを使用して、モデルを作成します。
MATLAB® を起動します。MATLAB ツールストリップから、[Simulink] ボタン
をクリックします。
[空のモデル] テンプレートをクリックします。
Simulink エディターが開きます。
[シミュレーション] タブから、[保存]、[名前を付けて保存] を選択します。[ファイル名] テキスト ボックスで、モデルの名前を入力します (
simple_model
など)。[保存] をクリックします。モデルがファイル拡張子.slx
を付けられて保存されます。
Simulink ライブラリ ブラウザーを開く
Simulink は、ライブラリ ブラウザーで機能別に整理された一連のブロック ライブラリを提供します。以下のライブラリはほとんどのワークフローに共通です。
Continuous — 連続状態をもつシステム用のブロック
Discrete — 離散状態をもつシステム用のブロック
Math Operations — 代数方程式および論理方程式を実装するブロック
Sinks — ブロックに接続する信号を格納および表示するブロック
Sources — モデルを駆動する信号値を生成するブロック
[シミュレーション] タブから、[ライブラリ ブラウザー] ボタン
をクリックします。
ライブラリ ブラウザーが常にデスクトップ上の他のウィンドウの上に表示されるように設定します。Simulink ライブラリ ブラウザーのツール バーで、[常に前面に表示] ボタン
を選択します。
ブロック ライブラリから参照するには、カテゴリを選択してから、左ペインの機能領域を選択します。使用可能なすべてのブロック ライブラリを検索するには、検索語を入力します。
たとえば、Pulse Generator ブロックを検索します。ブラウザーのツール バー上の検索ボックスに pulse
と入力して Enter キーを押します。Simulink は名前または説明に pulse
が含まれるブロックのライブラリを検索し、それらのブロックを表示します。
ブロックについての詳細情報を参照します。Pulse Generator ブロックを右クリックし、[Pulse Generator ブロックのヘルプ] を選択します。すると、そのブロックのリファレンス ページと共にヘルプ ブラウザーが表示されます。
通常、ブロックには複数のパラメーターがあります。ブロックをダブルクリックすることですべてのブロック パラメーターにアクセスできます。
モデルへのブロックの追加
モデルの作成を開始するには、ライブラリを参照してブロックを追加します。
[Sources]
ライブラリから、Pulse Generator ブロックを Simulink エディターにドラッグします。Pulse Generator ブロックのコピーが [Amplitude] パラメーターの値のテキスト ボックスと共にモデルに表示されます。「1
」と入力します。パラメーター値はシミュレーション全体を通じて保持されます。
同じ方法を使用して、以下のブロックをモデルに追加します。
ブロック ライブラリ パラメーター Gain Simulink/Math Operations
ゲイン:
2
Integrator, Second-Order Simulink/Continuous
初期条件:
0
Outport Simulink/Sinks
端子番号:
1
2 つ目の Outport ブロックを追加するため、既存のブロックをコピーし、キーボード ショートカットを使用して別のポイントにペーストします。
これで、モデルに必要なブロックが揃いました。
各ブロックをクリックしてドラッグすることで、ブロックを配置します。ブロックのサイズを変更するには、角をドラッグします。
ブロックの接続
出力端子と入力端子との間にラインを作成することでブロックを接続します。
Pulse Generator ブロックの右側の出力端子をクリックします。
その出力端子と接続に適したすべての入力端子が青色のシェブロン記号
で示されます。
にカーソルを合わせて接続キューを確認します。
キューをクリックします。Simulink により、ブロックがラインで接続され、信号の流れる方向が矢印で示されます。
Gain block の出力端子を Integrator, Second-Order ブロックの入力端子に接続します。
Integrator, Second-Order ブロックの 2 つの出力を 2 つの Outport ブロックに接続します。
モデルを保存します。[シミュレーション] タブで [保存] をクリックします。
信号ビューアーの追加
シミュレーション結果を表示するには、最初の出力を Signal Viewer に接続します。
信号をクリックします。[シミュレーション] タブの [準備] で、[ビューアーの追加] をクリックします。[スコープ] を選択します。ビューアー アイコンが信号に表示され、スコープ ウィンドウが開きます。
アイコンをダブルクリックすることで、いつでもスコープを開くことができます。
シミュレーションの実行
コンフィギュレーション パラメーターを定義したら、モデルをシミュレートする準備が整っています。
[シミュレーション] タブで、ツールストリップの値を変更してシミュレーションの停止時間を設定します。
既定の終了時間である
10.0
はこのモデルに適しています。この時間値には単位がありません。Simulink の時間単位は、方程式の構成方法によって異なります。この例では、簡略化された車の動きを 10 秒間シミュレートしますが、他のモデルでは時間の単位がミリ秒や年になる可能性もあります。シミュレーションを実行するには、[実行] ボタン
をクリックします。
シミュレーションが実行され、ビューアーに出力が生成されます。
モデルの改良
この例では既存のモデル moving_car.slx
を使用して、この運動モデルに基づいて近接センサーをモデル化します。このシナリオでは、デジタル センサーは車と 10 m (30 ft) 離れた場所にある障害物との間の距離を測定します。モデルは、以下の条件を考慮してセンサーの測定値および車の位置を出力します。
車は障害物に到達すると急停止します。
物理的な世界では、センサーによる距離測定が不正確であるため、偶発的な数値誤差が生じます。
デジタル センサーは一定の時間間隔で作動します。
ブロック パラメーターの変更
開始するには、moving_car
モデルを開きます。MATLAB コマンド ラインで、次を入力します。
open_system('moving_car.slx')
最初に、車の位置が 10
に到達したときに急停止するようにモデル化する必要があります。Integrator, Second-Order ブロックにはこの目的のためのパラメーターがあります。
Integrator, Second-Order ブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスが表示されます。
[制限 x] を選択し、[上限 x] に
10
と入力します。パラメーターの背景色が変化し、モデルに適用されていない変更であることを示します。[OK] をクリックして、変更を適用してダイアログ ボックスを閉じます。
新しいブロックの追加と接続
障害物からの距離を測定するセンサーを追加します。
モデルを変更します。必要に応じて、新しいブロックが収まるようにモデル ウィンドウを展開します。
実際の距離を検出します。障害物の位置と車両の位置の間の距離を検出するには、
[Math Operations]
ライブラリから Subtract ブロックを追加します。また、[Sources]
ライブラリから Constant ブロックを追加して、障害物の位置に対して定数値10
を設定します。実際のセンサーでは一般的な、不正確な測定値をモデル化します。
[Sources]
ライブラリの Band-Limited White Noise ブロックを使用してノイズを生成します。[ノイズ パワー] パラメーターを0.001
に設定します。[Math Operations]
ライブラリの Add ブロックを使用して、測定値にノイズを追加します。0.1 秒ごとに作動するデジタル センサーをモデル化します。Simulink では、指定した間隔で信号をサンプリングするには、サンプル アンド ホールドが必要です。
[離散]
ライブラリから Zero-Order Hold ブロックを追加します。ブロックをモデルに追加したら、[Sample Time] パラメーターを0.1
に変更します。別の Outport を追加して、センサー出力に接続します。[端子番号] パラメーターの既定値のままにしておきます。
新しいブロックを接続します。Integrator, Second-Order ブロックの出力が既に別の端子に接続されています。信号内で分岐を作成するには、信号を左クリックして接続に使用する可能性のある端子を強調表示し、適切な端子をクリックします。
信号の注釈付け
信号名をモデルに追加します。
信号をダブルクリックし、信号名を入力します。
テキスト ボックス以外の場所をクリックして終了します。
これらの手順を繰り返して、次のように名前を追加します。
複数の信号の比較
actual distance
信号と measured distance
信号を比較します。
Scope Viewer を作成して
actual distance
信号に接続します。信号を右クリックして [ビューアーの作成と接続]、[Simulink]、[Scope] を選択します。信号の名前がビューアーのタイトルに表示されます。measured distance
信号を同じビューアーに追加します。信号を右クリックし、[ビューアーに接続]、[Scope1] を選択します。前の手順で作成したビューアーに接続していることを確認します。モデルを実行します。ビューアーには 2 つの信号が、
actual distance
は黄色でmeasured distance
は青色で表示されます。グラフを拡大して、ノイズとサンプリングの影響を確認します。[ズーム] ボタン
をクリックします。より詳細に確認する領域周辺のウィンドウを左クリックしてドラッグします。
繰り返し拡大することで、詳細を確認することができます。
このプロットから、測定値は実際の値から 0.3 m も逸脱する可能性があることに注意してください。この情報は、安全機能 (たとえば衝突警報) を設計するときに役立ちます。
参考
ブロック
- Pulse Generator | Gain | Second-Order Integrator | Add | Constant | Zero-Order Hold | Band-Limited White Noise