Modelica Симуляция прерывается, если изменяется условие - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь выполнить простой код на modelica, используя:der (T) = - T + 50)?

А как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

То, что происходит в вашей модели, называется болтовня .Это означает, что происходят очень частые события.

В конкретном случае это вызвано условием T <73 в сочетании с определениями производных.Позвольте мне объяснить, что происходит с предоставленной вами моделью: </p>

  1. Температура поднимается до 73
  2. Затем температура начинает падать, потому что условие в выражении ifповороты падают
  3. Это вызывает немедленное изменение оператора if в true, вызывая повышение температуры
  4. Это приводит к тому, что оператор if снова изменяется в false, вызывая падение температуры
  5. goto 3.

Это приводит к изменению условия T <73 с очень высокой частотой, что, в свою очередь, создает много событий, которые должны обрабатываться решателем.Это делает прогресс во времени очень небольшим (то, что вы называете «симуляция останавливается»). </p>

Есть несколько способов решить эту проблему.Одним из них является добавление гистерезиса к модели.Я сделал это в коде ниже.Для описания гистерезисной части я использовал код из Modelica.Blocks.Logical.Hysteresis.Это изменит логическую переменную upperLimit (которая заменяет T<73), только если температура станет выше T_high и ниже T_low.Я выбрал это решение, так как оно кажется разумным для термостата.

model thermostat1
  parameter Real T0=10;

  parameter Real T_High=74;
  parameter Real T_Low=72;

  Boolean upperLimit "Output of hysteresis block";
  Real T(start=T0);

equation 
  upperLimit =not pre(upperLimit) and T > T_High or pre(upperLimit) and T >= T_Low;

  if upperLimit then
    der(T)=-T+50;
  else
    der(T)=-T+80;
  end if;

end thermostat1;

Результат моделирования выглядит следующим образом: Result from the above code, computed by Dymola

Более общая информация может бытьнапример, в http://book.xogeny.com/behavior/discrete/decay/

...