1

2 つの永続変数を使用する関数があります。gcb実際の simulink ブロックの関数入力はです。さまざまなブロックで関数を使用したいので、ブロック名を参照する名前で永続変数を宣言したいと思います。

function testBlock(blk)
    blkName = get_param(blk, 'name')
    persistent blkValues % this works for one block
    % but I want something like this
    persistent eval([blkName 'Values']) % doesn't work
    ...
end
4

2 に答える 2

1

ブロックの名前を保存するだけなら、はい。いくつかのデータとわかりやすい名前が必要な場合、構造は次のように機能すると思います。

data = struct([blkName 'Values'],[]);
set_param(gcb,'UserData',data);

次に、使用するデータを取得すると、

ud = get_param(gcb,'UserData');
% ud.([blkName 'Values']) <- your data

appdataまたは、グローバルストレージを使用できます。

setappdata(0,[blkName 'Values'],data);

data = getappdata(0,[blkName 'Values']);

または、実行時に関数を書き直して、必要な名前の変数yickを作成することもできますが、同様のことが行われているのを見てきました。チッ!

編集ダイアログ のUserDataコールバックに何度も使用した方法なので、うまくいくと確信していますが、アプリケーションを完全には理解していない可能性があります。:-)

EDIT モデルをロードするたびにデータを保持する必要がある場合は、UserDataPersistentパラメータを に設定する必要があります'on'。これは面倒ですが、モデルが閉じられてメモリからフラッシュされた後に何が起こったかを忘れるかどうかを選択するために必要な機能です。これはあなたのユース ケースでpersistentあるため、m-script 内の変数は、Matlab が終了すると忘れられるため機能しません。Matlab セッション間で永続化するには、 setprefのように使用する必要があると思います。

于 2013-06-20T19:14:27.553 に答える