如何从MATLAB函数内的工作空间中获取Simulink结构的值?
我需要访问MATLAB工作区中的变量值,类型为如何从MATLAB函数内的工作空间中获取Simulink结构的值?,matlab,global-variables,simulink,data-dictionary,Matlab,Global Variables,Simulink,Data Dictionary,我需要访问MATLAB工作区中的变量值,类型为Simulink.parameter: CAL_vars = dsdd('find','/path/CAL','ObjectKind','Variable','Property',{'name' 'Class' 'value' 'CAL'}) %gets ids of variables in data dictionary i = 10 for i=1:length(CAL_vars) var_name = dsdd('GetAtt
Simulink.parameter
:
CAL_vars = dsdd('find','/path/CAL','ObjectKind','Variable','Property',{'name' 'Class' 'value' 'CAL'})
%gets ids of variables in data dictionary
i = 10
for i=1:length(CAL_vars)
var_name = dsdd('GetAttribute',CAL_vars(i),'name');
% gets names of variables in data dict
var_eval = eval(var_name); % this works in standalone script and it does exactly
% what I need, but once i put it in the function I need this for, it returns error
if (length(var_eval.Value) ==1)
if (var_eval.Value == true)
var_eval.Value = 1;
elseif (var_eval.Value == false)
var_eval.Value = 0;
else
end
end
% do something with the Value
if (errorCode ~= 0)
fprintf('\nSomething is wrong at %s\n', var_name)
end
end
出现问题的原因是,当我尝试调用eval(name_of_var)时,结构是由Simulink生成的,并且给出了错误:对于类型为“Simulink.Parameter”的输入参数,未定义函数“eval”
奇怪的是,它在独立脚本中似乎运行正常,但一旦我将其插入到更大的函数中,它就会停止工作并开始显示错误
Error using eval
Undefined function or variable 'name_of_var'.
该功能显然位于工作区中
奇怪的是,它似乎在独立脚本中正常运行,但
一旦我把它插入到更大的函数中,它就会停止工作
这是预期的行为。函数,无法直接访问基本工作区中的变量
您可以尝试使用而不是eval
,并指定base
工作区:
evalin(ws,expression)
执行expression
,一个字符向量或
包含使用变量的任何有效MATLAB®表达式的字符串标量
在工作区ws
中ws
的值可以是'base'
或'caller'
表示MATLAB基本工作区或调用者的工作区
功能
但是,一般来说,如果可能的话,有很多原因可以避免使用
eval
(请参阅MATLAB帮助以了解eval
)如果你能找到一种不同的方法来获取这些数据,那将是最好的。我对你的理解正确吗:你想在Matlab工作区中从Simulink访问结构吗?我不知道我的术语是否正确-除了大学里的一些小项目外,我对Matlab还是相当陌生的。Matlab工作区中有一些变量(我认为)是由Simulink生成的,现在进一步检查,这些变量似乎是Simulink.Parameter类型的对象。我将编辑这个问题。很抱歉造成混淆。发布您的dsdd(),这是一个更大项目的一部分,因此我无法在线发布任何详细信息,但我已经测试了与此相关的所有内容,并按预期返回了正确的变量名。我相当确定问题的核心在于Simulink参数上的eval的使用非常感谢。我对Matlab相当陌生,不知道单独的工作空间存在。我今天也明白了。不幸的是,在这种情况下,eval是唯一可行的选择,因为我正在处理来自更大项目的代码,在生成所述数据方面没有太多发言权。