Modelica:初始打印时只打印一次
Modelica: when initial print only once
我有以下 Modelica 代码,在一个系统模型中多次使用的组件中:
parameter fileName = "world.log"
equation
when initial() then
if not Modelica.Utilities.Files.exist(fileName) then
Streams.print("Hello World", fileName);
end if;
end when;
我希望在创建的文件中找到恰好一行代码,但通常会打印 5 行或更多行,但有时它似乎按预期工作。在 Windows 10 上使用 Dymola 2019。
有人可以澄清发生了什么吗?文件存在性检查似乎不可靠!?
when initial()
与事件完全无关。它被转换成一个初始方程,因此可以执行多次。当只执行一次方程时,外部对象更可靠。
根据之前的回答和评论,以下似乎可行:
parameter fileName = "world.log"
protected
Modelica.SIunits.Time startTime;
equation
when initial() then
startTime := time;
end when;
when time >= startTime then
if not Modelica.Utilities.Files.exist(fileName) then
Streams.print("Hello World", fileName);
end if;
end when;
我有以下 Modelica 代码,在一个系统模型中多次使用的组件中:
parameter fileName = "world.log"
equation
when initial() then
if not Modelica.Utilities.Files.exist(fileName) then
Streams.print("Hello World", fileName);
end if;
end when;
我希望在创建的文件中找到恰好一行代码,但通常会打印 5 行或更多行,但有时它似乎按预期工作。在 Windows 10 上使用 Dymola 2019。 有人可以澄清发生了什么吗?文件存在性检查似乎不可靠!?
when initial()
与事件完全无关。它被转换成一个初始方程,因此可以执行多次。当只执行一次方程时,外部对象更可靠。
根据之前的回答和评论,以下似乎可行:
parameter fileName = "world.log"
protected
Modelica.SIunits.Time startTime;
equation
when initial() then
startTime := time;
end when;
when time >= startTime then
if not Modelica.Utilities.Files.exist(fileName) then
Streams.print("Hello World", fileName);
end if;
end when;