目录标

  • 一 基于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 memory
  • How 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

.

Simulink高级应用—— Matlab Function中共享或使用全局变量或全局数据相关推荐

  1. boost::regex模块在 cpp 文件中搜索类定义,使用全局数据的测试程序

    boost::regex模块在 cpp 文件中搜索类定义,使用全局数据的测试程序 实现功能 C++实现代码 实现功能 boost::regex模块在 cpp 文件中搜索类定义,使用全局数据的测试程序 ...

  2. matlab 集成学习方法,将simulink集成到matlab脚本中

    我有以下问题 . 我想将一个simulink模型集成到一个matlab脚本中,用循环中的simulink部分循环完成不同的事情 . 当我在工作空间中定义我用于simulink模型的参数时,下面的程序实 ...

  3. 在MATLAB function中可变的变量数据类型

    定义维度变化的变量,以及引用外部函数: 引用外部函数:coder.extrinsic 定义维度变化的变量:coder.varsize 修改数据的类型

  4. MATLAB中assignment模块,Simulink Matlab Function 模块使用问题求教

    将 M 文件中的代码拷贝到Matlab Function模块中直接使用会出现错误 代码如下: function out =abscontroller(in) alpha        =in(1); ...

  5. c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码

    检索   使用 MATLAB Function 模块集成 C 代码 从 Simulink 模型中调用 C 代码 您可以使用 MATLAB Function 模块从 Simulink® 模型中调用外部 ...

  6. Matlab Function输入输出

    1.Simulink中Matlab Function函数的输入输出除支持常见基本数据类型如uint8,single, boolean等外,还支持自定义结构体,但需在Edit Data中找到Input和 ...

  7. matlab在sin处出现解析错误,用matlab function时出现一些错误,看不太懂

    我调用了4次matlab function,但是出现了一些错误,可能是变量定义有问题,但是我不太会在matlab function中修改变量.版本为2017a 这是function中代码: 第一段 f ...

  8. spring boot中@ControllerAdvice的用法,全局异常处理,全局数据绑定,全局数据预处理

    1: @ControllerAdvice理解 @ControllerAdvice是spring 3.2提供的新注解,他是一个controller增强器,加了@ControllerAdvice的类为那些 ...

  9. Simulink中的某一个模块用了我自己定义的MATLAB function模块,但是出现的结果是:The block ‘**/matlab function/sfunction‘ is in an

    Simulink中的某一个模块用了我自己定义的MATLAB function模块,但是出现的结果是:The block '/matlab function/sfunction' is in an in ...

  10. simulink中MATLAB function模块数据维度不正确问题

    1.首先打开MATLAB function模块 2.函数->Edit Data 3.选中数据维度不正确的变量->大小(size)进行更改(默认-1)->结束

最新文章

  1. 为什么有的人还不到三十岁,就对工作失去了兴趣呢?
  2. java知识点_java知识点
  3. JavaScript实现快速排序
  4. 访问数组元素的 3 种方法
  5. MySql视图view的使用:创建、修改、删除
  6. 企业如何进行数据质量评估
  7. 2021-5-record everthing
  8. c语言运行太短怎么毡筒,C语言程序设计 最简单的C程序设计.ppt
  9. 羊年祝福语(羊年祝福大全)
  10. Qt的工程文件(.pro) -- 转
  11. 解决 Macbook 连接蓝牙鼠标卡顿、飘的现象
  12. 全国职称计算机应用能力考试6,全国职称计算机应用能力考试.doc
  13. PWM方波的理解浅谈
  14. VBS+迷你QQ,实现机器远程休眠和电驴的自动休眠
  15. 第三章,矩阵,04-分块矩阵
  16. Mysql的数据类型bit 导出数据展示为SOH
  17. ARM Compiler相关资料汇总
  18. Scilab常用的命令。
  19. 微信加菲猫连接服务器失败,一个加菲猫猫奴的哭诉,养加菲猫可能是我这辈子做过最错误的决定...
  20. Laravel 获取腾讯云COS临时密钥

热门文章

  1. 2016,后余额宝时代:基金电商沉浮录
  2. 计算机类高级工程师职称评审
  3. ap mt7260a 华硕_MT7620A路由刷DDWRT 及2.4G无线设置经验
  4. 如何在PB数据窗口中设置数据窗口的更新属性
  5. ros自己写避障算法_基于ROS的机器人室内环境探索、避障和目标跟踪方法与流程...
  6. 计算机网络 —— 链路层详解
  7. Android中一个app启动另一个app的指定activity
  8. 【面试题】15.项目相关
  9. 基于递归回溯算法实现八皇后游戏问题
  10. 怎么对注册表中的垃圾文件进行清理?