Simulink建模之模型的构建风格(一…

来源:互联网 发布:js 调用java代码 编辑:程序博客网 时间:2024/06/05 04:39

   之前的文章中提到过进行基于模型的嵌入式开发的要注意的三个基本问题“数据接口”“配置”“层次结构”,最近对模型建模时的层次结构相关内容做了一些梳理,现在记录下来。

   划分两个部分,第一部分说一下什么是基本模块,虚拟模块,以及非虚拟模块及其对模型执行顺序的影响;第二个部分翻译了Mathwork的汽车咨询委员会发布的《使用MatlabSimulinkStateflow进行控制系统建模指南》中关于模型构建风格的部分内容。(参考软件版本:matlab2012b)

 

一、模块

我们在创建一个Simulink模型时,最基本的单元就是block,我们可以称之为“模块”,每一个模型都是由很多个模块和子模块所组成的。

一般我们把simulink库里的模块称之为“基本模块”,例如:

Simulink建模之模型的构建风格(一)

我们也会自定义一些模块,用于一些特定的功能或者用来进行层级划分。

 

二、虚拟模块和非虚拟模块

Simulink根据其仿真特性在将模块的属性分为两种:虚拟模块和非虚拟模块。在我们进行建模的过程中需要小心区分这两种类别的模块:非虚拟模块在仿真过程中是起实际的作用的,对其进行编辑或者增加删除操作,会影响到模型的运行和改变模型的结果;而虚拟模块在仿真的过程中是不起实际作用的,主要是为了从图框上进行程序的层次划分以及保持模型的图形界面的整洁性等作用。还有一些模块在某些特定条件下为非虚拟模块,有些条件下为虚拟模块,我们可以称之为条件虚拟模块。

Simulink中的虚拟模块和条件虚拟模块如下表:

Simulink建模之模型的构建风格(一)

Simulink建模之模型的构建风格(一)

了解虚拟模块和非虚拟模块是非常必要的,这两者的区别在生成代码时可以直观的看到(虚拟模块不会生成实际的变量或者函数),另外,子系统是否是虚拟模块对于模型的各个模块的执行顺序有着直接的影响。

Simulink模型的执行是依照数据驱动模式来进行执行的。在matlab2012版中我们可以使用下面的方式来查看各个模块的执行顺序与层级结构。(Display-> Blocks->SortedExecutionOrder,其他版本也有相应的选项)

Simulink建模之模型的构建风格(一)

 

   我们来看一下这个简单的例子,首先建立一个简单模型如下图,选择SortedExecutionOrder,然后选择Simulation-> UpdateDiagram

 

在模型的左上角出现红色的标号,表达的含义为:[层级号][执行顺序]Root层级号码为0,依次类推。

Simulink建模之模型的构建风格(一)

这里可以看到In1,In2由于是虚拟节点没有标号,由于Simulink是数据驱动的方式,UnitDelay中定义了初始值,所以模型UnitDelay作为起点进行运算。

 

 

如果我将中间的部分变成Subsystem如下图:



Simulink建模之模型的构建风格(一)

 

    Root层的In1In2Subsystem以及subsystem层中的In1In2Out1Out2

都没有标号为虚拟模块,封装之后的各个模块的执行顺序和未封装之前的一致,Subsystem以及InOut模块只是在图形界面上对模型进行了分层,模型实际执行时,还是讲subsystem中的内容展开到上一级模型中进行运算。

 

 

    下面右击Subsystem,选择Block Parameter,在弹出的对话框中选择treat as atomicuint如下图,然后选择确定。

Simulink建模之模型的构建风格(一)

 

然后再对模型进行更新Simulation->UpdateDiagram,模型的标号发生了变化,如下图


Simulink建模之模型的构建风格(一)

Subsystem模块中的模块的层级结构被调整为1,而subsystem模块自身也有了标号的执行顺序,该简单模型较之前没有设置原子子系统的模型比较,Subsystem种的Gain1root层中的GainOut1的执行顺序被改变了,也就是说subsystem被看做实际的模块,其中的运算全部完成后,再输出数据驱动其后的模块。

在进行大规模建模,而且对实时性要求比较严苛的系统中,对条件虚拟子系统的运用对最终的仿真结果和生成代码都有直接的影响。

0 0
原创粉丝点击