是否可以从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系统的名称",这是完全不清楚的。我需要访问模型的工作空间(不是它的名字),其中当前代码'阻止居住。