Simulink中matlab function的使用方法

介绍一下simulink中matlab function的使用方法,这是一种自定义模块,可以给予使用者更丰富的开发体验。如下图为该模块。

双击该模块,即转入matlab编辑界面 ,如下图,本质就是一个自定义函数。u是函数输入即模块的外部输入,y为函数输出即模块输出。当然输入u可以是simulink其他模块的输出,也可以是matlab工作区变量。

一、工作区变量导入方式

这个模块是从属于simulink系统的,无法直接读取matlab工作区的变量或值,若需要从工作区导入,需要配合相应from workspace模块(该模块是需要变量为两列数据,第一列是时间,第二列是对应时刻的值,可以理解为一个函数y=f(time),这个自变量为数列[time y],此处不展开详述)或者使用Data store memory模块,该模块相当于是simulink系统存储全局变量的地方,可用于初始值的设定(循环中往往没法设定循环中变量初始值,默认初始0,可用data store命名全局变量H=1,在fcn程序中写:if H==1 循环变量=初始值;H=0;end 。这样保证了只在初始时刻执行一次哦),模块如下图所示。注意双击该模块Main里的name里输入该变量名字,随便取,这里我取名为H。

然后是初始变量值Initial value设置初始的变量值,我们可以直接输入一个数字,也可以从工作区读取如下图所示操作,从工作区读取变量W的值。注:Data type 需要改为double类型,signal type改为real类型。 

设置完以后,需要将其 导入matlab function,和正常的全局变量引入相同,需要在函数开头即函数名下面事先声明全局变量,其代码为:global H。

然后要点击Edit data,再次声明这个全局变量的存在。如下图,点击左上角创建新变量,然后名字改为全局变量名字H,类型选择Data Store Memory。 

 二、程序编写中的各种bug解释

 1、一些matlab中支持的函数或者自定义函数,该模块不支持,需要使用外部函数申明命令:coder.extrinsic('函数名字')。如果这样都不行,可能是真的不支持,很少,但确实遇到过,然后我换了个高版本的matlab就支持了,但是更换版本不是权宜之计。实在不行直接用interpreted matlab function模块,此模块与本文matlab function模块有所不同,之后博客会介绍该模块。

2、数据类型不支持,这个情况很少见,主要还是在edit data中改对应要求数据类型,作者遇到过一次,神经网络嵌入时候网络的数据类型不支持出问题,简单的神经网络类型Network相对还能导入,复杂的SeriesNetwork类型就是深度神经网络基本只能用interpreted matlab function模块。

3、if语句中的bug,大多情况是多输出函数比如[Y1,Y2,Y3]=fcn(x)情况中出现,主要原因在进入某次if或者else if后程序得不到Y1、Y2、Y3三个值,可能缺少其中一到两个,这种情况往往需要根据用户的想法补齐每个if语句后的赋值情况。简单说就是程序检索不到某个输出值。

还有一种bug,y=fcn(time)中时间time从clock中得到反应的是时间变量,在使用if语句时候往往常规思维就是时间是大于等于0的,这会出现错误,尽管time不可能执行到小于0的情况,但是建议加上time小于0的情况的条件语句,值随便取,同样要使得可以输出Y1,Y2,Y3,反正执行不到,不报错就行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值