AMEsim的不连续处理机制如何影响你的仿真

不连续性问题也称间断问题,是数值计算中常见的问题。

在之前的文章中提到过Simulink的过零检测是监测特定条件函数的过零来定位不连续点,其本质是通过检测过零点来间接定位不连续性,而不是字面意义上的仅检测过零点。

可去间断点

跳跃间断点

其实像simulink、amesim、simscape、modelica等这类系统建模仿真平台,本质都是利用数值方法求解微分方程组,因此不连续性或间断问题是一个影响求解效率的共性问题。

这里介绍下Amesim中的不连续性的定义以及处理方法。

不连续性的定义

对于AMESim而言,处理不连续性是确保数值求解器稳定运行的核心机制。

不连续性事件定义: 不连续性事件指对动态系统演化过程产生突变影响的事件。

液压缸活塞位移与速度

典型案例:液压缸建模
在液压缸运动建模中,活塞的运动范围受限于缸体的物理尺寸。当活塞在缸体内运动至行程极限时,将触发以下物理行为:

  • 强制停止:活塞速度瞬时降为零
  • 反弹效应:活塞速度发生方向突变

此时,活塞的速度位移参数将呈现显著的不连续性特征。此类不连续事件会引发系统微分方程的突变,需通过专门的数值处理方法(如事件检测算法)确保仿真的稳定性和精度。

其他典型案例:

  • 阀门从关闭状态切换到打开状态。
  • 摩擦从静止滑动切换为动态滑动。
  • 流体从层流变为湍流。

准确建模不连续现象的重要性:

  1. 增加系统动态响应的真实性
  2. 保证仿真的收敛性
  3. 实现机械结构过载保护的评估

不连续性的检测与处理

Amesim的默认求解器是基于线性多步法的变步长求解器,这要求系统的状态方程至少具有连续性且连续可微,任何影响状态方程的不连续性都可能导致状态变量导数的急剧变化。变步长求解器固然能够处理这种突变,但这将导致积分步长的大幅缩减,从而使仿真时间延长。

如图所示是一条带有间断点P的曲线,该曲线表示的变量的特性基于两条独立曲线C1和C2。

可以看到,变量本身是连续的,但其导数在点P处不连续,沿C1或C2是可积的,但在P点时会出现问题。

此时求解器需要使用类似下面的伪代码所示的简单算法进行处理:

If (x < x*)
   使用C1的公式
Else
   使用C2的公式

上述算法将迫使积分器在接近点P时缩减步长,强行满足精度要求,这时会出现两种情况:

  • 当步长过小时,一些积分器会直接报错并停止计算。
  • 另一些积分器则会设定最小步长限制,当达到该限制时继续计算,即便并未满足精度要求。

在实际仿真求解中,第一种方式会导致计算失败,后一种方式则可能产生严重失真的结果。

于是Amesim引入了不连续处理(discontinuity handling)机制,在很多子模型的参数设置中都可以看到。

不连续处理机制的原理

不连续处理(discontinuity handling)机制的原理如上图所示,一般分为以下几步:

  1. 如果解位于曲线C1并越过点P,则不会使用C2的方程,而是继续使用C1的方程进行计算(相当于实际采用曲线C1’),由此得到点Q。
  2. 在求解收敛后,积分器必须识别到已跨过不连续点,并开始尝试定位其精确位置。
  3. 在子模型与求解器之间引入特定的通信机制。该机制允许求解器以机器精度准确定位不连续性发生的模拟时间,回溯并精确定位不连续点。
  4. 此后积分器将自行重启,抛弃点P左侧的所有信息,转而使用平滑的曲线C2进行后续计算。

上述处理不连续性的实现方法依赖于模型能够检测到引发不连续状态的事件。但当求解器采用了较大的积分步长,穿越事件可能被完全遗漏。

image

如上图所示,蓝色曲线在理论上应到达黑色虚线位置,但由于求解器未在该特定区域内执行步长计算,该事件被完全忽略。

此类情况可能出现在具有循环特性的模型中,是动态系统仿真中由于数值积分步长与周期性运动不匹配导致的“混叠效应”(Aliasing Effect),这里以包含凸轮轮廓的旋转机械为例:

凸轮轮廓中存储的角度数据范围为[0, 360]度,而转速为6000转/分钟的旋转机械会迅速达到约360000度的转角(每秒36000°),如果积分步长设置为凸轮旋转一周的时间(即1秒/100圈 = 0.01秒/圈),则每一步长对应凸轮旋转一整圈(360°),这使得凸轮的半径始终读取为 θ = 0 ° θ=0° θ=对应的值(即固定半径)。

由于每一步长中凸轮角度始终映射到同一位置(如0°),其轮廓的动态变化(如非圆形状)无法被仿真器捕捉,凸轮的真实运动特性(如升程、回程)被掩盖,系统行为被错误地简化为一个完美圆形凸轮。

修改最大计算步长

为防止此类现象,必须通过限制积分步长来强制降低求解器的步长激进程度。该限制称为"最大时间步长",可在Amesim的"运行参数"对话框的"标准选项"选项卡中进行设置。

需要注意的是,最大时间步长将在整个仿真过程中限制积分步长。若将其设置得过小,会直接影响CPU时间并导致仿真速度显著降低。

需要注意的是,上文所述的不连续性处理(discontinuity handling)机制仅在使用标准求解器(变步长)时生效。

与变步长求解器不同,固定步长求解器既无法缩减积分步长,也无法回退至不连续性发生的时刻。此外,固定步长求解器不执行任何收敛性测试,因此不会因状态变量导数值的突变而受到影响。固定步长求解器完全依赖用户设定的积分步长,并在整个仿真过程中严格保持该步长值。

因此,定步长求解器会禁用不连续性处理机制。

如何查看不连续事件的信息

Amesim中仿真结果以恒定速率进行采样,该速率由运行参数设置中的"打印间隔"定义。由于不连续点很少会与预定义的打印时刻完全重合,而这些特殊事件往往具有重要研究价值,因此需要在运行参数设置中启用"标准选项"选项卡下的"不连续性打印"选项来记录这些关键时间点。

启用不连续事件打印功能

需注意的是,不连续性打印选项不会改变仿真的运行行为,禁用该选项不会关闭不连续性处理机制,Amesim标准求解器的不连续性处理机制始终是开启的。

不连续性打印功能的作用是在结果文件中记录不连续点信息。

对于每个不连续事件,结果文件中会额外记录两个补充数据点:

  • 第一个点标记为紧邻不连续性发生前: 对应使用当前方程组完成的仿真阶段终点;

  • 第二个点标记为不连续性发生后瞬间: 对应求解器采用更新后的子模型方程组重启计算的时间点。

在极少数情况下,不连续点可能恰好与常规打印时刻重合,因此结果文件中将包含对应于同一时刻的三个数据点(两个不连续性记录点和一个常规打印点)。

不连续性事件日志

启用不连续性打印选项后,运行监控面板的仿真日志窗口会为每个不连续性事件显示一条信息,记录引发不连续性的子模型名称及其发生的精确时间。

如果有两个或多个子模型在同一时刻记录到不连续性事件,日志窗口将仅显示包含其中一个子模型名称的单条信息。这并不意味着其他子模型的不连续性事件被忽略处理,仅显示单条信息有助于保持日志窗口的简洁性。

启用不连续性打印功能对于观测信号中的阶跃变化至关重要,在处理如下例所示的采样信号时尤为必要。

本示例中的离散信号由简单采样器ZOH00生成(采样周期=0.7秒,打印间隔=0.1秒)。默认结果(下方)显示效果欠佳,这是因为采样事件未被精确记录。而上方的蓝色曲线则更为精确——每个采样间隔变化会产生两个数据点:一个位于采样变化前瞬间,另一个位于变化后瞬间。

子模型中的不连续处理

前文提到,Amesim的不连续性处理机制默认启用,无法在仿真层面完全禁用。

然而,某些子模型可通过选项禁用其自身的不连续性处理机制,如下图所示,支持禁用不连续性处理的子模型可在参数设置中进行关闭。

子模型设置

在曲线包含大量数据点但斜率变化较少(如采用线性插值处理)的场景中,禁用不连续性处理机制可有效提升计算效率。

不连续处理的效果

上图所示两条曲线均为基于表格数据的线性插值结果。左侧呈现锯齿状曲线在相邻区间之间存在显著的斜率突变,这种情况下必须启用不连续性处理机制以确保仿真结果的准确性。

而右侧曲线展示的是平缓的斜率变化过程,禁用该机制则不会对仿真结果造成负面影响。

平滑外推

不连续性处理机制对子模型内部计算逻辑存在细微调整。由于其主要目标是确保求解器收敛性,所有物理方程即使超出其应用域外,也必须实上图所示的平滑外推处理(以避免状态导数发生剧烈变化)。

总结

Amesim 模型中的CPU时间问题通常由大量不连续性引起,大多数情况下,不连续性来自从ASCII文件中读取并线性插值的表格。线性插值过程包括使用线性多项式计算给定间隔内的值。

对于每个不连续性,求解器都必须向后插值,以精确定位不连续性并从不连续点重新启动,因此处理大量不连续性会减慢求解器的速度。

当不连续问题严重影响到仿真求解效率时,可以借助Discontinuities printout 选项定位产生不连续问题的部分,进行针对性的调整,例如:

  • 禁用子模型的不连续性处理功能。
  • 在模型中引入阻尼以平滑过渡。
  • 合并液压体积、机械质量或电气电阻,以减少状态变量数量。
  • 调整积分器公差以提高精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值