Main Content

信号と離散状態の初期化

Simulink® では、信号と離散状態の初期値、すなわち、シミュレーションの [開始時間] における信号と離散状態の値を指定できます。信号オブジェクトを使用して、モデル内の任意の信号または離散状態を指定することができます。さらに、OutportData Store MemoryMemory などの一部のブロックでは、信号オブジェクト、ブロック パラメーターまたはその両方を使用して、ブロックの状態または出力の初期値を指定できます。そのような場合に、Simulink は信号オブジェクトとパラメーターによって指定された値が一致していることをチェックします。バス信号の初期化の詳細については、バス信号の初期条件の指定を参照してください。

信号または離散状態を初期化する目的で信号オブジェクトを指定するか、ブロック パラメーターの値として変数を指定すると、記号の解釈で説明されているように、Simulink によって、指定した名前が該当するオブジェクトまたは変数に関連付けられます。

特定の信号は、いずれの環境でも最大 1 つの信号オブジェクトに関連付けられます。信号は、オブジェクトを 1 回以上参照できますが、各参照は同じオブジェクトに関連付ける必要があります。まったく同じプロパティをもつ異なる信号オブジェクトは、一意性の要件を満たしていません。モデルが任意の信号をもつ 1 つを超える信号オブジェクトに関連付けられている場合、コンパイル時エラーが発生します。詳細については、Simulink.Signal および Merge ブロックを参照してください。

ブロック パラメーターを使った信号と離散状態の初期化

初期値または初期条件パラメーターをもつブロックについて、そのパラメーターを使用して信号を初期化できます。たとえば、次の [ブロック パラメーター] ダイアログ ボックスは、Unit Delay ブロックの信号を初期条件 0 で初期化します。

これらのブロック パラメーターにアクセスするには、次のいずれかの手法を選択します。

  • モデル データ エディター ([モデル化] タブで [モデル データ エディター] をクリック) を使用します。この手法を使用して、検索および並べ替えが可能なテーブルで複数の信号および状態を設定します。ブロックの状態またはデータ ストアを初期化するために、該当するタブ ([状態] または [データ ストア]) を使用できます。信号、状態またはデータ ストアを初期化するために、[パラメーター] タブを使用して、関連するブロック パラメーターに対応する行を見つけることができます。

    モデル データ エディターの詳細については、モデル データ エディターを使用したデータ プロパティの設定を参照してください。

  • プロパティ インスペクター ([モデル化] タブで [設計] の下で [プロパティ インスペクター] をクリック) を使用します。この手法を使用して一度に 1 つの信号または状態を設定します。ターゲットの状態を保持するブロックまたはターゲット信号を生成するブロックを選択し、関連するブロック パラメーターを見つけます。

  • ブロック パラメーターのダイアログ ボックスを使用します。この手法を使用して一度に 1 つの信号または状態を設定します。またはいくつかの信号または状態の設定を並べて比較します。

ブロック パラメーター (信号や状態の初期化を制御するパラメーターを含む) にアクセスする手法の詳細については、プロパティとパラメーターの設定を参照してください。

信号オブジェクトを使った信号と離散状態の初期化

'auto' 以外、または、コード マッピング エディターで対応するデータ カテゴリの既定のストレージ クラスを Default (既定の設定) に設定している場合は 'Model default' 以外のストレージ クラスをもつ信号オブジェクトを使用して、次を初期化できます。

  • 初期条件のパラメーターをもつ離散状態

  • モデル内の信号 (定数値を出力するバス信号とブロックを除く)

初期値を指定するには、モデル エクスプローラーまたは MATLAB® コマンドを使用して、以下を行います。

  1. 信号オブジェクトを作成します。

    モデル エクスプローラーのツール バーで、[追加][Simulink Signal] を選択します。既定の名前が付いた信号オブジェクトがベース ワークスペースに表示されます。オブジェクトの名前を S1 に変更します。あるいは、コマンド プロンプトで次のコマンドを使用します。

    S1 = Simulink.Signal;

    信号オブジェクト名は、オブジェクトが初期化する信号名と同じでなければなりません。必要に応じて、[信号プロパティ] ダイアログ ボックスの [信号名を Simulink の信号オブジェクトに関連付ける] オプションの設定を検討してください。この設定は MATLAB ワークスペース内の信号オブジェクトとモデル内に現れる信号を一致させます。

    データ オブジェクト ウィザードを使用して信号オブジェクトを作成することを検討してください。データ オブジェクト ウィザードは、モデル内で信号オブジェクトが存在しない信号を探します。そして、1 回の操作で検索結果にリストされた複数の信号から選択して、信号オブジェクトを作成することができます。データ オブジェクト ウィザードの詳細については、データ オブジェクト ウィザードを使用したモデルのデータ オブジェクトの作成を参照してください。

  2. 信号オブジェクトのストレージ クラスを Auto または Model default 以外の値に設定します。モデル エクスプローラーの [コンテンツ] ペインで信号オブジェクトを選択します。[ダイアログ] ペインで、[ストレージ クラス]ExportedGlobal に設定します。あるいは、コマンド プロンプトで次のコマンドを使用します。

    S1.CoderInfo.StorageClass = 'ExportedGlobal';

  3. 初期値を設定します。ワークスペース変数の名前を含む、スカラー数値または配列と評価される MATLAB 式を指定できます。

    Simulink エンジンは、初期値を変換して、タイプ、実数/複素数、次元が対応するブロック パラメーターの値と整合するようにします。無効な値または式を指定した場合は、モデルの更新時にエラー メッセージが表示されます。

    モデル エクスプローラーの [ダイアログ] ペインで、[初期値]0.5 に設定します。あるいは、コマンド プロンプトで次のコマンドを使用します。

    S1.InitialValue = '0.5'

    信号または状態の初期値を設定するためにブロック パラメーターを使用する場合も、パラメーターを空 ([]) または信号オブジェクトの初期値と同じ値に設定してください。パラメーター値を空に設定した場合、Simulink は、信号オブジェクトによって指定された値を使用して信号または状態を初期化します。パラメーター値にヌル値以外の値を設定した場合は、Simulink は、パラメーター値と信号オブジェクトの値を比較し、それらが異なる場合はエラーを表示します。

    次の例は、Enabled Subsystem の初期出力を指定する信号オブジェクトを示します。

    信号 s は 4.5 に初期化されています。整合性エラーを回避するために、Enabled Subsystem の Outport ブロックの初期値は、[] または 4.5 でなければなりません。

    信号オブジェクトとその初期値の設定を Simulink セッション全体で保持するための手順は、永続的データ オブジェクトの作成を参照してください。

初期値の設定は初期化モードによって異なる場合があります。詳細については、指定不足の初期化の検出を参照してください。

クラシック初期化モード:このモードでは、以下の信号と状態を表す信号オブジェクトの初期値設定は、対応するブロック パラメーターの初期値が未定義 ([] と指定) の場合はその初期値をオーバーライドします。

  • 条件付き実行サブシステムと Merge ブロックの出力信号

  • ブロックの状態

簡易初期化モード:このモードでは、以下のブロックの出力と関連付けられている信号オブジェクトの初期値が無視されます。代わりに、対応するブロックの初期値が使用されます。

  • 条件付き実行サブシステムの出力信号

  • Merge ブロック

信号オブジェクトを使用した初期値の調整

Simulink では、パラメーター オブジェクトの代わりに信号オブジェクトを使用することによって (Simulink.Parameter を参照)、調整可能なパラメーターによって指定できるブロックの出力および状態の初期値を調整できます。初期値を調整するために信号オブジェクトを使用するには、信号または状態と同名の信号オブジェクトを作成し、信号オブジェクトの初期値を MATLAB ワークスペースで定義された変数を含む式に設定します。シミュレーション中に対応するワークスペース変数の値を変更することによって、初期値を調整することができます。

たとえば、M1 という名前の Memory ブロックの状態の初期値を調整するとします。そのためには、M1 という名前の信号オブジェクトを作成し、ストレージ クラスを 'ExportedGlobal' に設定し、初期値を K (M1.InitialValue='K') に設定し (K は MATLAB ワークスペースのワークスペース変数)、対応する Memory ブロックの初期条件パラメーターを [] に設定して、整合性エラーを回避します。Memory ブロックの状態の初期値は、MATLAB コマンド ラインで K の値を変更し、ブロック線図を更新して (たとえば、Ctrl+D を押して)、シミュレーション中に更新できます。

信号オブジェクトの初期化動作のまとめ

次のモデルと表は、初期化可能な信号および離散状態のタイプと、それらの結果としてのシミュレーションの動作を示します。

信号または離散状態説明動作
S1ルート入力端子
  • S1.InitialValue に初期化されます。

  • [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインを使用してルート入力の値を指定する場合は、初期値が上書きされ、タイム ステップごとに異なる場合があります。それ以外の場合は、値は定数のままです。

X1Unit Delay ブロック — 離散状態に初期条件が存在するブロック
  • X1.InitialValue に初期化されます。

  • Simulink は、X1.InitialValue がブロックについて指定された初期条件と一致するかをチェックし、一致しない場合はエラーを表示します。

  • 最初の書き込みで、出力は X1.InitialValue と等しくなり、状態は S1 と等しくなります。

  • 最初の書き込みの後の各タイム ステップで、出力は状態と等しくなり、状態は S1 と等しくなるように更新されます。

  • ブロックが Enabled Subsystem 内部にある場合、サブシステムの Enable ブロック パラメーター [イネーブル時の状態][リセット] に設定されている場合は、初期値をリセット値として使用できます。

X2Data Store Memory ブロック
  • データ型ワーク (DWork) ベクトルは X2.InitialValue に初期化されます。ワーク ベクトルの詳細は、DWork Vector Basicsを参照してください。

  • Simulink は、X2.InitialValue がブロックについて指定された初期条件と一致するかをチェックし、一致しない場合はエラーを表示します。

  • Data Store Write ブロックが値を上書きします。

S2Enabled Subsystem の出力
  • S2.InitialValue または Outport ブロックの値に初期化されます。複数の初期値が同じ信号に対して指定されている場合、すべての初期値は同一でなければなりません。

  • サブシステムがイネーブルのとき、最初の書き込みを行います。サブシステムの出力に接続するブロックは、値を設定します。

  • 初期値は、サブシステムの Enable ブロック パラメーター [イネーブル時の状態] または Outport ブロック パラメーター [ディセーブル時の出力][リセット] に設定されている場合がリセット値として使われます。

S3固定信号
  • S3.InitialValue に初期化されます。

  • 出力値は、各タイム ステップでブロックによりリセットされます。

  • コード生成のみに影響を与えます。シミュレーションについては、S3 に対する初期値の設定は、値がモデルのシミュレーションの開始時間に上書きされるため、無意味です。

関連するトピック