ドキュメンテーション

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

Memory

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

ライブラリ

Discrete

説明

Memory ブロックは、1 メジャー積分タイム ステップで入力を保持し、遅延します。Iterator Subsystem 内に置いた場合は、1 回の反復ごとに入力を保持して遅延します。このブロックは連続信号と離散信号を受け入れます。ブロックは 1 つの入力を受け入れ、1 つの出力を生成します。各信号はスカラーでもベクトルでもかまいません。入力がベクトルの場合、ベクトルのすべての要素が同じタイム ステップで保持され、遅延します。

最初のタイム ステップのブロック出力は、[初期条件] パラメーターを使って指定します。十分注意してこのパラメーターを選択すると、不要な出力の動作を最小限度に抑えることができます。ただし、サンプル時間を指定することはできません。このブロックのサンプル時間は使用するソルバーのタイプによって異なり、継承するように指定することもできます。サンプル時間を継承するかソルバーに基づくかは [サンプル時間を継承] パラメーターで決まります。

ヒント

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

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

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

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

同様のブロックとの比較

同様の機能のブロック

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

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

ブロックブロックの使用目的リファレンスの例
Unit Delay指定された離散サンプル時間を使用して遅延を実装します。ブロックは離散サンプル時間の信号を受け入れ、出力します。
Memory1 メジャー積分タイム ステップで遅延を実装します。理想的には、ブロックで連続信号 (マイナー タイム ステップで固定された信号) を受け入れ、マイナー タイム ステップで固定された信号を出力します。
Zero-Order Hold連続サンプル時間の入力信号を離散サンプル時間の出力信号に変換します。

ブロックの機能の概要

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

サポートするデータ型

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

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

パラメーター

初期条件

初期積分ステップでの出力を指定します。組み込み入力データ型を使用しない場合は、この値は 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 ブロックを単位遅れに線形化します。

状態名

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

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

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

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

詳細については、「生成コードでの離散ブロック状態の名前付け」 (Simulink Coder)を参照してください。

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

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

[状態名] によって、このパラメーターが有効になります。このパラメーターは、モデル コンフィギュレーション パラメーター [信号の関連付け][なし] 以外の値に設定している場合にのみ表示されます。

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

信号オブジェクト クラス

ターゲット パッケージが定義する信号オブジェクト クラスを選択してカスタム ストレージ クラスのパッケージを選択します。たとえば、組み込みパッケージ mpt からカスタム ストレージ クラスを適用するには [mpt.Signal] を選択します。Embedded Coder® で ERT ベースのコード生成ターゲットを使用している場合を除き、カスタム ストレージ クラスは生成されたコードに影響しません。

目的のクラスがリストに表示されない場合は、[クラス リストのカスタマイズ] を選択します。詳細については、「Apply Custom Storage Classes Directly to Signal Lines, Block States, and Outport Blocks」 (Embedded Coder)を参照してください。

このパラメーターをプログラムによって設定するには、StateSignalObject を使用します。

ストレージ クラスの詳細については、「ストレージ クラスの適用による、コード内での信号と状態の制御」 (Simulink Coder)を参照してください。カスタム ストレージ クラスの詳細については、「Control Data Representation by Applying Custom Storage Classes」 (Embedded Coder)を参照してください。

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

コード生成の状態ストレージ クラスを選択します。

既定の設定: Auto

Auto

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

StorageClass

リストから選択したストレージ クラスまたはカスタム ストレージ クラスを適用します。ストレージ クラスの詳細については、「ストレージ クラスの適用による、コード内での信号と状態の制御」 (Simulink Coder)を参照してください。カスタム ストレージ クラスの詳細については、「Control Data Representation by Applying Custom Storage Classes」 (Embedded Coder)を参照してください。

[信号オブジェクト クラス] を使用して、Simulink 以外のパッケージからカスタム ストレージ クラスを選択します。

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

このパラメーターをプログラムによって設定するには、StateStorageClass または StateSignalObject を使用します。「ストレージ クラスの適用による、コード内での信号と状態の制御」 (Simulink Coder)を参照してください。

TypeQualifier

メモ

TypeQualifier は将来のリリースで削除されます。ストレージ型修飾子をデータに適用するには、カスタム ストレージ クラスとメモリ セクションを使用します。Embedded Coder で ERT ベースのコード生成ターゲットを使用している場合を除き、カスタム ストレージ クラスとメモリ セクションは生成されたコードに影響しません。

const または volatile などのストレージ型修飾子を指定します。

[コード生成ストレージ クラス][ExportedGlobal][ImportedExtern][ImportedExternPointer] または [SimulinkGlobal] に設定すると、このパラメーターが有効になります。このパラメーターは以前にこの値を設定している場合を除き、非表示です。

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

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

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

詳細は、Simulink Coder™ ドキュメンテーションの「生成コードでの離散ブロック状態の名前付け」 (Simulink Coder)を参照してください。

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

Clock ブロックの使用方法

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

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

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

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

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

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

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

Combinatorial Logic ブロックの使用方法

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

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

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

バス サポート

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

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

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

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

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

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

バスの配列は、Memory ブロックへの入力信号として使用できます。[初期条件] パラメーターには次の値を指定できます。

  • 0。この場合、バスの配列内にある個々の信号はすべて初期値 0 を使用します。

  • バスの配列内にある個々の信号に対して初期条件を指定する構造体の配列。

  • バス型で定義される各要素の初期条件を指定する単精度スカラー構造体。この手法を使用して配列の各バスに同じ初期条件を指定します。

バス配列の定義と使用方法の詳細は、「バス配列へのバスの統合」を参照してください。

特性

データ型

double | single | boolean | 整数 | 固定小数点 | 列挙型 | バス

サンプル時間

使用されるソルバーのタイプによって異なります。[サンプル時間を継承] チェック ボックスをオンにした場合は、駆動ブロックのサンプル時間が継承されます。

直接フィードスルー

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

多次元信号

あり

可変サイズの信号

なし

ゼロクロッシング検出

なし

コード生成

あり

R2006a より前に導入

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