2011-07-01 7 views
0

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; 
+1

Modelica에는 다른 여러 언어에서 지원되는 eval() 기능과 동일한 기능이 있습니까? 그렇다면 그것을 사용할 수 있습니다. 그러나 피할 수 있으면하지 마십시오. – GordonM

답변

6

대체로 Modelica에서는 수행 할 수 없습니다. 일부 도구에는 이것을 허용하는 "반사 API"가있을 수 있습니다 (또는 명령 문자열을 사용하여 실행하는 내장 함수 일 수도 있지만) 도구 전반에서 작동하는 보편적 인 API는 없습니다.

다른 매개 변수 값으로 Dymola에서 일련의 시뮬레이션을 실행하려면 최소한 3 가지 다른 진행 방법을 제안 할 수 있습니다.

  • Dymola에 명령을 보내려면 DDE 인터페이스를 사용하십시오. 이렇게하면 매개 변수 값을 "어떻게 든"(외부 적으로 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; 
  • 사용하여 내장 함수 simulateExtendedModelsimulateMultiExtendedModel있는 실제로 이렇게 거의 같은 이들에 대한 추가 정보를 얻을 수있는 Dymola 명령 창에서 (유형 document("simulateExtendedModel")document("simulateMultiExtendedModel") 이상하지만 깨끗한 방법으로).

확인을 해주셔야합니다. 어떤 이유에서든지 작동하지 않는 경우, 추가 요구 사항을 질문에 추가하십시오.

0

Perl 등을 사용하여 일부 스크립트를 동적으로 작성하고 실행하는 다른 옵션. 예를 들어 Text::Template을 템플릿 엔진으로 사용할 수 있습니다. LaTeX을 위해 정기적으로이 작업을 수행합니다.

관련 문제