Оценка переменных в определенное время в Modelica

У меня есть выбор переменных в моем моделировании Modelica (с использованием Dymola), который работает хорошо. Теперь я хочу представить поведение некоторых из этих переменных, которые пронумерованы (с индексами). Я не хочу строить график зависимости переменных от времени, а от их индекса. Я планирую использовать plotArray функция, но это не совсем то, что мне интересно в этом посте. Проблема в том, что все переменные равны нулю, когда я их вызываю, что действительно является их начальным значением, но я хочу получить их значение, когда установилось устойчивое состояние, скажем, когда time = 5000, Следовательно, мне нужно оценить переменные в это конкретное время.

Как мне оценить переменную в определенное время из моделирования или в конце моделирования по этому вопросу?

Изменить: После обширного поиска в Google, я пришел к функции под названием val(), который, кажется, делает то, что я хочу, но я не могу заставить его работать с моим программным обеспечением Dymola.

Редактировать 2: Мне удалось оценить мои переменные по желанию, но подход, который я использовал, был (на мой взгляд) за утомительным. Я извлек.mat-файл из симуляции в MATLAB, где мне в итоге удалось идентифицировать переменные по моему желанию, а затем нанести их на график в нужное время. Однако, что действительно удивило меня, так это явный хаос в отношении переменных в.mat-файле. На первый взгляд, было мало согласия между тем, как мои переменные упорядочены в модели Modelica и как они упорядочены в.mat-файле, и не было именования переменных, поэтому мне пришлось искать переменные исключительно на основе сравнения их значение с помощью симуляции Димолы. Я просто полностью ошибаюсь здесь, или есть какой-то более простой способ извлечь переменные из.mat-файла?

2 ответа

Может быть, я неправильно понимаю ваш вопрос, но я подозреваю, что здесь есть простой ответ. Похоже, у вас есть массив, и вы хотите заполнить этот массив значениями определенной переменной в определенное время, а затем построить массив. Так, например, скажем, у вас была переменная x и вы хотите записать время, которое x пересекли определенные пороги. Достаточно простой модели, подобной этой:

model RecordVariables
  Real x;
  Real times[10];
initial equation 
  x = 11;
equation 
  der(x) = -x;
  when x<=10.0 then
    times[1] = time;
  end when;
  when x<=9.0 then
     times[2] = time;
  end when;
  when x<=8.0 then
    times[3] = time;
  end when;
  when x<=7.0 then
     times[4] = time;
  end when;
  when x<=6.0 then
     times[5] = time;
  end when;
  when x<=5.0 then
     times[6] = time;
  end when;
  when x<=4.0 then
    times[7] = time;
  end when;
  when x<=3.0 then
     times[8] = time;
  end when;
  when x<=2.0 then
    times[9] = time;
  end when;
  when x<=1.0 then
     times[10] = time;
  end when;
end RecordVariables;

Конечно, выписывая все эти when пункты довольно утомительно. Таким образом, мы можем создать более компактную версию, например:

model RecordVariables2
  Real x;
  Real times[5];
  Integer i;
  Real next_level;
initial equation 
  next_level = 10.0;
  x = 11;
  i = 1;
algorithm 
  der(x) :=-x;
  when x<=pre(next_level) then
    times[i] :=time;
    if i<size(times,1) then
      i :=pre(i) + 1;
      next_level :=next_level - 1.0;
    end if;
  end when;
end RecordVariables2;

Несколько комментариев об этом подходе. Во-первых, обратите внимание на использование pre оператор. Это необходимо для различения значений переменных i а также next_level как до, так и после событий, генерируемых when пункт. Во-вторых, вы заметите if заявление в рамках when пункт, который предотвращает индекс i от того, чтобы стать достаточно большим, чтобы "переполнить" times буфер. Это позволяет вам установить times иметь любой размер, который вы хотите, и никогда не рискуйте таким переполнением. Обратите внимание, однако, что в этой модели вполне возможно сделать times настолько большой, что некоторые значения никогда не будут заполнены.

Надеюсь, это поможет.

Вы можете использовать DymBrowse.m для загрузки переменных из файла результатов в Matlab. Он должен быть доступен в папке \Program Files\Dymola xx\Mfiles\dymtools. Добавьте каталог \Mfiles... в ваши пути к Matlab.

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