Simulink中的S-Function的建构和语法

本文介绍了Simulink中的S-Function,它是一种使用Matlab,C/C++或Fortran实现的Simulink模块。通过S-Function,用户可以自定义算法并创建subsystem。文章详细讲解了S-Function的用途,如连续和离散信号系统,以及如何利用Matlab和Simulink联合开发S-Function。同时,文中提到了Simulink求解器的工作原理和常用的数值积分方法。
摘要由CSDN通过智能技术生成

S-Function的用处

S-Function是用Matlab,C/C++或者Fortran实现的Simulink模块。S-Function和别的MEX文件一样是动态链接的子例程,由Matlab执行引擎自动加载和执行。S-Function可以由Simulink中的模块直接创建subsystem,也可以在Matlab中自定义算法进行实现。在Simulink的模块库中提供了四种语言的API接口:
S_Function代码接口

选择其中一个选项后(譬如C-file),Simulink库中会提供一系列的例程以供后续具体开发和调整。比如连续信号系统,离散信号系统,S-Function Builder构建的系统,C-MEX模版等等。

C-file模版

Matlab和Simulink联合开发

在Simulink中定义自定义的S-Function可以通过Matlab中提供的模版,打开如下模版进行改动调整可以快速完成开发:

edit sfuntmpl.m

函数名可以根据需要改成Simulink中block适配的函数名。这个函数前四个输入的形参是固定的,后面可以追加自定义形参。其中t表示Simulink仿真运行当前的时间,x则是对应S-Function的状态向量(x0则是该状态向量的初始值),u是在Simulink中这个block的输入信号,flag配合switch/case结构实现这个block的功能。这里的模型基本上是按照控制系统中y = Ax+Bu来的,提供离散/连续系统和积分/直馈输出。

function [sys,x0,str,ts] = PlaneModelxiahua(t,x,u,flag,H0,U0,Theta0,vyd0)
switch flag
%flag为0时,调用mdlInitializeSizes子程序对subsystem进行初始化
    case 0
        [sys,x0,str,ts]=mdlInitializeSizes(H0,U0,Theta0,vyd0);
%flag为1时,调用mdlDerivatives子函数进行连续状态变量计算
    case 1
        sys=mdlDerivatives(t,x,u);
%flag为3时,调用mdlOutputs子函数计算模块输出
    case 3
        sys=mdlOutputs(t,x,u)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值