123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- # coding=gbk
- import pandas as pd
- from CoolProp.CoolProp import PropsSI
- import numpy as np
- from logs.logger import *
- class BasicParameterCalculation(object):
- def __init__(self, data_dict):
- self.data_dict = data_dict.copy()
- def parameter_first_cal(self):
- """
- 制冷剂物性参数计算,主要用于排气温度修正过程的计算
- 计算参数包括:吸排气压力、吸气熵、吸气焓以及等熵排气焓
- :return:
- """
- self.data_dict['sucPre'] = PropsSI('P', 'T', self.data_dict['evapTemp'] + 273.15, 'Q', 1, self.data_dict['refrigerant']) / 1000.0 # 将单位化成kPa
- self.data_dict['disPre'] = PropsSI('P', 'T', self.data_dict['condTemp'] + 273.15, 'Q', 1, self.data_dict['refrigerant']) / 1000.0 # 将单位化成kPa
- if self.data_dict['sucTemp'] - self.data_dict['evapTemp'] > 0:
- self.data_dict['sucEntropy'] = PropsSI('S', 'T', self.data_dict['sucTemp'] + 273.15, 'P', self.data_dict['sucPre'] * 1000,
- self.data_dict['refrigerant']) # 单位:J/kg-K
- self.data_dict['sucEnthalpy'] = PropsSI('H', 'T', self.data_dict['sucTemp'] + 273.15, 'P', self.data_dict['sucPre'] * 1000,
- self.data_dict['refrigerant']) / 1000.0 # 单位:kJ/kg
- else:
- self.data_dict['sucEntropy'] = PropsSI('S', 'T', self.data_dict['sucTemp'] + 273.15, 'Q', 1, self.data_dict['refrigerant'])
- self.data_dict['sucEnthalpy'] = PropsSI('H', 'T', self.data_dict['sucTemp'] + 273.15, 'Q', 1, self.data_dict['refrigerant']) / 1000.0
- self.data_dict['iseDisEnthalpy'] = PropsSI('H', 'P', self.data_dict['disPre'] * 1000.0, 'S',
- self.data_dict['sucEntropy'], self.data_dict['refrigerant']) / 1000.0
- return self.data_dict
- def parameter_second_cal(self):
- """
- 制冷剂物性参数计算:计算冷凝器出口焓值
- :return:
- """
- if self.data_dict['condTemp'] - self.data_dict['expanTemp'] > 0:
- self.data_dict['condOutEnthalpy'] = PropsSI('H', 'T', self.data_dict['expanTemp'] + 273.15, 'P', self.data_dict['disPre'] * 1000.0,
- self.data_dict['refrigerant']) / 1000.0
- else:
- self.data_dict['condOutEnthalpy'] = PropsSI('H', 'T', self.data_dict['expanTemp'] + 273.15, 'Q', 0,
- self.data_dict['refrigerant']) / 1000.0
- return self.data_dict
- class DischargeTempModified(BasicParameterCalculation):
- def __init__(self, data_dict):
- super(DischargeTempModified, self).__init__(data_dict)
- def eta_ise_cal(self):
- """
- 根据排气焓值、吸气焓值以及等熵过程排气焓值计算等熵效率
- :return:
- """
- if self.data_dict['dischargeTemp'] - self.data_dict['condTemp'] < 1:
- self.data_dict['dischargeTemp'] = self.data_dict['condTemp'] + 1
- self.data_dict['disEnthalpy'] = PropsSI('H', 'T', self.data_dict['dischargeTemp'] + 273.15, 'P', self.data_dict['disPre'] * 1000.0,
- self.data_dict['refrigerant']) / 1000.0
- self.data_dict['etaIseCal'] = (self.data_dict['iseDisEnthalpy'] - self.data_dict['sucEnthalpy']) / (
- self.data_dict['disEnthalpy'] - self.data_dict['sucEnthalpy'])
- return self.data_dict
- def dis_temp_cal(self, disPre, sucEnthalpy, iseDisEnthalpy, etaIseEvaluate):
- """
- 根据等熵效率修正方法计算压缩机排气温度
- :param disPre:
- :param sucEnthalpy:
- :param iseDisEnthalpy:
- :param etaIseEvaluate:
- :return:
- """
- disEnthalpyCal = sucEnthalpy + (iseDisEnthalpy - sucEnthalpy) / etaIseEvaluate
- disTempCal = PropsSI('T', 'H', disEnthalpyCal * 1000.0, 'P', disPre * 1000.0, self.data_dict['refrigerant']) - 273.15
- return disTempCal, disEnthalpyCal
- def eta_ise_recal(self, x):
- """
- 根据历史等熵效率值进行修正:
- 根据经验数据进行修正
- 修正公式:f(x,y) = p00 + p10*x + p01*y + p11*x*y + p02*y^2 x:负载率,y:冷凝温度
- :param x:
- :return:
- """
- p00 = 0.06996
- p10 = 0.02528
- p01 = -0.04132
- p11 = -0.0005824
- p02 = 0.001406
- eta_ise_evaluate = p00 + p10 * self.data_dict['loadRate'] + p01 * self.data_dict['condTemp'] + p11 * \
- self.data_dict['loadRate'] * self.data_dict['condTemp'] + p02 * self.data_dict['condTemp'] ** 2
- if eta_ise_evaluate > 0.8 or eta_ise_evaluate < 0.4:
- eta_ise_pass = pd.DataFrame(x, columns=['eta_ise'])
- eta_ise_pass = eta_ise_pass.drop_duplicates()
- eta_ise_pass = eta_ise_pass[eta_ise_pass['eta_ise'] != 0]
- eta_ise_pass = eta_ise_pass[eta_ise_pass['eta_ise'] > 0.4]
- if eta_ise_evaluate < 0.4:
- if len(eta_ise_pass) < 1:
- eta_ise_evaluate = 0.5
- else:
- eta_ise_evaluate = eta_ise_pass['eta_ise'].mean()
- else:
- if len(eta_ise_pass) < 1:
- eta_ise_evaluate = 0.8
- else:
- mean_ise = eta_ise_pass['eta_ise'].mean()
- eta_ise_evaluate = 0.8 if mean_ise <= 0.7 else mean_ise
- return eta_ise_evaluate
- def discharge_temp_modified(self):
- """
- 排气温度修正算法
- :return:
- """
- self.data_dict = self.parameter_first_cal()
- self.data_dict = self.eta_ise_cal()
- if self.data_dict['etaIseCal'] > 0.75:
- self.data_dict['etaIseCal'] = self.eta_ise_recal(self.data_dict['etaIse'])
- results = self.dis_temp_cal(self.data_dict['disPre'], self.data_dict['sucEnthalpy'], self.data_dict['iseDisEnthalpy'],
- self.data_dict['etaIseCal'])
- self.data_dict['dischargeTemp'] = results[0]
- self.data_dict['disEnthalpy'] = results[1]
- return self.data_dict
- class PerformanceCalculation(BasicParameterCalculation):
- def __init__(self, dict_cal):
- """
- 初始化相关参数
- :param dict_cal:
- """
- super(PerformanceCalculation, self).__init__(dict_cal)
- self.dict_cal = dict_cal
- self.powerRated = dict_cal['powerRated']
- self.way_cooling = dict_cal['coolingWay']
- def para_verify(self):
- if self.dict_cal['compRunTime']:
- self.dict_cal['compRunTime'] = self.dict_cal['compRunTime'] / 8760
- if self.dict_cal['compRunTime'] > 100:
- self.dict_cal['compRunTime'] = 10
- logger.critical('============压缩机运行时间错误,程序进行了动态修正===========')
- elif self.dict_cal['compRunTime'] > 20:
- logger.critical('============压缩机运行时间为%.0f年,请检查与实际情况是否吻合===========' % self.dict_cal['compRunTime'])
- self.dict_cal['compRunTime'] = 4
- elif self.dict_cal['compRunTime'] > 0:
- pass
- else:
- self.dict_cal['compRunTime'] = 7.0
- else:
- self.dict_cal['compRunTime'] = 7.0
- return None
- def eta_cal(self):
- self.factor_motor = 1 - 0.01 * self.dict_cal['compRunTime']
- self.factor_roller = 1 - 0.003 * self.dict_cal['compRunTime']
- self.phi_heat_loss = 0.025
- self.eta_motor = 0.95 * self.factor_motor ** 0.5
- self.eta_roller = 0.97 * self.factor_roller ** 0.5
- self.phi_power_fan = 0.03
- return None
- def mass_flow(self):
- """
- 计算制冷剂流量
- :return:
- """
- self.para_verify()
- self.eta_cal()
- if self.way_cooling == 'suctionCooling':
- self.dict_cal['powerTheory'] = self.dict_cal['power'] - self.phi_heat_loss * self.powerRated
- self.dict_cal['massCompressor'] = self.dict_cal['powerTheory'] / \
- (self.dict_cal['disEnthalpy'] -
- self.dict_cal['sucEnthalpy'])
- self.dict_cal['massSuction'] = self.dict_cal['massCompressor']
- elif self.way_cooling == 'liquidInjectionCooling':
- self.dict_cal['powerTheory'] = self.eta_motor * self.eta_roller * self.dict_cal['power'] - \
- self.phi_heat_loss * self.powerRated
- self.dict_cal['massCompressor'] = self.dict_cal['powerTheory'] / \
- (self.dict_cal['disEnthalpy'] - self.dict_cal['sucEnthalpy'])
- self.dict_cal['massSuction'] = self.dict_cal['massCompressor'] - \
- ((1 - self.eta_motor * self.eta_roller) * self.dict_cal['power']
- - self.phi_heat_loss * self.powerRated) / \
- (self.dict_cal['sucEnthalpy'] - self.dict_cal['condOutEnthalpy'])
- elif self.way_cooling == 'fanCooling':
- self.dict_cal['powerTheory'] = self.eta_motor * self.eta_roller * self.dict_cal['power'] \
- - (self.phi_heat_loss + self.phi_power_fan) * self.powerRated
- self.dict_cal['massCompressor'] = self.dict_cal['powerTheory'] / \
- (self.dict_cal['disEnthalpy'] - self.dict_cal['sucEnthalpy'])
- self.dict_cal['massSuction'] = self.dict_cal['massCompressor']
- else:
- logger.critical('==========电机冷却形式输入不正确==========')
- return None
- def system_performance(self):
- """
- 系统性能计算
- :return:
- """
- self.dict_cal['coolingCapacity'] = self.dict_cal['massSuction'] * \
- (self.dict_cal['sucEnthalpy'] -
- self.dict_cal['condOutEnthalpy'])
- self.dict_cal['COP'] = self.dict_cal['coolingCapacity'] / \
- self.dict_cal['power']
- if self.dict_cal['COP'] > 10 or self.dict_cal['COP'] < 2:
- self.dict_cal['COP'] = np.random.uniform(9, 10)
- self.dict_cal['coolingCapacity'] = self.dict_cal['power'] * self.dict_cal['COP']
- return None
- @staticmethod
- def judge_results(data):
- if data['etaIseCal'] < 0.25:
- is_success = 0
- results_depict = '输入参数存在问题,计算结果偏小'
- elif data['etaIseCal'] < 0.9:
- is_success = 1
- results_depict = '输入参数正常,计算结果正常'
- else:
- is_success = 0
- results_depict = '输入参数存在问题,计算结果偏大'
- if data['coolingCapacity'] > 1.2 * data['coolingCapacityRated']:
- is_success = 0
- results_depict = '冷机计算结果存在严重问题,请检查输入参数'
- logger.critical('===========冷机计算结果存在严重问题,请检查输入参数==========')
- return is_success, results_depict
- def chilled_water_flow_cal(self):
- """
- 冷冻水流量计算
- 水流量单位:m3/h
- :return:
- """
- self.dict_cal['chilledWaterFlow'] = self.dict_cal['coolingCapacity'] / 4.187 / (
- self.dict_cal['chilledWaterInput'] - self.dict_cal['chilledWaterOutput']) / 1000 * 3600
- chilledWaterFlowRated = self.dict_cal['coolingCapacityRated'] / 4.187 / 5.0 / 1000 * 3600
- chilledFlowRatio = self.dict_cal['chilledWaterFlow'] / chilledWaterFlowRated
- if chilledFlowRatio < 0.3 or chilledFlowRatio > 2.5:
- self.dict_cal['chilledWaterFlow'] = ''
- logger.critical('==========冷冻水流量计算异常,请检查输入参数===========')
- return None
- def cooling_water_flow_cal(self):
- """
- 冷却水流量计算
- 比热容按照4.187计算,暂不进行公式拟合
- 水流量单位:m3/h
- :return:
- """
- self.dict_cal['coolingWaterFlow'] = (self.dict_cal['power'] + self.dict_cal['coolingCapacity']) / 4.187 / (
- self.dict_cal['coolingWaterOutput'] - self.dict_cal['coolingWaterInput']) / 1000 * 3600
- coolingWaterFlowRated = (self.dict_cal['powerRated'] + self.dict_cal['coolingCapacityRated']) / 4.187 / 5.0 / 1000 * 3600
- coolingFlowRatio = self.dict_cal['coolingWaterFlow'] / coolingWaterFlowRated
- if coolingFlowRatio < 0.3 or coolingFlowRatio > 2.5:
- self.dict_cal['coolingWaterFlow'] = ''
- logger.critical('==========冷却水流量计算异常,请检查输入参数===========')
- return None
- def performance_calculation(self):
- self.dict_cal = self.parameter_second_cal()
- self.mass_flow()
- self.system_performance()
- is_success, results_depict = self.judge_results(self.dict_cal)
- if is_success == 1:
- self.cooling_water_flow_cal()
- self.chilled_water_flow_cal()
- self.dict_cal.update(
- etaMotor=round(self.eta_motor, 3),
- etaRoller=round(self.eta_roller, 3))
- return is_success, results_depict, self.dict_cal
|