Simulink中的自定义模块.doc_第1页
Simulink中的自定义模块.doc_第2页
Simulink中的自定义模块.doc_第3页
Simulink中的自定义模块.doc_第4页
Simulink中的自定义模块.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录Fcn 模块1MATLAB Fcn 模块2S Function (System Function)21. 函数的函数头32. 函数分析33.带参数的S函数54.S函数格式及说明6simulink中子模块的封装11Fcn 模块Fcn模块对它的输入进行指定的表达式运算。使用的表达式可由下面的一个或多个部分组成。u - 模块的输入。 如果u是一个向量,u(i)表示此向量的第i个元素;u(1)或者u表示第一个元素数值常数 (例如表达式5.2*u)算术运算符(+ - * / 例如表达式 u2+5.2)关系运算符(= != = user-defined function下拖一个S-Function到你的模型, 就可以用了. 在simulink - user-defined function还有个s-Function Builder, 他可以生成用c语言写的s函数. 或者在matlab的workspace下打sfundemos, 可以看到很多演示s函数的程序 4.S函数格式及说明function sys,x0,str,ts = sfuntmpl(t,x,u,flag)% SFUNTMPL 是M-文件 S函数模板% 通过剪裁,用户可以生成自己的S函数,不过一定要重新命名% 利用S函数可以生成连续、离散混合系统等,实现任何模块的功能% M-文件S函数的语法为:% SYS,X0,STR,TS = SFUNC(T,X,U,FLAG,P1,.,Pn)% 参数含义:% t是当前时间% x是S函数相应的状态向量% u是模块的输入% flag是所要执行的任务% FLAG 结果 功能% - - -% 0 SIZES,X0,STR,TS 模块初始化% 1 DX 计算模块导数% 2 DS 更新模块离散状态% 3 Y 计算模块输出% 4 TNEXT 计算下一个采样时间点% 9 结束仿真% 用户切勿改动输出参数的顺序、名称和数目% 输入参数的数目不能小于1,这四个参数的名称和排列顺序不能改动% 用户可以根据自己的要求添加额外的参数,位置依次为第5,6,7,8,9等。% S函数的flag参数是一个标记变量,具有6个不同值,分别为0,1,2,3,4,9% flag的6个值分别指向6个不同的子函数% flag所指向的子函数也成为回调方法(Callback Methods)switch flag,%初始化,调用“模块初始化”子程序% case 0, sys,x0,str,ts=mdlInitializeSizes;%连续状态变量计算,调用“计算模块导数”子函数% case 1, sys=mdlDerivatives(t,x,u);%更新,调用“更新模块离散状态”子函数% case 2, sys=mdlUpdate(t,x,u);%输出,调用“计算模块输出”子函数% case 3, sys=mdlOutputs(t,x,u);%计算下一时刻采样点,调用“计算下一个采样时刻点”子函数% case 4, sys=mdlGetTimeOfNextVarHit(t,x,u);%结束,调用“结束仿真”子函数% case 9, sys=mdlTerminate(t,x,u);%其他的flag% otherwise DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag);end% end sfuntmpl%=% “模块初始化”子函数% 返回大小、初始条件和样本function sys,x0,str,ts=mdlInitializeSizes% 调用simsizes函数,返回规范格式的sizes构架% 这条指令不要修改sizes = simsizes;% 模块的连续状态个数,0是默认值% 用户可以根据自己的要求进行修改sizes.NumContStates = 0;% 模块的离散状态个数,0是默认值% 用户可以根据自己的要求进行修改sizes.NumDiscStates = 0;% 模块的输出个数,0是默认值% 用户可以根据自己的要求进行修改sizes.NumOutputs = 0;% 模块的输入个数,0是默认值% 用户可以根据自己的要求进行修改sizes.NumInputs = 0;% 模块中包含的直通前向馈路个数,1是默认值% 用户可以根据自己的要求进行修改sizes.DirFeedthrough = 1;% 模块中采样时间的个数,1是默认值,至少需要一个样本时间% 用户可以根据自己的要求进行修改sizes.NumSampleTimes = 1;% 初始化后的构架sizes经simsizes函数处理后向sys赋值% 这条指令不要修改sys = simsizes(sizes);% 给模块初始值变量赋值,是默认值% 用户可以根据自己的要求进行修改x0 = ;% 系统保留变量% 切勿改动,保持为空str = ;% “二元对”描述采样时间及偏移量。0 0是默认值% 0 0适用于连续系统% -1 0则表示该模块采样时间继承其前的模块采样时间设置ts = 0 0;% end mdlInitializeSizes%=% 计算导数向量function sys=mdlDerivatives(t,x,u)% 此处填写计算导数向量的指令% 是模块的默认值% 用户必须把算得的离散状态的导数向量赋给syssys = ;% end mdlDerivatives%=% 计算离散状态向量function sys=mdlUpdate(t,x,u)% 此处填写计算离散状态向量的指令% 是模块的默认值% 用户必须把算得的离散状态向量赋给syssys = ;% end mdlUpdate%=% 计算模块输出向量function sys=mdlOutputs(t,x,u)% 此处填写计算模块输出向量的指令% 是模块的默认值% 用户必须把算得的模块输出向量赋给syssys = ;% end mdlOutputs%=% 计算下一采样时刻function sys=mdlGetTimeOfNextVarHit(t,x,u)% 该子函数仅在“采样时间”情况下使用% sampleTime = 1 是模块默认设置,表示在当前时间1秒后再调用本模块% 用户可以根据自己的要求修改sampleTime = 1;% 将计算得到的下一采样时刻赋给sys% 切勿改动sys = t + sampleTime;% end mdlGetTimeOfNextVarHit%=function sys=mdlTerminate(t,x,u)% 模板默认设置,一般情况不要改动sys = ;% end mdlTerminatesimulink中子模块的封装对于比较复杂的系统,模块化思想是很有必要的,使得思路较为清晰、错误容易排查。对复杂的系统进行仿真,如果将其中独立的功能进行封装,会显得特别清爽。这学期做了电机仿真和伺服系统仿真,特别感觉到子模块封装的必要性,有效的提高了系统的可读和可维护性。 在simulink中建立子模块的步骤如下: 1、建立系统框图。这步需要确定输入输出的个数,输入端为sources中的in,输出端为sinks中的out。将Simulink库下的Ports&Subsystems中的Subsystem拉至simulink框图中。 2、功能的搭建。点击建好的子模块,在其中进行功能模块的搭建。 3、子模块的封装。所谓封装(masking),即将其对应的子系统内部结构隐含以来,访问该模块的时候仅仅出现一个参数设置对话框。需要如下几步完成: 3.1、右击模块,选择Mask Subsystem选项,蹦出Mask Editor对话框。 3.2、Icon属性。如果要显示端口的名称,Transparency属性设置成Transparent。Drawing commands编辑框允许给该模块图标上绘制图像,可以选择的有plot()、disp()等等,比如disp(PID Controller)。在Drawing commands中输入语句,如何写函数的提示在封装编辑对话框的下方。 3.3、Parameters属性。这个东西是给模块中的变量赋值的,选择左方有朝左的小箭头的按钮是添加变量的,这时右方会有一横栏,Prompt是该变量的提示信息,Variable是相关联的变量名称,一定要与模块中的变量名称一样,Type是变量的类型,edit(可编辑)、popup(下拉框),选择后者的时候需要在左下方的popups中分行写上可以选择的数值。左方的叉按钮是删除变量的。 3.4、Initialization属性。对模块进行初始化操作。 3.5、Documentation属性。对模块进行说明。封装后双击模块就可以看见Mask Description中的内容。 关于模块封装的一些操作还有:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论