首页/文章/ 详情

说一说Simulation库,带你发现新大陆!

10月前浏览703

Simulation库,位于库目录树的首位,共包含13个元件(图1所示),每个元件对应一个子模型,主要用于控制仿真求解、统计运行状态等等,具有较高的运算优先级,很好用也很强大。

图1 Simulation库
很多人在做仿真时往往不太留意这个库,甚至在其他模型中看到它们时,由于颜色和信号库元件相近,会误认为这些元件来自信号库。本文将对Simulation库中的元件做简单介绍,带领大家发现新大陆!

一、统计仿真运行信息

runstats元件(子模型为RSTAT)如图2所示,用于统计仿真运行信息。该元件无外部端口,在草图模式下将图标放置于模型中即可使用。

图2 运行统计元件
RSTAT通常作为性能分析器的模块之一(即运行统计Run statistics),配合其他三个模块(即状态贡献度State contributions、频率Frequencies和不连续Discontinuities)共同食用,更香!性能分析器工具有助于我们更好地理解和发现模型中存在的问题,为模型的改进和参数的优化提供方向,尤其对运算十分缓慢或卡死报错的模型,非常有用!
在仿真进行过程中或仿真结束后,单击工具栏中的性能分析器按钮,打开性能分析器窗口,在窗口左侧选择运行统计模块,即可显示运行统计(图3所示)。窗口中部显示了当前运行统计的变量;右侧是绘图区,默认两张曲线图分别是CPU时间曲线和积分步长曲线(包括当前、最小和最大积分步长曲线,以以10为底的对数形式表示)。
图3 性能分析器窗口中的运行统计模块
『注:和其他库的元件类似,双击runstats图标也可打开变量列表窗口,还可以拖动变量至空白处绘制曲线。鉴于单独查看运行统计变量不能全面分析得到影响仿真进程的关键因素,因此这种方式并不常用。』

如图3所示,RSTAT统计的得到的变量共有17项。一般情况下,我们只需关注其中的部分变量(已在图3中标出)。下面对这些变量做简单说明:

首先是CPU时间(变量①)和运行时间(变量②),前者是指从开始运算到当前时刻CPU参与运算的时长,后者是指从开始运算到当前时刻所经历的时长。由于一些因素的影响,这两个时长往往稍有差别。在这两个时间的曲线图中,如果曲线斜率增大,说明运算速度在减慢;反之则运算速度在加快。

其次,变量③至⑦是与积分步长相关的变量,均以以10为底的对数形式表示。如果在某一时刻或某时间段内,积分步长很小,说明模型在此处存在高频振荡或者不连续的数量较多。需要指出的是,变量③表示当前时间步长,其曲线图受打印间隔影响较大,例如,如果极小或极大的积分步长发生在打印间隔的间隙,那么变量③的曲线图就会丢失这些重要信息;而变量④至⑦均不受打印间隔的影响,因此必须综合分析变量③和变量④至⑦的曲线图才能得到有效结论。
最后,变量⑧表示的是当前累计不连续数量。不连续越多,则运算越慢,甚至会卡死报错。

除上述8个变量外的其他变量,只有当我们为子模型编写代码时才有必要关注,因此通常情况下可以不用管。

『注:上述对8个重要变量的介绍,不知道讲清楚了没有,希望大家好好思考体会一下。另外,性能分析器不是本文的重点,因此不再对另外三个模块展开讲解。大家可以扫描文末二维码,学习视频课程中的第二期第2讲,了解更多性能分析器的用法。』

二、动态调整打印间隔

通常情况下,打印间隔对仿真运算过程没有影响,主要用于决定绘制结果曲线时数据点的数量以及曲线的平滑程度:打印间隔太大,会导致曲线不平滑,丢失细节特征,甚至得到错误的分析结果;打印间隔越小,曲线越平滑,越能更好地反映细节;但是也不能太小,否则数据点过于密集,结果文件太大,从而增加数据后处理的难度和不必要的工作量。

元件print_interval(子模型TI001)和print_interval_signal(子模型TI010)如图4所示,它们可以实现打印间隔的动态调整,使我们能够根据需要在不同时间段内设置不同的打印间隔,从而用相对较少的数据点绘制较为理想的结果曲线。
图4 打印间隔动态调整元件

『注:有一点要注意的是,如果需要对结果曲线做FFT处理,则不可以用这两个元件改变打印间隔,因为FFT依赖于等间距的数据点。』

举个例子,图5所示为同一正弦信号在不同打印间隔设置下的绘制情况:图a打印间隔大,曲线不够平滑;图b打印间隔小,曲线平滑,但数据量大;图c采用TI001对打印间隔进行了动态设置,在曲线斜率变化快的时间段内设置较小打印间隔,曲线斜率变化慢的时间段内设置较大打印间隔,从而可以用较少的数据点绘制得到满意的结果曲线。
图5 (a)曲线不平滑;(b)曲线平滑但数据点太多;(c)动态调整打印间隔,用较少数据点实现理想曲线的绘制

三、时间同步和实时交互

这部分包括两个元件,如图6所示。timesync元件(子模型SIMSYNCTIME0)可以减慢仿真计算速度,使运算时间和要仿真的真实时间保持同步(或采用特定的比例因子缩放),使我们能够以真实的时间视角去感知和观察模型运算过程中发生的各种现象;externinput元件(子模型EXTERNINP0)可以实现在模拟运算过程中,将模型外部(比如中控台)的某个信号源输入到模型当中。

图6 时间同步和实时交互元件

『注:SIMSYNCTIME0的使用有两个前提,第一,原本的运算速度必须小于设置的仿真时间;第二,必须使用固定步长积分器。』

这两个元件通常配合中控台一起使用,可以实现人机实时交互仿真!

图7所示为一个简单的人机交互实时控制建模实例:externinput元件可以将中控台中的时实信号作为伺服阀的控制信号输入,从而可以通过中控台实时调节伺服阀开口,并且随时观测阻尼孔的流量变化;当然,这个过程还必须用到timesync元件减慢仿真计算速度,使运算时间和真实时间保持同步,否则模型一下子就运行完了,我们什么也做不了(的确,有时候太快了不是什么好事!)
图7 人机交互实时控制建模实例

『注:中控台是Amesim提供的又一强有力仿真工具,可以实现对仿真模型的交互控制以及仿真结果的可视化,非常有趣!中控台不是本文的重点,这里不再展开介绍,大家可以扫描文末二维码,学习视频课程中的相关内容,了解更多中控台的使用方法。』

四、超元件的启用与禁用

这一部分是指图8所示的四个元件。

图8 控制超元件启用与禁用的元件
SUPERCOMPENABLE0子模型只能用在超元件当中,将其转换为可切换的超元件。当输入变量当大于0时,超元件启用,反之则超元件禁用。SUPERCOMPENABLE0的输出用于指示超元件是否处于活动状态,通常应该连接到RESETSIG0或RESETMECH0子模型。
对于子模型RESETSIG0和RESETMECH0,如果端口2的输入是0,则端口1的输出值就是端口3的值;如果端口2的输入是1,则端口3的输出就是参数“output when disabled”的值。这两个子模型的区别在于端口1和端口3的外部变量不同,前者是无量纲信号量,后者是机械量(力和速度、位移)。
SUBSYSSELECT0子模型用于在可切换的超组件之间进行选择,其输出连接到可切换的超组件内部的SUPERCOMPENABLE0。
图9所示为这四个元件的一个应用实例,可以实现液控与电控两个超元件之间的切换。
图9 液控超元件与电控超元件相互切换模型实例

五、Simulation库的其他元件

除上述介绍的元件外,Simulation库还包括图10所示的4个元件。其中,SIMP00用于在批运行中更改求解器公差和最大积分步长,也可用于在常规运行中限定CPU时间;SCRCALL01可以将外部前后处理工具连接到系统;stop元件和chronometer元件也同时存在于信号库中,前者用于实现在特定条件下中断仿真运行,后者用于计算特定事件从开始和停止之间的时间。

图10 Simulation库其他元件

六、总结

以上内容就是笔者对Simulation库中元件的介绍。限于篇幅,本文并没有对每个元件的具体用法做详细说明。写这篇文章的目的,只是想让大家知道有这么一些元件可以实现这样一些功能,起到抛砖引玉的作用,以便使大家有这方面建模需求时不至于束手无策。希望本文的内容对大家能有所启发!

来源:Amesim学习与应用
AMESim控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-07-06
最近编辑:10月前
batt
本科 *****:Amesim学习与应用
获赞 67粉丝 334文章 200课程 0
点赞
收藏
未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈