Міністерство освіти і науки України
НТУУ «КПІ ім. І. Сікорського»
Кафедра цифрових технологій в енергетиці
Моделювання систем в енергетиці
Лабораторна робота №3
Тема: Розробка моделі розрахунку енергетичних потреб на опалення/охолодження будівель.
Вихідні дані для розрахунку:
1. Кількість огороджуючих зовнішніх поверхонь (стін);
2. Для кожної поверхні:
2.1. Ширина, висота;
2.2. Кількість шарів матеріалів, з якої складається поверхня, для кожного шару:
2.2.1. Назва матеріалу (вибір з таблиці), яка використовується для визначення
теплопровідності;
2.2.2. Товщина шару матеріалу;
2.2.3. Для зовнішнього шару - коефіцієнти поглинання і випромінювання
3. Кількість вікон
3.1. Для кожного вікна:
3.1.1. розміри,
3.1.2. кількість пакетів,
3.1.3. тип скла;
3.1.4. напрім по сторонам світу
4. Площа помешкання
5. Бажана температура в помешканні в опалювальний сезон та в літній сезон (з таблиці 7
або власний варіант).
6. Регіон/місто для якого проводиться розрахунок, які є основою для визначення:
6.1. Кількості годин по місяцях
6.2. Середніх температур по місяцях
6.3. Середньомісячних доз сумарної сонячної радіації.
7. Варіанти змін для порівняння:
7.1. Встановлення теплоізоляції: вихідні данні – товщина шару і тип теплоізоляції
7.2. Заміна вікон – тип встановлюваних вікон, тип оскління, тип заповнюючого газу.
7.3. Встановлення рекуператора. Вказати тип і задати характеристики.
7.4. Зміна температури в приміщенні. Визначити результуючий вплив.
Результат:
В звіті відобразити надати:
- лістінг програми;
- витрати енергії на забезпечення опалення/охолодження приміщення по місяцях;
- зміна витрати енергії після встановлення теплоізоляції / заміни вікон по місяцях;
Результати виконання програми:///Лістинг програми:import math
def get_wall_data():
walls = []
num_walls = int(input("Enter the number of external walls: "))
for i in range(num_walls):
print(f"Wall {i+1}:")
width = float(input(" Width (m): "))
height = float(input(" Height (m): "))
layers = []
num_layers = int(input(" Number of layers: "))
for j in range(num_layers):
print(f" Layer {j+1}:")
material = input(" Material: ")
thickness = float(input(" Thickness (m): "))
conductivity = float(input(" Thermal conductivity (W/mK): "))
layers.append({"material": material, "thickness": thickness, "conductivity": conductivity})
absorption = float(input(" Absorption coefficient (for outer layer): "))
emissivity = float(input(" Emissivity coefficient (for outer layer): "))
walls.append({"width": width, "height": height, "layers": layers, "absorption": absorption, "emissivity": emissivity})
return walls
def get_window_data():
windows = []
num_windows = int(input("Enter the number of windows: "))
for i in range(num_windows):
print(f"Window {i+1}:")
width = float(input(" Width (m): "))
height = float(input(" Height (m): "))
glass_type = input(" Glass type: ")
num_panes = int(input(" Number of panes: "))
orientation = input(" Orientation (N/S/E/W): ")
windows.append({"width": width, "height": height, "glass_type": glass_type, "num_panes": num_panes, "orientation": orientation})
return windows
def get_building_data():
area = float(input("Enter the area of the building (m^2): "))
heating_temp = float(input("Enter desired temperature during heating season (°C): "))
cooling_temp = float(input("Enter desired temperature during cooling season (°C): "))
region = input("Enter the region/city for calculation: ")
return {"area": area, "heating_temp": heating_temp, "cooling_temp": cooling_temp, "region": region}
def calculate_wall_heat_transfer(wall, external_temp, internal_temp):
area = wall['width'] * wall['height']
r_total = 0
for layer in wall['layers']:
r_total += layer['thickness'] / layer['conductivity']
u_value = 1 / r_total
heat_transfer = u_value * area * (internal_temp - external_temp)
return heat_transfer
def calculate_window_heat_transfer(window, external_temp, internal_temp):
area = window['width'] * window['height']
# U-value based on number of panes (example values)
u_value = 5.7 if window['num_panes'] == 1 else (2.8 if window['num_panes'] == 2 else 1.6)
heat_transfer = u_value * area * (internal_temp - external_temp)
return heat_transfer
def get_monthly_external_temp(region):
# Example temperatures for a region (°C)
region_temps = {
"Kyiv": [-5, -3, 2, 10, 16, 20, 22, 21, 15, 8, 2, -2],
"Lviv": [-3, -2, 3, 12, 18, 21, 23, 22, 16, 10, 4, -1],
}
return region_temps.get(region, [0]*12) # Default to 0°C if region is unknown
def main():
print("Energy Calculation Program")
walls = get_wall_data()
windows = get_window_data()
building = get_building_data()
external_temps = get_monthly_external_temp(building['region'])
heating_temp = building['heating_temp']
cooling_temp = building['cooling_temp']
monthly_heat_loss = []
monthly_cooling_loss = []
for month, external_temp in enumerate(external_temps):
# Heating season calculations
total_wall_transfer_heating = sum(calculate_wall_heat_transfer(wall, external_temp, heating_temp) for wall in walls)
total_window_transfer_heating = sum(calculate_window_heat_transfer(window, external_temp, heating_temp) for window in windows)
total_heat_transfer_heating = total_wall_transfer_heating + total_window_transfer_heating
monthly_heat_loss.append(total_heat_transfer_heating)
# Cooling season calculations
total_wall_transfer_cooling = sum(calculate_wall_heat_transfer(wall, external_temp, cooling_temp) for wall in walls)
total_window_transfer_cooling = sum(calculate_window_heat_transfer(window, external_temp, cooling_temp) for window in windows)
total_heat_transfer_cooling = total_wall_transfer_cooling + total_window_transfer_cooling
monthly_cooling_loss.append(total_heat_transfer_cooling)
print("\n--- Heating Results ---")
for month, loss in enumerate(monthly_heat_loss, start=1):
print(f"Month {month}: Heat loss = {loss:.2f} W")
print("\n--- Cooling Results ---")
for month, loss in enumerate(monthly_cooling_loss, start=1):
print(f"Month {month}: Cooling load = {loss:.2f} W")
if __name__ == "__main__":
main()