- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
仿真__SIMULINK__sfunction.ppt
计算机仿真软件 2、S-function是如何工作的? 例2 连续系统 例3 范德波尔方程(van del pol equation) 连续时间模块 csfunc.m 主要结构 function [sys,x0,str,ts] = csfunc(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D); case 1, sys=mdlDerivatives(t,x,u,A,B,C,D); case 3, sys=mdlOutputs(t,x,u,A,B,C,D); case { 2, 4, 9 }, sys = []; otherwise error([Unhandled flag = ,num2str(flag)]); end 离散时间模块 dsfunc.m 主要结构 function [sys,x0,str,ts] = dsfunc(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts] = mdlInitializeSizes(A,B,C,D); case 2, sys = mdlUpdate(t,x,u,A,B,C,D); case 3, sys = mdlOutputs(t,x,u,A,C,D); case 9, sys = []; % do nothing otherwise error([unhandled flag = ,num2str(flag)]); end * * 主讲教师:姜萍 MATLAB 与系统仿真 第六章 6. 4 S-function的设计 1、S-function的概念 S-function是一个动态系统的计算机语言描述,在MATLAB里,可用m文件编写,也可用c或mex文件编写,只介绍用m文件编写s-function。 S-function提供了扩展Simulink模块库的有力工具,采用一种特定的调用语法,使函数和Simulink解法器进行交互。 S-function最广泛的用途是定制用户自己的Simulink模块。它的形式十分通用,能够支持连续系统、离散系统和混合系统。 S-函数 (System Function) 系统函数,是一种强大的对模块库进行扩展的新工具。 目录 前页 后页 先看一个简单的S-函数 例程 在MATLAB安装目录下找到Toolbox\Simulink\blocks\timestwo.m 新建一个模型窗口,加入User-Defined Functions中的S-Function模块,在参数设置中键入timestwo 先回顾SIMULINK模块的工作过程。 SIMULINK的每个模块都有三个基本元素:输入向量、 状态向量和输出向量。 状态向量可以分为连续状态、离散状态或是两者结合。 输入、输出和状态的关系是用输出方程和状态方程反映。 (1)初始化阶段。它是仿真进行的第一步,先于第一个仿真循环,初始化s函数。 初始化SimStruct—— 包含s—函数信息的数据结构; 确定输入、输出端口的数目和大小; 确定模块的采样时间; 分配内存和sizes数组。 (2)计算下一个采样点的时间。对于变步长解法器,确定下一个仿真步的大小。 (3)计算当前主仿真步的输出,模块的输出被更新。 (4)更新模块当前主仿真步的离散状态。 (5)积分,对于M文件而言,只有模块具有连续状态才存在,按最小时间来调用S-函数的输出和微分S-函数方法。 仿真执行流程图 SIMULINK 通过 flag 参数传递给 S-函数,告诉当前所处的仿真阶段,以便执行相应的子函数实现其任务 。 模块初始化,定义其基本特性 mdlInitializesizes 0 计算连续状态变量的微分值 mdlDerivatives 1 更新离散状态变量 mdlUpdate 2 仿真任务的结束 mdlTerminate 9 计算下一个采样时间 (仅用于可变的离散采样时间) mdlGetTimeOfNextVarHit 4 计算输出值 mdlOutputs 3 说明
文档评论(0)