Simulink中提供了各种各样的模块,使得研究人员通过搭积木的方式,可以实现大部分功能需求。但总会有一些场景,是必须要研究人员自行编写代码,来满足自己的个性化需求。
Simulink正是通过Matlab function、s-function等模块,有效地拓宽了自身的能力边界(几乎是只有想不到,没有做不到),也奠定了它在工科领域的地位。
1、Fcn、Interpreted Matlab Function、Matlab Function
Fcn为用户自定义的一个函数:
。支持代数运算、关系运算、逻辑运算、三角函数等。可以看做是轻量级的Matlab Function。
Interpreted Matlab Function 的功能与Fcn类似,但是基本属于被淘汰的模块了。
Matlab function是我最喜欢的模块。因为它可以替代库中的大部分模块,而且方便注释、修改以及功能拓展,极大地简化了模型的复杂度,提高了可读性。而且它很方便地可以编译成代码。一般来说只要在Matlab function编写、经过验证的代码,可以放心的在DSP等控制器中应用。以下是我使用的两个简单案例。
小猫钓鱼:手撕系列(3):锁相环(SRF-PLL)zhuanlan.zhihu.com2、S-function、Level-2 Matlab S-function
S-function的内容很丰富。可以参考:
只是学电的:Simulink之——S函数zhuanlan.zhihu.com
之前写过一个简单的案例,作为参考。
对S-function 自带的案例进行注释,方便大伙理解。
function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag)
%[sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag,p1,...pn)
% flag result 描述
% ----- ------ --------------------------------------------
% 0 [sizes,x0,str,Ts] 初始化,返回SYS的大