Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MATLAB函数内的工作空间中获取Simulink结构的值?_Matlab_Global Variables_Simulink_Data Dictionary - Fatal编程技术网

如何从MATLAB函数内的工作空间中获取Simulink结构的值?

如何从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

我需要访问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('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是唯一可行的选择,因为我正在处理来自更大项目的代码,在生成所述数据方面没有太多发言权。