ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Memory

前のタイム ステップでの入力を出力

ライブラリ

Discrete

説明

Memory ブロックは、1 積分タイム ステップで入力を保持し、遅延します。このブロックは、連続信号を受け入れ、出力します。ブロックは 1 つの入力を受け入れ、1 つの出力を生成します。各信号はスカラーでもベクトルでもかまいません。入力がベクトルの場合、ベクトルのすべての要素が同じタイム ステップで保持され、遅延します。

最初のタイム ステップのブロック出力は、[初期条件] パラメーターを使って指定します。十分注意してこのパラメーターを選択すると、不要な出力の動作を最小限度に抑えることができます。ただし、サンプル時間を指定することはできません。このブロックは、モデル全体で使用された駆動ブロックまたはソルバーからのみサンプル時間を継承します。詳細は、[サンプル時間を継承] パラメーターの説明を参照してください。

    ヒント:   以下の条件がどちらもあてはまる場合は、Memory ブロックを使用しないでください。

    • モデルで可変ステップ ソルバー ode15s または ode113 を使用する場合。

    • シミュレーション中にブロックへの入力が変化する場合。

Memory ブロックが離散サンプル時間を継承する場合、このブロックは Unit Delay ブロックと似た働きをします。ただし、Memory ブロックは状態のログ作成をサポートしません。最終状態のログを作成する必要がある場合は、Unit Delay ブロックを使用するようにしてください。

同様のブロックとの比較

同様の機能のブロック

Unit Delay ブロック、Memory ブロック、および Zero-Order Hold ブロックは、類似する機能をもっていますが、それぞれ別の機能も備えています。また、使用目的も異なります。以下の節では、これらの違いの一部を説明します。

各ブロックに推奨される使用方法

ブロックブロックの使用目的リファレンスの例

Unit Delay

指定された離散サンプル時間を使用して遅延を実装します。理想的には、ブロックで離散サンプル時間の信号を受け入れ、出力するようにします。

Memory

1 積分タイム ステップで遅延を実装します。理想的には、ブロックでサンプル時間が連続か、マイナー タイム ステップに固定された信号を受け入れ、出力するようにします。詳細は、Simulink® ドキュメンテーションの「サンプル時間のタイプ」を参照してください。

Zero-Order Hold

連続サンプル時間の入力信号を離散サンプル時間の出力信号に変換します。

ブロックの機能の概要

機能ブロック
Unit DelayMemoryZero-Order Hold
初期条件の指定ありありいいえ、t = 0 の際のブロック出力が入力値と一致しなければならないため
サンプル時間の指定ありいいえ、ブロックはサンプル時間のみを継承できるため (モデル全体に使用される駆動ブロックまたはソルバーから)あり
フレームベースの信号のサポートありなし あり
状態のログ作成のサポートありなしなし

ブロック出力に対するソルバー指定の効果

Unit Delay ブロックまたは Zero-Order Hold ブロックのダイアログ ボックスに離散サンプル時間を指定すると、モデルのソルバーの仕様に応じてブロック出力が変化することがあります。

いずれも離散サンプル時間 1 を使用する Unit Delay ブロックと Zero-Order Hold ブロックのモデルモデルがあるとします。

Repeating Sequence Stair ブロックは、連続サンプル時間 0 を使用して Unit Delay ブロックと Zero-Order Hold ブロックに入力信号を渡します。

モデルでステップ サイズ 1 の固定ステップ ソルバーを使用している場合、スコープには次のシミュレーション結果が表示されます。

モデルで可変ステップ ソルバーを使用している場合、スコープには次のシミュレーション結果が表示されます。

Zero-Order Hold ブロックは、t = 0、1、2、...、9 のときに Repeating Sequence Stair ブロックの入力値を受け取り、サンプリング周期 (1 秒) で各入力値を保持します。Unit Delay ブロックは同じように Repeating Sequence Stair の各入力値を 1 秒間保持するだけでなく、各値をサンプリング周期だけ遅らせます。[初期条件] パラメーターは、最初のサンプリング周期中の Unit Delay ブロックの出力を指定します。サンプル時間の詳細は、「サンプル時間とは」および「 サンプル時間の指定」を参照してください。

モデルのソルバーの仕様も、Memory ブロックの動作に影響を与えます。詳細は、「Memory ブロックの使用方法の例」を参照してください。

サポートするデータ型

Memory ブロックは、Simulink がサポートするすべてのデータ型 (固定小数点データ型および列挙型データを含む) の実数および複素数信号を受け入れます。

詳細は、Simulink ドキュメンテーションの「 Simulink でサポートされているデータ型」を参照してください。

パラメーターとダイアログ ボックス

[Memory ブロック] ダイアログ ボックスの [メイン] ペインは、次のように表示されます。

初期条件

初期積分ステップでの出力を指定します。組み込み入力データ型を使用しない場合は、この値は 0 であることが必要です。Simulink では、このブロックの初期出力を inf または NaN にすることができません。

サンプル時間を継承

サンプル時間を駆動ブロックから継承します。このチェック ボックスを選択しない場合、ブロックのサンプル時間はモデルのシミュレーションに対するソルバーのタイプに依存します。

  • ソルバーが可変ステップ ソルバーの場合、サンプル時間は連続ですが、次のマイナー タイム ステップに固定されます。 [0, 1].

  • ソルバーが固定ステップ ソルバーの場合、この [0, 1] サンプル時間は、サンプル時間伝播後、ソルバーのステップ サイズに変換されます。

線形化中に入力を直接フィードスルーする

線形化と平衡化を行うときに入力を出力するのに選択します。この選択により、ブロックのモードは直接フィードスルーに設定されます。

このチェック ボックスを選択すると、関数 linmod、関数 dlinmod、または関数 trim の使用時にモデルの状態配列が変わります。この新しい状態配列を抽出するには、次のコマンドを使用します。

まず、次のコマンドを使ってモデルをコンパイルします。ここで model は Simulink モデルの名前です。

    [sizes, x0, x_str] = model([],[],[],'lincompile');

次に、次のコマンドを使ってコンパイルを終了します。

  model([],[],[],'term');

Simulink モデルの状態のセル配列である出力引数 x_str には、新しい状態配列が含まれます。状態のベクトルを関数 linmod、関数 dlinmod、または関数 trim に入力として渡すと、状態ベクトルはこの新しい状態配列を使用しなければなりません。

離散サンプル時間で線形化した場合に単位遅延として扱う

Memory ブロックが別々のサンプル時間をもつ信号により駆動する場合、選択すると Memory ブロックを単位遅れに線形化します。

[Memory ブロック] ダイアログ ボックスの [状態属性] ペインは、次のように表示されます。

状態名

ブロックの状態に固有名を割り当てるにはこのパラメーターを使用します。既定の設定は、' ' です。このフィールドが空白のままの場合、名前は割り当てられません。このパラメーターを使用する場合、以下のことを考慮してください。

  • 有効な識別子は英字またはアンダースコア文字で始まり、英数字またはアンダースコア文字が続きます。

  • 状態名は選択されたブロックに対してのみ適用されます。

このパラメーターを設定し、[適用] ボタンをクリックすると、[状態名を Simulink の信号オブジェクトに関連付ける] が有効になります。

詳細は、Simulink Coder™ ドキュメンテーションの「状態」を参照してください。

状態名を Simulink の信号オブジェクトに関連付ける

状態名が Simulink 信号オブジェクトに関連付けられるようにするには、このチェック ボックスをオンにします。このチェック ボックスは、既定の設定ではオフになっています。

[状態名] によって、このパラメーターが有効になります。

このチェック ボックスをオンにすると、[コード生成ストレージ クラス] が無効になります。

パッケージ

適用するカスタム ストレージ クラスを定義するパッケージを選択します。自分自身のパッケージを定義している場合は、[更新] をクリックします。この操作によりパッケージ リストへの検索パスにすべてのユーザー定義パッケージを追加します。

コード生成ストレージ クラス

状態に対してカスタム ストレージ クラスを選択します。

既定の設定: [Auto]

Auto

[Auto] は、外部コードのインターフェイスを必要としない状態に対して適切なストレージ クラスです。

SimulinkGlobal

model_P は、ワークスペース内の対応する値に状態を初期化します。

ExportedGlobal

状態はグローバル変数に格納されます。

ImportedExtern

model_private.h は、状態を外部変数として宣言します。

ImportedExternPointer

model_private.h は、状態を外部ポインターとして宣言します。

既定の設定

編集不可能なプレースホルダ ストレージ クラスが作成されています。

BitField

struct 宣言は Boolean データを組み込むように作成されています。

Volatile

Volatile 型修飾子は状態宣言に使用されます。

ExportToFile

グローバル変数宣言を含むヘッダー (.h) ファイルは、ユーザー指定の名前で生成されます。

ImportFromFile

グローバル変数宣言を含む事前定義されたヘッダー (.h) ファイルが含まれています。

FileScope

状態宣言の前に静的な修飾子が生成され、状態を現在のファイルだけに表示できるようにします。

Struct

struct 宣言は、パラメーターまたは信号オブジェクト データをカプセル化するために作成されます。

StructVolatile

Volatile 型修飾子は struct 宣言に使用されます。

GetSet

メモリの読み取りと書き込みを行う特殊な関数呼び出しをサポートします。

[状態名] によって、このパラメーターが有効になります。

有効なストレージ クラスのリストは [パッケージ] の選択によって異なります。

このパラメーターを [ExportedGlobal][ImportedExtern]、または [ImportedExternPointer] に設定すると、[コード生成ストレージ型修飾子] が有効になります。

[コード生成ストレージ型修飾子]

Simulink Coder ストレージ型修飾子を指定します。既定の設定は ' ' です。このフィールドが空白のままの場合、修飾子は割り当てられません。

Simulink Coder 製品はこの文字列のエラーをチェックしません。したがって、入力する値が変数宣言に自動的に表示されます。

[コード生成ストレージ クラス][ExportedGlobal][ImportedExtern]、または [ImportedExternPointer] に設定すると、このパラメーターが有効になります。

シミュレーション時、このブロックは次の値を使用します。

  • 状態名が関係付けられる信号オブジェクトの初期値

  • 信号オブジェクトの最大値と最小値

詳細は、Simulink Coder ドキュメンテーションの「状態」を参照してください。

Memory ブロックの使用方法の例

Clock ブロックの使用方法

次のモデルモデルでは、シミュレーションでステップ サイズをどのように表示するかを説明します。Sum ブロックは、(Clock ブロックが生成した) 現在の時間から (Memory ブロックが生成した) 前のタイム ステップでの時間を減算します。

Memory ブロックは [サンプル時間を継承] が選択されていないため、モデルをシミュレートするためのブロックのサンプル時間はソルバーの種類によって決定します。この場合、固定ステップ ソルバーがモデルで使用されます。したがって、Memory ブロックのサンプル時間はソルバーのステップ サイズ、すなわち 1 になります。

Memory ブロックと Unit Delay ブロックを置き換えても同じ結果が得られます。Unit Delay ブロックは、離散サンプル時間 1 を継承します。

Second-Order Integrator ブロックの使用方法

sldemo_bouncesldemo_bounce モデルは、跳ねるボールが空中に投げられた後でどのように反応するかを示します。Second-Order Integrator ブロックと Memory ブロックの dx 端子は、地面に落ちる直前のボールの速度をキャプチャします。

Memory ブロックは [サンプル時間を継承] が選択されていないため、モデルをシミュレートするためのブロックのサンプル時間はソルバーの種類によって決定します。この場合、可変ステップ (ode23) ソルバーがモデルで使用されます。したがって、Memory ブロックのサンプル時間は連続ですが、マイナー タイム ステップ [0, 1] で固定されます。モデルを実行すると、次の結果を得ます。

Memory ブロックと Unit Delay ブロックを置き換えても同じ結果が得られます。ただし、連続したサンプル時間を継承する離散 Unit Delay ブロックのため、警告が表示されます。

Combinatorial Logic ブロックの使用方法

sldemo_clutchsldemo_clutch モデルは、Memory ブロックを Combinatorial Logic ブロックと組み合わせて使用することにより、有限状態マシンを実装する方法を示します。この構成は Friction Mode Logic/Lockup FSM サブシステム内にあります。

Memory ブロックは [サンプル時間を継承] が選択されていないため、モデルをシミュレートするためのブロックのサンプル時間はソルバーの種類によって決定します。この場合、可変ステップ (ode23) ソルバーがモデルで使用されます。したがって、Memory ブロックのサンプル時間は連続ですが、次のマイナー タイム ステップで固定されます。 [0, 1].

詳細は、「モデルの説明モデルの説明」を参照してください。

バス サポート

Memory ブロックは、バス対応ブロックです。入力は、次の制限を満たすバーチャルまたは非バーチャル バス信号です。

  • [初期条件] は、ゼロ、非ゼロのスカラー、または有限数値構造体でなければなりません。

  • [初期条件] がゼロまたは構造体で [状態名] が指定されると、入力はバーチャル バスになることができません。

  • [初期条件] が非ゼロのスカラーの場合、[状態名] は指定できません。

初期条件構造体の指定方法の詳細は、「バス信号の初期条件の指定」を参照してください。

Memory ブロックへの非バーチャル バス入力のすべての信号は、関連するバス オブジェクトの要素が継承されたサンプル時間を指定する場合でも、同じサンプル時間をもつ必要があります。個々の信号またはバスの中のすべての信号のサンプル時間の変更に Rate Transition ブロックを使用できます。詳細は、「非バーチャル バスのサンプル時間」「バス対応ブロック」を参照してください。

バスの配列は、Memory ブロックへの入力信号として使用できます。[初期条件] パラメーター (構造体の場合がありますが、そうである必要はありません) のみがバスの配列の次元に一致するようにスカラー拡張されます。バス配列の定義と使用方法の詳細は、「バス配列へのバスの統合」を参照してください。

特性

バス対応

あり、上記の制約付き

直接フィードスルー

なし、ただし、[線形化中に入力を直接フィードスルーする] を選択した場合を除く

サンプル時間

連続、ただし、[サンプル時間を継承] チェック ボックスを選択した場合は駆動ブロックから継承

スカラー拡張

あり、[初期条件] パラメーターによる

離散化

あり

多次元化

あり

ゼロクロッシング検出

なし

この情報は役に立ちましたか?