EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 senlenced3 于 2020-12-15 13:36 编辑
2 l+ ]% l" f f. |" ?* y; k5 ^" L
( v1 w& J- r( p2 i3 b( f; r( kS函数的设计与应用什么叫S函数- S函数是系统函数 (System Function)的简称,是指采用一种程序设计语言描述的一个功能模块。
- 用户可以采用 MATLAB语言,也可以采用C、C++或FORTRAN等语言来编写S函数。
- S函数有自己特定的语法构成规则,可以用来描述并实现连续系统、离散系统以及复合系统。
- S函数能够接收来自 Simulink求解算法的相关信息,并对求解算法发出的命令做出适当的响应,这种交互作用类似于 Simulink系统模块与求解算法的相互作用。
- n3 j" L9 z& W% d N: a 用MATLAB语言编写S函数在MATLAb命令窗口输入命令,打开模板文件
5 m# f2 h9 J3 F: M6 E. y![]()
6 J1 t7 D8 J- n) I! r模板文件sfuntmpl.m包括: - 1个主函数
- 6个子函数
+ e# m! G. l) A6 b3 W' ]( C
(1)主函数2 t S% j# K# \/ O/ \# i: \
主函数的引导语句为:
( p3 C7 H" m, |/ N" E![]() - fname是S函数的函数名。
- 输入形参t、x、u、flag分别为仿真时间、状态向量、输入向量和子函数调用标志。
- 输出形参sys代表一种返回参数;x0是初始状态值;对于M文件S函数,str将被置成一个空阵;ts是一个两列矩阵。" A; m/ I2 c0 o, T, h3 W' u
(2)子函数! Z! `9 F, c& G% \) r! k7 r
S函数共有6个子函数,这些子函数的前辍为mdl,由flag的值来控制在仿真的各阶段调用S函数的哪一个子函数。 - flag取0:调用初始化子函数 mdlInitializeSizes
- flag取1:调用子函数 mdlDerivatives实现连续状态的更新。
- flag取2:调用子函数 mdlUpdate实现离散状态的更新。
- flag取3:调用输出子函数 mdlOutputs$ y( ]0 H! }2 D `5 w/ ?. p
S函数的应用采用S函数实现y=kx+b。
! o% O) ?, |& Z+ T1 m6 d6 r(1)定义S函数 - 主函数4 H) U% U- q7 I; P, |6 @, w
- 初始化子函数 M- P1 z" U8 m+ \1 v
- 输出子函数
1 A# w+ y$ p: J4 P/ [" p7 j5 [, v, y9 g! g' y' {
(2)在Simulink模型中使用S函数
% J: k+ w7 U0 X
2 L! I4 R N/ Z7 ~! \& s6 g+ [! E
4 d0 M7 A# ?/ I
- ~3 r* |. t7 }; j/ _
|