"when sample()" 语句中的变量自动重置为零
Variable automatically resets to zero in the "when sample()" statement
以下 Modelica 代码将变量 'bb' 设置为 123 后重置为 0。谁能解释为什么?我正在使用 OpenModelica v1.13.2.
model test2
import Modelica.Utilities.Streams.print;
Real b(start=0, fixed=true);
Real bb(start=0, fixed=true);
Integer c(start=0,fixed=true);
algorithm
when sample(0,0.1) then
c := pre(c) + 1;
if c == 1 then
b := 12.3;
elseif c == 2 then
bb := 123;
end if;
print(String(time)+", "+String(b)+", "+String(bb));
end when;
end test2;
模拟打印:
0, 12.3, 0
0, 12.3, 123
0, 12.3, 0
...(repeats)
还有剧情截图:
根据 Modelica 3.4 规范,结果不正确,bb 不应设置为零:
算法开始时bb
应设置为pre(bb)
即123;根据“11.1.2 在模型中执行算法”https://specification.modelica.org/master/Ch11.html#execution-of-an-algorithm-in-a-model
请注意,等式中 when 的语义给出了相似的结果,但方式不同,在这种情况下,特定的 when-clause 被隐式映射到 if-then-else,其中 else-branch 将设置 bb=pre(bb)
根据“8.3.5.1”部分 - https://specification.modelica.org/master/Ch8.html#defining-when-equations-by-if-expressions-in-equality-equations
以下 Modelica 代码将变量 'bb' 设置为 123 后重置为 0。谁能解释为什么?我正在使用 OpenModelica v1.13.2.
model test2
import Modelica.Utilities.Streams.print;
Real b(start=0, fixed=true);
Real bb(start=0, fixed=true);
Integer c(start=0,fixed=true);
algorithm
when sample(0,0.1) then
c := pre(c) + 1;
if c == 1 then
b := 12.3;
elseif c == 2 then
bb := 123;
end if;
print(String(time)+", "+String(b)+", "+String(bb));
end when;
end test2;
模拟打印:
0, 12.3, 0
0, 12.3, 123
0, 12.3, 0
...(repeats)
还有剧情截图:
根据 Modelica 3.4 规范,结果不正确,bb 不应设置为零:
算法开始时bb
应设置为pre(bb)
即123;根据“11.1.2 在模型中执行算法”https://specification.modelica.org/master/Ch11.html#execution-of-an-algorithm-in-a-model
请注意,等式中 when 的语义给出了相似的结果,但方式不同,在这种情况下,特定的 when-clause 被隐式映射到 if-then-else,其中 else-branch 将设置 bb=pre(bb)
根据“8.3.5.1”部分 - https://specification.modelica.org/master/Ch8.html#defining-when-equations-by-if-expressions-in-equality-equations