Modelica中Stream变量

本文深入探讨了Modelica中Stream变量及其操作符的实际应用,通过具体实例如混合设备、等焓流动、等熵流动、温度传感器和无限大储罐,详细解释了如何处理热流质量和能量的双向流动及连接点平衡问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题提出

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

### Modelica变量定义及其使用 在Modelica中,变量的定义遵循严格的语法结构以确保模型的一致性和可读性。对于连续实数值类型的变量`x`,可以通过如下方式声明: ```modelica Real x; ``` 这表明`x`是一个采用默认设置的实数类型变量[^1]。 #### 定义带有初始值的参数 为了增强模型灵活性并简化外部配置过程,可以利用`parameter`关键字来设定内部参数`a`作为变量`x`的初始化依据。具体做法如下所示: ```modelica parameter Real a = 0; ``` 此行代码不仅设定了`a`为实数类型且赋予初值零,还使得该参数能够在模型之外被便捷调整,从而提升整体设计的适应范围和易用程度。 #### 创建派生类型 除了基本的数据类型外,Modelica支持创建更具体的派生类型用于表示特定物理量。例如温度这一概念就可以通过下面的方式精确表达: ```modelica type Temperature = Real(unit="K", min=0); ``` 这里引入的新类型`Temperature`基于标准实数类型构建而成,并附加了单位(`unit`)及下限(`min`)两个重要特性。这样做有助于减少冗余的同时增加程序逻辑上的清晰度[^2]。 当涉及到多个相同性质但不同名称的变量时——比如环境温度(T_inf)、物体表面温度(T),以及起始状态下的绝对温标值(T0)——可以直接应用之前建立好的`Temperature`来进行统一管理而不必每次都单独指定属性信息: ```modelica Temperature T, T_inf, T0; ``` 这种模式既提高了编码效率又增强了维护便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值