3

Modelica で分散熱流体ボリュームの非常に単純なモデルを構築しようとしていますが、ストリーム オペレーターを使用して正しく実装するのに苦労しています。このボリュームは媒体として DryAirNasa を使用しており、大容量ストレージ、圧力損失、およびエネルギー ストレージを持たないようにしたいと考えています (Modelica.Fluid.Pipes.StaticPipe モデルによく似ています)。ただし、熱伝達の相互作用ができるように、エネルギーバランスを明示的に実行したいと思います。また、このモデルで質量流量を定義するのではなく、パイプの端に取り付けられた境界の 1 つ (Modelica.Fluid.Sources.MassFlowSource_h など) で定義したいと思います。

このようなモデルのテスト実装を作成しましたが、Dymola によると、このモデルには方程式が 1 つ欠けているようです。このモデルを修正して正しいものにする方法についての洞察をいただければ幸いです。方程式を追加すると

port_a.h_outflow = Medium.specificEnthalpy(state_a)

方程式のセクションでは、モデルには同じ数の方程式と未知数がありますが、そのような方程式を追加する正当な理由はありません。

 model AirFlowTemp

  // Objective: create a component that has no pressure drop, no mass storage,
   and no energy storage, but that has a heat input.

  import SI=Modelica.SIunits;

  final replaceable package Medium=Modelica.Media.Air.DryAirNasa;

  AirFlow.AirFlowPort port_a(redeclare package Medium
      = Medium);
  AirFlow.AirFlowPort port_b(redeclare package Medium
      = Medium);
  Interfaces.HeatPort heatPort;

  Medium.EnthalpyFlowRate[2] H_flow "enthalpy flow";
  SI.HeatFlowRate Q_flow "heat flow rate";

  Medium.Temperature T_mean;
  Medium.ThermodynamicState state_a;
  Medium.ThermodynamicState state_b;

equation 
  // no pressure drop across the component.
  port_a.p = port_b.p;

  // Assume that there is no mass storage in the volume
  0 = port_a.m_flow + port_b.m_flow;

  // Energy balance
  H_flow[1] = semiLinear(port_a.m_flow, inStream(port_a.h_outflow), inStream(port_b.h_outflow));
  H_flow[2] = semiLinear(port_b.m_flow, inStream(port_b.h_outflow), inStream(port_a.h_outflow));
  0 = Q_flow + H_flow[1] + H_flow[2];

  state_a = Medium.setState_ph(port_a.p, inStream(port_a.h_outflow));
  state_b = Medium.setState_ph(port_b.p, inStream(port_b.h_outflow));

  T_mean = (Medium.temperature(state_a) +
            Medium.temperature(state_b))/2;

  heatPort.Q_flow = Q_flow;
  heatPort.T = T_mean;

end AirFlowTemp;

connector AirFlowPort

  replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;

  Medium.AbsolutePressure p;
  flow Medium.MassFlowRate m_flow;
  stream Medium.SpecificEnthalpy h_outflow;
  stream Medium.MassFraction Xi_outflow[Medium.nXi];

end AirFlowPort;


connector HeatPort
  extends Modelica.Thermal.HeatTransfer.Interfaces.HeatPort;
end HeatPort;
4

1 に答える 1

0

私は約4週間前に同じことをするのと同じ問題を抱えていました. これが inStream の適切な使用に近づくためのステップとして機能するかどうか試してください。

  1. Medium.EnthalpyFlowRate[2] H_flow "エンタルピー フロー" SI.HeatFlowRate Q_flow "熱流量" を削除します。Interfaces.HeatPort ヒートポート; SI.HeatFlowRate Q_flow "熱流量"; Medium.Temperature T_mean; T_mean = (Medium.temperature(state_a) + Medium.temperature(state_b))/2;

    heatPort.Q_flow = Q_flow; heatPort.T = T_mean; => heatPort なしでパイプをテストするだけ

  2. port_a.outflow*port_a.m_flow = inStream(port_b.outflow)*port_b.m_flow; を使用します。port_b.outflow*port_b.m_flow = inStream(port_a.outflow)*port_a.m_flow;

代わりに: H_flow[1] = semiLinear(port_a.m_flow, inStream(port_a.h_outflow), inStream(port_b.h_outflow)); H_flow[2] = semiLinear(port_b.m_flow, inStream(port_b.h_outflow), inStream(port_a.h_outflow)); 0 = Q_flow + H_flow[1] + H_flow[2];

  1. ヒートポートなしのテストを変更する

=>これは機能しますか?

よろしくウーヴェ

于 2013-08-15T14:04:03.473 に答える