Инициализация переменной в pre в Modelica

Я написал коды в Modelica, как показано ниже:

model TestIniitial
  extends Modelica.Icons.Example;
  parameter Integer nWri= 2;
  Real u[nWri](each start= 10, fixed=false);
  Real uPre[nWri];
  parameter Real _uStart[nWri] = fill(10, nWri);
  parameter Modelica.SIunits.Time startTime = 0;
  parameter Modelica.SIunits.Time samplePeriod = 1;
  Boolean sampleTrigger "True, if sample time instant";
initial equation 
  u[1] = 1;
  u[2] = 2;
equation 
   sampleTrigger = sample(startTime, samplePeriod);

  when sampleTrigger then
    for i in 1: nWri loop
      uPre[i] = pre(u[i]);
    end for;
  end when;

  for i in 1:nWri loop
    u[i] = (i+1)*time;
  end for;

end TestIniitial;

В основном я хочу инициализировать U перед симуляцией. Тем не менее, я получил ниже жалобы (инициализация U переопределена) от перевода:

The Modelica Language Specification 3.2.1 specifies that if a real variable, v,
is appearing in an expression as pre(v), but not assigned by a when equation,
then the equation v = pre(v) should be added to the initialization problem.

For this problem the following equations were added:
u[1] = pre(u[1]);
u[2] = pre(u[2]);

Я не могу понять жалобы, так как pre (v) был назначен, когда уравнение уже. Что я могу сделать, если я хочу инициализировать u в вышеуказанных кодах?

Благодарю.

1 ответ

Глядя на это, я предполагаю, что сообщение об ошибке пытается предоставить вам некоторую диагностику, но оно неверно относительно источника. Я подозреваю (опять же, я не знаю точно), что он видит тот факт, что pre(u) появляется в модели и что существует проблема инициализации и предполагает конкретную проблему.

Я думаю, что проблема связана с тем, что у вас есть fixed=true установлен на u, Я не вижу причин для этого, и я предполагаю, что это приведет к слишком многим ограничениям и для проблемы инициализации. Избавиться от fixed=true и посмотрим, что получится. Сообщите, если это не решит проблему.

Удачи.

Другие вопросы по тегам