版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangguangdblu/article/details/83651820
问题提出
Connector中原有的across变量和through变量不能够满足两种情况:
1.热流中的质量和能量对流中带来的双向流动
2.双向流动带来的连接点平衡问题
这两种情况中变量的值是由上游确定的,取决于流动方向
Stream变量及其操作符
定义Connnector中的Stream变量
connector FluidPort
SI = Modelica.SIunits;
SI.AbsolutePressure p "Pressure in connection";
flow SI.MassFlowRate m_flow "Mass flow rate";
stream SI.SpecificEnthalpy h_outflow "h if m_flow <= 0";
stream SI.MassFraction X_outflow[nX] "X if m_flow <= 0";
end FluidPort;
使用Stream操作符
Stream变量的操作符有两种,其功能如下:
Stream变量h的值 | |
---|---|
h | 从component流向连接点(m_flow<=0) |
inStream(h) | 从连接点流向component(m_flow>0) |
actualStream(h) | 双向流动 (= if m_flow > 0 then instream(h) else h),只有确实需要的时候才能用 |
actualStream() 主要有两种用法
der(U) = c.m_flow*actualStream(c.h_outflow); // (1)能量平衡
h_port = actualStream(port.h); // (2)监测接口的焓值
示例1 混合
model MixingVolume "混合设备"
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;
FluidPort port_a, port_b;
parameter Modelica.SIunits.Volume V "设备的容积";
Modelica.SIunits.Mass m "设备的质量";
Modelica.SIunits.Energy U "设备的内能";
Medium.BaseProperties medium(preferredMediumStates=true);
equation
// 定义接口变量
port_a.p = medium.p;
port_b.p = medium.p;
port_a.h_outflow = medium.h;
port_b.h_outflow = medium.h;
// 质量守恒
m = V*medium.d;
der(m) = port_a.m_flow + port_b.m_flow;
// 能量守恒
U = m*medium.u;
der(U) = port_a.m_flow*actualStream(port_a.h_outflow) +
port_b.m_flow*actualStream(port_b.h_outflow);
end MixingVolume;
混合过程有体积和能量的储存
示例2 等焓流动
model IsenthalpicFlow "没有能量储存或损失, 例如压降模型、阀门模型.."
replaceable package Medium=Modelica.Media.Interfaces.PartialMedium;
FluidPort port_a, port_b:
Medium.ThermodynamicState port_a_state_inflow "a的状态";
Medium.ThermodynamicState port_b_state_inflow "b的状态";
equation
// Medium states for inflowing fluid
port_a_state_inflow = Medium.setState_phX(port_a.p,
inStream(port_a.h_outflow));
port_b_state_inflow = Medium.setState_phX(port_b.p,
inStream(port_b.h_outflow));
// 质量守恒
0 = port_a.m_flow + port_b.m_flow;
// 对等焓的描述
port_a.h_outflow = inStream(port_b.h_outflow);
port_b.h_outflow = inStream(port_a.h_outflow);
// 动量守恒
port_a.m_flow = f(port_a.p, port_b.p,
Medium.density(port_a_state_inflow),
Medium.density(port_b_state_inflow));
end IsenthalpicFlow;
- 流动过程假设无体积和能量的储存,管子可以看成等焓过程
- 将inStream()看作上游就比较容易理解代码,流动可以从a到b,也可以从b到a,另外动量守恒没看懂
示例3 等熵流动
model IsenthalpicFlow "没有能量储存, 例如泵、热损失..."
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;
FluidPort port_a, port_b:
Medium.ThermodynamicState port_a_state_inflow "a状态";
Medium.ThermodynamicState port_b_state_inflow "b状态";
Modelica.SIunit.Power P_ext "输入的功率"
equation
// 注入流体的状态
port_a_state_inflow = Medium.setState_phX(port_a.p, inStream(port_a.h_outflow));
port_b_state_inflow = Medium.setState_phX(port_b.p, inStream(port_b.h_outflow));
// 质量平衡
0 = port_a.m_flow + port_b.m_flow;
// 等熵状态
port_a.h_outflow = Medium.isentropicEnthalpy(port_a.p,inStream(port_b.h_outflow));
port_b.h_outflow = Medium.isentropicEnthalpy(port_b.p,inStream(port_a.h_outflow));
// 能量平衡
0 = P_ext + port_a.m_flow*actualStream(port_a.h_outflow)
+ port_b.m_flow*actualStream(port_b.h_outflow);
// 动量平衡
port_a.m_flow = f(port_a.p, port_b.p, Medium.density(port_a_state_inflow),
Medium.density(port_b_state_inflow));
end IsenthalpicFlow;
泵可以看做等熵过程(绝热),消耗的功率等于焓增
这个模型的等熵平衡方程有点问题
示例4 温度传感器
model TemperatureSensor
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;
FluidPort port(m_flow(min=0)); // 意味着没有流出传感器的,即传感器不会对被测流体产生影响
Modelica.Blocks.Interfaces.RealOutput T "实际输出";
equation
T = Medium.temperature(Medium.setState_phX(port.p, inStream(port.h_outflow));
port.m_flow = 0;
port.h_outflow = Medium.specificEnthalpy(Medium.setState_pTX(
Medium.reference_p, Medium.reference_T));
// 由于m_flow(min=0),所以这个值不会用到,但会展示在画图窗口中
end TemperatureSensor;
示例 5 无限大储罐
model FixedBoundary_pT "有固定压力和温度的无限大边界"
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium;
FluidPort port;
parameter Medium.AbsolutePressure p "边界压力";
parameter Medium.Temperature T "边界温度";
equation
port.p = p;
port.h_outflow = Medium.specificEnthalpy(Medium.setState_pTX(p, T));
end FixedBoundary_pT;
参考资料
[1]https://build.openmodelica.org/Documentation/ModelicaReference.'stream'.html
[2]https://build.openmodelica.org/Documentation/Modelica 3.2.2/Resources/Documentation/Fluid/Stream-Connectors-Overview-Rationale.pdf