前言

 

当对对象系统的分析不够充分,需求不够明确的时候,仍然可以先将仿真系统的输入、输入、子系统等模块进行划分,形成一个相对科学的仿真系统框架。在这个框架下,进行对象系统的分析和建模可能很多时候会更高效。

android recyclerview阻尼效果 阻尼器模型_问题分析

Simulink给出了一个建模系统的设计的workflow系列案例作为参考,我就跟着这个workflow系列的案例,基于simulink的教程,以自己的理解分析来学习建模思路。这一期为demo中的第一期,使用一个简单弹簧阻尼器复合系统建模来进行基础建模练习。


 

仿真系统框架设计

android recyclerview阻尼效果 阻尼器模型_Simulink_02

 

如上的一个分析对象,在仔细去考虑系统内各组件的关系之前,首先对该系统的一个初步印像:

这个系统是一个有输入变量与因变量的系统,二者之间存在固定的关系,只要给定初始输入,因变量的变化就是决定了的。

 

因此在深入分析之前,我将即将建立的模型分为了三个部分:输入、输出、转换关系。在Simulink中先进行一个划分:

android recyclerview阻尼效果 阻尼器模型_建模_03

随后我们可以将三个系统间先放入一点东西,让我们更能清晰地看到仿真的流程:

考虑到我们现在对问题还没有进行仔细地定义,因此输入和输出量未知。因此这里使用了bus creator与bus selector去进行三个建模部分的链接,简化区域间的信号交互(免得以后看花了)。

android recyclerview阻尼效果 阻尼器模型_simulink_04

 


 

问题分析与建模解决

 

这时候,比如有人提出了第一个疑问:我想知道,如果我拉一下小球,那最上面这个小球m在会如何运动?

 

信号逻辑

这个问题中,可变的外部输入变量就是小球初始所受外力F,需求就是要观测小球m的运动轨迹x。

这样,系统内现在就有了需要输出的因变量小球轨迹x和需要外部输入的变量小球初始受力F,我们简单地把他们放入系统,看看我们的信号是怎么走的:

android recyclerview阻尼效果 阻尼器模型_Simulink_05

 

各区域内建模

小球通过一个弹簧和阻尼器与地面连接,可以用一个公式去描述该系统:

android recyclerview阻尼效果 阻尼器模型_simulink_06

如上,我们的x可以从这个公式中解出。

这个公式中,m、c、k均为器件的物理特性,为常数,F外力除去刚开始,其他时间为0。而其他所有值均只输出初始值,后续都会在小球运动过程中随时改变。

 

Input区域

根据变量的属性,在input中先放入它们:

android recyclerview阻尼效果 阻尼器模型_Simulink_07

Relationship区域

然后就可以通过总线使用这些变量在Relationship Area中描述他们的关系了:

根据小球加速度和各变量的关系进行建模:

android recyclerview阻尼效果 阻尼器模型_Simulink_08

 

android recyclerview阻尼效果 阻尼器模型_Simulink_09

Output区域

最后将可观测的量都引出到output:

android recyclerview阻尼效果 阻尼器模型_Simulink_10

 

连上回路:

android recyclerview阻尼效果 阻尼器模型_Simulink_11

 

 

对比回Simulink的例子,区别挺大,可以看出建模上的思路还是有些不同,还是仿真先看看结果是否一致吧:

android recyclerview阻尼效果 阻尼器模型_Simulink_12


仿真

输入相同的初始条件,我们来对比下仿真结果:

android recyclerview阻尼效果 阻尼器模型_Simulink_13

嗯,与参考答案一样!


优化

由于一开始没有规划好连线的顺序,relationship部分看起来线十分乱,让我们来创建子系统来优化下:

android recyclerview阻尼效果 阻尼器模型_问题分析_14

这样是不是看起来好多啦!(看不见等于不存在/doge)


小结

对比起官方的Demo,自建的模型看起来复杂很多。官方demo更精准的考虑了前面所描述的问题,认为输入量只有一个F。而我这个模型考虑到所有的变量都有可能会变化,因此将所有的变量与因变量和仿真过程(relationship)分离,因此结构上要复杂的多。如果只分析前面问的这个问题,官方的demo还是要简洁许多的。

因此建模时候,还是要多精准考虑建模的需求,否则会徒增工作量。

 


模型分享