首页 文章

如何在simulink中初始化和共享用户定义的变量?

提问于
浏览
0

我在Simulink中定义了这个简单的类,我想创建和共享这个类的5x5矩阵 .

classdef evidential_grid
properties 
  Occ      
  Libr      
  Incert   
  Conf      
end
methods
  function obj = evidential_grid()       % Grid Constructor
         obj.Occ = 0;
         obj.Libr = 1;          
         obj.Incert = 0;
         obj.Conf = 0;
  end
end
end

在matlab中,此代码用于创建5x5的矩阵

myGrid(5,5) = evidential_grid();

据我们所知 . Simulink不接受变量的动态分配,所以我应该先将它初始化 .
为此,我创造了

function fcn()
%#codegen
global MySharedVariable;
coder.extrinsic('evidential_grid');
MySharedVariable(5,5) = evidential_grid();
  • 在simulink中的matlab函数

  • 数据存储区块用于共享"evidential_grid"类型的变量

但是当我执行我的simulink模型时,我遇到了这些错误!

全局声明未解析为通过端口和数据管理器注册的数据存储区块 . 解析MATLAB函数时发生错误

请找我解决方案,谢谢 .

1 回答

  • 0

    您的代码可能存在多个问题 . 首先,为了使用MATLAB功能块中的全局变量,需要将它们映射到数据存储器内存块 . 请参阅https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html的帮助页面 . 您可以通过打开"Edit data"选项并添加全局变量并选择类型为"data store memory"来执行此操作 . 您还可以通过运行open_system([docroot,'/toolbox/simulink/examples/dsm_demo'])来签出示例dsm_demo .

    您仍然无法将外部函数的输出存储在此变量中 . 在您的情况下,我认为最好的情况是将对象数组也移动到外部函数并将其作为全局或持久数据存储在那里,并访问必要的属性作为该函数的输出 .

    如果您想将数据保存在simulink中,有两种方法可以解决这个问题 . 一种是在Simulink中将类转换为struct / bus类型,并遵循数据存储方法 . 在这里,您需要将数据存储类型定义为simulink.signal对象,并将数据类型设置为总线对象 . 如果您只显示了4个字段,则更简单的路径是将它们分成4个不同的变量,并为每个变量分别设置一个数据存储区 .

相关问题