Modelica中Stream变量

问题提出

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;
  1. 流动过程假设无体积和能量的储存,管子可以看成等焓过程
  2. 将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

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值