0

S-Function コード内からワークスペース変数にアクセスすることは可能ですか?

以下は、動作しないテスト済みのバリアントです。にはMyVar変数がありModel Workspace、 から表示されModel Explorerます。行はDoPostPropSetup、カスタム ブロック コードの関数内から実行されます。

適切なエラー メッセージは投稿のコメントにあります

% a=evalin('Model Workspace', 'MyVar'); % Unknown command option.
% a=evalin('caller', 'MyVar'); % (incorrect workspace)
% a=Simulink.MyVar % Undefined variable "Simulink" or class "Simulink.MyVar".
% a=simulink.MyVar; % Undefined variable "simulink" or class "simulink.MyVar".
% a=Simulink.ModelWorkspace.evalin('MyVar'); % has no property or method named 'evalin'.

後者は、文書化された事実に直接違反しています: http://www.mathworks.com/help/simulink/slref/simulink.modelworkspace.html

アップデート

何か新しいものを見つけた

 % a=evalin('modelworkspace', 'MyVar'); % Unknown command option.

   hws = get_param(bdroot, 'modelworkspace');
%   a = hws.evalin('MyVar'); % Attempt to evaluate an expression in a read-only model workspace

   a = hws.getVariable('MyVar'); % works

後者のコマンドは機能しますが、(1) 前のコマンドはワークスペースが「読み取り専用」であると言いましたが、変数にも書き込む必要があります。

(2)bdroot関数は「最上位の Simulink システムの名前」を返すと文書化されていますが、これはまったく不明です。現在のコードのブロックが存在するモデルのワークスペース (名前ではない) にアクセスする必要があります。

4

0 に答える 0