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

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

目次

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

複数のチャート間でのグローバル データの共有

データ ストアについて

インターフェイスを介して、チャートから Simulink® モデル内のグローバル変数にアクセスできます。データ ストア メモリ ブロックまたは Simulink.Signal オブジェクトのインスタンスとして作成されたデータ ストアとしてグローバル変数が実装されます。データ ストアでは、ブロック間でデータを受け渡す明示的な I/O 接続を必要とせずに、複数の Simulink ブロックでデータを共有できます。Stateflow® チャートはシンボリック モードでのデータ ストア メモリの読み書きによって、グローバル データを Simulink モデルと共有します。

データ ストアをバスで使用することができますが、バスの配列では使用することができません。データ ストアとバスの使い方の詳細は、Simulink ドキュメンテーションの、「"データ ストアをバスとバスの配列で使用する方法"」 を参照してください。

チャートとローカル データ ストアおよびグローバル データ ストアの関係

チャートは、ローカル データ ストアおよびグローバル データ ストアとインターフェイスできます。ローカル データ ストアは、多くの場合、データ ストア メモリ ブロックとして実装され、単一モデル内のすべてのブロックで認識されます。ローカル データ ストアとやりとりするには、ローカル データ ストアが次のように定義された モデルモデル内にチャートが存在していなければなりません。

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

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

チャートから Simulink モデル内のグローバル データにアクセスするには、Stateflow データ オブジェクトを Simulink データ ストア (データ ストア メモリ ブロックまたは信号オブジェクト (「Stateflow データ オブジェクトのデータ ストア メモリへのバインド」を参照)) にバインドしなければなりません。バインドを作成すると、Stateflow データ オブジェクトは Simulink データ ストア メモリのシンボリック表現になります。このシンボリック オブジェクトを使用すると、グローバル データの保存と取得が可能になります (「プログラミングによるグローバル データの読み書き」を参照)。

Stateflow データ オブジェクトのデータ ストア メモリへのバインド

Stateflow データ オブジェクトを Simulink データ ストア メモリにバインドするには、データ ストアと同じ名前で、スコープを [データ ストア メモリ] に設定して、データ オブジェクトを Stateflow 階層内に作成しなければなりません。Stateflow データ オブジェクトは、バインドされているデータ ストアからすべてのプロパティを継承します。チャートでデータ ストアを使用する場合のベスト プラクティス のガイドラインに従って、データ ストア プロパティを指定します。

    メモ:   データ オブジェクトがデータ ストアから継承したプロパティは、編集できません。

Stateflow エディターによるデータ オブジェクトのバインド

Stateflow エディターで、以下の手順に従います。

  1. [チャート][他の要素を追加][データ ストア メモリ] を選択します。

    スコープ プロパティが [データ ストア メモリ] に設定された状態で、新しいデータ オブジェクトのプロパティのダイアログ ボックスが表示されます。

  2. データ プロパティのダイアログ ボックスの [名前] フィールドに、バインドする Simulink データ ストアの名前を入力します。

  3. [OK] をクリックします。

モデル エクスプローラーによるデータ オブジェクトのバインド

モデル エクスプローラーを使用するには、以下の手順に従います。

  1. [追加] > [データ] をクリックします。

    データ オブジェクトがチャートに追加されます。

  2. 新しいデータ オブジェクトをダブルクリックし、プロパティのダイアログ ボックスを開いて、[一般] ペインで以下の情報を入力します。

    フィールド指定する内容
    名前バインドする Simulink データ ストア メモリ ブロックの名前を入力します。
    スコープドロップダウン メニューから [データ ストア メモリ] をクリックします。

  3. [OK] をクリックします。

データ ストアのバインドの解決

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

プログラミングによるグローバル データの読み書き

Simulink データ ストア メモリにバインドする Stateflow データ オブジェクトを使用すると、ステートや遷移のグローバル データの保存と取得が可能になります。このオブジェクトは、シンボリック名 (オブジェクトをバインドするデータ ストアと同じ名前) で参照するグローバル変数として考えます。この変数に数値を格納する場合は、Simulink データ ストア メモリに書き込むことになります。同様に、この変数から数値を取得する場合は、データ ストア メモリから読み取ることになります。

以下のチャートでは、myglobal というデータ ストア メモリ ブロックに対して読み書きが行われます。

チャートと Simulink ブロックの間でのデータ共有の診断

チェック対象のエラー

同じタイム ステップ内に、予期しない複数の読み書きが発生する場合があります。こうした状況を検出するには、以下のような条件に応じてエラーや警告を生成するようデータ ストア メモリ ブロックを構成します。

  • 書き込み前の読み込み

  • 書き込み後の書き込み

  • 読み込み後の書き込み

    メモ:   これらの診断は、Simulink 信号オブジェクトから作成されたデータ ストアでなく、単一の Simulink モデル内のデータ ストア メモリ ブロックに対してのみ使用できます。言い換えると、これらの診断は、モデル参照の境界を越えるグローバル データ ストアに対しては無効です。

診断を有効にする場合

実行速度の異なる複数の未接続ブロックで共有されるデータの妥当性を検証するには、データ ストア メモリ ブロックの診断を有効にします。このシナリオでは、同じタイム ステップで読み取り前の書き込みが発生していない状況を検出できます。これらの違反を回避するには、チャートでデータ ストアを使用する場合のベスト プラクティス を参照してください。

診断を無効にする場合

タイム ステップ間で値を累積する固定グローバル ストレージ領域としてデータ ストア メモリ ブロックを使用する場合は、診断を無効にして、不要な警告が生成されないようにします。

共有データ用の診断の設定方法

データ ストア メモリ ブロックの診断を設定するには、以下の手順に従います。

  1. Simulink モデル内のデータ ストア メモリ ブロックをダブルクリックし、ブロック パラメーターのダイアログ ボックスを開きます。

  2. [診断] タブをクリックします。

  3. 検出する状況ごとに、ドロップダウン メニューから [警告] または [エラー] をクリックして診断を有効にします。

  4. [OK] をクリックします。

複数のモデルに対するグローバル データ ストアの作成

複数のモデルで共有できるグローバル データ ストアへの読み取り/書き込み参照を作成するには、以下の手順に従います。

  1. データを共有する各チャートに存在するデータ ストア メモリ オブジェクトを定義します。

    1. モデル エクスプローラーで、モデル エクスプローラーによるデータの追加方法 の説明に従って、データ オブジェクトを各チャートに追加します。

    2. 各データ オブジェクトに同じ名前を設定します。

    3. 各データ オブジェクトのスコープを [データ ストア メモリ] に設定します。

  2. モデルに Data Store Memory ブロックが含まれていないことを確認してください。

    ただし、Data Store Read ブロックと Data Store Write ブロックは含めることができます。

  3. Simulink.Signal オブジェクトを MATLAB® ベース ワークスペースに作成します。

    1. モデル エクスプローラーの [モデルの階層構造] ペインで、[Simulink ルート]、[ベース ワークスペース] にナビゲートします。

    2. [追加][Simulink 信号] を選択します。

    3. オブジェクトに、チャート内のデータ ストア メモリ オブジェクトと同じ名前を付けます。

  4. これらの設定が Simulink.Signal オブジェクトに適用されることを確認します。

    1. [データ型] を明示的なデータ型に設定します。

      データ型を [auto] に設定することはできません。

    2. [次元] を完全に指定されるように設定します。

      信号の次元を -1 に、つまり継承されるように設定することはできません。

    3. [実数/複素数][実数] に設定します。

    4. [サンプリング モード][サンプル ベース] に設定します。

    5. [ストレージ クラス][ExportedGlobal] に設定します。

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

チャートのデータ ストアをバインドする場合

Stateflow データ オブジェクトをデータ ストアにバインドすると、Stateflow オブジェクトには、データ ストアからすべてのプロパティが継承されます。データ ストアにアクセスしたときに、プロパティが適切に伝播されるようにするには、以下のガイドラインに従ってデータ ストアを作成します。

  • 信号型を [real] に設定します。

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

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

未接続ブロックで読み取り前の書き込みを実行する場合

未接続ブロックがチャートのグローバル データを共有している場合に、読み取り前の書き込みを実行するには、以下のガイドラインに従います。

  • 読み取り処理を書き込み処理とは別のブロックに分離します。

  • ブロックに優先順位を割り当てることで、モデルが読み取りブロックの前に書き込みブロックを呼び出すようにします。

    ブロック実行順序を設定する方法の詳細は、Simulink ドキュメンテーションの 「並べ替え順序の制御と表示」 を参照してください。

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