Main Content

Simulink モデル

モデルは、数式とブロック線図を使用してシステムを抽象化および簡略化して記述したものです。このトピックでは、Simulink® ソフトウェアのツールでシステムを数学的に記述するプロセスについて理解するためのコンテキストを提供するモデル化の概念を示します。

ブロック線図

"ブロック線図" は、Simulink エディターでのモデルの視覚的表現です。エディターで、基本のモデル コンポーネントを表すブロック ライブラリから選択されたブロックを追加できます。基本のコンポーネントには、Integrator ブロック、Gain ブロック、および Sum ブロックが含まれます。ブロックは、信号およびイベント線で相互に接続されて、モデル方程式を視覚的に作成します。

Simulink model block diagram

ブロック線図のセマンティクス

システムの古典的なブロック線図は、ブロックと線でグラフィカルに描画されます。これらのブロック線図の歴史は、フィードバック制御理論や信号処理のような工学分野から派生しています。ブロック線図内のブロックは、それ自体でモデルを定義します。基本のモデル間の関係は、ブロックに接続されている信号線で表されます。ブロック線図のブロックと線は、まとめてシステムのモデル全体を記述します。

Feedback loop block diagram

Simulink では、古典的なブロック線図を次の方法で拡張します。

  • 入力信号、出力信号、ブロック状態の変数間の時間ベースの関係を定義する一連の方程式 (ブロックのメソッド) を各ブロックに追加する。

  • モデル方程式の係数を指定するパラメーターを各ブロックに追加する。

  • これらの関係を時間で評価することでブロック線図の数値解を得るためのエンジンを提供する。ここで、時間は、ユーザー指定の「開始時間」で始まり、ユーザー指定の「終了時間」で終わります。

参考: Simulink ブロック線図シミュレーション

ブロック

"ブロック" は、Simulink エディターの基本モデリング構造です。組み込みの Simulink ライブラリからブロックを追加して、特定の操作を実行します。カスタム ブロックも作成できます。一部のブロックには、入力信号、出力信号、および状態があります。ほとんどのブロックには、ブロック動作を指定するために使用するパラメーターがあります。ブロックにパラメーターがあるかどうかや、それらのパラメーターの性質については、ブロックごとに決まっています。

Three blocks with input and output signal ports (a Delay block, an Integrator block, and a Gain block), and one block with only an output signal port (a Constant block)

各ブロックは、Simulink エンジンの一連の方程式を表します。これらの式は、ブロックのメソッドとして表されます。上のブロックは、以下のブロックのメソッドを持ちます。

Equations that the blocks in the previous image represent

ブロックのメソッドは、ブロック線図のシミュレーション中に評価されます。これらのブロックのメソッドの評価は、シミュレーション ループ内で行われ、シミュレーション ループの各サイクルは、各時点でのブロック線図の評価を表します。

バーチャル ブロック

"バーチャル ブロック" は、モデル内のグラフィカル階層を構成して提供します。モデルのシミュレーション中、Simulink は実行前に所定のブロックを拡張します。これは、フラット化と呼ばれるプロセスです。この拡張は、C や C++ などのプログラミング言語でのマクロの機能に似ています。

Simulink では、次のバーチャル ブロックを定義します。

  • Virtual Subsystem – バーチャル サブシステムを使用して、関連の機能的なパーツをより大きいモデル内にカプセル化します。Virtual Subsystem ブロックでは、パラメーター [Atomic サブシステムとして扱う] のチェック ボックスがオフになっています。

    A Subsystem block and its contents

  • Inport および Outport – 端子ブロックを使用して、Subsystem ブロックまたは Model ブロック外からブロック内へデータ (信号) とイベント (関数呼び出し) を移動します。逆の移動もあります。

    A Subsystem block connected to three Input ports and three Output ports

  • Bus CreatorBus AssignmentBus Selector – Bus ブロックは信号をバーチャル バスに結合して、複雑なブロック線図の信号のルーティングを管理します。バーチャル バスは便宜的なグラフィックス表記であり、モデルの動作は変更しません。

    Bus Creator block connected to three Input Port blocks and an Output Port block

非バーチャル ブロックとバーチャル ブロック信号タイプ合成インターフェイスのガイドラインを参照してください。

非バーチャル ブロック

非バーチャル ブロックは、モデルに実行制御とグラフィカルな階層を提供します。Simulink では、以下の非バーチャルな Subsystem ブロックと Model ブロックが定義されます。

  • Atomic Subsystem と Model – モデルを参照する Atomic Subsystem ブロックまたは Model ブロック内のブロックは、各タイム ステップで単一ユニットとして実行 (アトミック実行) されます。Atomic Subsystem ブロックの場合、パラメーター [Atomic サブシステムとして扱う] のチェック ボックスがオンになっています。

    Atomic Subsystem または参照モデルに Simulink ブロック (実行レートが異なるブロックを含む) を配置できます。この柔軟性により、モデルの機能面を実行レベルでグループ化できるという利点があります。

    次の例では、車両モデルが、車の構造をモデル化するブロックを含む Atomic Subsystem ブロックになっています。制御モデルは、Model ブロックから参照されます。

    Model containing a Model block labeled cruise control model that connects to an Atomic Subsystem block labeled vehicle model

  • Enabled や Triggered – その実行が信号からの外部データによって制御される Atomic Subsystem ブロックまたは Model ブロック。Enable ブロックまたは Trigger ブロック、あるいはその両方が含まれます。Trigger ブロックの場合、パラメーター [トリガー タイプ][立ち上がり][立ち下がり]、または [両方] に設定されます。

    Model with two connected subsystems, one labeled Enabled Subsystem, with inputs from two Input Port blocks, and one labled Triggered Subsystem, with inputs from one Input Port block, and from the Enabled Subsystem

  • Function-Call – その実行が関数呼び出しイニシエーター (Stateflow® チャートまたは Function-Call Generator ブロック、S-Function ブロック、または Hit Crossing ブロックなど) からのイベントによって制御される Atomic Subsystem ブロックまたは Model ブロック。[トリガー タイプ][関数呼び出し] に設定された Trigger ブロックが含まれます。

    Model with a Function-Call Generator block that connects to a Subsystem block labeled Function-Call Subsystem that connects to a Model block labeled Function-Call Model

Simulink は、次の非バーチャル コンポーネントを Subsystem ブロックに対してのみ定義します。

  • Action Subsystem – 実行がアクション イニシエーターからのイベントで制御される Atomic Subsystem ブロック (If ブロックや Switch Case ブロックなど)。Subsystem ブロック内に Action Port ブロックを含みます。

    Model with If block connected to two Subsystem blocks, respectively labeled If Action Subsystem 1, and If Action Subsystem 2

  • While Iterator Subsystem – モデルの各タイム ステップ中に複数の反復を実行する Atomic Subsystem ブロック。論理条件を評価して、反復の数を制御する While Iterator ブロックを含みます。

    While Iterator Subsystem は、任意のタイム ステップで任意の回数の反復を実行できるという点で、Function-Call Subsystem とよく似ています。While Iterator Subsystem が Function-Call Subsystem と異なるのは、独立したイニシエーターがないことです。

  • For Iterator Subsystem – モデルの各タイム ステップ中に固定された回数の反復を実行する Atomic Subsystem ブロック。反復の回数を制御する For Iterator ブロックを含みます。

非バーチャル ブロックとバーチャル ブロックを参照してください。

ブロック マスク

"ブロック マスク" は、選択したブロック パラメーターのみを表示するカスタムのブロック パラメーター インターフェイスです。Subsystem ブロックのマスクを使うと、モデルの階層構造を移動することなく Subsystem ブロック内のブロックにパラメーターを設定するためのインターフェイスを提供できるようになります。

マスクの基礎を参照してください。

カスタム ブロック

"カスタム ブロック" は、Simulink の組み込み機能を拡張する新しいブロックです。モデルで使用できるカスタム ブロックのライブラリを作成することができます。

以下のブロックでは、カスタム ブロックのアルゴリズムをブロック線図でグラフィカルにまたはプログラムにより定義します。

  • MATLAB® 関数 – Simulink モデルで実行される MATLAB 関数を MATLAB 言語を使用して符号化します。Simulink での MATLAB Function ブロックを使用した MATLAB 関数の実装を参照してください。

  • MATLAB System – matlab.System に基づいて既存の System object を Simulink に導入します。MATLAB System ブロックを参照してください。

  • Subsystem – アルゴリズムを表すブロック線図を描画して、このブロック線図を Simulink Subsystem ブロックのインスタンスにラップした後、Simulink ブロック マスクを使用してパラメーター ダイアログにブロックを指定します。Subsystemを参照してください。

  • C Caller – 外部 C コードを Simulink モデルに統合します。C Caller ブロックを使用した C コードの統合を参照してください。

  • S-Function – ブロックのシステム関数を含む MATLAB ファイルまたは MEX ファイルを作成して、カスタム ブロックをプログラムにより作成します。結果のファイルは、S-Function と呼ばれます。その後その S-Function をモデル内の SimulinkS-Function ブロックのインスタンスと関連付けます。S-Functionを参照してください。

カスタム ブロックのタイプおよびAuthor Block Algorithmsを参照してください。

"線" は、Simulink エディターの基本のモデリング構造です。線を使用してブロックの出力端子が他のブロックの入力端子に接続されます。

信号線

"信号線" は、シミュレーションで 1 つのブロックから別のブロックにデータを転送します。信号は、時間の経過に伴って値が変化する数量を指し、時間軸のすべての時点 (連続) または指定された時点 (離散) で値をもちます。信号のソースは、ブロックの出力メソッドの評価中に信号に書き込むブロックを表します。信号の接続先は、ブロックの入力メソッドの評価中に信号を読み取るブロックです。

信号名、データ型 (double、32 ビット integer など)、数値型 (real、complex など) および次元 (1 次元、2 次元、多次元) など、信号属性を指定できます。多くのブロックは、任意のデータ型または次元の信号を受け入れるか、出力できます。他のブロックは、扱うことができる信号の属性に制限があります。

シミュレーション中に、信号のログを記録して信号からデータを保存します。

Model with highlighted signal lines

イベント線

関数呼び出しまたはアクション イニシエーターに応答して、"イベント線" はイベントを Subsystem ブロックまたは Model ブロックに送信します。イベントを受信したブロックは、タイム ステップ時にその中でブロックを 1 回以上実行します。関数呼び出しイニシエーターには、Stateflow チャート、Function-Call Generator ブロック、S-Function ブロック、および Hit Crossing ブロックが含まれます。アクション イニシエーターには、If ブロックと Switch Case ブロックが含まれます。

A Subsystem block labeled Function-Call Subsystem that is connected to a function-call event line, and a Subsystem block labeled If Action Subsystem 1 that is connected to an action event line that connects to an If block

信号および信号の基礎を参照してください。

データ

"データ" には、Simulink がモデルの動作をシミュレーションした結果の出力値を生成するために使用するパラメーターと入力信号の値が含まれます。

データの種類:

  • モデル パラメーター – モデルのブロックと信号パラメーターを指定する変数。MATLAB 変数、パラメーターと信号のデータ オブジェクト、データ型オブジェクト、バス オブジェクトが含まれます。

  • モデル コンフィギュレーション パラメーター – モデルの動作を制御する設定を指定することで、モデルの実行方法を決定するパラメーター。

  • シミュレーション データ – シミュレーションを実行するための入力データとシミュレーションによって生成される出力データ。

  • データ オブジェクト – 信号、状態、ブロック パラメーターの特性を指定できるようにするデータ クラスのインスタンス。Simulink.Signal クラスおよび Simulink.Parameter クラスを使用してデータ オブジェクトを作成します。データ オブジェクトを参照してください。

データの位置:

  • ブロック パラメーター – ブロック パラメーターを使用して、数値を直接指定します。Simulink モデル ワークスペース、Simulink データ ディクショナリ、または MATLAB ベース ワークスペースで変数名を入力し、その値を定義することもできます。

    Model with a Gain block labeled Gain2, and the Block Parameter window of Gain2

  • MATLAB ベース ワークスペース – MATLAB ベース ワークスペースを使用して、MAT ファイルまたは MATLAB スクリプトにモデルとは別に変数を保存します。

    Diagram that represents the MATLAB base workspace as a block containing global parameters, and Simulink models as blocks to either side, connected with the base workspace by double-sided arrows

    Simulink では、ベース ワークスペースとデータ ディクショナリは、単一のグローバルな名前空間と見なされます。ベース ワークスペースと参照されるデータ ディクショナリの変数名が同一の場合、Simulink ではデータ ディクショナリで変数値が使用されます。

    MATLAB ベース ワークスペースには、すべての Simulink モデルに対してグローバルで表示可能な変数が含まれます。

    The Command Window contains the following lines of code: b=50; m=1000; u=500. The corresponding Workspace window shows that the variable b has a value of 50, m has a value of 1000, and u has a value of 500.

    信号読み込みの手法の比較およびシミュレーション データの保存を参照してください。

  • Simulink モデル ワークスペース – モデル ワークスペースを使用して、ローカル データの変数を定義および格納します。モデル ワークスペースで定義された変数は、一意の名前空間をもつモデルの範囲内でのみ表示されます。したがって、複数のモデル ワークスペース内で同じ変数名を使用し、各モデルの名前に一意の変数値を割り当てることができます。

    Hierarchical diagram that shows a block labeled Simulink model that contains a block labeled Simulink workspace that contains the label local parameters

    モデル エクスプローラーを使用してデータ ディクショナリで変数を定義します。[モデル化] タブで、[モデル エクスプローラー] をクリックします。左側のペインで、[モデル ワークスペース] を選択します。

    Model Explorer window showing the model hierarchy in the left pane with the drop-down list of the variable vehicle_model expanded, and the Model Workspace option in that list selected

    モデル ワークスペース変数の値は、モデルに保存されている値から、個別の MAT ファイルまたは MATLAB ファイルから、またはモデルに保存された MATLAB コードを使用して初期化されています。

    モデル ワークスペースおよびモデル ワークスペース内のデータのソースの指定を参照してください。

  • Simulink データ ディクショナリ – データ ディクショナリを使用して、グローバル データを定義および保存し、モデル間でデータを共有して、データに行った変更を追跡します。データは、モデルとは異なるファイルに保存されます。

    Diagram that represents the data dictionary as a cylinder containing global parameters, and Simulink models as blocks to either side, connected with the base workspace by double-sided arrows

    データ ディクショナリ ファイルを作成します。[モデル化] タブの [設計] で、[データ ディクショナリ] をクリックします。[新規] をクリックして、拡張子が .sldd のファイル名を入力します。

    Model Properties window for the vehicle_model variable with the file name text field filled in with the name vehicle_data_dictionary.sldd

    モデル エクスプローラーを使用してデータ ディクショナリで変数を定義します。[モデル化] タブで、[モデル エクスプローラー] をクリックします。左側のペインで、[データの設計] を選択します。

    Model Explorer window showing the model hierarchy in the left pane with the vehicle_data_dictionary entry drop-down list expanded, and the Design Data option in that list selected

    データ ディクショナリとはを参照してください。

  • インポートされたデータとエクスポートされたデータ – MATLAB ベース ワークスペース、MAT ファイル、またはスプレッドシートからシミュレーションの信号をインポートします。ソース ブロックまたは Signal Editor ブロックを使用して入力信号を作成します。信号のログを使用してシミュレーション結果をエクスポートします。メジャー タイム ステップごとに、信号の時間、状態、出力がベクトル [t, X, Y] として保存されます。

    The diagram represents a model as a block, and the MATLAB Workspace or an external file as a separate block, located to the right of the model block. The Workspace block contains data to import and exported data. An arrow points from the data to import to the model block on the left, and a second arrow points from the model block to the exported data.

参考: Simulink モデルの変数とオブジェクトの保存場所の決定記号の解釈

パラメーター

"パラメーター" は、シミュレーションとコードの生成結果に影響を与える Simulink モデルの特性です。

モデル コンフィギュレーション パラメーター

"モデル コンフィギュレーション パラメーター" では、使用するソルバーや表示するエラーと警告の種類など、コンパイル、シミュレーション、およびコード生成中のモデルの動作を指定します。

モデル コンフィギュレーション パラメーターを指定するには、[モデル化] タブで、[モデル設定] をクリックします。[コンフィギュレーション パラメーター] ダイアログ ボックスが開きます。

Configuration Parameters dialog box, with Solver selected from the menu on the left, and the options for simulation time and solver selection on the right

モデルに対するモデル コンフィギュレーション パラメーターの設定を参照してください。

ブロック パラメーター

"ブロック パラメーター" は、モデルのダイナミクスと数学を定義します。ブロックに設定可能なパラメーターがあるかどうかや、それらのパラメーターの性質については、ブロックごとに決まっています。ブロック パラメーターを指定するには、ブロック パラメーターのダイアログ ボックスを開くか、[モデル化] タブの [設計] で、次のいずれかをクリックします。

  • プロパティ インスペクター – ブロック パラメーターを直接指定するか、パラメーター値の変数名を入力します。

  • モデル データ エディター – 変数を使用してブロック パラメーターを指定します。

  • モデル エクスプローラー – 変数を使用してブロック パラメーターを指定します。

ブロック パラメーター値の設定を参照してください。

ブロック パラメーター変数

1 つのパラメーターを大規模なモデルの多くの場所で使用している場合、そのパラメーターのすべてのインスタンスを更新するのは困難な作業です。代わりに、パラメーターの値として変数名を入力してから、次のいずれかの方法を使用して変数を一度定義します。

  • Simulink モデル ワークスペース – モデル ワークスペースの変数を作成し、値をそれらの変数に代入します。定義したパラメーターはモデルに固有で、モデルで保存されます。保守をしやすくするには MATLAB 変数を使用します。Simulink.Parameter オブジェクトを使用して、データ型、次元、単位を含む追加のプロパティを制御します。モデル エクスプローラーを使用したワークスペース変数の編集と管理を参照してください。

  • Simulink データ ディクショナリ – データ ディクショナリで設計データ変数を作成し、ディクショナリをモデルにリンクします。モデルのシミュレーション中、Simulink はデータをデータ ディクショナリから取得します。

  • MATLAB ベース ワークスペース – MATLAB ベース ワークスペースでは、変数を定義するための MATLAB のいずれかのメカニズムを使用してパラメーターを定義します。たとえば、MAT ファイルを使用すると、モデルを開いたときに変数を読み込むことができます。MATLAB 式を使用して、パラメーターの変数値を指定します。Simulink は、シミュレーションの実行前にその式を評価します。ワークスペース変数の保存と読み込みを参照してください。

MATLAB ベース ワークスペースまたは Simulink データ ディクショナリを使用して変数を定義すると、一連の同じパラメーターを複数のモデルで使用する場合に便利です。このメカニズムに基づいて、同じモデルに対してパラメーター値のさまざまなセットを使用することも可能です。

参考: 変数の作成によるブロック パラメーター値の共有と再利用ワークスペース変数の作成、編集、管理

モデル引数とインスタンス パラメーター

複数の Model ブロックから同じモデルを参照する場合は、モデルの "インスタンス" を作成します。モデルの各インスタンスに対して同じ値または異なる値を使用するようブロック パラメーターを設定できます。

異なる値を使用するには、次を行います。

  1. 参照モデルのモデル ワークスペースで MATLAB 変数または Simulink.Parameter オブジェクトを作成します。

  2. パラメーター名および既定のパラメーターの [値] を入力します。[引数] チェック ボックスをオンにして、"モデル引数" を作成します。

  3. 参照モデルのブロックの場合、ブロック パラメーターの値にモデル引数の名前を入力します。

  4. Model ブロックごとに、ブロック パラメーター ダイアログ ボックスを開き、[インスタンス パラメーター] タブを選択して、インスタンス パラメーターの値にモデル引数名を入力します。

参考: 再利用可能な参照モデルのインスタンスのパラメーター化

調整可能なブロック パラメーター

シミュレーション中に調整可能なブロック パラメーターの値を変更することができます。これにより、パラメーターに対して最適の値を対話形式で決定することができます。調整可能なパラメーターの値を変更した場合、変更内容は次のタイム ステップの開始時に有効になります。たとえば、Gain ブロックのゲイン パラメーターは調整可能です。シミュレーションが実行されている間に、ブロックのゲインを変更することができます。ブロック パラメーター値の調整と試行を参照してください。

プロパティ インスペクターでのブロック パラメーターの設定

パラメーターを指定するには、[モデル化] タブの [設計] で、[プロパティ インスペクター] をクリックします。ブロックをクリックして、ブロックのパラメーターとプロパティを表示します。

Property Inspector of a Gain block, showing the value of the gain and element-wise as the selected multiplication option

参考: ブロック プロパティの指定

プロパティ

"プロパティ" は、通常シミュレーションの結果に影響しない Simulink モデル特性です。プロパティを指定するには、[モデル化] タブの [設計] で、[プロパティ インスペクター] をクリックします。

モデル プロパティ

プロパティ インスペクターを開いた状態で、ブロック線図内の空白をクリックするか、[モデル化] タブで、[モデル設定][モデル プロパティ] を選択します。モデル プロパティには、以下が含まれます。

  • 一般 – モデル ファイルの名前と場所。

  • データの設計 – モデルとそのブロックおよび信号をパラメーター化する、モデル外で定義された変数。

  • コールバック – 特定のモデル イベントが発生したときに実行されるコマンド。

モデル バージョンの管理とモデル プロパティの指定を参照してください。

ブロック プロパティ

プロパティ インスペクターを開いた状態で、ブロックを選択してから、[プロパティ] タブを選択します。ブロックのプロパティには、以下が含まれます。

  • ブロック注釈 – ブロックの下に表示される選択したブロック パラメーターの値。

  • コールバック – 特定のブロック イベントが発生したときに実行されるコマンド。たとえば、式を使用してブロック パラメーターの変数を読み込んだり、定義する MATLAB スクリプトを設定できます。

  • 優先順位 – ブロックの相対的な実行順序を設定します。値を低くすると、大きい優先順位値より先にブロックが実行されます。

  • タグ – プログラムにより検索可能なブロック識別子。

端子のプロパティ

プロパティ インスペクターを開いた状態で、端子を選択してから、[プロパティ] タブを選択します。プロパティ インスペクターで、端子オブジェクト、信号、端子ブロックのプロパティを変更できます。サブシステム ブロックの端子にも端子ブロック タブがあり、関連付けられている端子ブロックのプロパティが含まれます。

Port properties shown in Property Inspector

プロパティ インスペクターを使用したモデルとブロックのプロパティの設定

プロパティを設定するには、[シミュレーション] タブの [準備] で、[プロパティ インスペクター] をクリックします。空のスペースをクリックして、モデルのプロパティを表示します。ブロックをクリックして、ブロックのプロパティを表示します。

Properties tab of the Property Inspector of a Step block, with the Block Annotation section expanded

参考: ブロック プロパティの指定コールバックを使用したモデル動作のカスタマイズ

状態変数

モデルの "状態" はその "状態変数" の値で定義されます。状態変数は、時間ゼロの値がモデル入力の値、モデル方程式の値と共に、シミュレーション中のモデルの動作を決定できる一連の変数です。状態変数の例として、モーターの位置と速度、インダクタの電流、コンデンサの電圧、溶解温度、ガス圧などがあります。

ブロックの現在の出力値が前の出力値の関数である場合、ブロックでは、タイム ステップ間に保存する必要がある状態変数を定義します。ブロック出力を計算するには、その次のタイム ステップでの出力の計算で使うために、現在のタイム ステップでの状態変数の値を保存する必要があります。

状態の取り扱い

シミュレーション中のモデルの状態を決定、初期化、ログ記録するための以下の機能が提供されています。

  • モデルの [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペイン (Save Block States and Simulation Operating Pointsを参照) を使って、モデルの状態に対する初期値を指定し、シミュレーション中に各タイム ステップで状態の値を MATLAB ワークスペースの配列または構造体変数として記録することができます。

    [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。MATLAB 変数 xout にログを記録するには、[状態] チェック ボックスをオンにします。

    Configuration Parameters dialog box, with Data Import/Export selected on the left, and options for loading from the worspace, saving to the workspace, or saving to a file on the right

    MATLAB コマンド ウィンドウに、各タイム ステップの Integrator ブロックの状態について記録された値が示されます。

        >> xout{1}.Values.Data
    
        ans =
    
            0.0000
            1.8127
            3.2968
            4.5119 . . .
  • モデルの名前をプログラムによるインターフェイスとして使用して、状態の総数、各状態を定義するブロックとその初期値を含む、モデルによって定義される状態に関する情報を表示できます。

    モデル vehicle_model 内のブロックが状態と共に示されます。MATLAB コマンド ウィンドウに、モデル関数を入力すると、ブロックと状態が示されます。

        [sys,x0,blks,ts] = vehicle_model([],[],[],'sizes');
        blks
    blks = 
        {'vehicle_model/Integrator'}
  • Simulink デバッガーは、シミュレーション中の各タイム ステップでの状態の値を表示し、Simulink デバッガーの関数 states は、現在の状態に関する情報を表示します (プログラムによるシミュレーションのデバッグを参照)。

    MATLAB コマンド ウィンドウで、Simulink デバッガーを開始してから、コマンド states を入力します。

        sldebug 'vehicle_model'
        (sldebug @0): >> states
        Continuous States for 'vehicle_model':
        Idx  Value           (system:block:element  Name   'BlockName')
             0. 0            (0:0:0  CSTATE  'vehicle_model/Integrator')
  • [ブロック パラメーター] ダイアログ ボックスまたは関数 get_paramContinuousStateAttributes パラメーターを使用して、連続状態をもつブロック (Integrator ブロックなど) の状態に名前を付けることができます。状態に名前を付けることで、特にブロックに状態が複数ある場合などに、ログに記録された状態のデータの解析が簡単になります。

    Block Parameters dialog box for an Integrator block, with the state name field filled in with the name 'velocity'

連続状態

"連続状態" は、すべての時間値に対して定義されます。連続状態の例は、タイヤの回転に合わせて針の位置が連続的に変化するアナログ速度計に表示される車の速度です。

連続状態とブロック パラメーター [初期条件] をもつブロックは次のとおりです。

一般的に、シンプルなモデルを除いて、常微分方程式によって表される状態を積分するための解析的メソッドは存在しません。状態の積分には数値的手法を使用する必要があります。

離散状態

"離散状態" は、特定の時間にのみ定義されます。これは、状態が周期的または非周期的な時間間隔で更新される連続状態の近似です。離散状態の例は、連続状態とは対照的に、毎秒更新されるデジタル速度計に表示される自動車の速度です。

離散状態のブロックは次のとおりです。

ブロックの離散状態を算出するには、前のタイム ステップにおけるその値およびブロックに対する現在の入力値を知る必要があります。Simulink には次の 2 種類の離散ソルバーがあります。

  • 固定ステップ離散ソルバー – サンプル時間ヒットで実際に状態が値を変化させるかどうかにかかわらず、モデルのすべての離散状態のすべてのサンプル時間にヒットする固定ステップ サイズを決定します。

  • 可変ステップ離散ソルバー – ステップ サイズを変化させて、状態が値を変えるときにのみサンプル時間のヒットが発生するようにします。

ハイブリッド システムのモデル化

"ハイブリッド モデル" には、連続状態と離散状態の両方があります。そのようなモデルを解くには、連続状態積分での精度の制約と、離散状態でのサンプル時間間隔の制約の両方を満たすステップ サイズを選択する必要があります。Simulink は、離散ソルバーの次のサンプル時間間隔を、連続ソルバーでの追加制約として渡すことにより、この要件を満たします。連続ソルバーは、次の離散サンプル時間までで、それを超えない時間にシミュレーションを進めるステップ サイズを選択します。連続ソルバーは、その精度の制約を満たす次のサンプル時間ヒットより短いタイム ステップを取ることができますが、精度の制約が許容する場合でも、次のサンプル時間ヒットを超えるステップは取ることができません。

ハイブリッド システムは任意の積分手法を使ってシミュレートすることができますが、積分手法によって効率や精度が異なります。ほとんどのハイブリッド システムでは、ode23ode45 が、効率において他のソルバーよりも優れています。離散ブロックのサンプル ホールドに関連する不連続性のため、ode15s ソルバーと ode113 ソルバーは、ハイブリッド システムには使用しないでください。

サンプル時間

"サンプル時間" は、出力を生成してブロックの内部状態を更新するブロック メソッドの実行レート (1/サンプル時間) を指定する時間間隔です。時間は、ブロック線図の継承される要素で、ブロック線図のシミュレーション結果は時間と共に変化します。

サンプル時間は次のように指定されます。

  • 連続 – ソルバー設定に基づいて可変時間にブロックが実行されます。

  • 離散 – 明示的に指定された特定の時間にブロックが実行されます。

次の例では、Simulink によって車両モデルが連続サンプル時間をもつと判断されるときに、指定されたサンプル時間 0.01 秒の離散レートでコントローラーが実行されます。

Model overlaid with Timing Legend dialog box for the controller Subsystem block, showing that the sample time has been set to 0.01 s

システムの動作を時間にわたって定義するため、時間スパンの開始から終了までのタイム ステップまたは時間間隔と呼ばれる区間でモデルを繰り返し実行する必要があります。連続するタイム ステップでのモデルの反復実行は、モデルが表すシステムのシミュレーションと呼ばれます。

サンプル時間とはサンプル時間のタイプサンプル時間の指定サンプル時間情報の表示も参照してください。

ブロックのサンプル時間

すべての Simulink ブロックに、ブロックの実行時間を定義したサンプル時間があります。ほとんどのブロックで、SampleTime パラメーターを使ってサンプル時間を指定することができます。一般的なオプションとして離散サンプル時間、連続サンプル時間、継承されるサンプル時間があります。

一般的なサンプル時間のタイプサンプル時間
離散[Ts, To]Unit Delay, Digital Filter
連続[0, 0]Integrator, Derivative
継承[–1, 0]Gain, Sum

離散ブロックのサンプル時間はベクトル [Ts, To] で、Ts は連続サンプル時間の間隔または期間、To はサンプル時間に対する初期オフセットを示します。対照的に、離散でないブロックのサンプル時間は、ゼロ、負の整数、または無限大を使用して特定のタイプのサンプル時間を使った組み合わせで表されます。たとえば、連続ブロックは名目上のサンプル時間が [0, 0] で、状態が連続的に変化するシステム (自動車の加速など) をモデル化するために使用されます。一方、継承されたブロックのサンプル時間タイプをシンボリックに [–1, 0] と指定すると、Simulink はモデル内の継承されたブロックのコンテキストに基づいて実際の値を決定します。

すべてのブロックですべてのタイプのサンプル時間を使用できるわけではありません。たとえば、離散ブロックでは連続サンプル時間を使用できません。

Simulink では視覚補助のために、ブロックのサンプル時間のタイプと速度を示すブロック線図の色の設定と注釈オプションが提供されています。凡例内のすべての色および注釈をキャプチャできます (サンプル時間情報の表示を参照)。

サンプル時間の詳細については、サンプル時間を参照してください。

単位

"単位" は、合計数量を測定するために使用されます。

Simulink 単位は、Simulink モデル コンポーネントの境界にある Inport ブロックまたは Outport ブロックのパラメーターとして指定されます。Simulink モデル コンポーネントには Subsystem ブロック、Model ブロック、Stateflow チャート、および Simulink から Simscape™ への変換ブロックが含まれます。モデルに単位を表示するには、[デバッグ] タブで、[情報のオーバーレイ][単位] を選択します。

Model showing units of m/s above two of its signal lines, and to the right of a Sum block

参考: Simulink モデルでの単位の指定単位の変換

直達

"直達" では、ブロックの出力端子信号がその入力端子信号の値から計算されます。出力信号値は入力信号値の関数です。

直達をもつブロックには、GainProductSum、および Math Function のブロックが含まれます。

Gain block on a signal line between an Input Port block and an Output Port block

代数ループ

直達をもつブロック間の信号ループは "代数ループ" と呼ばれます。一般的に、代数ループは、直達をもつブロックの入力端子が、同じブロックの出力端子により直接駆動されるか、または直達をもつ他のブロックで間接的に駆動される場合に発生します。

以下のモデルでは、直達をもつ 2 つの Gain ブロックが代数ループを作成します。

Model with an algebraic loop that consists of a Sum block connected in series with two Gain blocks

参考: 代数ループの概念

疑似代数ループ

Atomic Subsystem または Model ブロックによって Simulink が代数ループを検出する設定になっているときは、サブシステムの内容に入力から出力への直達が含まれていない場合であっても、"疑似代数ループ" が発生します。Atomic Subsystem を作成するときは、すべての Inport ブロックは直達となるため、代数ループが発生します。

まず、含められたモデルで考えてみましょう。このモデルの表すプラントのシンプルな比例制御は、次の式で表されます。

$$ G(s) = \frac{1}{s^2+2s+1}$$

これは、次のような状態空間形式で書き直すことができます。

$$
\dot{x} = \left[
 \begin{array}{cc}
 -2 & -1 \\
1 & 0
 \end{array}
 \right]
+ \left(
\begin{array}{c}
0\\1
\end{array}
\right)
$$

$$
y = \left[\begin{array}{cc}0&1\end{array}\right]
$$

この方程式は、代数変数も直達ももたず、代数ループももちません。

以下の手順に従って、モデルを変更します。

  1. サブシステムに Controller ブロックと Plant ブロックを含めます。

  2. Subsystem ダイアログ ボックスで、[Atomic サブシステムとして扱う] を選択してサブシステムを [Atomic] にします。

  3. [モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] パラメーターを [error] に設定します。

このモデルをシミュレーションすると、Atomic Subsystem 内のパスは直達ではありませんが、サブシステムが直達であるために、代数ループが発生します。シミュレーションは代数ループ エラーで停止します。

ゼロクロッシング検出

Simulink は "ゼロクロッシング検出" という手法を使用して、シミュレーション中に過度に小さいタイム ステップを取ることなく正確に不連続点を特定します。通常、この手法によってシミュレーションの実行時間が改善されます。

関連するトピック