2

GUI から Simulink モデルの Embedded MATLAB Function (EMF) に値を送信する際に問題が発生しています。GUI のスライダーからこの値を取得し、モデルの EMF ブロックに送信します。GUI から Simulink ブロックに値が正しく転送されていることを確認できます。これは、モデルの表示ブロックを使用して値を表示し、GUI でスライダーの位置を変更すると値が変化することを確認できるためです。ただし、モデルを実行すると、このエラーが発生し続けます。

Could not determine the size of this expression.

Function 'Kastl' (#18.282.283), line 14, column 1:
"f"

これは私の EMF ブロック コードの一部です。

function y = input_par(u,fstart)
  ...
  f_end = 1000;
  f = fstart:f_end; 
  ...
4

2 に答える 2

3

私はMikeTが正しいと信じています: 埋め込み関数の変数のサイズを再定義することはできません。サブセクションDefining Local Variablesの下にあるこのEmbedded MATLAB Function ドキュメンテーション ページを見ると、次のように書かれています。

変数を定義すると、関数本体でそれを他の型またはサイズに再定義することはできません。

宣言する変数のサイズが変わらないように、埋め込み関数を作り直す必要があります。あなたが変数 を使ってその後何をしているのか私にはわからないので、私があなたに提供できる具体的なfヘルプはあまりありません。

一般に、サイズが変化するデータを絶対に使用する必要がある場合、1 つの解決策は、一定のサイズを維持するためにデータに「ガベージ」値を埋め込むことです。例えば:

MAX_ELEMS = 1000;  % Define the maximum number of elements in the vector
f = [fstart:MAX_ELEMS nan(1,fstart-1)];  % Create vector and pad with NaNs

上記の例では、変数fは常に 1000 個の要素を持ちます ( の値がfstart1000 以下の整数値であると仮定します)。この値NaNは、ベクトルを適切な定数サイズにパディングするために使用されます。後続のコードは、 の値をNaN無視する必要があることを認識できる必要があります。埋め込み関数でその後に実行される計算に応じて、代わりに異なるパッド値が必要になる場合がありますNaN(0、負の値など)。

于 2009-08-12T14:48:12.793 に答える
2

あなたが直面している問題は、シミュレーション中に信号の次元を変更するパラメータを変更できないことだと思います。あなたの例では、コード、

f = fstart:f_end;

fstartが変更されるたびにサイズが変更されます。これがEMFブロックが不満を言っていることだと思います。この特定の問題に対する簡単な回避策はありませんが、この問題を回避するための同等の方法があるかもしれません。

于 2009-08-12T01:23:19.797 に答える