S函数的作用

S函数即系统函数System Function。matlab所提供的Simulink模块不适合搭建复杂的算法,这时需要编程出S函数模块,将其嵌入到系统中。如果恰当地使用S函数,理论上,可以在Simulink下对任意复杂的系统进行仿真。应该要理解的是,simulink是在每个采样点计算一次整个模型,当把这些采样点上的数据连起来,就能看见整个仿真时间内动态的波形了。

使用方法

首先打开Simulink,双击空白页面,输入S-Function,输入sfuntmp1,选择Edit,在Matlab内编程即可,sfuntmp为Matlab软件自带的模板,打开修改m文件代码即可。注意一定要把S函数的.m文件和模型的.slx文件放在一个目录下,确保点击Edit时,可以找到并打开对应S函数M文件。

function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) 

t是采样时间,x是状态,u是输入,flag是状态标志(以此判断当前是初始化还是运行),sys输出根据flag的不同而不同, x0是初始状态,str一般为空( str=[ ]),ts是 [ts(1),ts(2)] 向量,ts(1)是采样周期,ts(2)是偏移量。

模型初始化函数

function [sys,x0,str,ts]=mdlInitializeSizes;  %参数sys是一个结构体,用来设置如下模块参数
size = simsizes;                                              %用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 0;                            %模块连续状态变量的个数
sizes.NumDiscStates = 0;                            %模块离散状态变量的个数
sizes.NumOutputs = 0;                                  %模块输出变量的个数
sizes.NumInputs = 0;                                     %模块输入变量的个数
sizes.DirFeedthrough = 1;                            %输入信号是否在输出端出现
sizes.NumSampleTimes = 1;                       %模块的采样时间个数, 至少是一个
sys = simsizes(sizes);                                   %设置完后赋给sys输出

模型描述函数

该函数可用于描述状态方程,例如描述被控对象和自适应率等,并自动求解模型状态。

设函数为\begin{bmatrix} \dot{x}_{1}\\ \dot{x}_{2} \end{bmatrix}=\begin{bmatrix} 0 &1 \\ 0 & 0 \end{bmatrix}\begin{bmatrix} x_{1}\\ x_{2}\ \end{bmatrix}+\begin{bmatrix} 0\\ 1 \end{bmatrix}(-\frac{1}{2}\frac{mglsin(x_{1})}{M}+\frac{\mu }{M})

function sys=mdlDerivatives(t,x,u)
m=1;l=1;M=0.5;g=9.8;
f(x)=-0.5*m*g*l*sin(x(1))/M;
g(x)=1/M;
sys(1)=x(2); 
sys(2) =f(x)+g(x)*u ;

sys(1)=\dot{x}_{1}sys(2)=\dot{x}_{2}

系统输出描述函数

function sys=mdlOutputs(t,x,u)                                                                                                                  

你可能感兴趣的:(BMS电池管理系统,s函数)