Modelica - замораживание определенного значения времени во время симуляции - PullRequest
0 голосов
/ 23 декабря 2018

У меня проблема, которая может быть легко решена в причинной среде, такой как Фортран, но оказалась трудной в Modelica, учитывая мои ограниченные знания

Рассмотрим объем с входом и выходом.Массовый расход на входе указан, а массовый расход на выходе рассчитывается на основе давления в объеме.Когда давление в объеме превышает заданное значение, площадь выхода начинает линейно увеличиваться от своего начального значения до максимального значения и впоследствии остается неизменной.Другими словами:

A = min( const * (t - t*) + A_0, A_max)
if p > p_set
where t* = the time at which pressure in the volume exceeds the set pressure.

Вопрос: есть функция для захвата t* во время симуляции?ИЛИ как модель может быть запрограммирована для этого?Я пробовал несколько способов, но модели никогда не закрываются.Мысли приветствуются и ценятся!

Счастливых праздников / Нового года!

Мухаммед

1 Ответ

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

Вы можете найти образец и держать пример в моей книге полезным.Он использует выборку, основанную на времени, тогда как вы, вероятно, хотите, чтобы она основывалась на значении вашего давления.Но принцип тот же.Это позволит вам записать время, когда произошло ваше событие.

При рассмотрении вашего конкретного случая следующий (непроверенный) код, вероятно, довольно близок к тому, что вы хотите:

  ...
  Modelica.SIunits.Time t_star=-1;
equation
  when p >= p_set then
    t_star = time;
  end when;
  A = if t_star<0 then A_max else min(const*(t - t_star) + A_0, A_max);
...