Как написать скрипт для Wolfram SystemModeler для запуска нескольких симуляций?

Я хочу запустить около 100 симуляций с моей моделью, изменяющей два параметра f и TLoad, и отслеживать изменения фазных токов currentSensor.i[1] и т. д.

Теперь я застрял в документации на веб-сайте Wolfram, потому что нет четкого объяснения того, как использовать сценарии с SystemModeler. Я нашел, например, эту ссылку на сайте Wolfram с некоторым кодом, но без объяснения в какой командной строке я должен его использовать.

Я загрузил программу WolframScript и попытался открыть свою модель с помощью wolframscript -file SMPM_VoltageSource_Inverter.mo, но там написано ToExpression::sntx: Invalid syntax in or before ..., хотя моя модель имитируется совершенно нормально и без каких-либо ошибок в SimulationCenter.

Может кто-нибудь объяснить мне:

  • Можно ли писать сценарии?

Если да:

  • Как я могу смоделировать свою модель?
  • Как я могу выполнить развертку параметров f и TLoad? Это так, как описано в ссылке?
  • Можно ли экспортировать данные currentSensor.i[1] в виде csv-файла? И как?

Спасибо за любую помощь!


person Moebo    schedule 20.09.2019    source источник
comment
Кросспост размещен здесь.   -  person Rohit Namjoshi    schedule 22.09.2019


Ответы (1)


Я не знаю насчет вольфрама, извините, но для OpenModelica работает следующее:

// to load Model from file use
// loadFile("fileName.mo");

loadString("
model M
  parameter Real a = 1;
  Real x;
equation
  x = a * sin(time);
end M;
"); getErrorString();

buildModel(M); getErrorString();

for a in {1,2,3,4} loop
  str_a := String(a); getErrorString(); 

  system("./M -override a=" + str_a); getErrorString();
  // for windows use 
  //system("M.exe -override a=" + str_a); getErrorString();

  system("mv M_res.mat " + "M_" + str_a + ".mat");
end for;

Поместите это в файл с именем, например, model.mos и вызовите его из терминала или командной строки, в зависимости от вашей ОС, с omc model.mos, если у вас установлена ​​OpenModelica. это должно сгенерировать csv.

РЕДАКТИРОВАТЬ: я понял, что оригинал просто сохраняет последнее значение x, вам может понадобиться полный вывод. Поэтому я изменил файл .mos. Каждый другой результат будет сохранен в другом файле, если вы хотите изменить его на csv, вам просто нужно изменить сгенерированный xml.

person kabdelhak    schedule 24.09.2019
comment
Несвязанная мысль: почему вы должны ставить после большинства операторов в mos getErrorString()? Это кажется ужасно излишним. Мне любопытно, почему эти ошибки не появляются автоматически, например. возвращено или отправлено в stderr или как исключение/аналогичный механизм? - person Christoph; 02.10.2019
comment
Иногда вы не хотите, чтобы выдавались ошибки и предупреждения, потому что вы знаете, что они не имеют отношения к вашему делу и слишком многословны. Но, может быть, было бы лучше использовать вместо этого команду suppressErrorString(). - person kabdelhak; 03.10.2019
comment
Ясно спасибо. да, или настраиваемые уровни ведения журнала, например, например. на питоне... - person Christoph; 07.10.2019