Инициализация переменной в 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
и посмотрим, что получится. Сообщите, если это не решит проблему.
Удачи.