matlab中全局变量的作用域,在simulink中使用全局变量的方法

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

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

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

160769964_1_20190509044558894

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

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

160769964_2_2019050904455919

Data Store Memory就是今天要讲的一个关键,马上就要讲到了,耐心点。

在这个例子中很明显就用到了一个全局变量(当然也可以不用全局变量实现,但这不是今天的重点),Triggered Subsystem中对该全局变量进行计数,在外层的Matlab Function中读取这个全局变量。这个全局变量在本例子中为glb_data。

Triggered Subsystem中的Matlab Function中的内容

function countglobal glb_data;glb_data = glb_data + 1;1

2

3

4

5

外层的Matlab Function中的内容function y = show_countglobal glb_data;y = glb_data;1

2

3

4

5

各位看官想必已经清楚了,原来是这样,原来就在Matlab Function中加一个global 声明一下该全局变量,然后在外层模块中放一个Data Store Memory就行了(这个模块其实就在Simulink基本库中的Signal Routing组下面,关于这个模块的作用范围,大家看其帮助吧)。你如果只这样做,还是会出错的!!!!哈哈哈。

大家还要在Model Explore中(或者在Matlab Edit里面,点击右上角附近的Edit Data),对应的Matlab Function模块下,添加一个glb_data数据,并且声明该数据的Scope是Data Store Memory。

160769964_3_2019050904455982

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

Simulink,可以使用全局变量来在不同的模块之间共享数据。全局变量可以在MATLAB Function模块定义,并在Data Store Memory和Simulink.Signal进行注册。首先,在MATLAB Function定义一个全局变量,可以使用global关键字加上变量名来定义全局变量。例如,使用global u来定义一个名为u的全局变量\[1\]。然后,在Data Store Memory和Simulink.Signal注册这个全局变量,确保它们与之前定义的全局变量同名\[1\]。这样,在Simulink模型的不同模块就可以使用这个全局变量来共享数据了\[2\]。使用全局变量可以方便地在不同的模块之间传递数据,特别适用于需要迭代使用的情况\[3\]。 #### 引用[.reference_title] - *1* [怎么在SimulinkMatlab Function模块添加全局变量(global)](https://blog.csdn.net/baiyangbeizi/article/details/115606998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Simulink全局变量配置](https://blog.csdn.net/weixin_43201253/article/details/112978754)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值