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 システムの名前」を返すと文書化されていますが、これはまったく不明です。現在のコードのブロックが存在するモデルのワークスペース (名前ではない) にアクセスする必要があります。