2012-07-03 3 views
1

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

Идеал был бы операцией connect и переписыванием только одной конкретной переменной.

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

К сожалению, это не очень Modelica-ish способ создания таких моделей. Кажется, в этой модели происходит несколько вещей. Во-первых, кажется, что вы пытаетесь указать тип жидкости через этот параметр «имя». Вы также распространяете информацию через эти разъемы, но вы распространяете различные типы информации. Такие вещи, как давление, температура и массовые фракции (p, T, DS), действительно должны быть перекрестными, такие вещи, как поток жидкости (fl), должны быть через переменные, а плотность (rho) должна быть жидкой.

В Modelica есть средства для обработки всех этих случаев, но вы не используете их в своем примере. Кроме того, подход, который вы используете, на самом деле не очень хорошо масштабируется, потому что у вас недостаточно информации на вашем пути потока (вы не отслеживаете энергию, которую конвектирует жидкость, и не различайте, насколько ваш поток «сух» (сухой воздух против водяного пара?)

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

Прошу прощения за отсутствие ответа здесь, но надеюсь, что вы найдете информацию достаточно конструктивной, чтобы указать вам в правильном направлении. Если нет, не стесняйтесь задавать другие вопросы или добавлять комментарии, и я постараюсь сделать это яснее.

+0

Привет, Майкл, я рад, что вы ответили, что ответили на мой вопрос, поскольку я видел много ваших вкладов и прочитал некоторые ваши работы по сети. – Geronimo

+0

На самом деле, я немного поиграл с жидкостными библиотек, но был просто перегружен и, кроме того, либо не понял их правильного использования, либо не заставил их работать. То, что я делаю, пытается убрать моих коллег от Excel, с помощью инструмента, который я нашел более подходящим с его подходом OO и динамическим компонентом, что позволяет более глубоко обследовать наши модели. – Geronimo

+1

Я надеюсь, что, найдя его с Modelica и для того, чтобы получить «более плавное» введение в тему, я попытался создать свою «собственную» библиотеку, не перегружая ее слишком точными фактами. Действительно, чтобы ограничить это в первый шаг к тому, что мы делаем в excel прямо сейчас. К сожалению, не так много справки, как для «основного» программного обеспечения, так что кривая обучения намного более плоская, чем с другими программными инструментами. Однако, еще раз большое спасибо, и я постараюсь следовать вашему совету. – Geronimo

 Смежные вопросы

  • Нет связанных вопросов^_^