其他分享
首页 > 其他分享> > Matlab S-funciton

Matlab S-funciton

作者:互联网

Matlab S-funciton 使用记录

一、使用基础

1. 功能说明

所谓s函数是system Function的简称, 用它来写自己的simulink模块. s函数可以用matlab、C、C++、Fortran、Ada等语言来写。先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作, 还可以操作windows API等。

先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段: 一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、 采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结束.

2. 打开与编辑 S-Function

在matlab的workspace里输入edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构.
重要且全面的学习资料
在matlab命令行中输入 edit sfuntmpl ,可以打开S-function的模板,里面对S-function的函数和变量作用均作了介绍。 S-function的基础是现代控制理论的状态定义,使用S-function需具备现代控制理论的基本知识

二、理解s-function

为什么要有S-function

因为matlab中的模块太过标准化,无法满足多变的应用和调试需求,在以下情况下,S-function可以很方便的对系统进行建模。
控制或受控系统具有复杂时变特性
控制系统在控制过程中自我迭代,存在需要保留和记录的变量
控制系统的输出较为复杂,难以用function和m-function表示
系统在生成、运行或结束时需要执行特殊操作

S-function属性窗口介绍

S-function name :S-function的名字,随便写,自己认识即可
S-function parameters:S-function的模块参数,默认为空
S-function modules :S-function的模块,无需修改,采用系统默认模块即可 也就是说,这三个参数,只需要修改第一个参数为模块命名即可
点击Edit,可以进入S-function的代码编辑界面
在这里插入图片描述

S-function内部函数介绍

S-function的执行顺序

S-function输入输出参数含义

输入参数t,x,u,flag

t :系统时间
x :系统状态
u : 系统输入,即在simulink models中连接至S-function的线上的数据。注意区分x和u
flag : 系统状态,由系统自动生成,决定了系统应当执行哪个S-function子函数
输出参数sys,x0,str,ts,simStateCompliance
sys : 系统本身,可以理解为下一时刻的系统;同时sys的前几个数值(sys[1]等)是系统的输出,即在simulink中S-function伸出线上的数据
x0 : 系统初始状态
str : 状态排序字符串,通常指定为[]。
ts : 可认为是采样时间
simStateCompliance

mdlInitializeSizes例程与介绍

sizes = simsizes;           %调用构造函数,生成一个默认类

sizes.NumContStates  = 0;   %设置系统连续状态的数量
sizes.NumDiscStates  = 0;   %设置系统离散状态的数量
sizes.NumOutputs     = 0;   %设置系统输出的数量
sizes.NumInputs      = 0;   %设置系统输入的数量
sizes.DirFeedthrough = 1;   %设置系统直接通过量的数量,一般为1
sizes.NumSampleTimes = 1;   % at least one sample time is needed
                            % 需要的样本时间,一般为1.
                            % 猜测为如果为n,则下一时刻的状态需要知道前n个状态的系统状态

sys = simsizes(sizes);
x0  = [];                   % 系统初始状态
str = [];                   % 保留变量,保持为空
ts  = [0 0];                % 采样时间
simStateCompliance = 'UnknownSimState';

注意

S-function的基础是现代控制理论的状态定义,S-function本身是一个系统,可以被设置为控制系统,也可以被设置为受控系统。因此本文所指的系统,均指S-function本身

标签:function,状态,函数,sizes,系统,sys,Matlab,funciton
来源: https://blog.csdn.net/xq1998/article/details/121445749