Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

チャートからのデータ ストア メモリへのアクセス

Simulink® モデルでは、Data Store Memory (Simulink) ブロックまたは Simulink.Signal (Simulink) オブジェクトのインスタンスとして、グローバル変数が "データ ストア" として実装されます。データ ストアを使用すると、ブロック間でデータを受け渡す明示的な入出力接続なしで、複数の Simulink ブロック間でデータを共有できます。Stateflow® チャートはシンボリック モードでのデータ ストア メモリの読み書きによって、グローバル データを Simulink モデルと共有します。

Simulink model that contains a Stateflow chart and a Data Store Memory block.

チャートからグローバル データにアクセスするには、Stateflow データ オブジェクトを Simulink データ ストアにバインドします。バインドを作成すると、Stateflow データ オブジェクトは Simulink データ ストア メモリのシンボリック表現になります。このシンボリック オブジェクトを使用すると、グローバル データの保存と取得が可能になります。Stateflow は、非有界の次元をもつ Simulink のデータ ストアにアクセスできます。

ローカルおよびグローバルのデータ ストア メモリ

Stateflow チャートは、ローカル データ ストアおよびグローバル データ ストアとインターフェイスできます。

  • ローカル データ ストアは単一モデル内のすべてのブロックで認識されます。ローカル データ ストアとやりとりするには、ローカル データ ストアが次のように定義されたモデル内にチャートが存在していなければなりません。ローカル データ ストアは、Data Store Memory ブロックをモデルに追加するか、Simulink 信号オブジェクトを作成することによって定義できます。

  • グローバル データ ストアには、モデル参照の境界を越えて広範なスコープが設定されます。グローバル データ ストアとやりとりするには、グローバル データ ストアの定義場所である最上位モデルか、最上位のモデルが参照するモデル内にチャートが存在しなければなりません。グローバル データ ストアは、Simulink の信号オブジェクトとして実装します。

詳細については、ローカルおよびグローバル データ ストア (Simulink)を参照してください。

データ ストアへの Stateflow データのバインド

  1. Simulink データ ストア メモリを定義するには、Data Store Memory ブロックをモデルに追加するか、Simulink 信号オブジェクトを作成します。詳細については、Data Store Memory ブロックを使用したデータ ストア (Simulink)信号オブジェクトを使用したデータ ストア (Simulink)を参照してください。

  2. Stateflow データの追加の説明に従って、データ オブジェクトを Stateflow チャートに追加します。

  3. [名前] プロパティを、Stateflow データ オブジェクトのバインド先とする Simulink データ ストア メモリの名前として設定します。

  4. [スコープ] プロパティを [データ ストア メモリ] に設定します。

Stateflow データ オブジェクトは、バインドされているデータ ストア メモリからすべての追加プロパティを継承します。

同じ名前で複数のローカル データ ストアやグローバル データ ストアを同じモデルの階層構造内に配置できます。このような状況では、Stateflow データ オブジェクトは最も近い上位オブジェクトに該当するデータ ストアにバインドされます。

グローバル データの格納と取得

Stateflow データ オブジェクトを Simulink データ ストアにバインドしたら、ステート アクションとトランザクション アクションでグローバル データを格納および取得できます。データ オブジェクトはグローバル変数の役割を果たし、シンボリック名で参照します。この変数に数値を格納する場合は、Simulink データ ストア メモリに書き込むことになります。この変数から数値を取得する場合は、データ ストア メモリから読み取ることになります。

たとえば、以下のチャートでは、ステート アクションは、myglobal というデータ ストア メモリ ブロックとの間で読み取りと書き込みを行います。

データ ストアを使用する場合のベスト プラクティス

チャート内のデータ ストアのプロパティ

Stateflow データ オブジェクトをデータ ストアにバインドすると、Stateflow オブジェクトには、データ ストアからすべてのプロパティが継承されます。プロパティが正しく伝播するようにするには、Simulink データ ストアを作成するときに、次を行います。

  • データ型を [auto] 以外に設定します。

  • 自動モード プロパティの使用を最小限に抑えます。

複数のモデル間でのデータ ストア メモリの共有

複数のモデルから 1 つのグローバル データ ストアにアクセスするには、次を行います。

  • モデルに Data Store Memory ブロックが含まれていないことを確認します。Data Store Read (Simulink) ブロックと Data Store Write (Simulink) ブロックは含めることができます。

  • MATLAB® ベース ワークスペースで、以下の属性を指定して Simulink.Signal オブジェクトを作成します。

    • [データ型] を明示的なデータ型に設定します。データ型を [自動] に設定することはできません。

    • [次元] を完全に指定します。信号の次元を -1、つまり [継承] に設定することはできません。

    • [実数/複素数] を完全に指定します。実数/複素数を [自動] に設定することはできません。

    • [Storage Class][ExportedGlobal] に設定します。

  • データを共有するチャートごとに、Stateflow データ オブジェクトを Simulink データ ストアにバインドします。

読み取り前のデータ ストア メモリへの書き込み

アルゴリズムのレイテンシを回避するために、データ ストア メモリとの間で、読み取りの前に書き込みを行います。そうでない場合、読み取りアクションでは、現在のタイム ステップで計算されて格納された値ではなく、前回のタイム ステップで格納された値が取得されます。別々のレートで動作している、接続されていないブロック同士がグローバル データを共有している場合は、次を行います。

  • 読み取りアクションを、書き込みアクションとは別のブロックに分離します。

  • ブロックに優先順位を割り当てることで、モデルが読み取りブロックの前に書き込みブロックを呼び出すようにします。詳細については、実行順序の制御と表示 (Simulink)を参照してください。

予期しない複数の読み取りと書き込みが同一のタイム ステップ内で発生する状況を回避するために、Data Store Memory ブロック診断で次の処理を有効にします。

  • 書き込み前の読み取りを検出

  • 読み取り後の書き込みを検出

  • 書き込み後の書き込みを検出

タイム ステップ間で値を累積する固定グローバル ストレージ領域としてデータ ストア メモリ ブロックを使用する場合は、Data Store Memory ブロック診断を無効にして、不要な警告を回避します。詳細については、データ ストア診断 (Simulink)を参照してください。

Block parameters dialog box for a Data Store Memory block.

参考

(Simulink) | (Simulink) | (Simulink) | (Simulink)

関連するトピック