在simulink中使用全局变量的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WhoisPo/article/details/52235884

需求: 我们需要在simulink的一些模块中共用一些变量,尤其是在Simulink里面的Matlab Function模块中共同使用变量,若干个Matlab Function都可以读取该变量,同时又可以对该变量进行修改。 如果采用常规方法,会比较繁琐,要对该变量同时定义输入和输出,并且连线也会比较复杂。

解决: 在Simulink中定义某些变量是全局变量,在Matlab Function中调用时只要声明该变量是全局变量,并且附加一些特殊的处理,就可以对改变进行读写操作。

下面有一个简单的例子,来说明具体的操作方法

简单例子

上面图中的Pulse Generator是一个方波发生器,每隔1s发送一个方波,触发Triggered Subsystem,Triggered Subsystem里面是一个计数器,记录给模块触发的次数,该Subsystem的内容见下图。

下面是一个Matlab Function输出Triggered Subsystem里面计数器的值给一个Display模块。
Triggered Subsystem

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。
这里写图片描述

好了,这个方法告诉大家了,如果觉得还行,就我一下。这个问题曾经纠结过我好久,我也曾试过其他方法解决,这个方法是最方便的,但是最好不要在大项目中过度使用,因为这种方法没有清晰的输入输出接口,阅读项目的人不容易看懂该模块的作用。

猜你喜欢

转载自blog.csdn.net/WhoisPo/article/details/52235884