計算している状態変数の前のステップからの差分を取りたい場合、pre関数が使えるがこれはder(x)など離散的な変数にのみ使える。
一例を示す。
model countup
Real counter(start=0);
Boolean flag;
Real timeDiff;
Real checkTime=0.1;
Real eps=0.001;
equation
timeDiff = time - checkTime*floor(time/checkTime);
flag = timeDiff < eps;
when flag then
counter = pre(counter) + 1;
end when;
end countup;
ここではcheckTime(0.1)ごとにcounter変数を増加させるコードを書いている。
この場合は今の時間がcheckTimeを通過したかどうかをepsで幅を持たせて判定している。
式の評価自体を0.1秒毎に行うにはsampleが使える。
model countup
Real counter(start=0);
Real checkTime=0.1;
equation
when sample(checkTime, checkTime) then
counter = pre(counter) + 1;
end when;
end countup;
この時どちらの例もwhenで定義している条件式は離散的であり連続的でないものとなっている。