Modelica:仅一次打印一次

时间:2018-10-27 09:25:28

标签: initialization modelica dymola utilities

我在组件中包含以下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。 有人可以澄清发生了什么吗?文件存在性检查似乎不可靠!?

2 个答案:

答案 0 :(得分:1)

when initial()与事件完全无关。它被转换成一个初始方程,因此可以执行多次。当只执行一次方程式时,外部对象要可靠得多。

答案 1 :(得分:0)

根据先前的答案和评论,以下内容似乎可行:

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;