S-function是Simulink最具魅力的地方,为了方便更快速了解Simulink基础知识,本专题将利用五篇文章对S-function进行介绍及其案例详解。欢迎关注~
目录
一、S-Function概述
1.1 简介
S-Function是system-function系统函数的缩写,是指采用非图形化的方式(即计算机语言,却别与Simulink的系统模块)描述的一个功能块。说得简单,S-Function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。
1.2 特点
S-function具有一下特点:
(1)S-function为Simulink的系统函数;
(2)采用非图形化的方法实现一个动态系统;
(3)可以使用多种语言进行编写;
(4)能够响应Simulink求解器命令;
(5)可以开发新的Simulink模块;
(6)扩展Simulink功能。M文件的S-function可以扩展图形能力,C-MEX的S-function可以提供与操作系统的接口;
(7)可以与已有的代码相结合进行仿真;
(8)可以采用文本方式输入复杂的系统方程;
(9)S-function的语法结构是为实现一个动态系统而设计;
1.3 Level1与Level2形式
M文件形式有两种,Level1和Level2,二者的包装模块是不同的。
类型 | 优点 | 缺点 |
---|---|---|
level1 | 运行速度快,能处理矩阵数据 | 只能处理点数据,不能处理复数以及基于帧的数据 |
level2 | 能够处理的数据类型多,包括矩阵、复数以及基于帧的数据 | 运行速度慢 |
1.4 S-function模块
S-function模块,位于Simulink/User-Defined Functions模块库中,是使S-function图形化的模板工具,用于为S-function创建一个定值的对话框和图标。
S-function模块使得对S-function外部输入参数的修改更加灵活,可以看作是S-function的一个外壳或这面板。S-function模块及其参数对话框如下:
该模块的参数设置如下:
- S-function name:填入S-function的函数名称,这样就建立了S-function模块与M文件形式的S-function之间的对应关系;
- S-function parameters:填入S-function需要输入的外部参数的名称,如果有对各变量,则变量中间用逗号隔开,如a,b,c;
- S-function modules:仅当S-function是用C语言编写并用MEX工具编译的C-MEX文件时,才需要填写该参数;
设置完这些参数后,S-function模块就成了一个具有指定功能的模块,它的功能取决于S-function的内容,可以通过修改S-function来改变该模块的功能。
二、S-function的几个相关概念
2.1 直接馈通
直接馈通是指输出直接受控于一个输入口的值。有一个很好的经验方法可用于判断输入是否为直接馈通:
如果输出函数(mdlOutputs或flag==3)是输入u的函数,即,如果输入u在mdlOutputs中被访问,则存在直接馈通。
例如,如果系统是y=k*u,其中,u是输入,k是增益,y是输出,这就是具有直接馈通输入的系统。
正确设置直接馈通标志是十分重要的,因为这不仅关系到系统模型中的系统模块的执行顺序,还关系到对代数环的检测和处理。
2.2 采样时间与偏移量
采样时间是按照固定格式成对指定的:[采样时间 偏移时间]。
采样时间表示 | 意义 |
---|---|
[0 0] | 连续采样时间 |
[-1 0] | 继承S-function输入信号或父层模型的采样时间 |
[0.5 0.1] | 离散采样时间,从0.1s开始每0.5s采样一次 |
三、S-function仿真流程
S-function包括主函数和6个功能子函数,包括mdlInitializeSizes(初始化)、mdlDerivatives(连续状态微分)、mdlUpdate(离散状态更新)、mdlOutputs(模块输出)、mdlGetTimeOfNextVarHit(计算下次采样时刻)和mdlTerminate(仿真结束)。
在S-function仿真过程中,利用switch-case语句,根据不同阶段对应的flag值(仿真流程标志向量)来调用S-function的不同子函数