ANSYS Swan 条件激活与重置操作符教程
ANSYS Swan 提供 条件激活 与 状态重置 高阶操作符,用于控制数据流中的动态行为。本教程将详细介绍 activate ... default
、activate ... last
和 restart
的语法、语义及使用场景。
一、条件激活操作符
1. activate ... default
语法:
(activate op every c default e)
作用:
-
当布尔条件 c 为 true 时,执行操作符 op。
-
当 c 为 false 时,返回默认表达式 e 的值。
示例:
function activateDefault (c: bool; i1: int32; i2: int32)
returns (o: int32)
{
let o = (activate add every c default 42) (i1, i2);
}
function add (i1: int32; i2: int32)
returns (o: int32)
{
let o = i1 + i2;
}
执行逻辑:
-
c = true
:o = i1 + i2
。 -
c = false
:o = 42
。
2. activate ... last
语法:
(activate op every c last e)
作用:
-
当 c 为 true 时,执行操作符 op。
-
当 c 为 false 时:
-
首周期:返回初始表达式 e 的值。
-
后续周期:返回上一次激活操作整个高阶表达式的结果(保持历史值)。
-
示例:
node activateLast (c: bool; i1: int32; i2: int32)
returns (o: int32)
{
var
l1 : int32 default = 42;
let
l1 = 0 pre l1 + 1;
o = (activate add every c last l1) (i1, i2);
}
执行逻辑:
-
c = true
:o = i1 + i2
。 -
c = false
:-
首周期:o = l1 = 42。
-
后续周期:o 保留上一次整个 restart 表达式的结果。
-
二、状态重置操作符 restart
语法:
(restart op every c)
作用:
-
当布尔条件 c 为 true 时,将操作符 op 重置到初始状态。
-
适用于需要周期性重置内部状态的操作(如计数器)。
示例:
node restartTest (c: bool)
returns (o: int32)
{
let o = (restart subOp4Restart every c) ();
}
node subOp4Restart ()
returns (o: int32)
{
let o = (0 pre o) + 1; // 初始值 0,每次执行自增 1
}
执行逻辑:
-
c = true:重置 subOp4Restart,o 重新从 1 开始计数。
-
c = false:subOp4Restart 正常执行,o 持续递增(如 1→2→3…)。
三、操作符对比
操作符 | 核心行为 | 典型场景 |
---|---|---|
activate ... default | 条件不满足时返回固定默认值 | 条件分支数据替换 |
activate ... last | 条件不满足时保留历史值 | 状态保持(如传感器数据续用) |
restart | 重置操作符到初始状态 | 周期性计数器清零 |
四、使用场景建议
- 动态数据处理
使用 activate … default 实现条件选择输入源,如传感器故障时切换至默认值。
- 状态持久化
使用 activate … last 在条件中断时维持最后一次有效结果,避免数据丢失。
- 周期性重置
使用 restart 控制计数器的周期性重置,如每日零时重置累计流量。