如何在MATLAB函数中从工作区获取Simulink结构的值?[英] How do I get the value of a Simulink struct from the workspace within a MATLAB function?

本文是小编为大家收集整理的关于如何在MATLAB函数中从工作区获取Simulink结构的值?的处理方法,想解了如何在MATLAB函数中从工作区获取Simulink结构的值?的问题怎么解决?如何在MATLAB函数中从工作区获取Simulink结构的值?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我需要访问 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

出现问题是因为结构是由 Simulink 制作的,并且当我尝试为"Simulink.Parameter"类型的输入参数调用 eval(name_of_var): Undefined function 'eval' 时会出错.

奇怪的是,它似乎在独立脚本中正常运行,但是一旦我将它插入到更大的函数中,它就会停止工作并开始显示错误提示

Error using eval
Undefined function or variable 'name_of_var'.

函数在工作区中清晰可见.

推荐答案

奇怪的是,它似乎在独立脚本中正常运行,但一旦我将它插入更大的功能,它就会停止工作

这是预期的行为.一个函数有自己的工作空间并且可以'不直接访问基础工作区中的变量.

您可以尝试使用 evalin 而不是 eval,并指定base工作区:

<块引用>

evalin(ws, expression) 执行 expression,一个字符向量或包含使用变量的任何有效 MATLAB® 表达式的字符串标量在工作区 ws 中.ws 的值可以是 'base' 或 'caller'表示 MATLAB 基础工作区或调用者的工作区功能.

一般来说,如果可能的话,尽量避免使用 eval 的原因有很多(请参阅 eval 的 MATLAB 帮助),最好能找到一种不同的方法来获取这些数据.

本文地址:https://www.itbaoku.cn/post/1794053.html