簡単なモデルの作成
Simulink® を使用して、システムをモデル化し、そのシステムの動的な振る舞いをシミュレーションすることができます。この例では、簡単なモデルを作成しますが、同じ基礎的な手法を用いて複雑なモデルを作成することもできます。この例では、簡略化された車の動きをシミュレーションします。通常、車はアクセル ペダルを踏んでいる間は動いています。ペダルを放すと、車は減速して停止し、アイドリング状態になります。
Simulink ブロックは、入力と出力間の数学的関係を定義するモデル要素です。この簡単なモデルを作成するには、次の 4 つの Simulink ブロックが必要です。
| ブロック名 | ブロックの目的 | モデルの目的 |
|---|---|---|
| Pulse Generator | モデルの入力信号を生成する。 | アクセル ペダルを表す。 |
| Gain | 入力信号を定数値で乗算する。 | アクセルを踏むことによる車の加速への影響を計算する。 |
| Second-Order Integrator | 入力信号を 2 回積分する。 | 加速度から位置を取得する。 |
| Outport | 信号をモデルからの出力として指定する。 | 位置をモデルからの出力として指定する。 |

このモデルのシミュレーションでは、短いパルスを 2 回積分してランプを取得します。入力パルスは、アクセル ペダルの踏み込みを表します。ペダルが踏まれているときは 1、踏まれていないときは 0 です。出力ランプは、増大する始点からの距離を表します。
新しいモデルを開く
Simulink エディターを使用して、モデルを作成します。
MATLAB® を起動します。MATLAB ツールストリップから、[Simulink] ボタン
をクリックします。
[空のモデル] テンプレートを選択します。
Simulink エディターが開きます。
優先順位の低下が生じないように、または同じ名前を持つ複数のモデルが同時に開くのを避けるために、Simulink エディターは読み込まれているモデルおよびパス上のファイルをチェックし、次に使用可能な名前 (
untitled、untitled1、untitled2など) を使用してモデルを作成します。
[シミュレーション] タブで、[保存]、[名前を付けて保存] を選択します。[ファイル名] テキスト ボックスで、モデルの名前を入力します (
simple_modelなど)。[保存] をクリックします。モデルがファイル拡張子.slxを付けられて保存されます。
Simulink ライブラリ ブラウザーを開く
Simulink は、ライブラリ ブラウザーで機能別に整理された一連のブロック ライブラリを提供します。以下のライブラリはほとんどのワークフローに共通です。
Continuous — 連続状態をもつシステム用のブロック
Discrete — 離散状態をもつシステム用のブロック
Math Operations — 代数方程式および論理方程式を実装するブロック
Sinks — ブロックに接続する信号を格納および表示するブロック
Sources — モデルを駆動する信号値を生成するブロック
ライブラリ ブラウザーを開くには、Simulink ツールストリップの [シミュレーション] タブで [ライブラリ ブラウザー] をクリックします。

ブロック ライブラリから参照するには、ライブラリ ツリーでライブラリとそのサブライブラリを展開します。
使用可能なすべてのブロック ライブラリを検索するには、検索語を入力します。たとえば、Pulse Generator ブロックを検索します。検索ボックスに「pulse」と入力してから、Enter キーを押します。名前または説明に pulse が含まれるブロックがライブラリで検索され、該当するブロックがライブラリ ブラウザーの [検索結果] タブに表示されます。[ライブラリ] タブをクリックすると、ライブラリ ツリーの参照に戻ることができます。

モデルへのブロックの追加
モデルの作成を開始するには、ブロックをモデル キャンバスに追加します。ライブラリ ブラウザーまたはクイック挿入メニューを使用してブロックを追加できます。
Pulse Generator ブロックを追加します。ライブラリ ブラウザーのツリーで [Simulink] ライブラリを展開します。[Sources] サブライブラリを展開します。Pulse Generator ブロックをモデル キャンバスにドラッグします。

Gain ブロックを追加します。モデル キャンバスをダブルクリックします。表示されるクイック挿入メニューに、「
gain」と入力します。ブロックのリストが表示されます。
異なるライブラリ ファイルに保存されている場合、複数の異なるブロックに同じ名前が付けられていることがあります。ブロックが属するライブラリは、ブロック名の下に一覧表示されています。Simulink ライブラリの Gain ブロックが選択されていることを確認します。そうでない場合は、矢印キーを使用するかブロック名をクリックして、ブロックを選択します。
選択したブロックの詳細については、検索結果の右側にある詳細ペインの説明を確認します。ブロックのドキュメンテーション全体を参照するには、[ドキュメンテーション] をクリックします。ブロックを使用する例については、[例] の下のリンクをクリックします。詳細ペインを非表示にする (または非表示を解除する) には、右上の矢印
をクリックします。選択したブロックをモデルに追加するには、Enter キーを押すか選択項目をダブルクリックします。

ライブラリ ブラウザーまたはクイック挿入メニューを使用して、以下のブロックをモデルに追加します。
ブロック ライブラリ Out1 Simulink ライブラリ、Sinks サブライブラリ Second-Order Integrator Simulink ライブラリ、Continuous サブライブラリ 2 つ目の Out1 ブロックを追加するため、キーボード ショートカット Ctrl+C および Ctrl+V (macOS では、command+C および command+V) を使用して、既存のブロックをコピーして別のポイントにペーストします。これで、モデルに必要なブロックが揃いました。
ブロックの接続
次のように接続します。
Pulse Generator ブロックを Gain ブロックに。
Gain ブロックを Second-Order Integrator ブロックに。
Second-Order Integrator ブロックを 2 つの Out1 ブロックに。
たとえば、Pulse Generator ブロックを Gain ブロックに接続するには次のようにします。
Pulse Generator ブロックの右側の出力端子をクリックします。
その出力端子と接続に適したすべての入力端子が青色のシェブロン記号 (>) で示されます。
接続キューを確認するには、シェブロン記号 (>) をポイントします。
キューをクリックし、ラインおよび信号の流れる方向を示す矢印を使用してブロックを接続します。
ブロックの接続方法の詳細については、ブロックの接続を参照してください。

ブロックを接続したら、各ブロックをドラッグして、Pulse Generator ブロック、Gain ブロック、および Second-Order Integrator ブロックを配置します。ブロックのサイズを変更するには、ブロックの角をドラッグします。
大規模モデルの場合は、個々のブロックをドラッグする代わりに、自動配置を使用してモデルのレイアウトを改善できます。モデル キャンバスを右クリックします。[最上位モデル] コンテキスト メニューが表示されます。Simulink コンテキスト メニューでは、色やフォントの変更、またはモデルの自動配置などの書式設定オプションは、書式設定バーにあります。書式設定バーを展開するには、メニューの上部にある矢印
をクリックします。次に、[自動配置] ボタン
をクリックします。

ヒント
コンテキスト メニュー ボタンを押して実行できるアクションの内容を説明するツールヒントを表示するには、ボタン アイコンの上にポインターを合わせます。

自動配置は、ブロックを整列して信号線をまっすぐにします。

ブロック パラメーター値の編集
ブロックには、変更可能なパラメーター値があります。ブロックの変更可能なパラメーターと、そのパラメーターが受け取る値の型について確認するには、ブロックのドキュメンテーションを開きます。ブロックを右クリックし、コンテキスト メニューの右上隅にある [ヘルプ ドキュメンテーションを開く] ボタン
をクリックします。
Constant ブロックや Gain ブロックなどの一部のブロックでは、ブロック上でパラメーター値を直接変更できます。モデル例の Gain ブロックのゲイン値を 2 に変更します。ブロックを選択し、ブロック上で値をクリックして新しい値を入力して、Enter キーを押します。
[ブロック パラメーター] ダイアログ ボックスでゲイン値を変更することもできます。[ブロック パラメーター] ダイアログ ボックスを開くには、ブロックをダブルクリックします。または、ブロックを右クリックして [ブロック パラメーター] ボタン
をクリックします。表示されたダイアログ ボックスで、[ゲイン] の値を 2 に変更し、Enter キーを押します。

3 つ目の方法は、プロパティ インスペクターを使用することです。Gain ブロックを選択します。プロパティ インスペクターを開くには、Ctrl+Shift+I を押します (macOS では、command+option+O を押します)。または、ブロックを右クリックして [プロパティ インスペクター] ボタン
をクリックします。プロパティ インスペクターの [パラメーター] タブで、[ゲイン] の値を 2 に変更します。
ブロック アイコンに表示されていないパラメーター値を変更するには、[ブロック パラメーター] ダイアログ ボックスまたはプロパティ インスペクターを使用します。値を変更するパラメーターの名前が [ブロック パラメーター] ダイアログ ボックスに表示されていない場合は、プロパティ インスペクターを確認します (逆の場合も同様)。
シミュレーションの実行
シミュレーションの終了時間を指定します。その後、モデルのシミュレーションを実行します。
[シミュレーション] タブで、シミュレーションの終了時間を設定します。Simulink ツールストリップで、[シミュレーション] タブの [終了時間] テキスト フィールドに値を入力します。

既定の終了時間である
10.0はこのモデルに適しています。この時間値には単位がありません。Simulink シミュレーションの時間単位は、方程式の構成方法によって異なります。この例では、簡略化された車の動きを 10 秒間シミュレートしますが、他のモデルでは時間の単位がミリ秒や年になる可能性もあります。モデルのシミュレーションを実行するには、Ctrl+T を押します (macOS では、command+T を押します)。または、ツールストリップの [シミュレーション] タブで [実行]
をクリックします。
シミュレーション データの確認
シミュレーション データ インスペクターでシミュレーション結果を確認するには、信号線のいずれかを右クリックして [データ インスペクターで表示] ボタン
をクリックします。
シミュレーション データ インスペクターでデータをプロットするには、左にあるチェックリストから信号を選択します。たとえば、車の位置をプロットするには、Out1:1 という名前の信号を選択します。

モデルの改良
ブロック パラメーターの変更、新しいブロックの追加、新しい接続の作成、信号線の注釈付けにより、モデルを改良できます。
ブロック パラメーターの変更
この例では、moving_car という名前の既存の運動モデルに基づいて近接センサーをモデル化します。
このシナリオでは、デジタル センサーは車と 10 m (30 ft) 離れた場所にある障害物との間の距離を測定します。モデルは、以下の条件を考慮してセンサーの測定値および車の位置を出力します。
車は障害物に到達すると急停止します。
物理的な世界では、センサーによる距離測定が不正確であるため、偶発的な数値誤差が生じます。
デジタル センサーは一定の時間間隔で作動します。
moving_car モデルを開きます。
open_system("moving_car.slx");最初に、車の位置が 10 に到達したときに急停止するようにモデル化する必要があります。Integrator, Second-Order ブロックにはこの目的のためのパラメーターがあります。
Integrator, Second-Order ブロックをダブルクリックします。[ブロック パラメーター] ダイアログ ボックスが表示されます。
[制限 x] を選択し、[上限 x] に
10と入力します。パラメーターの背景色が変化し、モデルに適用されていない変更であることを示します。[OK] をクリックして、変更を適用してダイアログ ボックスを閉じます。
新しいブロックの追加と接続
モデルを変更して、障害物からの距離を測定するセンサーを追加します。必要に応じて、新しいブロックが収まるようにモデル ウィンドウを展開します。
車両と障害物の位置の間の距離を検出するには、[Sources] ライブラリから Constant ブロックを追加し、ブロックの値を
10に設定します。障害物の位置と車両の位置の間の距離を検出するには、[Math Operations] ライブラリから Subtract ブロックを追加します。実際のセンサーの不正確な測定値をシミュレーションするには、[Sources] ライブラリの Band-Limited White Noise ブロックを使用してモデルにノイズを追加します。ブロックをダブルクリックして、[ノイズ パワー] パラメーターを
0.001に設定します。[Math Operations] ライブラリの Add ブロックを使用して、距離測定値にノイズを追加します。Simulink では、指定した間隔で信号をサンプリングするには、サンプル アンド ホールドが必要です。[Discrete] ライブラリから Zero-Order Hold ブロックを追加します。次に、ブロックをダブルクリックして、[サンプル時間] パラメーターを
0.1に変更します。センサー出力のログを記録するには、Zero-Order Hold ブロックを別の Outport ブロックに接続します。
新しいブロックを接続します。Second-Order Integrator ブロックの出力が既に別の端子に接続されています。信号内で分岐を作成するには、信号を左クリックして接続に使用する可能性のある端子を強調表示し、適切な端子をクリックします。

信号の注釈付け
信号名をモデルに追加します。
信号をダブルクリックし、信号名を入力します。

テキスト ボックス以外の場所をクリックして終了します。
これらの手順を繰り返して、次のように名前を追加します。

複数の信号の表示
actual distance 信号と measured distance 信号を比較します。measured distance 信号のログは出力として記録されます。actual distance 信号のログを記録するには、信号ログ用にマークできます。信号線を右クリックし、[信号のログ] ボタン
をクリックします。ログ バッジ
は、その信号がログ記録用にマークされていることを示します。
モデルのシミュレーションを実行します。シミュレーション データ インスペクターでシミュレーション結果を確認するには、信号線を右クリックして [データ インスペクターで表示] ボタン
をクリックします。[出力端子] チェックリストと [信号] チェックリストを展開します。両方の信号を同じ時間プロットにプロットするには、actual distance 信号と measured distance 信号を選択します。

測定値が実際の値から最大 0.3 m 逸脱する可能性があることがプロットで示されています。この情報は、衝突警報などの安全機能を設計するときに役立ちます。
別個のサブプロットでの信号の表示
別個のサブプロットに信号を表示して結果を解析することもできます。たとえば、pedal position 信号と velocity 信号のサブプロットを追加して、ペダルの位置、車の速度、車と障害物の間の距離について、それらの間の関係を確認できます。
pedal position 信号を信号ログ用にマークします。pedal position 信号線を右クリックし、[信号のログ] ボタン
をクリックします。
モデルのシミュレーションを実行します。シミュレーションが終了したら、シミュレーション データ インスペクターで [可視化とレイアウト]
をクリックします。次に、グリッドの行数と列数を指定して 3 行 1 列のレイアウトを作成します。

真ん中のサブプロットに velocity 信号、下のサブプロットに pedal position 信号を追加します。サブプロットに信号を追加するには、サブプロットを選択し、信号テーブルから信号を選択します。

3 つのサブプロットでデータを可視化することにより、車の速度と障害物からの距離にアクセル ペダルの踏み込みがどのように影響するかを確認できます。これについてさらに調べるために、Pulse Generator ブロックのパラメーターを調整してアクセル ペダルの動作を変更できます。Pulse Generator ブロックの [ブロック パラメーター] ダイアログ ボックスを開くには、ブロックをダブルクリックします。たとえば、[周期] を 5、[パルス幅] を 20 に設定して、アクセル ペダルの 1 秒間の踏み込みを 2 回モデル化します。
モデルのシミュレーションを実行します。シミュレーション データ インスペクターで、Space キーを押して信号をビューに合わせます。

シミュレーション データ インスペクターで、プロットや信号の外観のカスタマイズ、ズームとパン、データ カーソルの追加を行ってデータをさらに検証できます。詳細については、シミュレーション データ インスペクターを使用したプロットの作成を参照してください。
参考
ブロック
- Pulse Generator | Gain | Second-Order Integrator | Sum | Constant | Zero-Order Hold | Band-Limited White Noise