




已阅读5页,还剩95页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第5章Simulink在系统仿真中的应用 2 5 1SIMULINK建模的基础知识 SIMULINK是MATLAB软件的扩展 它是实现动态系统建模和仿真的一个软件包 它与MATLAB语言的主要区别在于 其与用户交互接口是基于Windows的模型化图形输入 其结果是使得用户可以把更多的精力投入到系统模型的构建 而非语言的编程上 所谓模型化图形输入是指SIMULINK提供了一些按功能分类的基本的系统模块 用户只需要知道这些模块的输入输出及模块的功能 而不必考察模块内部是如何实现的 通过对这些基本模块的调用 再将它们连接起来就可以构成所需要的系统模型 以 mdl文件进行存取 进而进行仿真与分析 5 1 1SIMULINK简介 3 1 SIMULINK的启动 在MATLAB命令窗口中输入simulink结果是在桌面上出现一个称为SimulinkLibraryBrowser的窗口 在这个窗口中列出了按功能分类的各种模块的名称 也可以通过MATLAB主窗口的快捷按钮来打开SimulinkLibraryBrowser窗口 4 5 在MATLAB命令窗口中输入simulink3结果是在桌面上出现一个用图标形式显示的Library simulink3的Simulink模块库窗口 两种模块库窗口界面只是不同的显示形式 用户可以根据各人喜好进行选用 一般说来第二种窗口直观 形象 易于初学者 但使用时会打开太多的子窗口 6 2 模型的建立在MATLAB主窗口File菜单中选择New菜单项下的Model命令 在出现Simulink模块库浏览器的同时 还会出现一个名字为untitled的模型编辑窗口 在启动Simulink模块库浏览器后再单击其工具栏中的Createanewmodel命令按钮 也会弹出模型编辑窗口 利用模型编辑窗口 可以通过鼠标的拖放操作创建一个模型 模型创建完成后 从模型编辑窗口的File菜单项中选择Save或SaveAs命令 可以将模型以模型文件的格式 扩展名为 mdl 存入磁盘 7 8 9 10 如果要对一个已经存在的模型文件进行编辑修改 需要打开该模型文件 其方法是 在MATLAB命令窗口直接输入模型文件名 不要加扩展名 mdl 在模块库浏览器窗口或模型编辑窗口的File菜单中选择Open命令 然后选择或输入欲编辑模型的名字 单击模块库浏览器窗口工具栏上的Openamodel命令按钮或模型编辑窗口工具栏上的Openmodel命令按钮 3 Simulink的退出为了退出Simulink 只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可 11 5 1 2SIMULINK的模块库介绍 SIMILINK模块库按功能进行分为以下10类常用子库 Continuous 连续模块 Discrete 离散模块 Look upTables 查表模块 MathOperations 数学函数模块 Discontinuities 非线性模块 SignalRouting 信号模块 SignalAttributes 信号属性模块 Sinks 接收器模块 Sources 输入源模块 User definedFunctions 用户自定义函数模块 12 13 1 连续系统模块 Continuous Integrator 输入信号积分器 连续动态系统最常用的元件 该模块将输入端信息信号经过数值积分 在输出端直接反映出来 在将常微分转换为图形表示时也必须使用此模块 Derivative 数值微分器 该模块的作用是将其输入端的信息经过一价数值微分 在输出端输出出来 在PID校正装置设计过程中 非常方便 14 State Space 线性系统的状态方程模型 该元件可将系统的状态空间模型与方框图结合起来 其参数设置格式也是矩阵的形式 Transfer Fcn 线性传递函数模型 Zero Pole 以零极点表示的传递函数模型 15 TransportDelay 输入信号延时一个固定的时间再输出 VariableTransportDelay 输入信号延时一个可变时间再输出 两个模块的区别在于 前者在模块内部参数中设置延迟时间 而后者将采用输入信号来定义延迟时间 注 上述模块都是假设初始条件为零的 在SimulinkExtras模块组中的AdditionalLinear模块允许非零初始条件的定义 该模块还提供了PID控制器模块 16 2 离散模块 Discrete 主要用于建立离散采样系统的模型 Discrete timeIntegrator 离散时间积分器DiscreteFilter IIR InfiniteImpulseResponse 无限冲击响应 与FIR FiniteImpulseResponse 有限冲击响应 滤波器DiscreteState Space 离散状态空间系统模型 双击该元件可以设置状态空间描述系数矩阵 DiscreteTransfer Fcn 离散传递函数模型 双击该元件可以设置传递函数的系数 其格式也是分子 分母多项式形式 DiscreteZero Pole 以零极点表示的离散传递函数模型First OrderHold 一阶采样保持器 17 Zero OrderHold 零阶采样保持器UnitDelay 单位时间延迟模块 其作用是将该单元的输入量延迟一个单位时间再输出 Memory 返回上一个时刻的信号值 注 与连续系统模块组类似 这些模块也都是假设初始条件为零的 对非零初始条件的模块 可以借助SimulinkExtras模块组中的AdditionalDiscrete 附近离散 模块 如图5 1所示 图5 1 18 3 User definedFunctions 用户自定义函数模块组 Fcn 函数计算模块 用自定义的函数 表达式 进行运算 可以将输入信号进行指定的函数运算 该模块可以对输入信号实现很复杂的函数运算 插值运算 计算出模块的输出值 MATLAB函数模块 MATLABFcn 利用matlab的现有函数进行运算 可以将用户自己按照规定模式格式编写的Matlab函数嵌入到Simulink模型中 这样就可以对输入进行运算 计算生成输出信号 S 函数模块 S Function 按照Simulink规定的标准 允许用户编写自己的S 函数 可以将MATLAB语句 C C 语句 Fortran语句或Ada语句等编写的函数在Simulink模块中执行 最后计算出模块的输出值 19 4 MathOperations 数学函数模块组 数学函数模块组实现了各种各样的数学函数模块 Sum 求和模块 将输入的多路信号进行求和或求差 则可以计算出输出信号 在组建反馈系统框图时必须采用该模块 Product 乘运算DotProduct 点乘运算增益函数 Gain 输出信号等于输入信号乘以增益模块中指定的数值 更一般地说 还有对矩阵进行乘法的矩阵增益模块 MatrixGain MathFunction 包括指数函数 对数函数 求平方 开根号等常用数学函数 20 TrigonometricFunction 三角函数 包括正弦 余弦 正切等MinMax 最值运算Abs 取绝对值Sign 符号函数LogicalOperator 逻辑运算RelationalOperator 关系运算ComplextoMagnitude Angle 由复数输入转为幅值和相角输出Magnitude AngletoComplex 由幅值和相角输入合成复数输出ComplextoReal Imag 由复数输入转为实部和虚部输出Real ImagtoComplex 由实部和虚部输入合成复数输出 21 该模块主要包含常见的分段线性非线性静态模块 Saturation 饱和非线性输出 让输出超过某一值时能够饱和 DeadZone 死区非线性模块Relay 继电非线性模块 限制输出值在某一范围内变化 RateLimiter 变化率限幅器模块Backlash 磁滞回环模块Quantizer 量化器模块 5 Discontinuities 非线性模块组 22 6 SignalRouting 信号通路模块组 Mux 多路开关元件 将多个单一输入转化为一个复合输出 Demux 多路解耦元件 将单路的输入向量以某种方式解耦后多路输出 Switch 开关选择 当第二个输入端大于临界值时 输出由第一个输入端而来 否则输出由第三个输入端而来 ManualSwitch 手动选择开关转移模块Goto和FromSelect 选路模块MultiportSwitch 多路开关模块 23 7 Sinks 输出模块组 Scope 示波器模块 将输入信号在示波器中显示出来 X YGraph X Y示波器 将两路输入信号分别作为示波器的两个坐标轴 将信号的相轨迹显示出来 ToWorkspace 工作空间写入模块 将输入信号直接写到MATLAB的工作空间中 该模块默认的写法是结构体型的数据 可以通过设置将之设置成矩阵型的 ToFile mat 写文件模块 将输入的信号写到数据文件中 24 Out1 输出端口模块 用来反映整个系统的输出端子 这样的设置在模型线性化与命令行仿真时是必需的 另外 系统直接仿真时这样的输出将自动在MATLAB工作空间中生成变量 Terminator 连接到没有连接到的输出端 如果一个模块的输出端子没有接任何其它模块 在Simulink仿真中经常经出错误信息 这样可以将该模块接到该输出端子即可避免错误信息 StopSimulation 允许用户在仿真过程中终止仿真进程 25 8 Sources 输入源模块组 常数输入模块 Constant 此模块以常数作为输入 可以在很多模型中使用该模块 时间信号模块 Clock 生成当前仿真时钟 系统仿真时打开该元件即可看到实时的仿真时间 对于定时仿真系统来说 这个功能比较有用 FromWorkspace 从MATLAB的工作空间输入 该元件从workspace输入已有的函数作为仿真的激励信号 首先要在MATLAB环境下建立起一个时间向量和相应的函数值向量 然后双击该图标将时间向量和函数值向量名称填入指定的对话框即可 26 FromFile mat 来自数据文件 PulseGenerator 脉冲发生器 RepeatingSequence 周期信号发生器 SignalGenerator 信号发生器 可以产生给定频率和幅值的正弦 sinewave 方波 squarewave 锯齿波 sawtoothwave 及随意波 SineWave 正弦波信号 Step 阶跃波信号 Ramp 斜坡信号 In1 输入端口模块 用来反映整个系统的输入端子 这样的设置在模型线性化与命令行仿真时是必需的 27 接地线模块 Ground 一般用于表示零输入模块 如果一个模块的输入端子没有接任何其它模块 在Simulink仿真中经常经出错误信息 这样可以将该模块接入该输入端子即可避免错误信息 Band limitedWhiteNoise 连续白噪声信号发生器SignalBuilder 允许用户用图形化的方式编辑输入信号 28 9 Look UpTables 查表模块组 任意分段线性的非线性环节均可以由查表模块搭建起来 从而可以容易地对非线性控制系统进行仿真分析 Look UpTable 一维查表模块 建立输入信号的查询表 线性峰值匹配 给出一组横坐标和纵坐标的参考值 则输入量经过查表和线性插值计算出输出值返回 Look UpTable2 D 二维查表模块 建立两个输入信号的查询表 线性峰值匹配 给出二维平面网络网格上高度值 则输入的两个变量经过查表 插值运算 最后计算出模块的输出值 Look UpTablen D n维查表模块 29 10 信号属性模块组 SignalAttributes DataTypeCovention 信号类型转换模块 RateTransition 采样周期转换模块 IC 初始条件设置模块 Width 信号宽度检测模块 30 5 2SIMULINK建模及仿真 5 2 1Simulink建模方法简介1 简单模型的建立 1 建立模型窗口 2 将功能模块由模块库窗口复制到模型窗口 3 对模块进行连接 从而构成需要的系统模型 31 2 模型的特点在SIMULINK里提供了许多如Scope的接收器模块 这使得用SIMULNK进行仿真具有像做实验一般的图形化显示效果 SIMULINK的模型具有层次性 通过底层子系统可以构建上层母系统 SIMULINK提供了对子系统进行封装的功能 用户可以自定义子系统的图标和设置参数对话框 32 3 构建脉冲输出模型 步骤1 Library窗口中 新建一个NewModel文件步骤2 右击Library窗口中的Sources模块函数库 打开一个名为Source的窗口 右图所示 其中有一些常用的信号源 如正弦信号 脉冲信号等等 33 步骤3 将鼠标移到脉冲发生器 PulseGenerator 上 按隹左键不放 将脉冲发生器拖拉到窗体内 放开鼠标左键 就可以将Source窗体内的脉冲发生器控制模块构建在窗口内 步骤4 采用同样的方法 将Library窗口中的Sinks函数库打开 将函数库中的Scope模块拖拉到窗口中 34 4 控制模块的连接 先仔细观察这两个模块 在PulseGenerator模块的右侧 前方 有一个方向向外的三角形箭头 我们称之为输出端 在Scope模块的左侧 后方 也有一个方向向内的箭头 我们称之为输入端 将模块连起来 就是将输出输入端连接起来 步骤如下 步骤1 将鼠标移到对象的输出或输入端 鼠标指针将变为十字状 步骤2 此时 按住鼠标左健 拖拉到另一对象的输入或输出端 鼠标指针变为十字状 步骤3 放开鼠左键 完成连结 就会产生连接线 如图 35 5 调整控制模块的参数 将鼠标移到窗口内的PulseGenerator模块上 双击鼠标左键 会出现一个调整PulseGenerator参数的BlockParameters窗口 在这个窗口中 我们可以设定Pulse的相关参数 如下图所示 36 6 启动模型并观察系统输出单击工具栏中的Simulation Start菜单 或就可以启动对系统的仿真了 启动后将会在Scope模块中看到输出的波形如下图所示 这是一个脉冲发生器把信号输出到示波器 Scope 上的模型 方波大小为1KHZ 振幅为1且周期为1秒 我们在Simulink中成功地仿真了这个模型 37 Simulink建模实例 由图5 2给出的非线性系统框图 其中控制器为PI控制器 其模型为 饱和非线性中 2 死区非线性的死区宽度为0 1 由于系统中含有非线性环节 所以不能用以前的知识作精确仿真 下面用Simulink来搭建系统的仿真模型 图5 2 38 步骤1 建立新的模型编辑窗口 步骤2 将下图所示的元件托入模型编辑窗口 步骤3 由于许多模块的参数与题目要求不一致 故需修改其参数 如图5 2所示 将加法器中的listofsigns选项改为 实现负反馈 39 图5 2 40 将传递函数元件的分子和分母作相应修改 多项式系数仍遵循降幂排列 41 步骤4 将所有元件按框图所示结构连接起来 得图5 3所示框图 若需对元件进行翻转 则可右击该元件 选择快捷菜单Format中的Rotateblock项 图5 3 步骤5 仿真 单击启动仿真按钮或选择simulation start菜单项 42 双击示波器元件 可显示图5 4所示仿真结果 图5 4 43 以上控制器跟踪速度较慢 为改善其性能 将Ki调整为10 则其仿真结果为下图 另 Simulink还提供了SliderGain 滑杆增益模块 使参数调节更为容易 44 5 2 2仿真算法与控制参数选择在Simulink模型窗口中 Simulation SimulationParameters菜单项 允许用户设置仿真的控制参数 Starttime和Stoptime栏 分别允许用户填写仿真的起始时间和结束时间 Sloveroptions的Type栏允许用户选择定步长和变步长算法 其后面的列表框列出了各种算法 如ode45 Domand Prince 算法 ode15s stiff NDF 算法等 一般情况下 连续系统选变步长算法 离散系统选择定步长算法 RelativeTolerance 相对误差 和AbsoluteTolerance项 控制仿真精度 Maxstepsize和Minstepsize项 确定仿真的最大和最小步长 45 Diagnostics标签下的对话框可设置警告信息 仿真结束后 Simulink会自动生成一个tout向量 存放各个仿真时刻的时间值 若使用了Outport模块 则其输出信号会自动赋给yout变量 用户可使用plot tout yout 命令绘制仿真结果 46 除了直接在SIMULINK环境下启动仿真外 还可以在MATLAB命令窗口中通过函数进行仿真分析 格式如下 t x y sim 模型文件名 totf options 其中to为仿真起始时间 tf为仿真终止时间 t x y 为返回值 t为返回的时间向量值 x为返回的状态矩阵 y为返回的输出向量值 options simset 参数1 参数值1 参数2 参数值2 simset定义了仿真参数 用helpsimset命令可以显示出所有的控制参数名 如 若想将仿真参数相对误差 RelTol 的默认值10 3改为10 7 则可使用options simset RelTol 1e 7 47 5 2 3Simulink在控制系统仿真中的应用 例5 1考虑Lorenz方程 其初值为x1 0 x2 0 0 x3 0 10 3 将上述方程在Simulink中进行仿真 仿真时需对每个微分量引入一个积分器 积分器的输出就是该状态变量 积分器的输入端就是该变量的一阶微分 将三个积分器的初值分别设置为0 0 1e 3 令仿真时间为30 相对误差为1e 7 启动仿真后 在MATLAB的工作空间返回两个变量tout和yout 48 其中 tout为时刻 yout为三列矩阵 分别对应三个状态变量x1 x3 由plot绘制各状态变量的时间响应曲线plot tout yout 49 50 例5 2 多变量系统 试分析其用Pade近似方法求得的阶跃响应的精度 51 g11 tf 0 1134 1 78 4 48 1 ioDelay 0 72 g12 tf 0 924 2 07 1 g21 tf 0 3378 0 361 1 09 1 ioDelay 0 3 g22 tf 0 318 2 93 1 ioDelay 1 29 G g11 g12 g21 g22 n1 d1 paderm 0 72 0 2 g11 ioDelay 0 g11 tf n1 d1 g11 n1 d1 paderm 0 3 0 2 g21 ioDelay 0 g21 tf n1 d1 g21 n1 d1 paderm 1 29 0 2 g22 ioDelay 0 g22 tf n1 d1 g22 G1 g11 g12 g21 g22 kp 0 1134 0 924 0 3378 0 318 G2 ss G1 kp y1 x1 t1 step G2 a G2 b G2 c G2 d 1 15 y2 x2 t2 step G2 a G2 b G2 c G2 d 2 15 u1 1 u2 0 tt1 x1 yy1 sim exp53 15 subplot 221 plot t1 y1 1 tt1 yy1 1 subplot 222 plot t1 y1 2 tt1 yy1 2 52 实线表示精确的仿真结果 虚线表示近似结果 53 5 3非线性系统分析与仿真 这一节中 我们将介绍分段线性的非线性静态环节在Simulink下的表示方法 极限环的精确分析 描述函数法 以及非线性模型线性化方法等 5 3 1分段线性的非线性环节利用Simulink提供的模块可以搭建任意的非线性静态模块 1 单值非线性模块如左图所示的分段函数可以通过Look UpTable元件实现 即首先确定非线性特性的转折点 x1 y1 x2 y2 xn yn 54 然后在x1点之前 和xn点之后 分别确定x0点和xn 1点 其中x0 xn 根据线形确定y0 yn 1的值 构造向量xx x0 x1 xn xn 1 yy y0 y1 yn yn 1 双击Look UpTable元件 将xx和yy分别写入 Vectorofinputvalues 和 Vectorofoutputvalues 栏 如下图所示 55 2 多值非线性模块 图5 5所示的回环模块 当输入增加时走一条折线 减小时走另一条折线 于是可以将这个非线性函数分解成两条单值函数 但必须区分输入信号是上升还是下降 图5 5 56 其步骤如下 利用Memory模块和比较符号确定输入信号是上升还是下降 比较器输出的是一个逻辑量 当上升时输出1 下降时输出值为0 由该信号控制后面的开关模块 设开关模块的阈值为0 5 当输入信号为上升时 由开关上面的通路计算系统的输出 而下降时由下面的通路计算输出 如下图所示 57 两个查表模块的输入和输出分别可设置为 x1 3 1 1 eps 22 eps 3 y1 1 1 0 0 1 1 x2 3 2 2 eps 1 1 eps 3 y2 1 1 0 0 1 1 修改两个查表函数 还可生成不同的回环结构 如x1 3 2 1 23 4 y1 1 1 0 0 1 1 x2 3 2 1 1 2 3 y2 1 1 0 0 1 1 生成回环如下图所示 图5 6 58 例5 3试观察正弦信号经过图5 6所示的非线性环节后的波形 如上图所示 搭建的非线性系统 正弦波经过变换后为 其正弦信号的幅值分别为2 4 8 59 5 3 2非线性系统的极限环研究 考虑如图5 7所示的系统 其中非线性回环如图5 5 在仿真模型中 将积分器的初始值设置为1 观察系统的输出 图5 7 60 t x y sim c5flcyc1 40 plot t y 可以看出 系统的x1和x2信号在初始振荡结束后 表现为等幅振荡运动 由plot y 1 y 2 绘制出系统的相平面曲线 可以看出系统的相轨迹最终稳定在一个封闭的曲线上 这一曲线就是极限环 极限环是非线性系统的特有性质 61 5 3 3非线性系统的线性化 非线性系统的局部特性 可以通过将某一工作点附近的邻域近似线性化来获得 1 平衡点的确定系统状态变量导数为0时 系统处于平衡点 MATLAB使用trim函数确定平衡点 它的调用格式为 x u y dx trim sfun x0 u0 其中sfun为模型文件名 x0 u0为数值算法所需要的起始搜索点 MATLAB通过寻优的方式寻找最佳平衡点 因此 多次使用不同的初值寻找平衡点是有必要的 62 2 模型线性化函数linmod dlinmod进行模型的线性化 a b c d linmod 模型名 x0 u0 连续系统线性化 a b c d dlinmod 模型名 x0 u0 含有离散环节的系统线性化如 a b c d linmod sfun x0 u0 注意 1 函数的sfun参数必不可少 它是SIMULINK模型的名字 2 可使用x0 u0来设定系统的状态和输入工作点 缺省值全为零 63 3 MATLAB还提供了一个linmod2函数 它比linmod要精确一些 但运行时间更长 一旦得到了系统状态空间形式描述的模型 就可以进一步的进行系统分析 如画Bode图 做阶跃响应 判断稳定性 还可以进行控制系统设计 64 例5 4 多变量系统 对其进行线性化 将其进行线性化前 先将时间延迟进行Pade近似 即在延迟环节处 将Padeorder项设置为2 采用2阶Pade近似 65 A B C D linmod exp512 step ss A B C D 66 5 4子系统与模块封装技术为简化系统模型 有时需要将一些复杂的系统变换为一些模块的组合 另外 用户会希望自己定义一些模块 来搭建系统 Simulink提供的模块封装技术 可满足这些需要 5 4 1子系统概念及构成方法子系统的内部由用户定义 而输入端用In 输出端采用Out元件 例5 5下面是PID控制器的数学模型为 试将其建立为子模块 67 步骤 将所有需要的元件托入模型编辑窗口 如图5 8所示 选中所有元件 在Edit菜单选择CreateSubsystem项 得到子系统框图 如图5 9所示 图5 8 图5 9 68 5 4 2模块的封装方法在Simulink环境中 所谓封装 masking 就是将其对应的子系统内部结构隐含起来 以便访问该模块时只出现一个参数设置对话框 将模块中所需要的参数用这个对话框来输入 封装用户自定义模块的步骤 选中该子系统模块的图标 然后选择Edit MaskSubsystem菜单项 则出现模块封装编辑界面 如图5 10 填写封装参数1 Icon标签页此页最重要的部分是Drawingcommands 在该区域内可以用disp指令设定功能模块的文字名称 用plot指令画线 用dpoly指令画传递函数 69 图5 10 70 如在Drawingcommands中分别输入plot cos 0 1 2 pi sin 0 1 2 pi disp PID nController 则封装模块的图标会显示为入图5 11所示 图5 11 注意 尽管这些命令在名字上和以前讲的MATLAB函数相同 但它们在功能上却不完全相同 因此不能随便套用以前所讲的格式 71 disp text 可以在功能模块上显示设定的文字内容 disp text1 ntext2 分行显示文字text1和text2plot x1x2 xn y1y2 yn 指令会在功能模块上画出由 x1y1 经 x2y2 经 x3y3 直到 xn yn 为止的直线 功能模块的左下角会根据目前的坐标刻度被正规化为 0 0 右上角则会依据目前的坐标刻度被正规化为 1 1 dpoly num den 按s次数的降幂排序 在功能模块上显示连续的传递函数 dpoly num den z 按z次数的降幂排序 在功能模块上显示离散的传递函数 用户还可以设置一些参数来控制图标的属性 Frame Visible显示外框线 Invisible 隐藏外框线 Transparency Opaque隐藏输入输出的标签 Transparent 显示输入输出的标签 72 Rotation 旋转模块 Rotates选项在旋转模块时 同时旋转模块的图标 2 Parameters标签页在prompt编辑框中输入变量的含义 其内容会显示在输入提示中 在variable列表中输入变量名称 则prompt中的文字对应该变量的说明 而variable是仿真要用到的变量 该变量的值一直存于maskworkspace中 如果要增加新的项目 可以点击边上的键 Up和Down按钮用于执行项目间的位置调整 注意 variable变量名必须与框图中的完全一致 type列表给用户提供选择设计的编辑区 选择Edit会出现供输入的空白区域 所输入的值代表对应的variable Popup则为用户提供可选择的列表框 所选的值代表variable 此时在下面会出现Popup输入框 用来设计选择 73 74 的内容 各值之间用逻辑或符号 隔开 如选择Checkbox则用于on与off的选择设定 3 Initialization标签页Initialization标签页对模块进行初始化处理4 Documentation标签页此页主要用来针对完成的功能模块来编写相应的说明文字和Help 在Maskdescription中输入的文字 会出现在参数窗口的说明部分 在Maskhelp中输入的文字则会显示在单击参数窗口中的help按钮后浏览器所加载的HTML文件中 Masktype 在此处输入的文字作为封装模块的标注性说明 在模型窗口下 将鼠标指向模块 则会显示该文字 当然必须先在View菜单中选择BlockDataTips 75 例5 6例5 3所示系统将其进行封装 封装前先将两路非线性查表模块的参数分别设置为 xu yu 和 xd yd 选中所有元件 单击CreateSubsystem菜单项 得到子系统框图 选中子系统框图 单击Edit MaskSubsystem菜单项 并设置子系统参数 如图5 12 5 13 5 14所示 图5 12 76 图5 13 77 图5 14 模块封装完后 可在模块的输入和输出端分别接正弦信号和示波器 检验模块效果 78 5 5s 函数及其应用 5 5 2s function的基本结构s function是一个动态系统的计算机语言描述 在MATLAB里 用户可以选择用m文件编写 也可以用c或Fortran语言编写 在这里只给大家介绍如何用m文件编写s function S function提供了扩展Simulink模块库的有力工具 它采用一种特定的调用语法 使函数和Simulink解法器进行交互 Simulink为用户提供了许多内置的基本库模块 通过这些模块进行连接而构成系统的模型 对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块 但它依然是基于Simulink原来提供的内置模块 而Simulinks function是一种强大的对模块库进行扩展的新工具 其用途是定制用户自己的Simulink模块 79 二 建立m文件s function1 使用模板文件 sfunmen m该模板文件位于MATLAB根目录下toolbox simulink blocks目录下 模板文件里s function的结构十分简单 它只为不同的flag的值指定要相应调用的m文件子函数 比如当flag 3时 即模块处于计算输出这个仿真阶段时 相应调用的子函数为sys mdloutputs t x u 80 模板文件使用switch语句来完成这种指定 当然这种结构并不唯一 用户也可以使用if语句来完成同样的功能 而且在实际运用时 可以根据实际需要来去掉某些值 因为并不是每个模块都需要经过所有的子函数调用 模板文件只是Simulink为方便用户而提供的一种参考格式 并不是编写s function的语法要求 用户完全可以改变子函数的名称 或者直接把代码写在主函数里 但使用模板文件的好处是 比较方便 而且条理清晰 81 function sys x0 str ts sfunmem t x u flag switchflagcase0 sys x0 str ts mdlInitializeSizes case2 sys mdlUpdate t x u case3 sys mdlOutputs t x u case9 sys donothingotherwise error unhandledflag num2str flag end 82 使用模板编写s function 用户只需把s 函数名换成期望的函数名称 如果需要额外的输入参量 还需在输入参数列表的后面增加这些参数 因为前面的4个参数是simulink调用s function时自动传入的 对于输出参数 最好不做修改 接下去的工作就是根据所编s function要完成的任务 用相应的代码去替代模板里各个子函数的代码即可 83 Simulink在每个仿真阶段都会对s function进行调用 在调用时 Simulink会根据所处的仿真阶段为flag传入不同的值 而且还会为sys这个返回参数指定不同的角色 也就是说尽管是相同的sys变量 但在不同的仿真阶段其意义却不相同 这种变化由simulink自动完成 84 m文件s function可用的子函数说明如下 mdlInitializeSizes 定义s function模块的基本特性 包括采样时间 连续或者离散状态的初始条件和sizes数组 mdlDerivatives 计算连续状态变量的更新 状态变量由sys变量返回 mdlUpdate 计算离散状态变量的更新 85 mdlOutputs 计算s function的输出信号 mdlGetTimeOfNextVarHit 计算下一个采样点的绝对时间 这个方法仅用于用户在mdlInitializeSizes里说明了一个可变的离散采样时间 mdlTerminate 实现仿真任务结束 这一过程不返回任何变量 86 2 定义s function的初始信息为了让Simulink识别出一个m文件s function 用户必须在s 函数里提供有关s 函数的说明信息 包括采样时间 连续或者离散状态个数等初始条件 这一部分主要是在mdlInitializeSizes子函数里完成 Sizes数组是s function函数信息的载体 它内部的字段意义为 NumContStates 连续状态的个数 状态向量连续部分的宽度 87 NumDiscStates 离散状态的个数 状态向量离散部分的宽度 NumOutputs和NumInputs 分别是输出和输入变量的个数 输出 输入向量的宽度 DirFeedthrough 输入信号是否直接在输出端出现的标识 它的取值只有0和1两种 0表示没有直接馈入 此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u 1表示有直接馈入 NumSampleTimes 采样时间的个数 也就是ts变量的行数 与用户对ts的定义有关 88 另外 如果字段代表的向量宽度为动态可变 则可以将它们赋值为 1 需要指出的是 由于s function会忽略端口 所以当有多个输入变量或多个输出变量时 必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向量分解为多个单一输出 89 3 输入和输出参量说明S function默认的4个输入参数为t x u和flag 它们的次序不能变动 代表的意义分别为 t 代表当前的仿真时间 这个输入参数通常用于决定下一个采样时刻 或者在多采样速率系统中 用来区分不同的采样时刻点 并据此进行不同的处理 x 表示状态向量 这个参数是必须的 甚至在系统中不存在状态时也是如此 它具有很灵活的运用 u 表示输入向量 flag 是一个控制在每一个仿真阶段调用哪一个子函数的参数 由Simulink在调用时自动取值 90 S function默认的4个返回参数为sys x0 str和ts 它们的次序不能变动 代表的意义分别为 sys 是一个通用的返回参数 它所返回值的意义取决于flag的值 x0 是初始的状态值 没有状态时是一个空矩阵 这个返回参数只在flag值为0时才有效 其他时候都会被忽略 str 这个参数没有什么意义 是MathWorks公司为将来的应用保留的 m文件s function必须把它设为空矩阵 ts 是一个m 2的矩阵 它的两列分别表示采样时间间隔和偏移 91 5 5 2用MATLAB编写S 函数举例 例5 6微分 跟踪器的离散形式为 其中 T为采样周期 u k 为第k时刻的输入信号 r为决定跟踪快慢的参数 而h为输入信号被噪声污染时 决定滤波效果的参数 Fst函数可以由下列公式计算 92 function sys x0 str ts han td t x u flag r h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度生物制药研发项目保密及成果转化合同
- 2025年高端住宅墙面防水保温工程劳务分包施工合同模板
- 2025医院与高校医疗资源配置及合作发展框架协议
- 2025年度新型半导体元器件国际市场合作协议
- 2025年度全渠道移动营销服务及APP推广岗位合作协议
- 校企合作框架协议
- 2025年高端金融数据平台技术授权与销售合作协议
- 2025年医疗机构麻醉药品及医疗器械全面配送合作协议
- 2025年互联网平台网络安全事件保密及快速响应处理服务协议
- 2025年高校科研实验室升级改造与精密仪器采购专项合同
- 7s管理工作汇报
- 金融科技推动新质生产力发展
- 肝脓肿合并糖尿病业务查房
- 实验室安全教育考试题库实验室安全考试题库及答案
- 企业员工职业道德考核制度
- 公司安全事故隐患内部举报、报告奖励制度
- 【初中物理】质量与密度练习题 2024-2025学年初中物理人教版八年级上册
- 南外初中小语种课程设计
- 【上海市塑料探究所企业员工激励机制存在的问题及优化建议探析(论文)8200字】
- Unit2 Whats your hobby-教案人教精通版英语六年级上册
- 【必刷题】2024五年级英语上册一般过去时专项专题训练(含答案)
评论
0/150
提交评论