• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Simulink代码生成: 调用Matlab函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文研究Simulink模型中调用Matlab函数的方法。

1 Matlab Function模块

在Simulink中建模的时候,有时会发现自己想要的功能无法通过Simulink中常规的模块和子系统实现,但是通过Matlab函数却可以很容易地实现。又或者说,通过Matlab可以调用一些工具包,但是Simulink里却没有这种功能,但又想在模型中实现这个功能。

针对以上问题,可以在Simulink中使用Matlab Function模块,然后再模块内写Matlab代码。从而实现了通过Simulink模型调用Matlab函数。

2 建模与代码生成

本章节通过勾股定理的例子,演示Matlab Function模块的建模。
1)打开Simulink,拖出一个Matlab Function模块。双击模块进入,可以看到里面已经有一个名为fcn的函数定义。

2)将函数修改为下图的勾股定理计算。

在c = gougu(a,b)这个Matlab函数中,a,b相当于子系统的输入,c相当于子系统的输出。

3)点击右上角的Edit Data,可以编辑输入输出的属性。这里把输入输出的数据类型都改为single。相当于Simulink子系统中的Inport和Outport的类型一样。

4)保存关闭函数编辑窗口,在模型中添加输入的常数和disp模块,然后运行模型,观察输出结果。注意,由于在函数里定义了输入输出的数据类型,外面的信号接口要输入single型常数。

5)为验证代码生成,将输入端替换成Inport,输出端替换成Outport并配置好代码生成(可参照https://blog.csdn.net/u013288925/article/details/104851546)。

6)Ctrl + B生成代码。在生成的step函数中就实现了勾股定理的C代码。

3 Matlab Function中的数据管理

3.1 关联Signal对象

在Edit Data中,可以配置输入输出关联数据字典中的Signal对象。
1)在Ports and Data Manager中勾选Data must resolve to signal object。

2)在Matlab工作空间中新建一个Signal对象,并将类型和StorageClass配置如下。

3)Ctrl + B生成代码。可以看到c变量定义到了data.c中。

3.2 建立函数内的参数

1)在Ports and Data Manager中中点击Add–>Data新建一个参数。

2)将参数的Name改为d,Scope改为Parameter,Type改为single。

3)在Matlab工作空间中新建一个常量d=single(0.1)。

4)把Matlab Function中的代码中改为开根号后乘以d。

5)Ctrl + B生成代码。从代码中可以看出,step函数把参数d内联进去了。

4 Matlab Function生成代码的限制

Matlab Function生成代码的限制很多,譬如不支持动态内存分配、不支持元胞数组等。

另外,也有很多matlab函数和工具包也不能生成代码,具体可以参照Matlab Function中右上角的帮助文件。

5 总结

Matlab Function模块的使用可以让Simulink集成Matlab函数,不过还是尽量使用Simulink的其他模块搭建控制策略,少用Matlab Function模块。因为Matlab Function的可读性不友好,而且生成代码的限制也很多。

>>返回个人博客总目录


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
用Delphi写软件播放器发布时间:2022-07-18
下一篇:
Delphi-IndyTIdFTPServer封装类发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap