【问题标题】:how to initialize and share user defined variables in simulink?如何在 simulink 中初始化和共享用户定义的变量?
【发布时间】:2017-04-05 16:01:06
【问题描述】:

我在 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 函数时出错

请给我一个解决方案, 谢谢。

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

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

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

    如果您想将数据保存在 simulink 中,有两种方法可以解决此问题。一种是在 Simulink 中将类变成结构/总线类型,并遵循数据存储方法。在这里,您需要将数据存储类型定义为 simulink.signal 对象,并将数据类型设置为总线对象。如果您只有 4 个字段,如您所展示的,更简单的方法是将它们分成 4 个不同的变量,并为每个变量分配一个单独的数据存储内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      相关资源
      最近更新 更多