3

私のモデルには、エンティティ ジェネレータ、いくつかの属性function(out_attrName)、およびエンティティ シンクがあります。attrNameすべてのエンティティのすべての値の合計を取得するにはどうすればよいですか? シンクに到達してこの値を蓄積する前に、すべてのエンティティの値を取得したいと考えています。

「Cumulative Sum」ブロックを使用しようとしましたが、うまくいきませんでした。このブロックは入力に離散時間を必要とするため、Discrete-Time Integrator を使用します。正しい方法で使用しているとは言えません。たとえば、合計する値が 34 と 40 の場合、合計は正しい 74 ではなく 12344 のようなものになる可能性があります。

編集

例:
次のモデルを考えてみましょう: 10 個のエンティティがサーバーに移動し、次にシンクに移動します。
2 つSet attributeのブロックがあります。

  • 最初のものStartTime(サーバーの前のクロックからの現在の時間)
  • 2 つ目EndTime(サーバーの後のクロックからの現在の時刻)

属性 = -を設定する1 つのAttribute functionブロック。 モデルは非常に単純なので、属性は常に 10です。 10 個のエンティティがあります。各エンティティには属性== 10 があります。すべてのエンティティの属性の合計を取得したいと考えています。10*10=100。それ、どうやったら出来るの?ServiceTimeEndTimeStartTime
ServiceTimeSignal scope
ServiceTimeServiceTime


詳細:

  1. モデル
  2. 属性 1 を設定
  3. サーバ
  4. 設定属性 2 & スクリプト機能
  5. 属性を取得
4

2 に答える 2

1

ここでいくつかの調査を行った後、私にとって有効な私自身の答えが得られました。
ある時点で間違っている場合は、この回答にコメントしてください。

  1. データを保存するには、アキュムレータ (何らかのストレージ) が必要です。そのため、MatLab ワークスペースを使用する必要があります。coder.extrinsic('evalin')関数とを使用して値を読み書きできますcoder.extrinsic('assignin')

  2. すべてのエンティティからのすべての値を単一のベクトルに入れる必要があります。この操作の後、データが 1 か所に保存され、好きなことを行うことができます。このベクターは、ワークスペースによって「ホスト」されます。

  3. 私の場合、ベクトル要素をインデックスで割り当てるのは簡単です。したがって、すべてのエンティティに ID があります (これは#dジェネレーターからの値です)。

  4. 最後に、ベクターにデータを書き込みましょう。モデルを開始する前に、Matlab で次のコードを実行します。
    someVar = zeros(1000,1)

Attribute functionシンク直前にデータをブロックに保存:

out_EntityDuration = FinishTime - StartTime;

coder.extrinsic('evalin');
coder.extrinsic('assignin');

x = zeros(1000,1);
x = evalin('base', 'someVar');

x(Id+1) = out_EntityDuration;

assignin('base','someVar',x);

ここでワークスペースへの読み取り/書き込みの詳細を参照してください http://www.mathworks.com/matlabcentral/newsreader/view_thread/263578

実行後、モデルsomeVarストアデータ。これで、合計または平均値を見つけることができます。

于 2012-07-01T13:25:34.983 に答える
0

あなたのSOの質問は、「Matlabでシンクの伝播遅延を取得する方法」を尋ねているようです。

このMatlabNewletterの記事「ディスクリートシステムによるサンプル伝搬遅延の決定」では、合計遅延値を取得する際にディスクリートSimulinkモデルに使用する方法について説明しています。

そのニュースレターによると、 「遅延の一般的な分析的推定ではなく、Matlabの入力機能と出力機能の間の相互相関を使用することをお勧めします。これは、最終的な値に計算するのが難しいためです。

于 2012-07-01T09:21:18.390 に答える