文章来源于Amesim学习与应用公众号 作者新浩
Simulation库,位于库目录树的首位,共包含13个元件(图1所示),每个元件对应一个子模型,主要用于控制仿真求解、统计运行状态等等,具有较高的运算优先级,很好用也很强大。
runstats元件(子模型为RSTAT)如图2所示,用于统计仿真运行信息。该元件无外部端口,在草图模式下将图标放置于模型中即可使用。
如图3所示,RSTAT统计的得到的变量共有17项。一般情况下,我们只需关注其中的部分变量(已在图3中标出)。下面对这些变量做简单说明:
首先是CPU时间(变量①)和运行时间(变量②),前者是指从开始运算到当前时刻CPU参与运算的时长,后者是指从开始运算到当前时刻所经历的时长。由于一些因素的影响,这两个时长往往稍有差别。在这两个时间的曲线图中,如果曲线斜率增大,说明运算速度在减慢;反之则运算速度在加快。
除上述8个变量外的其他变量,只有当我们为子模型编写代码时才有必要关注,因此通常情况下可以不用管。
通常情况下,打印间隔对仿真运算过程没有影响,主要用于决定绘制结果曲线时数据点的数量以及曲线的平滑程度:打印间隔太大,会导致曲线不平滑,丢失细节特征,甚至得到错误的分析结果;打印间隔越小,曲线越平滑,越能更好地反映细节;但是也不能太小,否则数据点过于密集,结果文件太大,从而增加数据后处理的难度和不必要的工作量。
『注:有一点要注意的是,如果需要对结果曲线做FFT处理,则不可以用这两个元件改变打印间隔,因为FFT依赖于等间距的数据点。』
这部分包括两个元件,如图6所示。timesync元件(子模型SIMSYNCTIME0)可以减慢仿真计算速度,使运算时间和要仿真的真实时间保持同步(或采用特定的比例因子缩放),使我们能够以真实的时间视角去感知和观察模型运算过程中发生的各种现象;externinput元件(子模型EXTERNINP0)可以实现在模拟运算过程中,将模型外部(比如中控台)的某个信号源输入到模型当中。
这两个元件通常配合中控台一起使用,可以实现人机实时交互仿真!
四、超元件的启用与禁用
这一部分是指图8所示的四个元件。
图8 控制超元件启用与禁用的元件
SUPERCOMPENABLE0子模型只能用在超元件当中,将其转换为可切换的超元件。当输入变量当大于0时,超元件启用,反之则超元件禁用。SUPERCOMPENABLE0的输出用于指示超元件是否处于活动状态,通常应该连接到RESETSIG0或RESETMECH0子模型。对于子模型RESETSIG0和RESETMECH0,如果端口2的输入是0,则端口1的输出值就是端口3的值;如果端口2的输入是1,则端口3的输出就是参数“output when disabled”的值。这两个子模型的区别在于端口1和端口3的外部变量不同,前者是无量纲信号量,后者是机械量(力和速度、位移)。SUBSYSSELECT0子模型用于在可切换的超组件之间进行选择,其输出连接到可切换的超组件内部的SUPERCOMPENABLE0。图9所示为这四个元件的一个应用实例,可以实现液控与电控两个超元件之间的切换。
五、Simulation库的其他元件
除上述介绍的元件外,Simulation库还包括图10所示的4个元件。其中,SIMP00用于在批运行中更改求解器公差和最大积分步长,也可用于在常规运行中限定CPU时间;SCRCALL01可以将外部前后处理工具连接到系统;stop元件和chronometer元件也同时存在于信号库中,前者用于实现在特定条件下中断仿真运行,后者用于计算特定事件从开始和停止之间的时间。
六、总结
以上内容就是笔者对Simulation库中元件的介绍。限于篇幅,本文并没有对每个元件的具体用法做详细说明。写这篇文章的目的,只是想让大家知道有这么一些元件可以实现这样一些功能,起到抛砖引玉的作用,以便使大家有这方面建模需求时不至于束手无策。希望本文的内容对大家能有所启发!