Эта проблема, как правило, связана с тем, что уравнения в предложении when влияют на условный оператор, который их запускает.
В Modelica нужно понимать, что решатель будет оценивать уравнения с использованием «кандидата»Решения "как часть процесса моделирования.Это не обязательно решение, которое он в конечном итоге выберет, но, тем не менее, необходимо оценить их по мере приближения к возможному решению.
Как это связано?Ну, в вашем случае я вижу, что вы меняете значение переменной "плавления".Но если это значение затем влияет на температуру среды (что вызвало изменение значения «плавления»), то инструмент обнаружит несогласованность в системе уравнений.Инструмент может быть в состоянии выполнить итерацию, чтобы найти согласованное решение-кандидат, но Димола просто «пробивает» и говорит, что не поддерживает такие ситуации.
Теперь важно понять, что в основном это обычновсе не имеет значения .Зачем?Потому что по большей части пользователь действительно не хочет семантики по умолчанию предложений когда в таких случаях.Большинство пользователей хотят рассматривать условие в предложении when как «причину», а уравнения внутри предложения when - как «следствие».В этом смысле они последовательны, и эффект не должен обернуться и повлиять на причину (хотя Белые Полосы написали отличную песню о таких ситуациях ;-)).
Общая схема здесь состоит в том, чтобы изолировать условие и затем добавить оператор «pre» вокруг него в предложении when.Если исходная модель выглядела следующим образом:
model Test
...
equation
when x>12.5 then
// equations involving y
end when;
// equations coupling x to y
end Test;
Вам просто нужно преобразовать модель в нечто вроде этого:
model Test2
...
Boolean cond;
equation
cond = x>12.5;
when pre(cond) then
// equations involving y
end when;
// equations coupling x to y
end Test;
Здесь важно то, что уравнения, включающие только y, приходят после условие верно.В данном случае «pre» в основном говорит, что если в текущее время минус несколько эпсилон, значение условия было true, тогда (в ответ) срабатывают уравнения в предложении when.
Такие ситуации могут привести к условию, называемому «дребезжание», когда значение условия меняется на каждый «эпсилон» прошедшего времени, но это означает, что проблема не очень хорошо поставлена.
Я надеюсь, что это делаеткакой-то смысл.Я признаю, что в сложных случаях может быть трудно точно определить, где существуют алгебраические циклы (хотя Димола пытается дать вам некоторую диагностику).Кроме того, в некоторых случаях вам требуется поведение Modelica по умолчанию, поэтому вы не всегда хотите добавлять необязательные пре-квалификаторы.
Дайте мне знать, если у вас есть какие-либо вопросы по этому объяснению.