前言
当对对象系统的分析不够充分,需求不够明确的时候,仍然可以先将仿真系统的输入、输入、子系统等模块进行划分,形成一个相对科学的仿真系统框架。在这个框架下,进行对象系统的分析和建模可能很多时候会更高效。
Simulink给出了一个建模系统的设计的workflow系列案例作为参考,我就跟着这个workflow系列的案例,基于simulink的教程,以自己的理解分析来学习建模思路。这一期为demo中的第一期,使用一个简单弹簧阻尼器复合系统建模来进行基础建模练习。
仿真系统框架设计
如上的一个分析对象,在仔细去考虑系统内各组件的关系之前,首先对该系统的一个初步印像:
这个系统是一个有输入变量与因变量的系统,二者之间存在固定的关系,只要给定初始输入,因变量的变化就是决定了的。
因此在深入分析之前,我将即将建立的模型分为了三个部分:输入、输出、转换关系。在Simulink中先进行一个划分:
随后我们可以将三个系统间先放入一点东西,让我们更能清晰地看到仿真的流程:
考虑到我们现在对问题还没有进行仔细地定义,因此输入和输出量未知。因此这里使用了bus creator与bus selector去进行三个建模部分的链接,简化区域间的信号交互(免得以后看花了)。
问题分析与建模解决
这时候,比如有人提出了第一个疑问:我想知道,如果我拉一下小球,那最上面这个小球m在会如何运动?
信号逻辑
这个问题中,可变的外部输入变量就是小球初始所受外力F,需求就是要观测小球m的运动轨迹x。
这样,系统内现在就有了需要输出的因变量小球轨迹x和需要外部输入的变量小球初始受力F,我们简单地把他们放入系统,看看我们的信号是怎么走的:
各区域内建模
小球通过一个弹簧和阻尼器与地面连接,可以用一个公式去描述该系统:
如上,我们的x可以从这个公式中解出。
这个公式中,m、c、k均为器件的物理特性,为常数,F外力除去刚开始,其他时间为0。而其他所有值均只输出初始值,后续都会在小球运动过程中随时改变。
Input区域
根据变量的属性,在input中先放入它们:
Relationship区域
然后就可以通过总线使用这些变量在Relationship Area中描述他们的关系了:
根据小球加速度和各变量的关系进行建模:
Output区域
最后将可观测的量都引出到output:
连上回路:
对比回Simulink的例子,区别挺大,可以看出建模上的思路还是有些不同,还是仿真先看看结果是否一致吧:
仿真
输入相同的初始条件,我们来对比下仿真结果:
嗯,与参考答案一样!
优化
由于一开始没有规划好连线的顺序,relationship部分看起来线十分乱,让我们来创建子系统来优化下:
这样是不是看起来好多啦!(看不见等于不存在/doge)
小结
对比起官方的Demo,自建的模型看起来复杂很多。官方demo更精准的考虑了前面所描述的问题,认为输入量只有一个F。而我这个模型考虑到所有的变量都有可能会变化,因此将所有的变量与因变量和仿真过程(relationship)分离,因此结构上要复杂的多。如果只分析前面问的这个问题,官方的demo还是要简洁许多的。
因此建模时候,还是要多精准考虑建模的需求,否则会徒增工作量。