主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

データストアの基礎

データストアは,入力または出力信号を直接データストアに接続することなしにデータの書き込みまたは読み取りができるリポジトリです。データストアは、モデルのレベルを越えてアクセス可能なため、サブシステムおよび参照されるモデルはデータ ストアを使用して、I/O 端子を使用せずにデータを共有できます。

データストアの使用時

データストアは,モデルの異なるレベルでの複数信号が同じグローバル値が必要とする際に便利です。信号すべてを明示的に接続すると,モデルを煩雑にするか,実現可能になるまで時間がかかります。データストアはプログラムのグローバル変数と同じで、同じような利点や欠点 (検証を難しくするなど) があります。

データストアは,再利用可能なアルゴリズムのインスタンス(カスタムライブラリ内のサブシステムや再利用可能な参照モデルなど)の間でデータを共有する場合に使用できます。再利用可能な参照モデルでのデータ共有の詳細については,参照モデルインスタンス間でのデータの共有を参照してください。

データストアおよびソフトウェアの検証

データストアは,ソフトウェア検証,特にデータ結合および制御の領域で大きな影響があります。入力端子と出力端子のみを使用してデータを渡すモデルおよびサブシステムの結果は,生成コード内でクリーンで,適切に指定され,簡単に検証できるインターフェイスになります。

グローバルデータの任意のタイプと同じように,データストアは検証をより困難にします。開発過程がソフトウェアの検証を含む場合,設計過程の早い時期にデータストアの効果を計画してください。

詳細はRTCA做- 331の“基于模型的开发和验证补充- 178 - c和- 278 a”のMB.6.3.3。b節を参照してください。

转到ブロックおよびブロックによる信号の経路指定

ある場合には,转到ブロックおよびブロックなどの簡単な手法を使用して,データストアで与えられるものと似たような結果を取得できます。转到/From データ リンクの主な欠点は、非バーチャル サブシステムの境界を越えてアクセスできないことです。適切に設定されたデータ ストアは、任意の場所でアクセスできます。Goto/From リンクの詳細は、转到およびブロックのリファレンスページを参照してください。

ローカルおよびグローバルデータストア

2種類のデータストアを定義できます。

  • ローカルデータストアは,データストアを定義するレベルまたはそれより下のレベルで,参照されるモデルを除きモデルの階層構造の任意の場所からアクセス可能です。ローカルデータストアは,モデルでグラフィカルに,またはモデルワークスペースの信号オブジェクト(金宝app仿真软件。信号)の作成によって定義できます。

  • グローバルデータストアは,参照されるモデルを含むモデルの階層構造全体でアクセス可能です。グローバルデータストアは,MATLAB®ベースワークスペースでのみ,信号オブジェクトを使用して定義できます。参照モデルでアクセスできる唯一のタイプのデータストアがグローバルデータストアです。

一般に,モデル内の最低レベルのデータストアを探します。このモデルは,データストアへのアクセスを必要とするモデルのすべての部分に,データストアへのアクセスを許可します。ローカルおよびグローバルデータストアの例は,データストアの例に表示されます。

参照モデルの使い方の詳細は,モデル参照を参照してください。

データストア診断

データストア診断について

金宝app®は,データストアの問題を回避するために使用できる,さまざまな実行時およびコンパイル時の診断機能を提供します。診断は[モデルコンフィギュレーションパラメーター]ダイアログボックスおよび数据存储内存ブロックのパラメーターダイアログボックスで使用可能です。金宝app仿真软件モデルアドバイザーは,診断が無効なためデータストアエラー発生の可能性のある場所をリストすることにより,サポートを提供しています。

アクセス順序エラーの検出

データストア実行時診断を使用して,シミュレーション中に発生したデータストアの読み取りおよび書き込みの意図しない順序を検出できます。これらの診断をすべてのデータストアに適用したり,各数据存储内存ブロックにそれぞれの値を設定できます。診断は次のとおりです。

これらの診断は[モデルコンフィギュレーションパラメーター],[診断],[データ有効性]、[数据存储内存ブロック]ペインに表示されます。ここではそれぞれ次の値のいずれかをもつことができます。

  • [すべて無効]——モデルによってアクセスされるすべてのデータストアに対してこの診断を無効にします。

  • [警告としてすべて有効]——MATLABのコマンドウィンドウに警告として診断を表示します。

  • [エラーとしてすべて有効]——シミュレーションを停止して,エラーダイアログボックスにその診断を表示します。

  • [ローカル設定を使用)——各数据存储内存ブロックがこの診断用の値を設定できるようにします(既定)。

同じ診断は,それぞれの数据存储内存ブロックパラメーターダイアログボックスの[診断]タブにも表示されます。それぞれの診断を[なし][警告],または[エラー]に設定できます。個別ブロックによって指定された値は,対応するコンフィギュレーションパラメーターが[ローカル設定を使用)である場合にのみ適用されます。詳細は,モデルコンフィギュレーションパラメーター:データ有効性の診断および数据存储内存ドキュメンテーションを参照してください。

最も保守的な手法は,すべてのデータストア診断を[モデルコンフィギュレーションパラメーター][診断][データ有効性)(数据存储内存ブロック][エラーとしてすべて有効]に設定することです。ただし,この設定は常に最良であるとは限りません。意図する動作にエラーとしてフラグを付ける可能性があります。次の図に、数据存储写ブロックの前に数据存储读取ブロックを強制的に実行させるためにブロック優先順位を使用するモデルの例を示します。

データストア一个数据存储写ブロックによる更新前に数据存储读取ブロックで読み取られたためにシミュレーションでエラーが発生しています。関連する遅延が想定される場合は,グローバルパラメーター[書き込み前の読み取りを検出)[ローカル設定を使用)に設定し,そのパラメーターを数据存储内存ブロックのダイアログボックスの[診断]ペインで[なし]に設定することにより,エラーを抑えることができます。この手法を使用する場合,診断から意図的に除外するブロック以外のすべての数据存储内存ブロックで,パラメーターを[エラー]に設定してください。

データストアの診断とアクセラレータモードで参照されるモデル-アクセラレータモードで参照されるモデルの場合,仿金宝app真软件は,次の[コンフィギュレーションパラメーター][診断][データ有効性)(数据存储内存ブロック]パラメーターが[すべて無効]以外の値に設定されている場合,それらの値を無視します。

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

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

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

モデルアドバイザーを使用して,上記にリストされているコンフィギュレーションパラメーターが仿真软金宝app件で無視される,アクセラレータモードで参照されるモデルを特定できます。

  1. 金宝app仿真软件エディターの[モデル化)タブで,[モデルアドバイザー]をクリックします。

  2. [タスク別]を選択します。

  3. (高速化されたモデル参照シミュレーション中に無視された診断設定をチェック]チェックを実行します。

データストア診断とMATLAB函数ブロック-MATLAB函数ブロックが使用するデータストアメモリの診断は,保守的になる可能性があります。たとえば,データストアメモリの配列をMATLAB関数に渡す場合,= foo ()などの最適化を行うと,アクセスしたのが一部の要素であっても,MATLABによって,配列の内容全体が読み取り専用または書き込み専用とマーキングされる可能性があります。

マルチタスクアクセスエラーの検出

データストアがあるタスクから読み取られ,別のタスクに書き込まれた場合,データ整合性は失われる可能性があります。たとえば,次の場合を仮定します。

  1. タスクが,データストアに書き込まれる。

  2. 2番目のタスクが最初のタスクに割り込む。

  3. 2番目のタスクがそのデータストアから読み取られる。

2番目のタスクが割り込んだときに最初のタスクが部分的にデータストアを更新していた場合,ストアの結果データは矛盾します。たとえば,値がベクトルの場合,その要素のいくつかは現在のタイムステップで書き込まれますが,残りは以前のステップで書き込まれます。値がマルチワードの場合,部分的にも正しくない矛盾状態のままである可能性もあります。

タスクプリエンプションによるデータ整合性の問題が発生しないと確信できる場合を除き,コンパイル時診断[モデルコンフィギュレーションパラメーター],[診断],[データ有効性]、[数据存储内存ブロック],[マルチタスクデータストア][警告](既定)または[エラー]に設定します。この診断は,異なるタスクから読み取られ異なるタスクへ書き込まれるデータストアの場合にフラグを付けます。次の図は,[マルチタスクデータストア][エラー]に設定することにより検出された問題を示します。

データストア一个は,速いタスクに書き込まれ,遅いタスクから読み込まれるため,エラーが推奨修正方法と共に報告されます。この診断は,データストアの読み取りまたは書き込みが条件付きサブシステム内にある場合でも適用されます。金宝app仿真软件は,ブロックが実行されるタスクを適切に診断し,診断を評価する目的でタスクを使用します。

次の図は,上記の問題に対する解決法を示します。データストアの読み取り後に、以前より遅いレートでデータ ストアにアクセスした Rate Transition ブロックを置きます。

変更されると,データストアの書き込みは,より速いレートで継続して発生します。モデルのその他の場所で,データストアがより速いレートで読み取られる必要がある場合,これは重要です。

マルチタスクデータストア診断は,参照されるモデル内のデータストアの読み取りおよび書き込みにも適用されます。異なる2つのモデルがデータストアの読み取りおよび書き込みを異なるタスクで実行する場合,仿真软金宝app件が共通の親モデルをコンパイルするとエラーが検出されます。

重複する名前のエラーの検出

データストアのエラーは,モデル内でのデータストア名の重複使用によって発生します。たとえば,異なる入れ子になったスコープで2つ以上のデータストアのメモリが同じデータストア名をもつ場合,データストアの優先順位変更が発生します。この場合,データストアの読み取りまたは書き込みによって低いレベルで参照されるデータストアのメモリは,意図された格納ではない可能性があります。

重複したデータストア名が原因のエラーを回避するには,コンパイル時診断[モデルコンフィギュレーションパラメーター],[診断],[データ有効性]、[数据存储内存ブロック],[データストア名の重複][警告]または[エラー]に設定します。既定の設定では,診断値は,[なし]になり,重複名の検出を行いません。次の図は,[データストア名の重複][エラー]に設定することにより検出された問題を示します。

サブシステム階層の最下レベルでのデータストア読み取りは一个という名前のデータストアを参照し,同じモデル内の2つの数据存储内存ブロックもその名前をもつため,エラーが報告されます。この診断は,データストアの読み取りがモデルの最上位レベルの数据存储内存ブロックを参照すると仮定されないようにします。読み取りは,数据存储内存ブロックを数据存储读取ブロックに近い中間レベルで参照します。

モデルアドバイザーでのデータストア診断

モデルアドバイザーは,データストアと共に使用できるいくつかの診断機能を提供します。データストアのモデルアドバイザー診断の詳細は,次の節を参照してください。

マルチタスク,厳密な型指定,優先順位の低下などの問題について,数据存储内存ブロックをチェック

モデリングエラーに対して数据存储ブロックサンプル時間をチェック

数据存储ブロックについて読み取り/書き込みの診断が有効であるかどうかをチェック

データストアの初期値の指定

一般に,データストアの初期値を指定する際は,その他のブロックで使用する場合と同じ手法を使用できます。信号と離散状態の初期化を参照してください。

ほとんどのブロックでは,スカラー拡張を活用して非スカラー信号の初期値を指定する作業を最小限に抑えることができます。スカラーの初期値を指定する場合,信号の各要素はそのスカラーを使用します。

ただし,数据存储内存ブロックで[次元]パラメーターを-1に設定する場合(既定),スカラー拡張は使用できません。その代わり,保存された信号と同じ次元をもつ初期値を指定しなければなりません。初期値のスカラー拡張を活用するには,[次元]パラメーターを(1 2)[1 myDim](シンボリック次元用)などの特定の値に設定します。

参考

|||

関連するトピック