Как я могу сделать строку исполняемой? - PullRequest
0 голосов
/ 01 июля 2011

Я пытаюсь выполнить строку в Modelica.Эта строка будет сохранена в переменной, чтобы иметь возможность изменить ее, когда мне нужно.

function Test

input String inComp="resistor.R:=2";
output String outComp;


algorithm 


  outComp:=inComp;


end Test;

Не могли бы вы


Я использую Dymola.

Что мне нужно сделать, это следующее.

-Читать имена компонентов из текстового файла (или вводить их при выполнении функции) -Затем изменить параметры этих компонентов.Этот код является примером:

function Test

input String inComp="resistor";  //Entered by the user, or read from a text file
output Real result;

algorithm 

  inComp.R :=2 ;  /*This is incorrect since it wouldn't understand that 
                    I want to enter : resistor.R := 2;  */

  result := inComp.R ; //In order to view the result

end Test;

Ответы [ 2 ]

6 голосов
/ 04 июля 2011

То, что вы пытаетесь сделать, в Modelica обычно невозможно. Может случиться так, что некоторые инструменты имеют «отражающий API», который позволяет это (или, возможно, встроенную функцию, которая принимает командную строку и выполняет ее), но, безусловно, не существует универсального API, который бы работал между инструментами.

Если вы хотите запустить кучу симуляций в Dymola с разными значениями параметров, я могу предложить, по крайней мере, три разных варианта.

  • Используйте интерфейс DDE для отправки команд Dymola. Таким образом, вы можете сформулировать значения параметров «как-то» (внешне из Dymola), а затем просто запросить Dymola для запуска симуляции. Я не уверен, насколько богат интерфейс DDE, поэтому я не уверен, будет ли он делать то, что вам нужно (например, получать результаты).
  • Написать файл скрипта. Это немного отличается от написания функции, но почти такой же по синтаксису. Например, чтобы запустить пример «CoupledClutches» с несколькими различными значениями инерции, вы можете сделать это (в окне команд):
    for j in {1.0, 1.1, 1.2, 1.5, 1.8} loop
      J1.J := j;
      simulateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches",
                    resultFile="CoupledClutches_"+String(j));
    end for;
  • Используйте функцию (как и вы), но вызывайте simulateModel с модификаторами, например,
    function RunLoop
    algorithm
      for j in {1.0, 1.1, 1.2, 1.5, 1.8} loop
        simulateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches(J1(J="+String(j)+"))",
                    resultFile="CoupledClutches_"+String(j));
      end for;
    end RunLoop;
  • Используйте встроенные функции simulateExtendedModel и simulateMultiExtendedModel, которые на самом деле выполняют те же функции, что и выше, но более понятным способом (введите document("simulateExtendedModel") и document("simulateMultiExtendedModel") в командном окне Dymola, чтобы получить больше информации об этих ).

ОК, это должно дать вам начало. Если по какой-либо причине ни один из них не работает, просто обновите вопрос с учетом дополнительных требований, которые у вас есть.

0 голосов
/ 21 июля 2011

Другой вариант использования Perl и т. Д. Для динамического написания и выполнения какого-либо скрипта. Например, Text::Template может использоваться как шаблонизатор. Я делаю это для LaTeX регулярно.

...