2012-07-03 3 views
1

의 매개 변수 하나만 변경하면 전달할 때 다른 변수에 대한 모든 등식을 명시 적으로 작성하지 않고도 변수 집합 중 하나의 변수 만 수정하고 싶습니다.Modelica - 복잡한 커넥터가있는 complexe 유형 커넥터

연결 문과 하나의 특정 변수를 덮어 쓰는 것이 이상적입니다.

class FluidClass 
     String name(start="name")"name"; 
     Real fl(start=1000)"flow [l/h]"; 
     Real p(start=1)"pressure [bar]"; 
     Real T(start=25)"temperature [degC]"; 
     Real DS(start=80)"dry substance [%]"; 
     Real rho(start=100)"viscosity [mPas]"; 
    end FluidClass; 

    connector fl "flow" 
     extends FluidClass; 
    end fl; 

     model setParam "set parameter" 
     fl fli annotation(Placement(
      transformation(extent={{-5,-5},{5,5}}), 
      iconTransformation(extent={{-105,-5},{-95,5}}))); 
     fl flo "flow output" annotation(Placement(
      transformation(extent={{-50,0},{-40,10}}), 
      iconTransformation(extent={{95,-5},{105,5}}))); 
     input Modelica.Blocks.Interfaces.RealInput u "set value"; 
     parameter EnumType1 var "variable to change"; 
     type EnumType1 = enumeration( 
      fl "Flow rate", 
      p "Pressure", 
      T "Temperature", 
      DS "Dry substance", 
      rho "Viscosity"); 
     equation 
      // enter your equations here 
      if var ==1 then //flow 
      flo.name=fli.name; 
      flo.fl=u; 
      flo.p=fli.p; 
      flo.T=fli.T; 
      flo.DS=fli.DS; 
      flo.rho=fli.rho; 
      end if; 

      if var ==2 then //pressure 
      flo.name=fli.name; 
      flo.fl=fli.fl; 
      flo.p=u; 
      flo.T=fli.T; 
      flo.DS=fli.DS; 
      flo.rho=fli.rho; 
      end if; 

      if var ==3 then //temperature 
      flo.name=fli.name; 
      flo.fl=fli.fl; 
      flo.p=fli.p; 
      flo.T=u; 
      flo.DS=fli.DS; 
      flo.rho=fli.rho; 
      end if; 

      if var ==4 then //DS 
      flo.name=fli.name; 
      flo.fl=fli.fl; 
      flo.p=fli.p; 
      flo.T=fli.T; 
      flo.DS=u; 
      flo.rho=fli.rho; 
      end if; 

      if var ==5 then //viscosity 
      flo.name=fli.name; 
      flo.fl=fli.fl; 
      flo.p=fli.p; 
      flo.T=fli.T; 
      flo.DS=fli.DS; 
      flo.rho=u; 
      end if; 
    end setParam; 

매우 도움을 주셔서 감사합니다.

답변

2

불행히도,이 모델을 만드는 것은 매우 모범적 인 모델이 아닙니다. 이 모델에서 진행되는 몇 가지 일이있는 것 같습니다. 먼저이 "name"매개 변수를 통해 유체 유형을 지정하려고 시도하는 것 같습니다. 또한 이러한 커넥터를 통해 정보를 전달하지만 다른 유형의 정보를 전파하고 있습니다. 압력, 온도 및 질량 분율 (p, T, DS)과 같은 것은 실제로 변수를 가로 지르며 유체 흐름 (fl)은 변수를 통과하고 밀도 (rho)는 유체 속성이어야합니다.

이 모든 사례를 처리 할 수있는 기능이 Modelica에 있지만 사용자의 경우에는 사용하지 않습니다. 또한 유동 경로에 충분한 정보가 없기 때문에 사용하는 접근 방식은 실제로 잘 확장되지 않습니다 (유체에 의해 대류되는 에너지를 추적하거나 유량이 얼마나 건조한지를 구별하지 못합니다 (건조한 상태) 공기와 수증기)?

유체 예를 실제로 살펴보아야합니다 (예 : Modelica.Fluid 라이브러리 또는 내 책의 예 : "Modelica로 물리적 모델링 소개"). 이러한 설계 변경을 고려하여 귀하의 질문은 논박의 여지가 될 것입니다 (따라서 제 답변이 아닌 경우).

여기에 답변이 없으므로 유감이지만 정확한 정보를 제공하여 올바른 방향으로 안내해 주시기 바랍니다. 그렇지 않은 경우 언제든지 다른 질문을하거나 의견을 추가 할 수 있도록 노력하겠습니다. 명확 해.

+0

안녕하세요. 마이클, 귀하의 저의 답변을 많이 보았고 그물을 통해 작품 몇 개를 읽었을 때 기쁜 답입니다. – Geronimo

+0

사실, 저는 유동적 인 서술서로 약간 놀았지만, 단지 압도 당했고 게다가 그들의 적절한 사용을 이해하지 못했거나 실행시키지 못했습니다. 내가하고있는 일은 동료들로부터 탁월한 성과를 얻으려고 노력하고 있으며, OO 접근 방식과 동적 구성 요소를 통해 더 적절하다고 판단한 도구를 사용하여 모델을 면밀히 검사 할 수 있습니다. – Geronimo

+1

나는 Modelica와 함께 그것을 발견하고 주제에 "더 매끄러운"소개를하기를 희망하면서 너무 정확한 사실로 과부하하지 않고 내 자신의 서지를 구축하려고했습니다. 우리가 지금하고있는 일에 첫 발걸음을 내딛어서 지금 그것을 극도로 제한하십시오. "주류"소프트웨어만큼 도움이되지 않으므로 학습 곡선이 다른 소프트웨어 도구보다 훨씬 편합니다. 그러나 다시 한 번 감사의 말씀을 전하고 귀하의 조언을 따르도록하겠습니다. – Geronimo

관련 문제