Simulink高级应用

您所在的位置:网站首页 matlab2022a怎么保存m文件 Simulink高级应用

Simulink高级应用

2024-07-06 16:53| 来源: 网络整理| 查看: 265

目录标 一 基于data sotre memory来实现全局变量共享二 基于 Simulink.Signal Objects来实现全局变量共享三 总结

一 基于data sotre memory来实现全局变量共享

simulink中的MF(matlab function)模块使用全局变量时 ,可以采用data store memory来实现。有关data store memory可以参加Help文件: https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html#bsdud7d-1 或者 https://ww2.mathworks.cn/help/simulink/ug/using-global-data-with-the-matlab-function-block.html

基本思想是使用数据存储内存来存储全局数据。步骤稍微有点麻烦,总结一下:

-1 MATLAB Function block 的代码中 声明全局变量,例如A

function y = fcn %#codegen global A; A = A+1; y = A;

-2 MATLAB Function block 注册全局变量A

(1)MATLAB Function Block Editor中,点Edit Data打开(图中1)。 (2)点击Add Data(图中2),成功添加一个变量,如图中的3 (3)修改变量名称,如图中的4; 修改变量类型,由input改为data store memory

在这里插入图片描述 -3. 添加 a Data Store Memory到simulink模型中

(1)添加一个data store memory模块; 双击打开DSM, 设置变量名称与前面的MF模块中注册和定义的全局变量匹配(图中1)。 (2)必须设置好明确的数据类型(图中2),不能为auto (3)设置信号的类型(图中3)和初始值(图中4)

注意:如果InitFcn回调函数中已经定义了全局变量在workspace中,如x_ref;Simulink模块中的DSM模块x_ref_dsm必须通过初始化值的设置x_ref来实现写入数据。应当理解,如果不设置dsm的初始化值,系统只是为全局变量开辟了一个store memory,实现了内存与名称x_ref_dsm全局变量的关联,并没有实质性的写入数据!这时候如果在MF模块中,即使定义和注册了x_ref_dsm的全局变量,也没有具体的数据,运行MF程序自然得不到正确的结果!!! 在这里插入图片描述 在这里插入图片描述

二 基于 Simulink.Signal Objects来实现全局变量共享

-1 matlab function block中定义全局变量,同上。 -2 matlab function block中注册全局变量,同上。 -3. 添加 Simulink.Signal object到simulink Model Explorer中

如果能在多个模型(如多个slx文件)中使用全局数据,建议在base workspace中创建 a Simulink.Signal object 。否则,可以在当前的模型下model workspace中创建!

(1) 点击打开Simulink->Modeling tab(下图中1)->Model Explorer(下图中2). (2) 左侧面板中选择 model workspace (下图中3)for the simulink model. (3) The Contents pane 显示了 model workspace中的数据, 点击创建 Simulink.Signal object (下图中4). (4) 右侧面板中 make sure that the Model Explorer displays these attributes. 然后,依次修改数据类型data type(下图中5)、 初始值 initial value(下图中6) 和 单复数complexity(下图7), 即可完成共享全局变量的创建!!!

在这里插入图片描述

三 总结 Simulink中的Matlab function 使用全局数据时,可以通过data store memory和simulink.signal objects来存储全局数据,实现共享。如何选取存储全局变量(data store memory vs. simulink.signal objects),可以根据全局变量的数量和作用范围来选择。MATLAB functions in Simulink中,仅仅通过 global declarations 无法映射到MATLAB global workspace. 必须通过在mf模块中注册全局变量来实现从全局变量到data store memory的映射。如果model中有多个相同名字的数据,全局变量关联的是最近的data store memory。因此 同一个全局变量名称出现在不同的mf模块中,但可能映射到不同的data store memory,取决于具体的模型的hierarchy。这种方式提供了一种在子系统中约束数据可见性的能力在mf中使用全局变量,必须要进行全局变量声明、为变量注册一个变量名相同的data store memoryHow to Store Global Data: (1) 全局变量少,单模型中使用,不使用 model reference => Data Store Memory blocks. (2) 全局变量多,单模型中使用,不使用model reference. => simulink.Signal objects defined in the model workspace, 优点是无须在模型中添加大量的 Data Store Memory blocks; 可以载入Simulink.Signal objects从一个MAT文件中 (3) 多个模型中共享数据 (including referenced models) => Simulink.Signal objects defined in the base workspace

参考文献: https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html#bsdud7d-1

.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3