第7节SFunction设计.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7节SFunction设计

第7节 S Function设计 什么是S Function S函数是对一个动态系统的计算机程序语言描述 使用S Function,用户可以设计自己的Simulink模块,它是对Simulink的一种功能扩展 这个新模块并不基于原有的Simulink模块,这与Simulink的子模块封装不同 S Function既可以用M语言编写,也可以用C语言编写,C语言编写的S Function使用前必须要编译 为什么要用S Function 建立一个新的Simulink模块 建立与硬件相连的Simulink模块(需要使用C语言) 将一些原有的C语言代码融合到Sinulink的仿真中去 使用M语言编写S函数 例:利用M文件来写一个限幅积分器的S-函数,并在Simulink中借助S-函数模块来调用此文件 在Toolbox/simulink/blocks子目录下可以找到sfuntmpl.m,这个文件是S Function的一个模板文件 基于这个模板,我们可以设计限幅积分的S函数结构如下 使用M语言编写S函数 程序主框架 %程序中有三个参数,lb:积分下限值,ub:积分上限值,xi:积分初始值 function [sys, x0, str, ts] = sfun97(t, x, u, flag, lb, ub, xi) switch flag, %flag表示S Function的状态 case 0, %初始化的时候应该做的事 [sys, x0, srt, ts] = mdlInitializeSizes(xi); case 1, %S Function的微分值 sys = mdlDerivatives(t, x, u, lb, ub); case 2 , sys = mdlUpdate(t, x, u); case 3, %S Function的输出 sys = mdlOutputs(t, x, u); case 4, sys = mdlGetTimeOfNextVarHit(t, x, u); case 9, %仿真结束的时候应该做的事 sys = mdlTerminate (t , x , u); otherwise %如果flag是其他值,说明程序出错 error ( [ Unhandled flag = ,num2str ( flag) ] ); end 使用M语言编写S函数 S Function初始化 function [sys,x0,str,ts]=mdlInitializeSizes(xi) sizes =simsizes; sizes.NumContStates=1; %1个连续状态 sizes.NumDiscStates=0; %0个离散状态 sizes.NumOutputs=1; %1个输入 sizes.NumInputs=1; %1个输出 sizes.DirFeedthrough=0; sizes.NumSampleTimes=1; sys=simsizes(sizes); x0=xi; %状态的初始值为xi,假设状态值为积分值 str=[ ]; ts=[0, 0]; 使用M语言编写S函数 S Function微分值的计算 假设状态x为系统的输出,对于一个限幅积分,我们可以这样表示 x’=0 如果xub 或者 xlb x’=u 如果 lb=x=ub 使用M语言编写S函数 S Function微分值的计算 function sys=mdlDerivatives(t,x,u,lb,ub) %如果积分输出在范围lb到ub之内,积分值为输入值,否则积分值为0,即停止积分 if(x=lbu0)|(x=ubu0) sys=0; else sys=u; end 使用M语言编写S函数 S Function的输出值的计算 %因为x就是积分值,所以直接将x输出出去 function sys=mdlOutputs(t,x,u) sys=x; 使用M语言编写S函数 其他的子函数 %因为没有离散状态,所以mdlUpdate输出为[] function sys=mdlUpdate(t,x,u) sys=[ ]; %在本例中,mdlGetTimeOfNextVarHit也不起作用 function sys=mdlGetTimeOfNextVarHit(t,x,

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档