在simulink中使用全局变量的方法
2016-08-18 00:07
183 查看
需求: 我们需要在simulink的一些模块中共用一些变量,尤其是在Simulink里面的Matlab Function模块中共同使用变量,若干个Matlab Function都可以读取该变量,同时又可以对该变量进行修改。 如果采用常规方法,会比较繁琐,要对该变量同时定义输入和输出,并且连线也会比较复杂。
解决: 在Simulink中定义某些变量是全局变量,在Matlab Function中调用时只要声明该变量是全局变量,并且附加一些特殊的处理,就可以对改变进行读写操作。
下面有一个简单的例子,来说明具体的操作方法
上面图中的Pulse Generator是一个方波发生器,每隔1s发送一个方波,触发Triggered Subsystem,Triggered Subsystem里面是一个计数器,记录给模块触发的次数,该Subsystem的内容见下图。
下面是一个Matlab Function输出Triggered Subsystem里面计数器的值给一个Display模块。
Data Store Memory就是今天要讲的一个关键,马上就要讲到了,耐心点。
在这个例子中很明显就用到了一个全局变量(当然也可以不用全局变量实现,但这不是今天的重点),Triggered Subsystem中对该全局变量进行计数,在外层的Matlab Function中读取这个全局变量。这个全局变量在本例子中为glb_data。
Triggered Subsystem中的Matlab Function中的内容
外层的Matlab Function中的内容
各位看官想必已经清楚了,原来是这样,原来就在Matlab Function中加一个global 声明一下该全局变量,然后在外层模块中放一个Data Store Memory就行了(这个模块其实就在Simulink基本库中的Signal Routing组下面,关于这个模块的作用范围,大家看其帮助吧)。你如果只这样做,还是会出错的!!!!哈哈哈。
大家还要在Model Explore中(或者在Matlab Edit里面,点击右上角附近的Edit Data),对应的Matlab Function模块下,添加一个glb_data数据,并且声明该数据的Scope是Data Store Memory。
好了,这个方法告诉大家了,如果觉得还行,就顶我一下。这个问题曾经纠结过我好久,我也曾试过其他方法解决,这个方法是最方便的,但是最好不要在大项目中过度使用,因为这种方法没有清晰的输入输出接口,阅读项目的人不容易看懂该模块的作用。
解决: 在Simulink中定义某些变量是全局变量,在Matlab Function中调用时只要声明该变量是全局变量,并且附加一些特殊的处理,就可以对改变进行读写操作。
下面有一个简单的例子,来说明具体的操作方法
上面图中的Pulse Generator是一个方波发生器,每隔1s发送一个方波,触发Triggered Subsystem,Triggered Subsystem里面是一个计数器,记录给模块触发的次数,该Subsystem的内容见下图。
下面是一个Matlab Function输出Triggered Subsystem里面计数器的值给一个Display模块。
Data Store Memory就是今天要讲的一个关键,马上就要讲到了,耐心点。
在这个例子中很明显就用到了一个全局变量(当然也可以不用全局变量实现,但这不是今天的重点),Triggered Subsystem中对该全局变量进行计数,在外层的Matlab Function中读取这个全局变量。这个全局变量在本例子中为glb_data。
Triggered Subsystem中的Matlab Function中的内容
function count global glb_data; glb_data = glb_data + 1;
外层的Matlab Function中的内容
function y = show_count global glb_data; y = glb_data;
各位看官想必已经清楚了,原来是这样,原来就在Matlab Function中加一个global 声明一下该全局变量,然后在外层模块中放一个Data Store Memory就行了(这个模块其实就在Simulink基本库中的Signal Routing组下面,关于这个模块的作用范围,大家看其帮助吧)。你如果只这样做,还是会出错的!!!!哈哈哈。
大家还要在Model Explore中(或者在Matlab Edit里面,点击右上角附近的Edit Data),对应的Matlab Function模块下,添加一个glb_data数据,并且声明该数据的Scope是Data Store Memory。
好了,这个方法告诉大家了,如果觉得还行,就顶我一下。这个问题曾经纠结过我好久,我也曾试过其他方法解决,这个方法是最方便的,但是最好不要在大项目中过度使用,因为这种方法没有清晰的输入输出接口,阅读项目的人不容易看懂该模块的作用。
相关文章推荐
- Simulink中matlab Function模块全局变量的使用方法总结
- 全局变量声明,定义与使用方法
- 在iPhone开发中,全局变量的几种使用方法
- 解析在PHP中使用全局变量的几种方法
- JQuery中使用Ajax赋值给全局变量失败异常的解决方法
- [转]android使用全局变量的两种方法
- 全局变量声明,定义与使用方法
- 解析在PHP中使用全局变量的几种方法
- 反编译那些事儿(三)—那些看似没用到的全局变量和那些使用了动态参数的方法
- android使用全局变量的两种方法
- Javascript全局变量的使用方法
- 【新版】VC中全局变量的使用总结(N种方法,看完就不再疑惑啦!)
- 在iPhone开发中,全局变量的几种使用方法
- 在PHP中使用全局变量的几种方法
- WPF中使用“全局变量”的简单方法
- 在PHP中使用全局变量的几种方法
- codeigniter CI 框架 在helper 中 使用 全局变量 方法
- 【Android数据传递】全局变量的使用方法(附源码)
- JQuery中使用Ajax赋值给全局变量异常的解决方法
- android使用全局变量的两种方法