
仿真_6_simulink_子系统及封装.ppt
34页主讲教师:姜萍MATLAB MATLAB 与系统仿真与系统仿真 第六章第六章 6.2 模块化与封装(建立子系统)一、模块化当模型很大很复杂时,可将一些模块组合成一个子系当模型很大很复杂时,可将一些模块组合成一个子系 统,可简化仿真模型,便于系统的设计与分析建立子统,可简化仿真模型,便于系统的设计与分析建立子 系统可有系统可有两种形式两种形式::①①组合已经存在的模块:用鼠标选中需组合的模块组合已经存在的模块:用鼠标选中需组合的模块,, EditEditCreate SubsystemsCreate Subsystems; ;②②把把Ports & SubsystemsPorts & Subsystems 中的中的SubsystemsSubsystems模块加入到模型模块加入到模型 中,双击打开子系统编辑窗口,添加模块中,双击打开子系统编辑窗口,添加模块这时,经模块化后,双击子系统仍可看到内部模块这时,经模块化后,双击子系统仍可看到内部模块 要修改参数,需要逐个打开各模块来设置,比较麻烦要修改参数,需要逐个打开各模块来设置,比较麻烦 如要有一个子系统的参数设置对话框代替多个对话框,如要有一个子系统的参数设置对话框代替多个对话框, 就要采用封装技术。
就要采用封装技术目 录前页后页 组合已经存在的模块组合已经存在的模块把把SubsystemsSubsystems模块加入到模型中,再添加模块模块加入到模型中,再添加模块二、封装先看先看SimulinkSimulink Extra Extra中的中的PIDPID模块,内部也是多个模块,内部也是多个 模块组成的子系统,但不需要逐个打开各模块来修改模块组成的子系统,但不需要逐个打开各模块来修改 参数,而有一个子系统的参数,而有一个子系统的参数设置对话框(自己创建参数设置对话框(自己创建 ))代替多个对话框,设置一些关键参数优点:代替多个对话框,设置一些关键参数优点:• •用户与模块内部的复杂性隔绝;用户与模块内部的复杂性隔绝;• •提供一个描述性的、友好的用户接口;提供一个描述性的、友好的用户接口;• •保护模块的内容免受无意识的干扰保护模块的内容免受无意识的干扰 利用 利用SimulinkSimulink的封装功能,就可以子定义做出一的封装功能,就可以子定义做出一 个模块的对话框和图标个模块的对话框和图标目 录前页后页 封装过程:①用以上两种方式模块化方法创建子系统,需在各模块上以上两种方式模块化方法创建子系统,需在各模块上 给封装后需赋值的参数指定变量名(字母)给封装后需赋值的参数指定变量名(字母);;②②选中子系统,选中子系统,然后选择然后选择EditEditMaskMask Subsystems Subsystems;;③③使用封装编辑器设计图标、对话框、文本。
使用封装编辑器设计图标、对话框、文本有四个标签页:有四个标签页:• •Icon Icon 模块名字和外观模块名字和外观• •Parameters Parameters 输入参数输入参数• •Initialization Initialization 参数初始化参数初始化• •Documentation Documentation 模块文字说明模块文字说明 完成封装后,再双击模块,就出现新的封装对话框,而完成封装后,再双击模块,就出现新的封装对话框,而 非子系统内部模块非子系统内部模块若要若要解除封装解除封装,在,在Edit MaskEdit Mask中用中用UnmaskUnmask即可mypid1.mdl目 录前页后页 PIDPID调节器调节器标签页标签页(1) Icon (1) Icon 模块名字和外观模块名字和外观目 录前页后页 标签页标签页(2) Parameters (2) Parameters 输入参数输入参数目 录前页后页 标签页标签页(3) Initialization (3) Initialization 参数初始化参数初始化目 录前页后页 标签页标签页(4) Documentation (4) Documentation 模块文字说明模块文字说明目 录前页后页 一、仿真模型的参数化在Simulink环境下,仿真模型的参数可以 是实际数值,也可以是字母表示的变量名。
字 母表示的仿真模型参数可以在Workspace工作 空间中赋值,也可在M文件中赋值,然后进行 模型的运行目 录前页后页 6.3 复杂系统的综合仿真例如某系统结构固定,参数较多,根据不同实际情况有多套参数 二、从命令行运行Simulink仿真模型前面都是在Simulink环境下,用菜单命令运行 仿真模型,从命令行运行模型的方式可使用户在M文 件中运行仿真,可允许用户改变仿真模型的参数,也 可在M文件中控制模型的运行•[t,x,y]=sim(model,timespan,options,ut)t —— 返回仿真的时间向量x —— 返回仿真的状态矩阵y —— 返回仿真的输出矩阵目 录前页后页 [t,x,y]=sim(model,timespan,options,ut)model ——仿真模型名称timespan ——仿真的起始和终止时间两种: 1、tFinal 终止时间,起始时间为02、[ tStart tFinal ] 起始和结束时间 options —— 指定可选的仿真参数,由simset 建立u t —— 可选的对顶层输入端口模块的外部输入其中,只有model是必需的参数目 录前页后页 simset 指定仿真参数必须用于sim命令中,主要包括:•AbsTol:默认值为1e-6,设定绝对误差范围。
•Decimation:默认值为1,决定隔多少个点返回状态和输出值 •Solver:解法器的选择•MaxRows:默认0,表示不限制若为大于零的值,表示 限制输出和状态的规模,使其最大行数等于该数值•InitialState:一个向量值,用于设定初始状态•FixedStep:正数表示步长的大小,仅用于固定步长•MaxStep:默认auto,变步长模式中最大的步阶大小•Simget (‘模型文件名’)得到该模型的仿真参数:get_param 获取仿真模型或仿真模块的参数set_param 设置仿真模型或仿真模块的参数目 录前页后页 三、与 M 函数的组合仿真如果仿真模型中用到的复杂环节具有特殊结构和特 殊运算,在Simulink提供的现成的模块库中找不到,用 户可以自行编制M函数,再连接到Simulink搭建的仿真 模型中 在Simulink模块库User-Defined Functions中选择 MATLAB Fcn加入搭建的仿真模型中,双击模块打开 M函数对话框,键入要连接的M函数文件名,模型运行 时就会调用该M函数文件 例题:将实验四 函数文件中的非线性饱和函数加 入simulink 的模型中。
四、 条件子系统前面的子系统,对于一定的输入,子系统必定产生输出但有些情 况下,只有满足一定的条件子系统才执行即:子系统的执行依赖于 一个控制信号,由子系统单独的控制端口输入由此,条件子系统执 行时,不仅依赖于子系统本身的输入信号,还受到控制信号的约束目 录前页后页 1 1、使能子系统、使能子系统(Enable Subsystem)(Enable Subsystem)使能子系统除原有的输入、输出外,还有一个控制系统的激活端口,使能子系统除原有的输入、输出外,还有一个控制系统的激活端口, 只有只有当控制信号为正当控制信号为正,子系统被激活,使能子系统才执行子系统被激活,使能子系统才执行控制信号可为标量或向量,标量的信号值大于控制信号可为标量或向量,标量的信号值大于0 0是子系统被激活;是子系统被激活; 向量的任一个元素大于向量的任一个元素大于0 0,就能激活就能激活使能子系统模块位于使能子系统模块位于 Ports & SubsystemsPorts & Subsystems使能子系统模块中,打开使能子系统模块中,打开 Enable Enable 模块对话框,可以设置其状态时保模块对话框,可以设置其状态时保 持还是重置、是否输出激活控制信号等。
持还是重置、是否输出激活控制信号等使能子系统使能子系统 EnableEnable模块模块目 录前页后页 Enable Enable 模块对话框模块对话框States when enabling:States when enabling: heldheld表示使能子系统开始执行时,系统中的状态保持不变表示使能子系统开始执行时,系统中的状态保持不变States when enabling:States when enabling: resetreset表示使能子系统开始执行时,系统中的状态重新被设置表示使能子系统开始执行时,系统中的状态重新被设置 为初始参数值为初始参数值Show output portShow output port 选择是否输出激活控制信号选择是否输出激活控制信号 例:利用使能子系统将幅值为例:利用使能子系统将幅值为4 4的正弦交流信号转换为同幅的正弦交流信号转换为同幅 值的直流信号值的直流信号目 录前页后页 2 2、触发子系统、触发子系统(Triggered Subsystem)(Triggered Subsystem)触发子系统除原有的输入、输出外,也有一个控制系统的激活端口,触发子系统除原有的输入、输出外,也有一个控制系统的激活端口, 根据触发模块的四种触发事件进行选择,使触发子系统执行。
根据触发模块的四种触发事件进行选择,使触发子系统执行触发子系统模块位于触发子系统模块位于 Ports & SubsystemsPorts & Subsystems触发子系统模块中,打开触发子系统模块中,打开 Trigger Trigger 模块对话框,可以选择触发事件模块对话框,可以选择触发事件1)1)rising rising 上升沿触发上升沿触发 控制信号出现上升沿时开始执行控制信号出现上升沿时开始执行2)2)Falling Falling 下降沿触发下降沿触发 控制信号出现下降沿时开始执行控制信号出现下降沿时开始执行3)3)eithereither 边沿触发边沿触发 控制信号出现任何过零时开始执行控制信号出现任何过零时开始执行4)4)Function-callFunction-call 函数调用触发函数调用触发 由由S-functionS-function内部逻辑控制内部逻辑控制例:由脉冲发生器作为触发控制的信号,设置为上升沿触发例:由脉冲发生器作为触发控制的信号,设置为下降沿触发例:由脉冲发生器作为触发控制的信号,设置为过零沿触发。












