这篇文章将讲述Building模型库中冷却塔模型的计算机理以及使用上的注意事项。

概述

在 Building 中,提供了三个冷却塔模型,定接近温度(接近温度就是冷却塔出口温度与环境湿球温度之间的差值)冷却塔模型:Buildings.Fluid.HeatExchangers.CoolingTowers.FixedApproach,基于 Merkel 计算方法的冷却塔模型:Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel,基于 YorkCalc 修正系数的变接近温度冷却塔模型:Buildings.Fluid.HeatExchangers.CoolingTowers.YorkCalc,其中基于 Merkel 计算方法的冷却塔模型是参考Energyplus 8.9.0 版本手册进行搭建的,较早的 Building 库模型中没有该模型,目前使用较多的还是基于 YorkCalc 修正系数的变接近温度冷却塔模型。两个模型都可以在 Energyplus Engineering Reference 文档中找到介绍。

定接近温度冷却塔模型

定接近温度冷却塔模型是这几个模型中最为简单的冷却塔模型,但三个的基础模型都是类似的,拓展的都是同一个部分模型(Buildings.Fluid.HeatExchangers.CoolingTowers.BaseClasses.CoolingTower),这里大致介绍下它的构成。

可以看出模型重点的有三部分,压力降模块(preDro)、集总容积模块(vol)、热量注入模块(preHea),压力降模块就是模拟水流经过冷却塔时经历的压降,集总容积模拟冷却塔内部水容积带来的动态效应(当从冷却塔抽取热量时,其温度变化是缓慢变化的,而不是突变),热量注入模块就是计算从冷却塔抽出的热量大小并将其传化为热信号。在这个模型中热量的计算是很简单的,其相关的modelica语句如下,就是利用当前空气温度加上接近温度作为冷却塔出口温度,在结合进口温度计算当前状态下的热量交互量:

  Modelica.Blocks.Sources.RealExpression QWat_flow(
    y = m_flow*(
      Medium.specificEnthalpy(Medium.setState_pTX(
      p=port_b.p,
      T=TAir + TApp,
      X=inStream(port_b.Xi_outflow))) - inStream(port_a.h_outflow)))
    "Heat input into water"
    annotation (Placement(transformation(extent={{-80,-70},{-60,-50}})));

模型在使用时很简单,主要声明下接近温度值即可,模型太简单,并且没有风机模型,无法反映不同工况下冷却塔能耗的变化,因此一般不使用这个模型。

变接近温度冷却塔模型(YorkCalc)

YorkCalc 模型是基于制造商的一些性能数据以及一些现场测量数据拟合得到的经验模型,可以用于描述带有变速风机的冷却塔模型。在使用时,需要指定额定工况(一般指设计工况)下室外湿球温度、设计冷却塔进出口温差、冷却塔接近温度(冷却塔出口温度与室外湿球温度的差值),此外还需要定义水流量、空气流量以及风扇功率。在E+手册中,对于此模型计算步骤进行了说明:

  1. 该模型首先确定塔风机以最大速度运行时的冷却塔出口水温。如果出口温度高于设定点温度,冷却塔风机将以最大速度运行。
  2. 如果最大风扇转速下的出水温度低于设定点温度,那么模型将考虑“自由对流”工况(风机关闭时流经塔的水)下冷却塔的性能。如果基于“自由对流”工况下的出口温度等于或低于设定值,则冷却塔风机不会开启。
  3. 如果在考虑“自由对流”后,发现出口温度保持在设定值以上,则以最小风扇转速(最小空气流量比)打开风塔风扇,以降低出水温度。如果出口水温低于最低风扇转速下的设定值,则对冷却塔风机执行循环启停控制,以保持出口水温维持在设定值附近。
  4. 如果在模拟最小风扇转速后,出水温度仍高于设定值,则冷却塔风机保持常开,迭代确定所需的空气流量和相应的风扇转速,以满足所需的设定值温度。

对于计算来说,就是将定接近温度的模型中接近温度的取值从定值改为了与风速、流量、室外湿球温度相关的函数,其中有几种计算方法,例如 YorkCalc 修正方法(第一张)、CoolTools 修正方法(第二张):

各个系数的具体取值翻阅Energyplus工程手册,Tr 就是进出口温度差,LGRatio 是冷却塔运行液气比,就是水流量比(实际流量与额定流量之间的比值)与空气流量比(实际空气流量与额定流量的比值)的比值,也正是使用这种比值关系,使得该模型可以在不同规格的冷却塔上进行拓展使用。

但又由于这是一个经验公式组成的模型,因此需要对模型中的状态量进行限制(原文:如果数值超出规定的最小/最大范围,但仍使用实际值,则会发出警告。发出的警告不一定表明在导致警告的条件下,对冷却塔性能的估计很差,但提供这些警告是为了识别超出定义的相关限值的条件。少量超出规定限值可能不会导致重大错误,但大偏差可能会带来问题),Energyplus中给出如下限制。

模型在使用时,由于使用的是既定的曲线进行计算,因此在模型初始化阶段需要利用用户指定的设计性能参数(设计冷却塔进出口温差、设计冷却塔接近温度、室外湿球温度)来确定 YorkCalc 修正方法中涉及到的参考流量。

注意:此处的参考流量与模型中 m_flow_nominal 并不是同一个流量,需要一个 FRWat0 在中间进行转化。

  TWatOut_nominal = TAirInWB_nominal + TApp_nominal;
  TRan_nominal = TWatIn0 - TWatOut_nominal;
  //Building库模型中这两行代码认为是可以删除的,这里本来在E+手册中认为是不会定义的,所以需要转换

  TApp_nominal = Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
                   TRan=TRan_nominal, TWetBul=TAirInWB_nominal,
                   FRWat=FRWat0, FRAir=1);
  //这一步是为了得到FRWat0的大小

  mWat_flow_nominal = m_flow_nominal/FRWat0;
  //这一步是反算参考流量大小

之后就可以根据公式去计算了,这里还有一个小问题没有弄明白,没太懂初始化部分这一部分的代码的意图是什么,为什么需要初始化斜率。

  fanRelPowDer = Buildings.Utilities.Math.Functions.splineDerivatives(
            x=fanRelPow.r_V,
            y=fanRelPow.r_P,
            ensureMonotonicity=Buildings.Utilities.Math.Functions.isMonotonic(x=fanRelPow.r_P,
                                                                              strict=false));
  // Check validity of relative fan power consumption at y=yMin and y=1
  assert(cha.normalizedPower(per=fanRelPow, r_V=yMin, d=fanRelPowDer) > -1E-4,
    "The fan relative power consumption must be non-negative for y=0."
  + "\n   Obtained fanRelPow(0) = " + String(cha.normalizedPower(per=fanRelPow, r_V=yMin, d=fanRelPowDer))
  + "\n   You need to choose different values for the parameter fanRelPow.");
  assert(abs(1-cha.normalizedPower(per=fanRelPow, r_V=1, d=fanRelPowDer))<1E-4, "The fan relative power consumption must be one for y=1."
  + "\n   Obtained fanRelPow(1) = " + String(cha.normalizedPower(per=fanRelPow, r_V=1, d=fanRelPowDer))
  + "\n   You need to choose different values for the parameter fanRelPow."
  + "\n   To increase the fan power, change fraPFan_nominal or PFan_nominal.");

这里加一张图进一步解释下冷却塔计算理论以及初始化过程:

冷却塔模型(Merkel)

Merkel 是利用热焓的概念建立了冷却塔的热焓平衡方程,是一种较为常用的冷却塔热供计算方法,这个模型也是最近才看到,基于 Merkel 计算方法的冷却塔模型使用了逆流热交换器的E-NUT(能效传热单元数法)计算方法对冷却塔模型进行建模,NTU 的计算原理已经忘记得差不多了,之后再去看细节,具体的NTU计算方法之后再在专业知识模块更新。

使用注意事项

这里主要说一下YorkCalc 模型的使用注意事项。

首先是模型的修改,在对系统较为熟悉的情况下,下面两处的代码中的 min=0 我认为是可以删除的,对于结果没有影响,并且在计算过程中减少报错情况的出现,原本此处是保证接近温度大于0,但忽视了一种情况的发生,当室外温度较高,冷机刚开机时,冷却塔中水的温度是可能低于室外温度的,虽然这种现象出现的时间会极短,但在MPC使用时,触发的概率还是存在的,并且从理论上来看,冷却塔内水的温度低于室外温度的现象本就出现得很少,这一部分的影响是有限的。

  Modelica.SIunits.TemperatureDifference TAppCor(min=0, displayUnit="K")=
    Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
      TRan=TRan,
      TWetBul=TAir,
      FRWat=FRWat,
      FRAir=Buildings.Utilities.Math.Functions.smoothMax(
        x1=FRWat/bou.liqGasRat_max,
        x2=FRAir,
        deltaX=0.01))
    "Approach temperature for forced convection";
  Modelica.SIunits.TemperatureDifference TAppFreCon(min=0, displayUnit="K")=
    (1-fraFreCon) * dTMax  + fraFreCon *
      Buildings.Fluid.HeatExchangers.CoolingTowers.Correlations.yorkCalc(
        TRan=TRan,
        TWetBul=TAir,
        FRWat=FRWat,
        FRAir=1)
    "Approach temperature for free convection";

此外,模型中有一部分初始化代码是多余的,可以考虑删除,不过也没什么影响。

  TWatOut_nominal = TAirInWB_nominal + TApp_nominal;
  TRan_nominal = TWatIn0 - TWatOut_nominal;

最后是模型参数的指定,由于想要实现某一个工况出水温度的降低可以通过修改两个参数来改变,一个是额定温差(Tran),另一个是室外温度(Twb)或者接近温度(TApp),两者的修改是不一样的,回到接近温度计算公式

是选用较高的供水温度还是选用较大的进出口温差,其实影响的就是初始状态下,参考流量的大小,这里放几个仿真结果。

结果也是能够解释的,当采用较高的进出口温差时,为了得到相同的接近温度,初始化得到的水侧参考额定流量比就会小,参考流量就会大,因此,水侧流量变动时,水侧流量比(实际流量与参考流量的比值)变化会小,从而导致液气比(水侧流量比与空气侧流量比之比)变化更小,从而导致接近温度的波动更小,在其他两个外扰变化时,由于水侧流量比小,其他干扰对结果的影响将会变大,也就是说高TRan会导致冷却塔对风速、室外温度的变化更加敏感,对于水侧流量的变化更加缓慢。这对于参数的调整可能是有用的。