小编Sim*_*ner的帖子

如何通过同步模型中的函数初始化记录类型(modelica)

我写了一个函数,返回值为记录类型。通常我会使用这个函数通过一个初始方程来初始化一个记录类型的实例。但是因为我想在时钟模型中使用这个函数,所以不可能有初始方程。

对我来说,这似乎是使用属性 start 初始化变量的唯一方法。不幸的是,记录没有这个属性,只有它的组成部分。

这是一个简单的例子,展示了我想要做什么:

model RecordInitializeTest
  record simpleRecord
    Integer arg1;
    Integer arg2;
  end simpleRecord;

  function initFunc
    output simpleRecord sR;
  algorithm 
    sR.arg1 := 1;
    sR.arg2 := 2;
  end initFunc;

  model InitializeTest
    input Boolean u(start=false);
    output simpleRecord sR1;
  equation 
    if u and not previous(u) then
      sR1 =initFunc();
    else
      sR1 = previous(sR1);
    end if;
  end InitializeTest;

  InitializeTest iT;
equation 
  iT.u = sample(time > 0.5,Clock(0.1));
end RecordInitializeTest;
Run Code Online (Sandbox Code Playgroud)

这个模型在 dymola 中工作,但当然有警告,因为 iT.sR1.agr1 和 iT.sR1.arg2 没有起始值,但是 previous() 的参数。Conceputally 我想使用

output simpleRecord sR1(start=initFunc());

有没有人知道如何以方便的方式初始化 sR1 而无需像这样的分配 …

modelica dymola

5
推荐指数
1
解决办法
56
查看次数

标签 统计

dymola ×1

modelica ×1