S-Function 使用及应用举例
- 格式:pdf
- 大小:116.11 KB
- 文档页数:16


文章编号
:1001-9227(
2001)
02-0024-03
利用
Matlab的
S-Function实现非线性
PID控制Ξ
周英玉 丁淑华 郭 晨
(大连海事大学自动控制教研室 大连
,116026)
摘 要
:介绍了
Matlab的
S-Function的运行原理、功能及实现方法
,并用它去实现非线性
PID。实践表明利用
S-Function可实现复杂的函数关系
,简化编程。
关键词
:MatlabSimulink
S-Function 非线性
PID
ABSTRACT:Thispaperintroducestheworkingprinciple,thefunctionandtherealizedwayofMat2
lab’
sS-Function.Withit,nonlinearPIDisrealizedeasily.ThesimulationofresultshowsthatS-Func2
tioncancometruethecomplexfunctionrelationandsimplifyprogram.
KEYWORDS:Matlabsimulink
S-Function
NonlinearPID
中图分类号
:TP273+
.2文献标识码
:B
1
S-Function
1.1
S-Function简介
S-Function是
Simulink的精华[1]
。
Simulink是
运行在
Matlab环境下的用于建模
,仿真和分析动态
系统的软件包。利用
Simulink本身包含的模块库
,
对于数学模型比较简单的经典的
PID控制器
,我们
可以方便的建立它的模块[2]
,如图
1所示
。但要利
用其现有的模块去实现比较复杂的非线性关系
,就
可能使构造的模块过于复杂
,有时甚至难于实现用
户的要求。如果利用
Simulink提供的
S-Function
(
System-Function)来实现的话
,用户所要完成的工
作就会大大减少。下面的例子将很好的来说明如何
用
S-Function
S-function(系统函数)是Simulink的一种自定义函数,它允许用户在Simulink模型中扩展功能,以满足对实现复杂算法的需求。要使用S-function,用户需要编写一个用C、C++或Matlab编写的文件,定义输入、输出、状态变量以及所需的功能。
S-function的主要用法如下:
1. 创建S-function文件:创建用C、C++或Matlab编写的S-function文件。这个文件将包含所有需要定义的系统函数。文件名必须与S-function名称匹配。
2. 在S-function文件中声明输入输出变量以及参数:在S-function文件中,需要声明输入、输出变量、状态变量以及参数。这样Simulink会知道如何处理S-function。
3. 实现函数的功能:在S-function文件中,需要根据算法需求实现所需功能。这可以包括初始化、信号处理、状态更新等各种操作。
4. 将S-function添加到Simulink模型中:在Simulink中,从Library Browser中找到"User-Defined
Functions"类别,并将其中的S-Function模块拖到模型中。
5. 配置S-function模块:双击添加到模型中的S-Function模块,在S-function name框添加您的S-function文件的名称。还可以在Parameters框中输入参数,如果需要的话。
6. 连接S-function模块:在模型中连接S-function模块的输入和输出端,根据系统需求设置传递信号。
完成上述步骤后,可以运行模型,并查看S-function的运行结果 。
总之,S-function的用法主要可以分为编写S-function文件、在Simulink模型中添加S-function模块这两个部分。通过实现自定义的功能、参数及输入输出变量,用户可以在Simulink环境中使用S-function完成复杂算法的实现。
sfunction使用方法
在matlab命令行中输入 edit sfuntmpl ,可以打开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内部函数介绍 • [sys,x0,str,ts] = functionName(t,x,u,flag) 这是函数的总入口,收到信号后,首先进入这个函数.这个函数包含一个switch语句,根据情况进入不同的子函数
• [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes; S-function进行基本的设置,具体参数会在后面进行介绍。相当于构造函数
• sys=mdlDerivatives(t,x,u); 该函数仅在连续系统中被调用,用于产生控制系统状态的导数
matlab的sfunction执行流程
MATLAB的S-Function(System Function)是一种用于扩展Simulink模型功能的强大工具。S-Function允许用户以C、C++或MATLAB语言编写自定义的动态系统。以下是S-Function的基本执行流程:
1. 初始化(Initialization):
• 当Simulink模型开始仿真时,S-Function的初始化函数(如mdlInitializeSizes)首先被调用。在这个阶段,S-Function定义了它的输入和输出数量、离散状态的数量、采样时间等。
• 如果S-Function使用工作向量(work vector),它也会在这个阶段被分配。
2. 计算采样时间(Compute Sample Times):
• 在初始化之后,Simulink会调用S-Function的mdlGetSampleTimes函数来确定其采样时间。这对于确定何时调用S-Function的其他函数至关重要。
3. 开始仿真(Start of Simulation):
• 在仿真开始时,可以调用一个可选的S-Function函数(如mdlStart),用于执行任何需要在仿真开始时执行的初始化或预计算。
4. 仿真循环(Simulation Loop):
• 在仿真的每个采样点,S-Function的主要功能函数(如mdlOutputs,mdlUpdate,mdlDerivatives)被调用。
▪ mdlOutputs:计算S-Function的输出。
▪ mdlUpdate:更新S-Function的离散状态。
▪ mdlDerivatives:计算S-Function的连续状态导数(对于连续时间系统)。
• 根据S-Function的类型(连续、离散或混合)和配置,这些函数可能会被以不同的方式调用。