概述
一、模块
我们在创建一个Simulink模型时,最基本的单元就是block,我们可以称之为“模块”,每一个模型都是由很多个模块和子模块所组成的。
一般我们把simulink 库里的模块称之为“基本模块”,例如:
我们也会自定义一些模块,用于一些特定的功能或者用来进行层级划分。
二、虚拟模块和非虚拟模块
Simulink根据其仿真特性在将模块的属性分为两种:虚拟模块和非虚拟模块。在我们进行建模的过程中需要小心区分这两种类别的模块:非虚拟模块在仿真过程中是起实际的作用的,对其进行编辑或者增加删除操作,会影响到模型的运行和改变模型的结果;而虚拟模块在仿真的过程中是不起实际作用的,主要是为了从图框上进行程序的层次划分以及保持模型的图形界面的整洁性等作用。还有一些模块在某些特定条件下为非虚拟模块,有些条件下为虚拟模块,我们可以称之为条件虚拟模块。
Simulink中的虚拟模块和条件虚拟模块如下表:
了解虚拟模块和非虚拟模块是非常必要的,这两者的区别在生成代码时可以直观的看到(虚拟模块不会生成实际的变量或者函数),另外,子系统是否是虚拟模块对于模型的各个模块的执行顺序有着直接的影响。
Simulink模型的执行是依照数据驱动模式来进行执行的。在matlab2012版中我们可以使用下面的方式来查看各个模块的执行顺序与层级结构。(Display-> Blocks-> SortedExecutionOrder,其他版本也有相应的选项)
在模型的左上角出现红色的标号,表达的含义为:[层级号]:[执行顺序]。Root层级号码为0,依次类推。
这里可以看到In1,In2由于是虚拟节点没有标号,由于Simulink是数据驱动的方式,UnitDelay中定义了初始值,所以模型UnitDelay作为起点进行运算。
如果我将中间的部分变成Subsystem如下图:
都没有标号为虚拟模块,封装之后的各个模块的执行顺序和未封装之前的一致,Subsystem以及In和Out模块只是在图形界面上对模型进行了分层,模型实际执行时,还是讲subsystem中的内容展开到上一级模型中进行运算。
然后再对模型进行更新Simulation-> UpdateDiagram,模型的标号发生了变化,如下图
Subsystem模块中的模块的层级结构被调整为1,而subsystem模块自身也有了标号的执行顺序,该简单模型较之前没有设置原子子系统的模型比较, Subsystem种的Gain1和 root层中的Gain、Out1的执行顺序被改变了,也就是说subsystem被看做实际的模块,其中的运算全部完成后,再输出数据驱动其后的模块。
在进行大规模建模,而且对实时性要求比较严苛的系统中,对条件虚拟子系统的运用对最终的仿真结果和生成代码都有直接的影响。
最后
以上就是细心绿茶为你收集整理的Simulink建模之模型的构建风格(一…的全部内容,希望文章能够帮你解决Simulink建模之模型的构建风格(一…所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复