from flask import Flask, request, jsonify import math # 1. 对流传热系数(h_convection) # 对流传热系数描述了热空气和物料之间的热交换效率。对于热风循环系统,通常来说: # # 对于静止空气,常用的对流传热系数约为 5 W/m²·°C。 # 对于强制对流(如风扇或气流循环),该值可以显著增大,通常范围是 10-100 W/m²·°C,具体值会根据风速和空气流动的强度而变化。 # 如何选择值: # # 如果你知道解冻库中风速的具体数值,可以参考下列表格估算: # 低风速(约 0.5-1 m/s):h_convection 约为 10-15 W/m²·°C # 中等风速(约 1-3 m/s):h_convection 约为 15-30 W/m²·°C # 高风速(超过 3 m/s):h_convection 约为 30-50 W/m²·°C # 因此,你可以根据实际风速或者系统的设计,调整该参数。 # # 2. 热损失因子(heat_loss_factor) # 热损失因子用于反映热量的流失,通常与解冻库的保温效果、外界环境温度以及通风情况有关。热损失因子越大,表示热量损失越严重。 # # 建议参考值: # # 热损失因子范围: 0.05 到 0.2。具体值取决于库房的保温水平和周围环境温度。 # 低热损失(良好的隔热效果): 0.05 - 0.1 # 中等热损失: 0.1 - 0.15 # 较高热损失(较差的保温或极端环境): 0.15 - 0.2 # 如何设定: # 如果你知道解冻库的结构(例如墙壁和门的绝热层厚度、外部环境温度等),可以通过热传导计算来确定热损失。 # 如果没有明确的实验数据,可以使用经验值来估算这个因子。 app = Flask(__name__) # 定义计算解冻时间的函数 def calculate_thaw_time(mass, specific_heat, thermal_conductivity, length, width, height, T_thaw, T_env, T_initial, alpha=1.2): """ mass: 煤矿质量 (kg) specific_heat: 比热容 (kJ/(kg·°C)) thermal_conductivity: 热传导系数 (W/m·°C) length: 煤矿堆积的长度 (m) width: 煤矿堆积的宽度 (m) height: 煤矿堆积的高度 (m) T_thaw: 需要解冻的温度 (°C) T_env: 解冻库库温 (°C) T_initial: 煤矿初始温度 (°C) alpha: 修正系数 (默认 1.2) """ # def calculate_thaw_time(mass, specific_heat, thermal_conductivity, length, width, height, T_thaw, T_env, T_initial, moisture_content=0.0, alpha=1.2): # """ # mass: 煤矿质量 (kg) # specific_heat: 比热容 (kJ/(kg·°C)) # thermal_conductivity: 热传导系数 (W/m·°C) # length: 煤矿堆积的长度 (m) # width: 煤矿堆积的宽度 (m) # height: 煤矿堆积的高度 (m) # T_thaw: 需要解冻的温度 (°C) # T_env: 解冻库库温 (°C) # T_initial: 煤矿初始温度 (°C) # moisture_content: 含水量(0到1之间,0表示无水分,1表示完全是水) 默认 0.0 # h_convection: 对流传热系数(热风循环影响) # heat_loss_factor: 热损失因子 # alpha: 修正系数 (默认 1.2) # """ # 1. 计算煤矿堆的外部表面积 (A) external_area = 2 * (length * width + length * height + width * height) #表面积 # 2. 修正表面积 (A_effective) effective_area = alpha * external_area # 3. 避免计算中 log 的负值和分母为零的情况 print(f"T_initial: {T_initial}") if T_initial == T_env or (T_thaw - T_env) / (T_initial - T_env) <= 0: return None # 4. 计算解冻时间 thaw_time = - (mass * specific_heat) / (thermal_conductivity * effective_area) * \ math.log((T_thaw - T_env) / (T_initial - T_env)) return thaw_time # 定义 REST API 路由 @app.route('/calculate-thaw-time', methods=['POST']) def calculate(): try: # 获取 JSON 参数 data = request.json # 打印接收到的 JSON 数据 print("Received data:", data) print("Request Headers:", request.headers) # 必填字段校验 required_fields = ['mass', 'specific_heat', 'thermal_conductivity', 'length', 'width', 'height', 'T_thaw', 'T_env', 'T_initial'] for field in required_fields: if field not in data: return jsonify({"error": f"Missing field: {field}"}), 400 # 提取参数 mass = data['mass'] specific_heat = data['specific_heat'] thermal_conductivity = data['thermal_conductivity'] length = data['length'] width = data['width'] height = data['height'] T_thaw = data['T_thaw'] T_env = data['T_env'] T_initial = data['T_initial'] # moisture_content = data.get('moisture_content', 0.0) # 含水量,默认 0 alpha = data.get('alpha', 30) # 默认修正系数 # 计算解冻时间 thaw_time = calculate_thaw_time(mass, specific_heat, thermal_conductivity, length, width, height, T_thaw, T_env, T_initial, alpha) # 加入含水量 #thaw_time = calculate_thaw_time(mass, specific_heat, thermal_conductivity, length, width, height, T_thaw, T_env, T_initial, moisture_content, alpha) # 返回结果 if thaw_time is None: return jsonify({"error": "Invalid input values for calculation"}), 400 # 返回的解冻时间是小时 return jsonify({"thaw_time": thaw_time}) except Exception as e: return jsonify({"error": str(e)}), 500 if __name__ == '__main__': app.run(port=9996, debug=True)