Modelica中time<x与time>=x类型时间事件的执行差异咨询
Modelica中
{time<x}与{time>=x}类型时间事件的执行差异分析 测试代码
model Test equation when { time < 0.1, time >= 0.6} then Modelica.Utilities.Streams.print("print: time= "+ String(time)); end when; end Test;
测试结果
- Dymola (2024x-1):识别为2个时间事件,但仅在
time=0.6时触发打印 - OME (1.24beta):识别为2个状态事件、0个时间事件,同样仅在
time=0.6时触发打印
核心差异与原因
Modelica的when语句触发逻辑是布尔表达式从false变为true的上升沿瞬间,这是理解两类差异的关键:
time < x类型条件
仿真启动时(初始时间time=0.0),该表达式的初始值就是true,不存在从false到true的状态跳变过程,因此完全不满足when语句的触发条件。即使工具将其归类为时间事件,也不会执行对应的动作。time >= x类型条件
仿真过程中,time从小于x逐渐增加至等于x时,表达式会从false切换为true,刚好符合上升沿触发规则,因此会触发when语句执行打印操作。
工具归类差异说明
- Dymola将两个条件都标记为时间事件,是因为它们都直接依赖
time变量; - OME将其归为状态事件,是因为工具内部对“时间事件”的判定更严格——仅把
time == x这类精确时间点条件视为时间事件,而范围型的time < x/time >=x被归为状态事件,但触发逻辑仍遵循Modelica标准的上升沿规则。
内容的提问来源于stack exchange,提问作者AngeliqueR
相关产品推荐
相关产品推荐

