如何从S-function代码中访问(读/写)工作空间变量?

时间:2013-07-17 11:30:55

标签: matlab simulink

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

0 个答案:

没有答案