From 4fd77f0bb5dd139089a687fdcdcb3cfe6e0ff030 Mon Sep 17 00:00:00 2001 From: raytrace Date: Wed, 3 Mar 2021 23:29:33 +0900 Subject: [PATCH] =?UTF-8?q?r7,r8=20=ED=8C=8C=EC=9D=BC=EC=86=90=EC=83=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=B5=EA=B5=AC=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?/=20=EC=A0=84=EC=82=B0=EC=8B=A4=20=EA=B3=84=EC=88=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20/=20R9=EB=A1=9C=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ArinWarev1/Calculator/Result/C사용면적.vb | 26 +- .../Calculator/AirHandling/CAirHandling.vb | 830 ++++ ArinWarev1/DataSet/Calculator/CAirHandling.vb | 850 ++++ ArinWarev1/DataSet/Calculator/CCooling.vb | 1800 ++++++++ ArinWarev1/DataSet/Calculator/CD.cd | 18 + ArinWarev1/DataSet/Calculator/CD_RESULT.cd | 54 + ArinWarev1/DataSet/Calculator/CHeating.vb | 3945 +++++++++++++++++ ArinWarev1/DataSet/Calculator/CRenewable.vb | 745 ++++ ArinWarev1/DataSet/Calculator/CShared.vb | 181 + ArinWarev1/DataSet/Calculator/CSummary.vb | 892 ++++ ArinWarev1/DataSet/Calculator/CZone.vb | 907 ++++ ArinWarev1/DataSet/Calculator/Calculator.vb | 719 +++ .../DataSet/Calculator/Cooling/CCooling.vb | 813 ++++ .../DataSet/Calculator/Heating/CHeating.vb | 1821 ++++++++ .../Calculator/Renewable/CRenewable.vb | 593 +++ .../DataSet/Calculator/Result/C1차소요량.vb | 780 ++++ .../DataSet/Calculator/Result/CCo2발생량.vb | 452 ++ .../DataSet/Calculator/Result/CResult.vb | 48 + .../DataSet/Calculator/Result/CZones.vb | 71 + ArinWarev1/DataSet/Calculator/Result/C범용.vb | 75 + .../DataSet/Calculator/Result/C사용면적.vb | 412 ++ .../DataSet/Calculator/Result/C생산에너지.vb | 272 ++ .../DataSet/Calculator/Result/C에너지분석.vb | 355 ++ .../Calculator/Result/C에너지소요량.vb | 401 ++ .../Calculator/Result/C에너지요구량.vb | 224 + .../Calculator/Result/C최대냉난방부하.vb | 264 ++ .../DataSet/Calculator/Summary/CSummary.vb | 899 ++++ ArinWarev1/DataSet/Calculator/Zone/CZone.vb | 822 ++++ ArinWarev1/ECO2_2020.vbproj | 826 ++++ .../Frm_v20091231_Weather.Designer.vb | 16 +- .../Forms_Input/Frm_v20091231_Weather.resx | 78 +- ArinWarev1/My Project/AssemblyInfo.vb | 4 +- SetupIS/SetupIS.isl | 2 +- 33 files changed, 20116 insertions(+), 79 deletions(-) create mode 100644 ArinWarev1/DataSet/Calculator/AirHandling/CAirHandling.vb create mode 100644 ArinWarev1/DataSet/Calculator/CAirHandling.vb create mode 100644 ArinWarev1/DataSet/Calculator/CCooling.vb create mode 100644 ArinWarev1/DataSet/Calculator/CD.cd create mode 100644 ArinWarev1/DataSet/Calculator/CD_RESULT.cd create mode 100644 ArinWarev1/DataSet/Calculator/CHeating.vb create mode 100644 ArinWarev1/DataSet/Calculator/CRenewable.vb create mode 100644 ArinWarev1/DataSet/Calculator/CShared.vb create mode 100644 ArinWarev1/DataSet/Calculator/CSummary.vb create mode 100644 ArinWarev1/DataSet/Calculator/CZone.vb create mode 100644 ArinWarev1/DataSet/Calculator/Calculator.vb create mode 100644 ArinWarev1/DataSet/Calculator/Cooling/CCooling.vb create mode 100644 ArinWarev1/DataSet/Calculator/Heating/CHeating.vb create mode 100644 ArinWarev1/DataSet/Calculator/Renewable/CRenewable.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C1차소요량.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/CCo2발생량.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/CResult.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/CZones.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C범용.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C사용면적.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C생산에너지.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C에너지분석.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C에너지소요량.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C에너지요구량.vb create mode 100644 ArinWarev1/DataSet/Calculator/Result/C최대냉난방부하.vb create mode 100644 ArinWarev1/DataSet/Calculator/Summary/CSummary.vb create mode 100644 ArinWarev1/DataSet/Calculator/Zone/CZone.vb create mode 100644 ArinWarev1/ECO2_2020.vbproj diff --git a/ArinWarev1/Calculator/Result/C사용면적.vb b/ArinWarev1/Calculator/Result/C사용면적.vb index dd4e249..678f10a 100644 --- a/ArinWarev1/Calculator/Result/C사용면적.vb +++ b/ArinWarev1/Calculator/Result/C사용면적.vb @@ -281,13 +281,12 @@ Public Class C사용면적 day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) 'A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3)) - A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) - - 'If Dr프로필.code <> "0010" Then - ' A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) - 'Else - ' A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.583 / 0.314), 3) '//전산실 용도에 따른 난방 가중치 적용 - 'End If + 'A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + If Dr프로필.code <> "0010" Then + A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + Else + A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.503 / 0.314), 3) '//전산실 용도에 따른 난방 가중치 적용 + End If End If @@ -306,13 +305,12 @@ Public Class C사용면적 day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) 'A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3)) - A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) - - 'If Dr프로필.code <> "0010" Then - ' A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) - 'Else - ' A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.045 / 0.314), 3) '//전산실 용도에 따른 냉방 가중치 적용 - 'End If + 'A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + If Dr프로필.code <> "0010" Then + A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + Else + A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.196 / 0.314), 3) '//전산실 용도에 따른 냉방 가중치 적용 + End If End If diff --git a/ArinWarev1/DataSet/Calculator/AirHandling/CAirHandling.vb b/ArinWarev1/DataSet/Calculator/AirHandling/CAirHandling.vb new file mode 100644 index 0000000..3f6b1d7 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/AirHandling/CAirHandling.vb @@ -0,0 +1,830 @@ +Public Class CAirHandling + + ''' + ''' 최대냉/난반후하 계산식인거 같다. + ''' + ''' + ''' + Public Overridable Sub Calc_Max_Power(ByVal i_HeatCool As Integer) + 'Dim i_count_zone As Integer, i_count_AHU As Integer, i_count_profile As Integer + Dim c_p_L As Decimal, rho_L As Decimal + Dim theta_i_c As Decimal, theta_ABL_wi As Decimal, theta_ABL_so As Decimal, theta_AUL_wi As Decimal, theta_AUL_so As Decimal, theta_ZUL_wi As Decimal, theta_ZUL_so As Decimal + Dim x_ABL_wi As Decimal, x_ABL_so As Decimal, x_AUL_wi As Decimal, x_AUL_so As Decimal, x_ZUL_so As Decimal + Dim h_ABL_wi As Decimal, h_ABL_so As Decimal, h_AUL_wi As Decimal, h_AUL_so As Decimal, h_ZUL_wi As Decimal, h_ZUL_so As Decimal + Dim Delta_h_WRG As Decimal, V_dot_mech_m As Decimal, V_dot_star As Decimal, theta_c_mech_min As Decimal, ps_theta_ZUL_so As Decimal + Dim Q_dot_h_star As Decimal, Q_dot_c_star As Decimal, Q_dot_st_star As Decimal + Dim Q_dot_h_max As Decimal, Q_dot_c_max As Decimal + Dim theta_e_min As Decimal, theta_e_max As Decimal, V_A As Decimal, theta_i_h As Decimal, theta_i_c_soll As Decimal + Dim A_B As Decimal, c_p_Lrho_L As Decimal + + + theta_i_c = 24 + theta_i_c_soll = 26 + theta_i_h = 20 + c_p_L = 1.006 'kJ/kg K + rho_L = 1.204 'kg/m3 (20도 1기압상태) + c_p_Lrho_L = 0.34 'Wh/m3 K + theta_ABL_wi = 22 + x_ABL_wi = 0.008 '편차가 없는 습도요구 적용 + h_ABL_wi = 42.6 '편차가 없는 습도요구 적용 + theta_ABL_so = 26 + x_ABL_so = 0.008 '편차가 없는 습도요구 적용 + h_ABL_so = 46.7 '편차가 없는 습도요구 적용 + theta_AUL_wi = -12 + x_AUL_wi = 0.001 + h_AUL_wi = -9.6 + theta_AUL_so = 32 + x_AUL_so = 0.012 + h_AUL_so = 63 + theta_e_min = -11.3 + theta_e_max = 31.5 + + + 'Dim dr공조처리 As DS.tbl_kongjoRow + + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") + + Dim dr최대냉난방부하 As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr존.code & "'")(0), DSR.최대냉난방부하Row) + If Dr존.냉난방공조 = "냉방" Or Dr존.냉난방공조 = "냉난방" Then + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + Dim dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + V_A = TOSG(dr프로필.최소도입외기량) * A_B ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) * A_B + + For Each dr공조처리 As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <>'0'", "code") + '//아래두코드는 상단코드로 변경 + 'If Dr존.냉난방공조처리시스템 <> "" Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) <> "" Then + 'If Dr존.냉난방공조처리시스템 = dr공조처리.code Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) = Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + + ' 공조기 최대 가열성능 + If i_HeatCool = 1 Then + If Dr존.냉난방공조 = "냉난방" Then ' Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉난방" Then + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '"열회수불가" + Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + Case "현열교환" '현열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율) * c_p_L * (theta_ABL_wi - theta_AUL_wi) '(3.2.5-55) 순수 현열 회수기 '================2010.03.22 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율) * c_p_L * (h_ABL_wi - h_AUL_wi) '(3.2.5-56) 현열 및 습기 회수기 '================2010.03.22 수정 + End Select + + + + theta_ZUL_wi = TOSG(dr공조처리.설정치난방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(1, i_count_AHU - 1) 'theta_h_mech_min '(도표 3-3) + + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.001 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-38) 습도요구 없음 + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.006 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-42) 편차가 있는 습도요구 + h_ZUL_wi = TOSG(1.01 * theta_ZUL_wi + 0.008 * (2501 + 1.86 * theta_ZUL_wi)) '(3.2.5-48) 편차가 없는 습도요구만 우선 적용 + Q_dot_h_max = TOSG(dr최대냉난방부하.최대난방기기부하) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + If (TOSG(dr공조처리.설정치난방) - theta_i_h) > 0 Then + V_dot_mech_m = 1000 * Q_dot_h_max / (c_p_Lrho_L * (TOSG(dr공조처리.설정치난방) - theta_i_h)) + Else + V_dot_mech_m = 0 + End If + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + + V_dot_star = V_dot_mech_m + If dr공조처리.열교환기유형 = "전열교환" Then ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) = "전열교환" Then + Q_dot_h_star = V_dot_star * rho_L * (h_ZUL_wi - h_AUL_wi - Delta_h_WRG) / 3600 '(3.2.5-57) 증기가습 있음 - 열교환방식으로 수정 추후 검토 + Else + Q_dot_h_star = V_dot_star * rho_L * (c_p_L * (theta_ZUL_wi - theta_AUL_wi) - Delta_h_WRG) / 3600 '(3.2.5-58) 증기가습 없음 - 열교환방식으로 수정 추후 검토 + End If + + dr최대냉난방부하.최대가열성능 = Q_dot_h_star + 'Worksheets("0").Range("최대난방부하1").Offset(3, i_count_zone - 1) = Q_dot_h_star + If Q_dot_h_max > (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000 Then + dr최대냉난방부하.최대난방실내부하 = (Q_dot_h_max - (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000) + 'Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) = Q_dot_h_max - (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000 + Else + dr최대냉난방부하.최대난방실내부하 = 0 + 'Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) = 0 + End If + End If + + '공조기 최대 가습성능 + + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.001 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-38) 습도요구 없음 + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.006 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-42) 편차가 있는 습도요구 + h_ZUL_wi = TOSG(1.01 * theta_ZUL_wi + 0.008 * (2501 + 1.86 * theta_ZUL_wi)) '(3.2.5-48) 편차가 없는 습도 요구 + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Delta_h_WRG = 0 '(3.2.5-63) 열 회수기 없음 + Case "현열교환'" '현열교환" + Delta_h_WRG = 2501 * TOSG(dr공조처리.열회수율) * (x_ABL_wi - x_AUL_wi) '(3.2.5-64) 현열 및 습기 회수기 '================2010.03.22 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = 2501 * TOSG(dr공조처리.열회수율) * (x_ABL_wi - x_AUL_wi) '(3.2.5-64) 현열 및 습기 회수기 '================2010.03.22 수정 + End Select + + Q_dot_st_star = V_dot_star * rho_L * (h_ZUL_wi - h_AUL_wi - Delta_h_WRG) / 3600 '(3.2.5-65) + dr최대냉난방부하.최대가습성능 = Q_dot_st_star + dr최대냉난방부하.공조풍량 = V_dot_star + 'Worksheets("0").Range("최대가습성능1").Offset(0, i_count_zone - 1) = Q_dot_st_star + 'Worksheets("0").Range("최대가습성능1").Offset(1, i_count_zone - 1) = V_dot_star '공조풍량 + + Else + + ' 공조기 최대 냉각성능 + + theta_c_mech_min = TOSG(dr공조처리.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + theta_ZUL_so = theta_c_mech_min '(도표 3.3) + ps_theta_ZUL_so = TOSG(Math.Exp(23.621 - 4065 / (theta_ZUL_so + 236.2506))) '(3.2.5-37) 0.01C<=theta<=80C + x_ZUL_so = TOSG(0.5911 / (100000 / ps_theta_ZUL_so - 0.95)) '(3.2.5-41) + + 'h_ZUL_so = 1.01 * theta_ZUL_so + 0.012 * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-39) 습도요구 없음 ps_theta_ZUL_so>1892Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-40) 습도요구 없음 ps_theta_ZUL_so<=1892Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + 0.011 * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-43) 편차가 있는 습도요구 ps_theta_ZUL_so>1737Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-44) 편차가 있는 습도요구 ps_theta_ZUL_so<=1737Pa + + If ps_theta_ZUL_so > 1269 Then + h_ZUL_so = TOSG(1.01 * theta_ZUL_so + 0.008 * (2501 + 1.86 * theta_ZUL_so)) '(3.2.5-43) 편차가 없는 습도요구 ps_theta_ZUL_so>1269Pa + Else + h_ZUL_so = TOSG(1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so)) '(3.2.5-44) 편차가 없는 습도요구 ps_theta_ZUL_so<=1269Pa + End If + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Delta_h_WRG = 0 '(3.2.5-59) 열 회수기 없음 + Case "현열교환" '현열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율냉) * c_p_L * (theta_AUL_so - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 '================2010.03.22 수정, =============2010.04.14 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율냉) * c_p_L * (h_AUL_so - h_ABL_so) '(3.2.5-56) 현열 및 습기 회수기 '================2010.03.22 수정, =============2010.04.14 수정 + End Select + + Q_dot_c_max = TOSG(dr최대냉난방부하.최대냉방기기부하) ' Worksheets("0").Range("최대냉방부하1").Offset(0, i_count_zone - 1) + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + If (theta_i_c - TOSG(dr공조처리.설정치냉방)) > 0 Then + V_dot_star = 1000 * Q_dot_c_max / (c_p_Lrho_L * (theta_i_c - TOSG(dr공조처리.설정치냉방))) + Else + V_dot_star = 0 + End If + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Q_dot_c_star = V_dot_star * rho_L * (h_AUL_so - h_ZUL_so - Delta_h_WRG) / 3600 '(3.2.5-62) + + dr최대냉난방부하.최대냉각성능 = Q_dot_c_star + dr최대냉난방부하.최대냉방실내부하 = Q_dot_c_max - (c_p_Lrho_L * (theta_e_max - theta_i_c_soll) * V_A) / 1000 + + 'Worksheets("0").Range("최대냉방부하1").Offset(3, i_count_zone - 1) = Q_dot_c_star + 'Worksheets("0").Range("최대냉방부하1").Offset(1, i_count_zone - 1) = Q_dot_c_max - (c_p_Lrho_L * (theta_e_max - theta_i_c_soll) * V_A) / 1000 + End If + + 'End If + 'End If + + Next + Else + + dr최대냉난방부하.최대난방실내부하 = 0 + dr최대냉난방부하.최대냉방실내부하 = 0 + dr최대냉난방부하.최대가열성능 = 0 + dr최대냉난방부하.최대냉각성능 = 0 + dr최대냉난방부하.최대가습성능 = 0 + dr최대냉난방부하.공조풍량 = 0 + End If + + Next + + End Sub + + Public Overridable Sub Calc_AirHandling(ByVal i_count_month As Integer, ByVal theta_e As Decimal) ' ByVal d_mth As Integer, + Dim A_B As Decimal + Dim x_ABL_wi As Decimal, h_ABL_wi As Decimal, x_ABL_so As Decimal, h_ABL_so As Decimal, x_AUL_wi As Decimal, h_AUL_wi As Decimal, x_AUL_so As Decimal, h_AUL_so As Decimal + Dim c_p_L As Decimal, rho_L As Decimal, f_p As Decimal, rho_cl As Decimal + Dim q_st_18_12h_m As Decimal, q_st_12h_m As Decimal, q_h_12h_m As Decimal, q_c_12h_m As Decimal, q_h_m As Decimal, q_c_m As Decimal, q_st_m As Decimal + Dim eta_ZUL As Decimal, eta_ABL As Decimal, f_h_H As Decimal, f_h_C As Decimal, f_h_st As Decimal + Dim Delta_p_star_ZUL As Decimal, Delta_p_star_ABL As Decimal, Delta_h_WRG As Decimal + Dim Q_V_E_ZUL_m As Decimal, Q_V_E_ABL_m As Decimal, Q_c_b As Decimal, Q_h_b As Decimal, Q_vh_b As Decimal, Q_vc_b As Decimal, Q_vm_b As Decimal + Dim t_V_mech_m As Decimal, theta_V_mech_m As Decimal, theta_hc_m As Decimal + Dim V_dot_mech_m As Decimal, V_dot_mech_max As Decimal, V_dot_A As Decimal, V_dot_z As Decimal, P_V_ZUL_m As Decimal, P_V_ABL_m As Decimal + Dim Sigma_V_dot As Decimal, Sigma_V_dot_3 As Decimal + Dim theta_h_mech_m As Decimal, theta_c_mech_m As Decimal + + ' Dim i_count_zone As Integer, i_count_profile As Integer, i_count_AHU As Integer + Dim theta_i_c_soll As Integer, theta_i_c As Integer, theta_i_h_soll As Integer, d_V_mech_m As Integer, theta_ABL_wi As Integer, theta_ABL_so As Integer + Dim V_dot_mech_h_max As Decimal, V_dot_mech_c_max As Decimal, V_dot_mech_c_m As Decimal, V_dot_mech_h_m As Decimal + Dim theta_e_min As Decimal, theta_e_max As Decimal + Dim x_ZUL_wi As Decimal, theta_ZUL_wi As Decimal, theta_AUL As Decimal, h_AUL As Decimal, x_AUL As Decimal, theta_AUL_j As Decimal, x_AUL_j As Decimal, psi_AUL_j As Decimal + Dim h_B As Decimal, r_0 As Decimal, m_dot_1_L As Decimal, u As Decimal, Phi_h As Decimal, Phi_c As Decimal '===============================2010.04.14 수정 + Dim Q_VE_B As Decimal, Q_VE_ZU As Decimal, Q_VE_D As Decimal + Dim c_p_Lrho_L As Decimal, theta_ZUL_so As Decimal, p_S_theta_ZUL_so As Decimal, p_95_theta_ZUL_so As Decimal, x_95_ZUL_so As Decimal + Dim h_95_ZUL_so As Decimal, i_count_air As Integer, i_count_start_time As Integer, i_count_end_time As Integer ', i_profile As Integer + Dim P_D_j_theta_AUL_j As Decimal + + ' 공조처리 + + theta_i_c_soll = 26 + theta_i_c = 24 'theta_i_c_soll - 2 '(2-36) + theta_i_h_soll = 20 + c_p_L = 1.006 'kJ/kg K + rho_L = 1.204 'kg/m3 (20도 1기압상태) + c_p_Lrho_L = 0.34 'Wh/m3 K + f_p = 0.4 '= Delta_p_konst / Delta_p_star = 0.4 '(3.2.5-13, 7-1) + '================================================2010.2.21 수정 + 'd_V_mech_m = d_mth + '================================================2010.2.21 수정 + theta_ABL_wi = 20 + x_ABL_wi = 0.008 '편차가 없는 습도요구 적용 + h_ABL_wi = 42.6 '편차가 없는 습도요구 적용 + theta_ABL_so = 26 + x_ABL_so = 0.008 'kg/kg 편차가 없는 습도요구 적용 + h_ABL_so = 46.7 'kJ/kg 편차가 없는 습도요구 적용 + x_AUL_wi = 0.001 + h_AUL_wi = -9.6 + x_AUL_so = 0.012 + h_AUL_so = 63 + q_st_18_12h_m = 0 '우선 0으로 적용 추후 검토 + theta_e_min = -11.3 + theta_e_max = 31.5 + r_0 = 2500 'kJ/kg + x_ZUL_wi = 0.00699 + + + 'Dim Dr프로필 As DS.tbl_profileRow '//아래에서 할당되도록되어있다. + '//location 은 거의 서울(0번줄)이된다. + Dim Drow평균온도 As DS.weather_tempRow = CType(DSET.weather_temp.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(i_count_month, "0000") & "'")(0), DS.weather_tempRow) + Dim Drow평균습도 As DS.weather_supdoRow = CType(DSET.weather_supdo.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(i_count_month, "0000") & "'")(0), DS.weather_supdoRow) + Dim Mon As String = "M" & Format(i_count_month, "00") + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + 'If Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉방" Or Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉난방" Then + If Dr존.냉난방공조 = "냉방" OrElse Dr존.냉난방공조 = "냉난방" Then + + '//존의 프로필과 일치하는 프로필검색후 적용 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "'")(0), DS.tbl_profileRow) + t_V_mech_m = TOSG(Dr프로필.운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + V_dot_A = TOSG(Dr프로필.최소도입외기량) ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) + 'i_profile = i_count_profile '//아래 루프종료문은 없어서 추가했다. + '===================================================================================2010.2.21 추가 + If i_count_month = 0 Then + d_V_mech_m = 0 + Else + d_V_mech_m = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + '===================================================================================2010.2.21 추가 + + For Each Dr공조 As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <> '0'", "code") + 'If Dr존.냉난방공조처리시스템 <> "" Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) <> "" Then + 'If Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) = Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + 'If Dr존.냉난방공조처리시스템 = Dr공조.code Then ' Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + Q_vh_b = 0 + Q_vc_b = 0 + Q_vm_b = 0 + eta_ZUL = TOSG(Dr공조.총효율급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(2, i_count_AHU - 1) + eta_ABL = TOSG(Dr공조.총효율배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(3, i_count_AHU - 1) + Delta_p_star_ZUL = TOSG(Dr공조.총압력손실급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(0, i_count_AHU - 1) + Delta_p_star_ABL = TOSG(Dr공조.총압력손실배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(1, i_count_AHU - 1) + theta_V_mech_m = TOSG(Dr공조.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + theta_h_mech_m = TOSG(Dr공조.설정치난방) 'Worksheets("공조처리시스템").Range("공조방식1").Offset(1, i_count_AHU - 1) + theta_c_mech_m = TOSG(Dr공조.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + + theta_AUL = 0 + x_AUL = 0 + i_count_start_time = CInt(Dr프로필.운전시작시간.Substring(0, Dr프로필.운전시작시간.IndexOf(":"))) ' Worksheets("설정조건").Range("사용시작시간1").Offset(3, i_profile) + i_count_end_time = CInt(Dr프로필.운전종료시간.Substring(0, Dr프로필.운전종료시간.IndexOf(":"))) ' Worksheets("설정조건").Range("사용시작시간1").Offset(4, i_profile) + If i_count_start_time - i_count_end_time < 0 Then + For i_count_air = 0 To CInt(t_V_mech_m - 1) '자정 전까지 운전 조건 + '//Dr기상데이터의 2번째 인덱스부터 시간이다. + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) ' Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) / 100 ' Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + Else + For i_count_air = 0 To 23 - i_count_start_time '자정 넘어까지 운전 조건 + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) 'Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) / 100 'Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + For i_count_air = 0 To i_count_end_time - 1 '자정 넘어까지 운전 조건 + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_air + 1, "00"))) 'Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_air + 1, "00"))) / 100 'Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + + End If + + theta_AUL = theta_AUL / t_V_mech_m + x_AUL = x_AUL / t_V_mech_m + h_AUL = c_p_L * theta_AUL + x_AUL * (r_0 + c_p_L * theta_AUL) + + ''V_dot_mech_h_max = Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) * 1000 / (c_p_Lrho_L * (theta_h_mech_m - theta_i_h_soll)) '(3.2.4-86) + + '//현재존과일치하는 데이터수집 + If (theta_i_c_soll - theta_c_mech_m) <> 0 Then + V_dot_mech_max = TOSG(Result.최대부하.Item(Dr존.code).최대냉방실내부하) * 1000 / (c_p_Lrho_L * (theta_i_c_soll - theta_c_mech_m)) '(3.2.4-86) + Else + V_dot_mech_max = 0 + End If + + ' Worksheets("0").Range("최대냉방부하1").Offset(1, i_count_zone - 1) + + ''If V_dot_mech_h_max < V_dot_mech_c_max Then + '' V_dot_mech_max = V_dot_mech_c_max + ''Else + '' V_dot_mech_max = V_dot_mech_h_max + ''End If + + If V_dot_mech_max < V_dot_A * A_B Then V_dot_mech_max = V_dot_A * A_B + + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + V_dot_mech_m = V_dot_mech_max + + Case "변풍량" '변풍량" + '//계산결과가들엉잇는 12개월용시트(1~12)에ㅓ 해당값을 찾는 엑셀루틴이다. 이건좀 교환하기가 그러네;;ㅠ + '//해당12개시트의 데이터는 DSR월별에너지분석에 존재한다 이곳에는 월/존두개의 기본키가존재하며 해당rOW를 가져와야한다. + + If Drow분석.GetUpperBound(0) = -1 Then + MsgBox("월별에너지분석에 " & i_count_month & "데이터가 없습니다", MsgBoxStyle.Critical, "계산실패") + Return + End If + + 'Q_c_b = Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) - (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + Q_c_b = TOSG(Drow분석(0).냉방요구량공조) - (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + + If Q_c_b < 0 Then Q_c_b = 0 + + V_dot_mech_m = (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + Q_c_b / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_i_c - theta_c_mech_m) / 1000) '(3.2.5-4) 공조풍량(변풍량) + 'If V_dot_mech_m < 0 Then + 'V_dot_mech_m = 0 + 'End If + + If V_dot_mech_m < V_dot_A * A_B Then V_dot_mech_m = V_dot_A * A_B + + End Select + + 'If V_dot_mech_m = 0 Then + ' theta_hc_m = theta_V_mech_m + 'Else + ' theta_hc_m = theta_V_mech_m - Q_V_E_ZUL_m * 1000 / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * V_dot_mech_m) + 1.4 '(3.2.5-22) Q_V_E_ZUL_m에 1000 을 곱해야하는지 확인요망 + 'End If + + + + + '========================================================================================================================================== + '월별 풍량당 공조에너지 요구량은 추후 적용 + + + 'If theta_hc_m <= 22 And theta_hc_m > 18 Then + 'q_h_12h_m = q_h_18_12h_m + g_h_o_m * (theta_hc_m - 18) '(3.2.5-23) 18C 14 Then + 'q_h_12h_m = q_h_18_12h_m + g_h_u_m * (theta_hc_m - 18) '(3.2.5-24) 14C 0 Then 'Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + + '난방공조처리(가열,가열+가습(분무 또는 증기),리턴공기혼합유무(리턴공기혼합율 입력),열회수유무(현열 또는 전열, 열회수율 입력) + + 'Q_h_b = Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) - (theta_i_h_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Q_h_b = TOSG(Drow분석(0).난방요구량공조) - (theta_i_h_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" + theta_ZUL_wi = 1000 * Q_h_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + theta_i_h_soll 'd_Nutz=d_V_mech_m 으로 적용 + + Case "변풍량" + If V_dot_mech_m > V_dot_A * A_B Then + theta_ZUL_wi = theta_h_mech_m + Else + If V_dot_mech_m = 0 Then + theta_ZUL_wi = theta_i_h_soll + Else + theta_ZUL_wi = 1000 * Q_h_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + theta_i_h_soll + End If + + End If + End Select + + m_dot_1_L = V_dot_mech_m * rho_L + + '외기모드 경우와 에너지 + 'theta_ZUL_wi "가습불가" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) <> "가습불가" Then + + h_B = c_p_L * theta_ZUL_wi + x_ZUL_wi * (r_0 + c_p_L * theta_ZUL_wi) + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * h_AUL) / 3600) + Case "현열교환" '현열교환" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * (h_AUL + c_p_L * Phi_h * (theta_ABL_wi - theta_AUL))) / 3600) '==============2010.04.14 수정 + Case "전열교환" '전열교환" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * (h_AUL + Phi_h * (h_ABL_wi - h_AUL))) / 3600) '==============2010.04.14 수정 + + End Select + Q_vh_b = Q_VE_B + End If + + If Dr공조.가습기유형 <> "분무가습" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) <> "분무가습" Then + + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * theta_AUL) / 3600) + Case "현열교환" '현열교환" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * (theta_AUL + Phi_h * (theta_ABL_wi - theta_AUL))) / 3600) '==============2010.04.14 수정 + Case "전열교환" '전열교환" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * (theta_AUL + Phi_h * (h_ABL_wi - h_AUL) / c_p_L)) / 3600) '==============2010.04.14 수정 + End Select + If Dr공조.가습기유형 = "가습불가" Then 'Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) = "가습불가" Then + Q_vh_b = Q_VE_ZU + Else + Q_vh_b = Q_VE_ZU + Q_vm_b = Q_VE_B - Q_VE_ZU + End If + + End If + Else + Q_vh_b = 0 + Q_vm_b = 0 + + End If + '------------------------------------------------------------------------------------------------------------------------------------------ + If TOSG(Drow분석(0).냉방요구량공조) > 0 Then ' Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) > 0 Then + '냉방공조처리에너지(냉각,리턴공기혼합유무(리턴공기혼합율 계산, 열회수유무(현열 또는 전열, 열회수율 입력) + + Q_c_b = TOSG(Drow분석(0).냉방요구량공조) 'Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) + Select Case Dr공조.공조방식.Trim 'Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + If Dr공조.외기냉방제어유무 = "유" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "유" Then + If theta_AUL - theta_i_c_soll > 0 Then + Q_c_b = Q_c_b - (theta_AUL - theta_i_c_soll) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Else + Q_c_b = Q_c_b - (theta_i_c_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + End If + End If + If Q_c_b < 0 Then Q_c_b = 0 + theta_ZUL_so = theta_i_c - 1000 * Q_c_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) 'd_Nutz=d_V_mech_m 으로 적용 + + Case "변풍량" '변풍량" + If V_dot_mech_m > V_dot_A * A_B OrElse V_dot_mech_m = 0 Then + theta_ZUL_so = theta_c_mech_m + Else + theta_ZUL_so = theta_i_c - 1000 * Q_c_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + End If + + End Select + + p_S_theta_ZUL_so = TOSG(Math.Exp(23.621 - 4065 / (theta_ZUL_so + 236.2506))) + p_95_theta_ZUL_so = TOSG(0.95 * p_S_theta_ZUL_so) + x_95_ZUL_so = TOSG(0.5911 / (100000 / p_95_theta_ZUL_so - 0.95)) + m_dot_1_L = V_dot_mech_m * rho_L + h_95_ZUL_so = c_p_L * theta_ZUL_so + x_95_ZUL_so * (r_0 + c_p_L * theta_ZUL_so) + + + 'If theta_ZUL_so > theta_AUL Then + + '냉방의 경우 가열에너지 + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (theta_AUL - theta_ABL_so) Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * theta_AUL) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'Case "현열교환" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (1 - Phi) * (theta_AUL - theta_ABL_so) Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi * (theta_ABL_so - theta_AUL))) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'Case "전열교환" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (1 - Phi) * (h_AUL - h_ABL_so) / c_p_L Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi * (h_ABL_so - h_AUL) / c_p_L)) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'End Select + 'End If + + If theta_ZUL_so > theta_AUL And Dr공조.외기냉방제어유무 = "유" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "유" Then + Q_vc_b = 0 + V_dot_mech_m = (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_c_mech_m - theta_AUL) * V_dot_A * A_B) / 1000 + Q_c_b / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_i_c - theta_AUL) / 1000) + If V_dot_mech_m < V_dot_A * A_B Then V_dot_mech_m = V_dot_A * A_B + Else + If 0.5911 / (100000 / p_95_theta_ZUL_so - 0.95) > (1 - u) * x_AUL + u * x_ABL_so Then + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * theta_AUL) / 3600 + Case "현열교환" '현열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi_c * (theta_ABL_so - theta_AUL))) / 3600 '==================2010.04.14 수정 + Case "전열교환" '전열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi_c * (h_ABL_so - h_AUL) / c_p_L)) / 3600 '==================2010.04.14 수정 + End Select + Else + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * h_AUL) / 3600 + Case "현열교환" '현열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * (h_AUL + c_p_L * Phi_c * (theta_ABL_so - theta_AUL))) / 3600 '==================2010.04.14 수정 + Case "전열교환" '전열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * (h_AUL + Phi_c * (h_ABL_so - h_AUL))) / 3600 '==================2010.04.14 수정 + End Select + End If + + End If + Else + Q_vc_b = 0 + + End If + '========================================================================================================================================== + '========================================================================================================================================== + + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + If eta_ZUL <> 0 Then + P_V_ZUL_m = V_dot_mech_m * Delta_p_star_ZUL / eta_ZUL / 3600000 ' V_dot_ZUL = V_dot_mech_m (3.2.5-7) 정풍량 (3600은 Pa을 W환산하면서 h를 s로 환산) + Else + P_V_ZUL_m = 0 + End If + + If eta_ABL <> 0 Then + P_V_ABL_m = V_dot_mech_m * Delta_p_star_ABL / eta_ABL / 3600000 + Else + P_V_ABL_m = 0 + End If + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m '(3.2.5-10) 정풍량 + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m '(3.2.5-10) 정풍량 + + Case "변풍량" '변풍량" + + Sigma_V_dot = t_V_mech_m * d_V_mech_m * V_dot_mech_m + 1000 * Q_c_b / (c_p_Lrho_L * (theta_i_c - theta_V_mech_m)) '(3.2.5-5) 월간 공조풍량 합(변풍량) + ' 수식 변경 Sigma_V_dot_3 = t_V_mech_m * d_V_mech_m * (V_dot_mech_m ^ 3) + Q_c_b / (c_p_L * rho_L * (theta_i_c - theta_V_mech_m)) + Sigma_V_dot_3 = TOSG(Sigma_V_dot * (0.8 * V_dot_mech_m + 0.2 * V_dot_mech_max) ^ 2) + + If V_dot_mech_m = 0 Then + P_V_ZUL_m = 0 'CSng(V_dot_mech_m * Delta_p_star_ZUL * f_p / eta_ZUL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ZUL * (1 - f_p)) / (eta_ZUL * V_dot_mech_m ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검토 + P_V_ABL_m = 0 'CSng(V_dot_mech_m * Delta_p_star_ABL * f_p / eta_ABL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ABL * (1 - f_p)) / (eta_ABL * V_dot_mech_m ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검 + Q_V_E_ZUL_m = 0 'P_V_ZUL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Q_V_E_ABL_m = 0 'P_V_ABL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Else + + '==========================변풍량에서도 효율이 없을 경우 동력이 0인 것으로 평가 2010.10.10 + If eta_ZUL <> 0 Then + P_V_ZUL_m = TOSG(V_dot_mech_m * Delta_p_star_ZUL * f_p / eta_ZUL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ZUL * (1 - f_p)) / (eta_ZUL * V_dot_mech_max ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검토 + '=============================================================================================== 최소외기도입량 동력보다 작으면 최소외기도입 동력으로 적용 2012.01.31 + If P_V_ZUL_m < V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600 Then + P_V_ZUL_m = V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600 + End If + '=============================================================================================== + Else + P_V_ZUL_m = 0 + End If + If eta_ABL <> 0 Then + P_V_ABL_m = TOSG(V_dot_mech_m * Delta_p_star_ABL * f_p / eta_ABL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ABL * (1 - f_p)) / (eta_ABL * V_dot_mech_max ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검 + '=============================================================================================== 최소외기도입량 동력보다 작으면 최소외기도입 동력으로 적용 2012.01.31 + If P_V_ABL_m < V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600 Then + P_V_ABL_m = V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600 + End If + '=============================================================================================== + Else + P_V_ABL_m = 0 + End If + '============================================================2010.10.10 + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + End If + + End Select + + '------------------------------------------------------------------------------------------------------------------------------------------ + ' 우선 외기온도에 대한 공조에너지 요구량 산정 필요 ???? + + 'q_st_12h_m = q_st_18_12h_m '(3.2.5-27) + + 'If theta_e < theta_hc_m Then + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + 'Case "현열교환" + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_wi - theta_e) '(3.2.5-55) 순수 현열 회수기 + 'Case "전열교환" + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_wi - theta_e) '(3.2.5-56) 현열 및 습기 회수기 우선 현열만 고려 + 'End Select + 'q_h_12h_m = rho_L * (c_p_L * (theta_hc_m - theta_e) - Delta_h_WRG) * 12 * d_mth * V_dot_A * A_B + rho_L * c_p_L * (theta_h_mech_m - theta_i_h_soll) * 12 * d_mth * (V_dot_mech_m - V_dot_A * A_B) 'theta_h_mech_m 과 theta_hc_m 중 선택 검토 + + 'End If + + 'If theta_e > theta_hc_m Then + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + 'Case "현열교환" + 'If theta_e > theta_ABL_so Then + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_e - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 + 'Else + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_so - theta_e) '(3.2.5-55) 순수 현열 회수기 + 'End If + 'Case "전열교환" + 'If theta_e > theta_ABL_so Then + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_e - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 우선 현열만 고려 + 'Else + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_so - theta_e) '(3.2.5-55) 순수 현열 회수기 우선 현열만 고려 + 'End If + + 'End Select + + 'q_c_12h_m = rho_L * (c_p_L * (theta_e - theta_hc_m) - Delta_h_WRG) * 12 * d_mth * V_dot_A * A_B + rho_L * c_p_L * (theta_i_c_soll - theta_c_mech_m) * 12 * d_mth * (V_dot_mech_m - V_dot_A * A_B) 'theta_c_mech_m 과 theta_hc_m 중 선택 검토 + + 'End If + + + 'f_h_H = 1 + 6.333 * 10 ^ (-3) * (t_V_mech_m - 12) - 2.689 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 + 6.94 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-31) + 'f_h_C = 1 - 5.583 * 10 ^ (-3) * (t_V_mech_m - 12) + 2.153 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 - 6.597 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-32) 편차가 없는 습도요구 + 'f_h_C = 1 - 1.552 * 10 ^ (-3) * (t_V_mech - 12) - 8.073 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 - 1.302 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-32) 편차가 있는 습도요구 추후 검토 + 'f_h_st = 1 + + 'q_h_m = q_h_12h_m * t_V_mech_m / 12 * f_h_H * d_V_mech_m / d_mth '(3-28) + 'q_c_m = q_c_12h_m * t_V_mech_m / 12 * f_h_C * d_V_mech_m / d_mth '(3-29) + 'q_st_m = q_st_12h_m * t_V_mech_m / 12 * f_h_st * d_V_mech_m / d_mth '(3-30) + + 'Q_vh_b = q_h_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + 'Q_vc_b = q_c_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + 'Q_vm_b = q_st_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + + 'Q_vh_b = q_h_m / 1000 ' 우선 공조풍량을 미리 포함시킴 추후 검토 + 'Q_vc_b = q_c_m / 1000 ' 우선 공조풍량을 미리 포함시킴 추후 검토 + 'Q_vm_b = q_st_m * V_dot_mech_m / 1000 '(3-36) =Q_vi_b (7-2,7-8,7-14) + + '========================================================================================================================================== + Drow분석(0).공조풍량 = V_dot_mech_m + 'Sheets("" & i_count_month & "").Cells(17, 7 + i_count_zone) = V_dot_mech_m + If Q_vh_b < 0 Then + Q_vh_b = 0 '음수 여부 추후 검토 + End If + Drow분석(0).공조요구량난방 = Q_vh_b + 'Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) = Q_vh_b + + If Q_vc_b < 0 Then + Q_vc_b = 0 '냉방공조에너지요구량이 -인 것은 난방에서 처리되는 것으로 설정 + End If + Drow분석(0).공조요구량냉방 = Q_vc_b + 'Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) = Q_vc_b + + If Q_vm_b < 0 Then + Q_vm_b = 0 '음수 여부 추후 검토 + End If + Drow분석(0).공조요구량가습 = Q_vm_b ' Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) = Q_vm_b + Drow분석(0).환기요구량 = Q_V_E_ZUL_m + Q_V_E_ABL_m ' Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = Q_V_E_ZUL_m + Q_V_E_ABL_m + '========================================================================================================================================== + 'End If + 'End If + Next + + Else + Drow분석(0).공조풍량 = 0 ' Sheets("" & i_count_month & "").Cells(17, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량난방 = 0 ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량냉방 = 0 'Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량가습 = 0 ' Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) = 0 + Drow분석(0).환기요구량 = 0 'Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = 0 + + + '==========================================================================2010.02.04 추가부분 시작 + If Dr존.냉난방공조 = "환기" OrElse (Dr존.냉난방공조 = "난방" AndAlso Dr존.외기부하처리여부 = "예") Then '//환기 + Dim DR프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필.ToString & "' and code <> '0'"), DS.tbl_profileRow()) + If DR프로필.GetUpperBound(0) = 0 Then + t_V_mech_m = TOSG(DR프로필(0).운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + V_dot_A = TOSG(DR프로필(0).최소도입외기량) 'Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + '===================================================================================2010.2.25 추가 + 'd_V_mech_m = Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + Select Case i_count_month + Case 0 : d_V_mech_m = 0 + Case 1 : d_V_mech_m = DR프로필(0).day01 + Case 2 : d_V_mech_m = DR프로필(0).day02 + Case 3 : d_V_mech_m = DR프로필(0).day03 + Case 4 : d_V_mech_m = DR프로필(0).day04 + Case 5 : d_V_mech_m = DR프로필(0).day05 + Case 6 : d_V_mech_m = DR프로필(0).day06 + Case 7 : d_V_mech_m = DR프로필(0).day07 + Case 8 : d_V_mech_m = DR프로필(0).day08 + Case 9 : d_V_mech_m = DR프로필(0).day09 + Case 10 : d_V_mech_m = DR프로필(0).day10 + Case 11 : d_V_mech_m = DR프로필(0).day11 + Case 12 : d_V_mech_m = DR프로필(0).day12 + End Select + '===================================================================================2010.2.25 추가 + + End If + + Dim DR공조() As DS.tbl_kongjoRow = CType(DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <> '0'"), DS.tbl_kongjoRow()) + If DR공조.GetUpperBound(0) = 0 Then + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2010.05.26 추가 + If DR공조(0).열교환기유형.Trim = "현열교환" OrElse DR공조(0).열교환기유형.Trim = "전열교환" Then + Phi_h = TOSG(DR공조(0).열회수율) 'Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) + Phi_c = TOSG(DR공조(0).열회수율냉) 'Worksheets("공조처리시스템").Range("열교환기1").Offset(2, i_count_AHU - 1) + Else + Phi_h = 0 + Phi_c = 0 + End If + '// 여기 i_count_month 에 0 이 오지는 않나요? 예.. 1 부터 시작해요 + '// If CSng(Drow분석(0).난방요구량공조) > 0 Then 'Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + + If TOSG(Drow분석(0).난방요구량공조) > 0 Then + Drow분석(0).난방요구량공조 = (1 - Phi_h) * TOSG(Drow분석(0).난방요구량공조) + End If + + If TOSG(Drow분석(0).냉방요구량공조) > 0 Then + Drow분석(0).냉방요구량공조 = (1 - Phi_c) * TOSG(Drow분석(0).냉방요구량공조) + End If + + 'If Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + ' Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) = (1 - Phi_h) * Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) + 'End If + + 'If Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) > 0 Then + ' Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) = (1 - Phi_c) * Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) + 'End If + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2010.05.26 추가 + + eta_ZUL = TOSG(DR공조(0).총효율급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(2, i_count_AHU - 1) + eta_ABL = TOSG(DR공조(0).총효율배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(3, i_count_AHU - 1) + Delta_p_star_ZUL = TOSG(DR공조(0).총압력손실급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(0, i_count_AHU - 1) + Delta_p_star_ABL = TOSG(DR공조(0).총압력손실배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(1, i_count_AHU - 1) + + If eta_ZUL <> 0 Then + P_V_ZUL_m = V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600000 + Else + P_V_ZUL_m = 0 + End If + + If eta_ABL <> 0 Then + P_V_ABL_m = V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600000 + Else + P_V_ABL_m = 0 + End If + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m + + + Result.E분석(i_count_month).환기에너지요구량(Dr존.code) = Q_V_E_ZUL_m + Q_V_E_ABL_m + 'Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = Q_V_E_ZUL_m + Q_V_E_ABL_m + End If + Else + Result.E분석(i_count_month).환기에너지요구량(Dr존.code) = 0 + End If + '==========================================================================2010.02.04 추가부분 끝 + + + + + End If + + Next + + + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/CAirHandling.vb b/ArinWarev1/DataSet/Calculator/CAirHandling.vb new file mode 100644 index 0000000..9fce4d2 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CAirHandling.vb @@ -0,0 +1,850 @@ +Public Class CAirHandling + + ''' + ''' 최대냉/난반후하 계산식인거 같다. + ''' + ''' + ''' + Public Overridable Sub Calc_Max_Power(ByVal i_HeatCool As Integer) + + pLog.Add(String.Format(">>Calc_Max_Power 진입")) + + 'Dim i_count_zone As Integer, i_count_AHU As Integer, i_count_profile As Integer + Dim c_p_L As Decimal, rho_L As Decimal + Dim theta_i_c As Decimal, theta_ABL_wi As Decimal, theta_ABL_so As Decimal, theta_AUL_wi As Decimal, theta_AUL_so As Decimal, theta_ZUL_wi As Decimal, theta_ZUL_so As Decimal + Dim x_ABL_wi As Decimal, x_ABL_so As Decimal, x_AUL_wi As Decimal, x_AUL_so As Decimal, x_ZUL_so As Decimal + Dim h_ABL_wi As Decimal, h_ABL_so As Decimal, h_AUL_wi As Decimal, h_AUL_so As Decimal, h_ZUL_wi As Decimal, h_ZUL_so As Decimal + Dim Delta_h_WRG As Decimal, V_dot_mech_m As Decimal, V_dot_star As Decimal, theta_c_mech_min As Decimal, ps_theta_ZUL_so As Decimal + Dim Q_dot_h_star As Decimal, Q_dot_c_star As Decimal, Q_dot_st_star As Decimal + Dim Q_dot_h_max As Decimal, Q_dot_c_max As Decimal + Dim theta_e_min As Decimal, theta_e_max As Decimal, V_A As Decimal, theta_i_h As Decimal, theta_i_c_soll As Decimal + Dim A_B As Decimal, c_p_Lrho_L As Decimal + + pLog.Add("Calc", String.Format("Calc_max_power i_HeatCool={0}", i_HeatCool)) + + theta_i_c = 24 + theta_i_c_soll = 26 + theta_i_h = 20 + c_p_L = 1.006 'kJ/kg K + rho_L = 1.204 'kg/m3 (20도 1기압상태) + c_p_Lrho_L = 0.34 'Wh/m3 K + theta_ABL_wi = 22 + x_ABL_wi = 0.008 '편차가 없는 습도요구 적용 + h_ABL_wi = 42.6 '편차가 없는 습도요구 적용 + theta_ABL_so = 26 + x_ABL_so = 0.008 '편차가 없는 습도요구 적용 + h_ABL_so = 46.7 '편차가 없는 습도요구 적용 + theta_AUL_wi = -12 + x_AUL_wi = 0.001 + h_AUL_wi = -9.6 + theta_AUL_so = 32 + x_AUL_so = 0.012 + h_AUL_so = 63 + theta_e_min = -11.3 + theta_e_max = 31.5 + + + 'Dim dr공조처리 As DS.tbl_kongjoRow + + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") + + Dim dr최대냉난방부하 As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr존.code & "'")(0), DSR.최대냉난방부하Row) + If Dr존.냉난방공조 = "냉방" Or Dr존.냉난방공조 = "냉난방" Then + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + Dim dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + V_A = TOSG(dr프로필.최소도입외기량) * A_B ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) * A_B + + For Each dr공조처리 As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <>'0'", "code") + '//아래두코드는 상단코드로 변경 + 'If Dr존.냉난방공조처리시스템 <> "" Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) <> "" Then + 'If Dr존.냉난방공조처리시스템 = dr공조처리.code Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) = Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + + ' 공조기 최대 가열성능 + If i_HeatCool = 1 Then + If Dr존.냉난방공조 = "냉난방" Then ' Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉난방" Then + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '"열회수불가" + Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + Case "현열교환" '현열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율) * c_p_L * (theta_ABL_wi - theta_AUL_wi) '(3.2.5-55) 순수 현열 회수기 '================2010.03.22 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율) * c_p_L * (h_ABL_wi - h_AUL_wi) '(3.2.5-56) 현열 및 습기 회수기 '================2010.03.22 수정 + End Select + + + + theta_ZUL_wi = TOSG(dr공조처리.설정치난방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(1, i_count_AHU - 1) 'theta_h_mech_min '(도표 3-3) + + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.001 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-38) 습도요구 없음 + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.006 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-42) 편차가 있는 습도요구 + h_ZUL_wi = TOSG(1.01 * theta_ZUL_wi + 0.008 * (2501 + 1.86 * theta_ZUL_wi)) '(3.2.5-48) 편차가 없는 습도요구만 우선 적용 + Q_dot_h_max = TOSG(dr최대냉난방부하.최대난방기기부하) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + If (TOSG(dr공조처리.설정치난방) - theta_i_h) > 0 Then + V_dot_mech_m = 1000 * Q_dot_h_max / (c_p_Lrho_L * (TOSG(dr공조처리.설정치난방) - theta_i_h)) + Else + V_dot_mech_m = 0 + End If + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + + V_dot_star = V_dot_mech_m + If dr공조처리.열교환기유형 = "전열교환" Then ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) = "전열교환" Then + Q_dot_h_star = V_dot_star * rho_L * (h_ZUL_wi - h_AUL_wi - Delta_h_WRG) / 3600 '(3.2.5-57) 증기가습 있음 - 열교환방식으로 수정 추후 검토 + Else + Q_dot_h_star = V_dot_star * rho_L * (c_p_L * (theta_ZUL_wi - theta_AUL_wi) - Delta_h_WRG) / 3600 '(3.2.5-58) 증기가습 없음 - 열교환방식으로 수정 추후 검토 + End If + + dr최대냉난방부하.최대가열성능 = Q_dot_h_star + 'Worksheets("0").Range("최대난방부하1").Offset(3, i_count_zone - 1) = Q_dot_h_star + If Q_dot_h_max > (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000 Then + dr최대냉난방부하.최대난방실내부하 = (Q_dot_h_max - (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000) + 'Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) = Q_dot_h_max - (c_p_Lrho_L * (theta_i_h - theta_e_min) * V_A) / 1000 + Else + dr최대냉난방부하.최대난방실내부하 = 0 + 'Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) = 0 + End If + End If + + '공조기 최대 가습성능 + + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.001 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-38) 습도요구 없음 + 'h_ZUL_wi = 1.01 * theta_ZUL_wi + 0.006 * (2501 + 1.86 * theta_ZUL_wi) '(3.2.5-42) 편차가 있는 습도요구 + h_ZUL_wi = TOSG(1.01 * theta_ZUL_wi + 0.008 * (2501 + 1.86 * theta_ZUL_wi)) '(3.2.5-48) 편차가 없는 습도 요구 + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Delta_h_WRG = 0 '(3.2.5-63) 열 회수기 없음 + Case "현열교환'" '현열교환" + Delta_h_WRG = 2501 * TOSG(dr공조처리.열회수율) * (x_ABL_wi - x_AUL_wi) '(3.2.5-64) 현열 및 습기 회수기 '================2010.03.22 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = 2501 * TOSG(dr공조처리.열회수율) * (x_ABL_wi - x_AUL_wi) '(3.2.5-64) 현열 및 습기 회수기 '================2010.03.22 수정 + End Select + + Q_dot_st_star = V_dot_star * rho_L * (h_ZUL_wi - h_AUL_wi - Delta_h_WRG) / 3600 '(3.2.5-65) + dr최대냉난방부하.최대가습성능 = Q_dot_st_star + dr최대냉난방부하.공조풍량 = V_dot_star + 'Worksheets("0").Range("최대가습성능1").Offset(0, i_count_zone - 1) = Q_dot_st_star + 'Worksheets("0").Range("최대가습성능1").Offset(1, i_count_zone - 1) = V_dot_star '공조풍량 + + Else + + ' 공조기 최대 냉각성능 + + theta_c_mech_min = TOSG(dr공조처리.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + theta_ZUL_so = theta_c_mech_min '(도표 3.3) + ps_theta_ZUL_so = TOSG(Math.Exp(23.621 - 4065 / (theta_ZUL_so + 236.2506))) '(3.2.5-37) 0.01C<=theta<=80C + x_ZUL_so = TOSG(0.5911 / (100000 / ps_theta_ZUL_so - 0.95)) '(3.2.5-41) + + 'h_ZUL_so = 1.01 * theta_ZUL_so + 0.012 * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-39) 습도요구 없음 ps_theta_ZUL_so>1892Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-40) 습도요구 없음 ps_theta_ZUL_so<=1892Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + 0.011 * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-43) 편차가 있는 습도요구 ps_theta_ZUL_so>1737Pa + 'h_ZUL_so = 1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so) '(3.2.5-44) 편차가 있는 습도요구 ps_theta_ZUL_so<=1737Pa + + If ps_theta_ZUL_so > 1269 Then + h_ZUL_so = TOSG(1.01 * theta_ZUL_so + 0.008 * (2501 + 1.86 * theta_ZUL_so)) '(3.2.5-43) 편차가 없는 습도요구 ps_theta_ZUL_so>1269Pa + Else + h_ZUL_so = TOSG(1.01 * theta_ZUL_so + x_ZUL_so * (2501 + 1.86 * theta_ZUL_so)) '(3.2.5-44) 편차가 없는 습도요구 ps_theta_ZUL_so<=1269Pa + End If + + Select Case dr공조처리.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Delta_h_WRG = 0 '(3.2.5-59) 열 회수기 없음 + Case "현열교환" '현열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율냉) * c_p_L * (theta_AUL_so - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 '================2010.03.22 수정, =============2010.04.14 수정 + Case "전열교환" '전열교환" + Delta_h_WRG = TOSG(dr공조처리.열회수율냉) * c_p_L * (h_AUL_so - h_ABL_so) '(3.2.5-56) 현열 및 습기 회수기 '================2010.03.22 수정, =============2010.04.14 수정 + End Select + + Q_dot_c_max = TOSG(dr최대냉난방부하.최대냉방기기부하) ' Worksheets("0").Range("최대냉방부하1").Offset(0, i_count_zone - 1) + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + If (theta_i_c - TOSG(dr공조처리.설정치냉방)) > 0 Then + V_dot_star = 1000 * Q_dot_c_max / (c_p_Lrho_L * (theta_i_c - TOSG(dr공조처리.설정치냉방))) + Else + V_dot_star = 0 + End If + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Q_dot_c_star = V_dot_star * rho_L * (h_AUL_so - h_ZUL_so - Delta_h_WRG) / 3600 '(3.2.5-62) + + dr최대냉난방부하.최대냉각성능 = Q_dot_c_star + dr최대냉난방부하.최대냉방실내부하 = Q_dot_c_max - (c_p_Lrho_L * (theta_e_max - theta_i_c_soll) * V_A) / 1000 + + 'Worksheets("0").Range("최대냉방부하1").Offset(3, i_count_zone - 1) = Q_dot_c_star + 'Worksheets("0").Range("최대냉방부하1").Offset(1, i_count_zone - 1) = Q_dot_c_max - (c_p_Lrho_L * (theta_e_max - theta_i_c_soll) * V_A) / 1000 + End If + + 'End If + 'End If + + Next + Else + + dr최대냉난방부하.최대난방실내부하 = 0 + dr최대냉난방부하.최대냉방실내부하 = 0 + dr최대냉난방부하.최대가열성능 = 0 + dr최대냉난방부하.최대냉각성능 = 0 + dr최대냉난방부하.최대가습성능 = 0 + dr최대냉난방부하.공조풍량 = 0 + End If + + Next + + pLog.Add(String.Format(">>Calc_Max_Power 완료")) + + End Sub + + Public Overridable Sub Calc_AirHandling(ByVal i_count_month As Integer, ByVal theta_e As Decimal, Optional p_난방온도 As Decimal = 20, Optional p_냉방온도 As Decimal = 26) ' ByVal d_mth As Integer, + + pLog.Add(String.Format(">>Calc_AirHandling 진입 : i_count_month={0},theta_e={1},p_난방온도={2},p_냉방온도={3}", i_count_month, theta_e, p_난방온도, p_냉방온도)) + + Dim A_B As Decimal + Dim x_ABL_wi As Decimal, h_ABL_wi As Decimal, x_ABL_so As Decimal, h_ABL_so As Decimal, x_AUL_wi As Decimal, h_AUL_wi As Decimal, x_AUL_so As Decimal, h_AUL_so As Decimal + Dim c_p_L As Decimal, rho_L As Decimal, f_p As Decimal + Dim q_st_18_12h_m As Decimal + Dim eta_ZUL As Decimal, eta_ABL As Decimal + Dim Delta_p_star_ZUL As Decimal, Delta_p_star_ABL As Decimal + Dim Q_V_E_ZUL_m As Decimal, Q_V_E_ABL_m As Decimal, Q_c_b As Decimal, Q_h_b As Decimal, Q_vh_b As Decimal, Q_vc_b As Decimal, Q_vm_b As Decimal + Dim t_V_mech_m As Decimal, theta_V_mech_m As Decimal + Dim V_dot_mech_m As Decimal, V_dot_mech_max As Decimal, V_dot_A As Decimal, P_V_ZUL_m As Decimal, P_V_ABL_m As Decimal + Dim Sigma_V_dot As Decimal, Sigma_V_dot_3 As Decimal + Dim theta_h_mech_m As Decimal, theta_c_mech_m As Decimal + + ' Dim i_count_zone As Integer, i_count_profile As Integer, i_count_AHU As Integer + Dim theta_i_c_soll As Integer, theta_i_c As Integer, theta_i_h_soll As Integer, d_V_mech_m As Integer, theta_ABL_wi As Integer, theta_ABL_so As Integer + Dim theta_e_min As Decimal, theta_e_max As Decimal + Dim x_ZUL_wi As Decimal, theta_ZUL_wi As Decimal, theta_AUL As Decimal, h_AUL As Decimal, x_AUL As Decimal, theta_AUL_j As Decimal, x_AUL_j As Decimal, psi_AUL_j As Decimal + Dim h_B As Decimal, r_0 As Decimal, m_dot_1_L As Decimal, u As Decimal, Phi_h As Decimal, Phi_c As Decimal '===============================2010.04.14 수정 + Dim Q_VE_B As Decimal, Q_VE_ZU As Decimal + Dim c_p_Lrho_L As Decimal, theta_ZUL_so As Decimal, p_S_theta_ZUL_so As Decimal, p_95_theta_ZUL_so As Decimal, x_95_ZUL_so As Decimal + Dim h_95_ZUL_so As Decimal, i_count_air As Integer, i_count_start_time As Integer, i_count_end_time As Integer ', i_profile As Integer + Dim P_D_j_theta_AUL_j As Decimal + + ' 공조처리 + theta_i_h_soll = p_난방온도 + theta_i_c_soll = p_냉방온도 + + theta_i_c = 24 'theta_i_c_soll - 2 '(2-36) + + c_p_L = 1.006 'kJ/kg K + rho_L = 1.204 'kg/m3 (20도 1기압상태) + c_p_Lrho_L = 0.34 'Wh/m3 K + f_p = 0.4 '= Delta_p_konst / Delta_p_star = 0.4 '(3.2.5-13, 7-1) + '================================================2010.2.21 수정 + 'd_V_mech_m = d_mth + '================================================2010.2.21 수정 + theta_ABL_wi = 20 + x_ABL_wi = 0.008 '편차가 없는 습도요구 적용 + h_ABL_wi = 42.6 '편차가 없는 습도요구 적용 + theta_ABL_so = 26 + x_ABL_so = 0.008 'kg/kg 편차가 없는 습도요구 적용 + h_ABL_so = 46.7 'kJ/kg 편차가 없는 습도요구 적용 + x_AUL_wi = 0.001 + h_AUL_wi = -9.6 + x_AUL_so = 0.012 + h_AUL_so = 63 + q_st_18_12h_m = 0 '우선 0으로 적용 추후 검토 + theta_e_min = -11.3 + theta_e_max = 31.5 + r_0 = 2500 'kJ/kg + x_ZUL_wi = 0.00699 + + + 'Dim Dr프로필 As DS.tbl_profileRow '//아래에서 할당되도록되어있다. + '//location 은 거의 서울(0번줄)이된다. + Dim Drow평균온도 As DS.weather_tempRow = CType(DSET.weather_temp.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(i_count_month, "0000") & "'")(0), DS.weather_tempRow) + Dim Drow평균습도 As DS.weather_supdoRow = CType(DSET.weather_supdo.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(i_count_month, "0000") & "'")(0), DS.weather_supdoRow) + Dim Mon As String = "M" & Format(i_count_month, "00") + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + 'If Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉방" Or Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) = "냉난방" Then + If Dr존.냉난방공조 = "냉방" OrElse Dr존.냉난방공조 = "냉난방" Then + + '//존의 프로필과 일치하는 프로필검색후 적용 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "'")(0), DS.tbl_profileRow) + t_V_mech_m = TOSG(Dr프로필.운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + V_dot_A = TOSG(Dr프로필.최소도입외기량) ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) + 'i_profile = i_count_profile '//아래 루프종료문은 없어서 추가했다. + '===================================================================================2010.2.21 추가 + If i_count_month = 0 Then + d_V_mech_m = 0 + Else + d_V_mech_m = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + '===================================================================================2010.2.21 추가 + + For Each Dr공조 As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <> '0'", "code") + 'If Dr존.냉난방공조처리시스템 <> "" Then ' Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) <> "" Then + 'If Worksheets("입력존").Range("입력난방공급기기1").Offset(2, i_count_zone - 1) = Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + 'If Dr존.냉난방공조처리시스템 = Dr공조.code Then ' Worksheets("공조처리시스템").Range("공조기기1").Offset(0, i_count_AHU - 1) Then + Q_vh_b = 0 + Q_vc_b = 0 + Q_vm_b = 0 + eta_ZUL = TOSG(Dr공조.총효율급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(2, i_count_AHU - 1) + eta_ABL = TOSG(Dr공조.총효율배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(3, i_count_AHU - 1) + Delta_p_star_ZUL = TOSG(Dr공조.총압력손실급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(0, i_count_AHU - 1) + Delta_p_star_ABL = TOSG(Dr공조.총압력손실배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(1, i_count_AHU - 1) + theta_V_mech_m = TOSG(Dr공조.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + theta_h_mech_m = TOSG(Dr공조.설정치난방) 'Worksheets("공조처리시스템").Range("공조방식1").Offset(1, i_count_AHU - 1) + theta_c_mech_m = TOSG(Dr공조.설정치냉방) ' Worksheets("공조처리시스템").Range("공조방식1").Offset(2, i_count_AHU - 1) + + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + + theta_AUL = 0 + x_AUL = 0 + i_count_start_time = CInt(Dr프로필.운전시작시간.Substring(0, Dr프로필.운전시작시간.IndexOf(":"))) ' Worksheets("설정조건").Range("사용시작시간1").Offset(3, i_profile) + i_count_end_time = CInt(Dr프로필.운전종료시간.Substring(0, Dr프로필.운전종료시간.IndexOf(":"))) ' Worksheets("설정조건").Range("사용시작시간1").Offset(4, i_profile) + If i_count_start_time - i_count_end_time < 0 Then + For i_count_air = 0 To CInt(t_V_mech_m - 1) '자정 전까지 운전 조건 + '//Dr기상데이터의 2번째 인덱스부터 시간이다. + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) ' Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) / 100 ' Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + Else + For i_count_air = 0 To 23 - i_count_start_time '자정 넘어까지 운전 조건 + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) 'Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_start_time + i_count_air + 1, "00"))) / 100 'Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_start_time + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + For i_count_air = 0 To i_count_end_time - 1 '자정 넘어까지 운전 조건 + theta_AUL_j = TOSG(Drow평균온도("t" & Format(i_count_air + 1, "00"))) 'Worksheets("기상데이타").Range("시간별평균온도1").Offset((i_count_month - 1) * 25 + i_count_air, location - 1) + psi_AUL_j = TOSG(Drow평균습도("t" & Format(i_count_air + 1, "00"))) / 100 'Worksheets("기상데이타").Range("시간별평균습도1").Offset((i_count_month - 1) * 25 + i_count_air, location - 1) / 100 + P_D_j_theta_AUL_j = TOSG(psi_AUL_j * Math.Exp(23.621 - 4065 / (theta_AUL_j + 236.2506))) + x_AUL_j = TOSG(0.5911 / (100000 / P_D_j_theta_AUL_j - 0.95)) + theta_AUL = theta_AUL + theta_AUL_j + x_AUL = x_AUL + x_AUL_j + Next + + End If + + theta_AUL = theta_AUL / t_V_mech_m + x_AUL = x_AUL / t_V_mech_m + h_AUL = c_p_L * theta_AUL + x_AUL * (r_0 + c_p_L * theta_AUL) + + ''V_dot_mech_h_max = Worksheets("0").Range("최대난방부하1").Offset(1, i_count_zone - 1) * 1000 / (c_p_Lrho_L * (theta_h_mech_m - theta_i_h_soll)) '(3.2.4-86) + + '//현재존과일치하는 데이터수집 + If (theta_i_c_soll - theta_c_mech_m) <> 0 Then + V_dot_mech_max = TOSG(Result.최대부하.Item(Dr존.code).최대냉방실내부하) * 1000 / (c_p_Lrho_L * (theta_i_c_soll - theta_c_mech_m)) '(3.2.4-86) + Else + V_dot_mech_max = 0 + End If + + ' Worksheets("0").Range("최대냉방부하1").Offset(1, i_count_zone - 1) + + ''If V_dot_mech_h_max < V_dot_mech_c_max Then + '' V_dot_mech_max = V_dot_mech_c_max + ''Else + '' V_dot_mech_max = V_dot_mech_h_max + ''End If + + If V_dot_mech_max < V_dot_A * A_B Then V_dot_mech_max = V_dot_A * A_B + + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + V_dot_mech_m = V_dot_mech_max + + Case "변풍량" '변풍량" + '//계산결과가들엉잇는 12개월용시트(1~12)에ㅓ 해당값을 찾는 엑셀루틴이다. 이건좀 교환하기가 그러네;;ㅠ + '//해당12개시트의 데이터는 DSR월별에너지분석에 존재한다 이곳에는 월/존두개의 기본키가존재하며 해당rOW를 가져와야한다. + + If Drow분석.GetUpperBound(0) = -1 Then + MsgBox("월별에너지분석에 " & i_count_month & "데이터가 없습니다", MsgBoxStyle.Critical, "계산실패") + Return + End If + + 'Q_c_b = Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) - (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + Q_c_b = TOSG(Drow분석(0).냉방요구량공조) - (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + + If Q_c_b < 0 Then Q_c_b = 0 + + If (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_i_c - theta_c_mech_m)) = 0 Then + V_dot_mech_m = 0 + Else + V_dot_mech_m = (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_AUL - theta_c_mech_m) * V_dot_A * A_B) / 1000 + Q_c_b / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_i_c - theta_c_mech_m) / 1000) + End If + + '(3.2.5-4) 공조풍량(변풍량) + 'If V_dot_mech_m < 0 Then + 'V_dot_mech_m = 0 + 'End If + + If V_dot_mech_m < V_dot_A * A_B Then V_dot_mech_m = V_dot_A * A_B + + End Select + + 'If V_dot_mech_m = 0 Then + ' theta_hc_m = theta_V_mech_m + 'Else + ' theta_hc_m = theta_V_mech_m - Q_V_E_ZUL_m * 1000 / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * V_dot_mech_m) + 1.4 '(3.2.5-22) Q_V_E_ZUL_m에 1000 을 곱해야하는지 확인요망 + 'End If + + + + + '========================================================================================================================================== + '월별 풍량당 공조에너지 요구량은 추후 적용 + + + 'If theta_hc_m <= 22 And theta_hc_m > 18 Then + 'q_h_12h_m = q_h_18_12h_m + g_h_o_m * (theta_hc_m - 18) '(3.2.5-23) 18C 14 Then + 'q_h_12h_m = q_h_18_12h_m + g_h_u_m * (theta_hc_m - 18) '(3.2.5-24) 14C 0 Then 'Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + + '난방공조처리(가열,가열+가습(분무 또는 증기),리턴공기혼합유무(리턴공기혼합율 입력),열회수유무(현열 또는 전열, 열회수율 입력) + + 'Q_h_b = Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) - (theta_i_h_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Q_h_b = TOSG(Drow분석(0).난방요구량공조) - (theta_i_h_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" + theta_ZUL_wi = 1000 * Q_h_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + theta_i_h_soll 'd_Nutz=d_V_mech_m 으로 적용 + + Case "변풍량" + If V_dot_mech_m > V_dot_A * A_B Then + theta_ZUL_wi = theta_h_mech_m + Else + If V_dot_mech_m = 0 Then + theta_ZUL_wi = theta_i_h_soll + Else + theta_ZUL_wi = 1000 * Q_h_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + theta_i_h_soll + End If + + End If + End Select + + m_dot_1_L = V_dot_mech_m * rho_L + + '외기모드 경우와 에너지 + 'theta_ZUL_wi "가습불가" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) <> "가습불가" Then + + h_B = c_p_L * theta_ZUL_wi + x_ZUL_wi * (r_0 + c_p_L * theta_ZUL_wi) + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * h_AUL) / 3600) + Case "현열교환" '현열교환" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * (h_AUL + c_p_L * Phi_h * (theta_ABL_wi - theta_AUL))) / 3600) '==============2010.04.14 수정 + Case "전열교환" '전열교환" + Q_VE_B = d_V_mech_m * (m_dot_1_L * t_V_mech_m * (h_B - u * h_ABL_wi - (1 - u) * (h_AUL + Phi_h * (h_ABL_wi - h_AUL))) / 3600) '==============2010.04.14 수정 + + End Select + Q_vh_b = Q_VE_B + End If + + If Dr공조.가습기유형 <> "분무가습" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) <> "분무가습" Then + + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * theta_AUL) / 3600) + Case "현열교환" '현열교환" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * (theta_AUL + Phi_h * (theta_ABL_wi - theta_AUL))) / 3600) '==============2010.04.14 수정 + Case "전열교환" '전열교환" + Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_wi - u * theta_ABL_wi - (1 - u) * (theta_AUL + Phi_h * (h_ABL_wi - h_AUL) / c_p_L)) / 3600) '==============2010.04.14 수정 + End Select + If Dr공조.가습기유형 = "가습불가" Then 'Worksheets("공조처리시스템").Range("공조방식1").Offset(5, i_count_AHU - 1) = "가습불가" Then + Q_vh_b = Q_VE_ZU + Else + Q_vh_b = Q_VE_ZU + Q_vm_b = Q_VE_B - Q_VE_ZU + End If + + End If + Else + Q_vh_b = 0 + Q_vm_b = 0 + + End If + '------------------------------------------------------------------------------------------------------------------------------------------ + If TOSG(Drow분석(0).냉방요구량공조) > 0 Then ' Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) > 0 Then + '냉방공조처리에너지(냉각,리턴공기혼합유무(리턴공기혼합율 계산, 열회수유무(현열 또는 전열, 열회수율 입력) + + Q_c_b = TOSG(Drow분석(0).냉방요구량공조) 'Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) + Select Case Dr공조.공조방식.Trim 'Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + If Dr공조.외기냉방제어유무 = "유" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "유" Then + If theta_AUL - theta_i_c_soll > 0 Then + Q_c_b = Q_c_b - (theta_AUL - theta_i_c_soll) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + Else + Q_c_b = Q_c_b - (theta_i_c_soll - theta_AUL) * c_p_L * rho_L * d_V_mech_m * t_V_mech_m * V_dot_A * A_B / 3600 + End If + End If + If Q_c_b < 0 Then Q_c_b = 0 + theta_ZUL_so = theta_i_c - 1000 * Q_c_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) 'd_Nutz=d_V_mech_m 으로 적용 + + Case "변풍량" '변풍량" + If V_dot_mech_m > V_dot_A * A_B OrElse V_dot_mech_m = 0 Then + theta_ZUL_so = theta_c_mech_m + Else + theta_ZUL_so = theta_i_c - 1000 * Q_c_b / (V_dot_mech_m * c_p_Lrho_L * t_V_mech_m * d_V_mech_m) + End If + + End Select + + p_S_theta_ZUL_so = TOSG(Math.Exp(23.621 - 4065 / (theta_ZUL_so + 236.2506))) + p_95_theta_ZUL_so = TOSG(0.95 * p_S_theta_ZUL_so) + x_95_ZUL_so = TOSG(0.5911 / (100000 / p_95_theta_ZUL_so - 0.95)) + m_dot_1_L = V_dot_mech_m * rho_L + h_95_ZUL_so = c_p_L * theta_ZUL_so + x_95_ZUL_so * (r_0 + c_p_L * theta_ZUL_so) + + + 'If theta_ZUL_so > theta_AUL Then + + '냉방의 경우 가열에너지 + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (theta_AUL - theta_ABL_so) Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * theta_AUL) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'Case "현열교환" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (1 - Phi) * (theta_AUL - theta_ABL_so) Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi * (theta_ABL_so - theta_AUL))) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'Case "전열교환" + 'If theta_ZUL_so > theta_ABL_so + (1 - u) * (1 - Phi) * (h_AUL - h_ABL_so) / c_p_L Then + 'Q_VE_ZU = d_V_mech_m * (m_dot_1_L * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi * (h_ABL_so - h_AUL) / c_p_L)) / 3600) + 'Q_vh_b = Q_vh_b + Q_VE_ZU + 'Else + 'If Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "무" Then + 'i_count_air = 1 + 'End If + 'End If + 'End Select + 'End If + + If theta_ZUL_so > theta_AUL And Dr공조.외기냉방제어유무 = "유" Then ' Worksheets("공조처리시스템").Range("공조방식1").Offset(6, i_count_AHU - 1) = "유" Then + Q_vc_b = 0 + V_dot_mech_m = (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_c_mech_m - theta_AUL) * V_dot_A * A_B) / 1000 + Q_c_b / (t_V_mech_m * d_V_mech_m * c_p_Lrho_L * (theta_i_c - theta_AUL) / 1000) + If V_dot_mech_m < V_dot_A * A_B Then V_dot_mech_m = V_dot_A * A_B + Else + If 0.5911 / (100000 / p_95_theta_ZUL_so - 0.95) > (1 - u) * x_AUL + u * x_ABL_so Then + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * theta_AUL) / 3600 + Case "현열교환" '현열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi_c * (theta_ABL_so - theta_AUL))) / 3600 '==================2010.04.14 수정 + Case "전열교환" '전열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * c_p_L * (theta_ZUL_so - u * theta_ABL_so - (1 - u) * (theta_AUL + Phi_c * (h_ABL_so - h_AUL) / c_p_L)) / 3600 '==================2010.04.14 수정 + End Select + Else + Select Case Dr공조.열교환기유형.Trim ' Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + Case "열회수불가" '열회수불가" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * h_AUL) / 3600 + Case "현열교환" '현열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * (h_AUL + c_p_L * Phi_c * (theta_ABL_so - theta_AUL))) / 3600 '==================2010.04.14 수정 + Case "전열교환" '전열교환" + Q_vc_b = -m_dot_1_L * d_V_mech_m * t_V_mech_m * (h_95_ZUL_so - u * h_ABL_so - (1 - u) * (h_AUL + Phi_c * (h_ABL_so - h_AUL))) / 3600 '==================2010.04.14 수정 + End Select + End If + + End If + Else + Q_vc_b = 0 + + End If + '========================================================================================================================================== + '========================================================================================================================================== + + Select Case Dr공조.공조방식.Trim ' Worksheets("공조처리시스템").Range("공조방식1").Offset(0, i_count_AHU - 1) + Case "정풍량" '정풍량" + If eta_ZUL <> 0 Then + P_V_ZUL_m = V_dot_mech_m * Delta_p_star_ZUL / eta_ZUL / 3600000 ' V_dot_ZUL = V_dot_mech_m (3.2.5-7) 정풍량 (3600은 Pa을 W환산하면서 h를 s로 환산) + Else + P_V_ZUL_m = 0 + End If + + If eta_ABL <> 0 Then + P_V_ABL_m = V_dot_mech_m * Delta_p_star_ABL / eta_ABL / 3600000 + Else + P_V_ABL_m = 0 + End If + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m '(3.2.5-10) 정풍량 + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m '(3.2.5-10) 정풍량 + + Case "변풍량" '변풍량" + + Sigma_V_dot = t_V_mech_m * d_V_mech_m * V_dot_mech_m + 1000 * Q_c_b / (c_p_Lrho_L * (theta_i_c - theta_V_mech_m)) '(3.2.5-5) 월간 공조풍량 합(변풍량) + ' 수식 변경 Sigma_V_dot_3 = t_V_mech_m * d_V_mech_m * (V_dot_mech_m ^ 3) + Q_c_b / (c_p_L * rho_L * (theta_i_c - theta_V_mech_m)) + Sigma_V_dot_3 = TOSG(Sigma_V_dot * (0.8 * V_dot_mech_m + 0.2 * V_dot_mech_max) ^ 2) + + If V_dot_mech_m = 0 Then + P_V_ZUL_m = 0 'CSng(V_dot_mech_m * Delta_p_star_ZUL * f_p / eta_ZUL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ZUL * (1 - f_p)) / (eta_ZUL * V_dot_mech_m ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검토 + P_V_ABL_m = 0 'CSng(V_dot_mech_m * Delta_p_star_ABL * f_p / eta_ABL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ABL * (1 - f_p)) / (eta_ABL * V_dot_mech_m ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검 + Q_V_E_ZUL_m = 0 'P_V_ZUL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Q_V_E_ABL_m = 0 'P_V_ABL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Else + + '==========================변풍량에서도 효율이 없을 경우 동력이 0인 것으로 평가 2010.10.10 + If eta_ZUL <> 0 Then + P_V_ZUL_m = TOSG(V_dot_mech_m * Delta_p_star_ZUL * f_p / eta_ZUL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ZUL * (1 - f_p)) / (eta_ZUL * V_dot_mech_max ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검토 + '=============================================================================================== 최소외기도입량 동력보다 작으면 최소외기도입 동력으로 적용 2012.01.31 + If P_V_ZUL_m < V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600 Then + P_V_ZUL_m = V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600 + End If + '=============================================================================================== + Else + P_V_ZUL_m = 0 + End If + If eta_ABL <> 0 Then + P_V_ABL_m = TOSG(V_dot_mech_m * Delta_p_star_ABL * f_p / eta_ABL / 3600 + (V_dot_mech_m ^ 3 * Delta_p_star_ABL * (1 - f_p)) / (eta_ABL * V_dot_mech_max ^ 2) / 3600) '(3.2.5-11) 변풍량 시간, 용도로 추후검 + '=============================================================================================== 최소외기도입량 동력보다 작으면 최소외기도입 동력으로 적용 2012.01.31 + If P_V_ABL_m < V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600 Then + P_V_ABL_m = V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600 + End If + '=============================================================================================== + Else + P_V_ABL_m = 0 + End If + '============================================================2010.10.10 + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m / 1000 'kWh (3.2.5-10) 변풍량 냉방부하 + End If + + End Select + + '------------------------------------------------------------------------------------------------------------------------------------------ + ' 우선 외기온도에 대한 공조에너지 요구량 산정 필요 ???? + + 'q_st_12h_m = q_st_18_12h_m '(3.2.5-27) + + 'If theta_e < theta_hc_m Then + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + 'Case "현열교환" + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_wi - theta_e) '(3.2.5-55) 순수 현열 회수기 + 'Case "전열교환" + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_wi - theta_e) '(3.2.5-56) 현열 및 습기 회수기 우선 현열만 고려 + 'End Select + 'q_h_12h_m = rho_L * (c_p_L * (theta_hc_m - theta_e) - Delta_h_WRG) * 12 * d_mth * V_dot_A * A_B + rho_L * c_p_L * (theta_h_mech_m - theta_i_h_soll) * 12 * d_mth * (V_dot_mech_m - V_dot_A * A_B) 'theta_h_mech_m 과 theta_hc_m 중 선택 검토 + + 'End If + + 'If theta_e > theta_hc_m Then + 'Select Case Worksheets("공조처리시스템").Range("열교환기1").Offset(0, i_count_AHU - 1) + 'Case "열회수불가" + 'Delta_h_WRG = 0 '(3.2.5-54) 열 회수기 없음 + 'Case "현열교환" + 'If theta_e > theta_ABL_so Then + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_e - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 + 'Else + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_so - theta_e) '(3.2.5-55) 순수 현열 회수기 + 'End If + 'Case "전열교환" + 'If theta_e > theta_ABL_so Then + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_e - theta_ABL_so) '(3.2.5-55) 순수 현열 회수기 우선 현열만 고려 + 'Else + 'Delta_h_WRG = Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) / 100 * c_p_L * (theta_ABL_so - theta_e) '(3.2.5-55) 순수 현열 회수기 우선 현열만 고려 + 'End If + + 'End Select + + 'q_c_12h_m = rho_L * (c_p_L * (theta_e - theta_hc_m) - Delta_h_WRG) * 12 * d_mth * V_dot_A * A_B + rho_L * c_p_L * (theta_i_c_soll - theta_c_mech_m) * 12 * d_mth * (V_dot_mech_m - V_dot_A * A_B) 'theta_c_mech_m 과 theta_hc_m 중 선택 검토 + + 'End If + + + 'f_h_H = 1 + 6.333 * 10 ^ (-3) * (t_V_mech_m - 12) - 2.689 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 + 6.94 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-31) + 'f_h_C = 1 - 5.583 * 10 ^ (-3) * (t_V_mech_m - 12) + 2.153 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 - 6.597 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-32) 편차가 없는 습도요구 + 'f_h_C = 1 - 1.552 * 10 ^ (-3) * (t_V_mech - 12) - 8.073 * 10 ^ (-4) * (t_V_mech_m - 12) ^ 2 - 1.302 * 10 ^ (-6) * (t_V_mech_m - 12) ^ 3 '(3.2.5-32) 편차가 있는 습도요구 추후 검토 + 'f_h_st = 1 + + 'q_h_m = q_h_12h_m * t_V_mech_m / 12 * f_h_H * d_V_mech_m / d_mth '(3-28) + 'q_c_m = q_c_12h_m * t_V_mech_m / 12 * f_h_C * d_V_mech_m / d_mth '(3-29) + 'q_st_m = q_st_12h_m * t_V_mech_m / 12 * f_h_st * d_V_mech_m / d_mth '(3-30) + + 'Q_vh_b = q_h_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + 'Q_vc_b = q_c_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + 'Q_vm_b = q_st_m * V_dot_mech_m '(3-36) =Q_vi_b (7-2,7-8,7-14) + + 'Q_vh_b = q_h_m / 1000 ' 우선 공조풍량을 미리 포함시킴 추후 검토 + 'Q_vc_b = q_c_m / 1000 ' 우선 공조풍량을 미리 포함시킴 추후 검토 + 'Q_vm_b = q_st_m * V_dot_mech_m / 1000 '(3-36) =Q_vi_b (7-2,7-8,7-14) + + '========================================================================================================================================== + Drow분석(0).공조풍량 = V_dot_mech_m + 'Sheets("" & i_count_month & "").Cells(17, 7 + i_count_zone) = V_dot_mech_m + If Q_vh_b < 0 Then + Q_vh_b = 0 '음수 여부 추후 검토 + End If + Drow분석(0).공조요구량난방 = Q_vh_b + 'Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) = Q_vh_b + + If Q_vc_b < 0 Then + Q_vc_b = 0 '냉방공조에너지요구량이 -인 것은 난방에서 처리되는 것으로 설정 + End If + Drow분석(0).공조요구량냉방 = Q_vc_b + 'Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) = Q_vc_b + + If Q_vm_b < 0 Then + Q_vm_b = 0 '음수 여부 추후 검토 + End If + Drow분석(0).공조요구량가습 = Q_vm_b ' Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) = Q_vm_b + Drow분석(0).환기요구량 = Q_V_E_ZUL_m + Q_V_E_ABL_m ' Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = Q_V_E_ZUL_m + Q_V_E_ABL_m + '========================================================================================================================================== + 'End If + 'End If + Next + + Else + Drow분석(0).공조풍량 = 0 ' Sheets("" & i_count_month & "").Cells(17, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량난방 = 0 ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량냉방 = 0 'Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) = 0 + Drow분석(0).공조요구량가습 = 0 ' Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) = 0 + Drow분석(0).환기요구량 = 0 'Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = 0 + + + '==========================================================================2010.02.04 추가부분 시작 + If Dr존.냉난방공조 = "환기" OrElse (Dr존.냉난방공조 = "난방" AndAlso Dr존.외기부하처리여부 = "예") Then '//환기 + Dim DR프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필.ToString & "' and code <> '0'"), DS.tbl_profileRow()) + If DR프로필.GetUpperBound(0) = 0 Then + t_V_mech_m = TOSG(DR프로필(0).운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + V_dot_A = TOSG(DR프로필(0).최소도입외기량) 'Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) + A_B = TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + '===================================================================================2010.2.25 추가 + 'd_V_mech_m = Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + Select Case i_count_month + Case 0 : d_V_mech_m = 0 + Case 1 : d_V_mech_m = DR프로필(0).day01 + Case 2 : d_V_mech_m = DR프로필(0).day02 + Case 3 : d_V_mech_m = DR프로필(0).day03 + Case 4 : d_V_mech_m = DR프로필(0).day04 + Case 5 : d_V_mech_m = DR프로필(0).day05 + Case 6 : d_V_mech_m = DR프로필(0).day06 + Case 7 : d_V_mech_m = DR프로필(0).day07 + Case 8 : d_V_mech_m = DR프로필(0).day08 + Case 9 : d_V_mech_m = DR프로필(0).day09 + Case 10 : d_V_mech_m = DR프로필(0).day10 + Case 11 : d_V_mech_m = DR프로필(0).day11 + Case 12 : d_V_mech_m = DR프로필(0).day12 + End Select + '===================================================================================2010.2.25 추가 + + End If + + Dim DR공조() As DS.tbl_kongjoRow = CType(DSET.tbl_kongjo.Select("code='" & Dr존.냉난방공조처리시스템 & "' and code <> '0'"), DS.tbl_kongjoRow()) + If DR공조.GetUpperBound(0) = 0 Then + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2010.05.26 추가 + If DR공조(0).열교환기유형.Trim = "현열교환" OrElse DR공조(0).열교환기유형.Trim = "전열교환" Then + Phi_h = TOSG(DR공조(0).열회수율) 'Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) + Phi_c = TOSG(DR공조(0).열회수율냉) 'Worksheets("공조처리시스템").Range("열교환기1").Offset(2, i_count_AHU - 1) + Else + Phi_h = 0 + Phi_c = 0 + End If + '// 여기 i_count_month 에 0 이 오지는 않나요? 예.. 1 부터 시작해요 + '// If CSng(Drow분석(0).난방요구량공조) > 0 Then 'Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + + If TOSG(Drow분석(0).난방요구량공조) > 0 Then + Drow분석(0).난방요구량공조 = (1 - Phi_h) * TOSG(Drow분석(0).난방요구량공조) + End If + + If TOSG(Drow분석(0).냉방요구량공조) > 0 Then + Drow분석(0).냉방요구량공조 = (1 - Phi_c) * TOSG(Drow분석(0).냉방요구량공조) + End If + + 'If Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) > 0 Then + ' Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) = (1 - Phi_h) * Sheets("" & i_count_month & "").Cells(8, 7 + i_count_zone) + 'End If + + 'If Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) > 0 Then + ' Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) = (1 - Phi_c) * Sheets("" & i_count_month & "").Cells(11, 7 + i_count_zone) + 'End If + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2010.05.26 추가 + + eta_ZUL = TOSG(DR공조(0).총효율급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(2, i_count_AHU - 1) + eta_ABL = TOSG(DR공조(0).총효율배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(3, i_count_AHU - 1) + Delta_p_star_ZUL = TOSG(DR공조(0).총압력손실급기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(0, i_count_AHU - 1) + Delta_p_star_ABL = TOSG(DR공조(0).총압력손실배기팬) ' Worksheets("공조처리시스템").Range("총압력상승1").Offset(1, i_count_AHU - 1) + + If eta_ZUL <> 0 Then + P_V_ZUL_m = V_dot_A * A_B * Delta_p_star_ZUL / eta_ZUL / 3600000 + Else + P_V_ZUL_m = 0 + End If + + If eta_ABL <> 0 Then + P_V_ABL_m = V_dot_A * A_B * Delta_p_star_ABL / eta_ABL / 3600000 + Else + P_V_ABL_m = 0 + End If + Q_V_E_ZUL_m = P_V_ZUL_m * t_V_mech_m * d_V_mech_m + Q_V_E_ABL_m = P_V_ABL_m * t_V_mech_m * d_V_mech_m + + + Result.E분석(i_count_month).환기에너지요구량(Dr존.code) = Q_V_E_ZUL_m + Q_V_E_ABL_m + 'Sheets("" & i_count_month & "").Cells(25, 7 + i_count_zone) = Q_V_E_ZUL_m + Q_V_E_ABL_m + End If + Else + Result.E분석(i_count_month).환기에너지요구량(Dr존.code) = 0 + End If + '==========================================================================2010.02.04 추가부분 끝 + End If + Next + + pLog.Add(String.Format(">>Calc_AirHandling 완료")) + + End Sub + + Private DSET As DS + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult) + DSET = pds + DSETR = pdsetr + Result = presult + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/CCooling.vb b/ArinWarev1/DataSet/Calculator/CCooling.vb new file mode 100644 index 0000000..1ff8079 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CCooling.vb @@ -0,0 +1,1800 @@ +Public Class CCooling + + Dim c_p1 As Decimal, c_p2 As Decimal, c_cl As Decimal + Dim b As Decimal, L As Decimal, n_G As Decimal, h_G As Decimal, L_max As Decimal, R As Decimal, z As Decimal + Dim rho_cl As Decimal + Dim eta_c_star_d As Decimal, eta_c_star_ce_sens As Decimal, eta_c_star_ce As Decimal, eta_c_d As Decimal, eta_c_ce As Decimal, eta_c_ce_sens As Decimal + Dim Q_c_star_s As Decimal, Q_c_s As Decimal, Q_c_b As Decimal, Q_c_b_i As Decimal, Q_c_star_b_i As Decimal + Dim Q_c_star_b As Decimal, Q_c_star_d As Decimal, Q_c_star_ce As Decimal, Q_c_d As Decimal, Q_c_ce As Decimal + Dim Q_c_star_outg As Decimal, Q_z_outg_l As Decimal, Q_dot_c_outg As Decimal, Q_c_outg As Decimal, Q_c_outg_total As Decimal, Q_dot_z As Decimal + Dim Q_c_ce_aux As Decimal, Q_z_aux_d_l As Decimal, Q_z_star_outg_l As Decimal + Dim f_c_ce_aux As Decimal, f_Abgl As Decimal, f_e As Decimal + Dim V_dot_z As Decimal + Dim EER As Decimal, PLV_av As Decimal + Dim P_d_hydr As Decimal, P_Pump As Decimal + Dim beta_d_l As Decimal, e_d_l As Decimal + Dim W_d_hydr_l As Decimal + Dim Q_c_f_elektr As Decimal, Q_c_f_R_elektr As Decimal, Q_dot_R_outg As Decimal, Q_c_outg_therm As Decimal, Q_c_f As Decimal, Q_c_aux As Decimal + Dim t_h_max As Integer + Dim Q_c_g As Decimal, Q_c_g_v_i As Decimal, Q_dot_N As Decimal, Q_dot_d_in As Decimal + Dim theta_VA As Decimal, theta_RA As Decimal, theta_HK_m_beta_h_d As Decimal, beta_h As Decimal, n_beta As Decimal + Dim eta_k_100 As Decimal, eta_k_pl As Decimal, f As Decimal, e As Decimal, q_B_70 As Decimal, q_B_theta As Decimal, f_Hs_Hi As Decimal + Dim Q_V_g_100 As Decimal, Q_dot_B_h As Decimal, Q_V_g_pl As Decimal, q_R_elektr As Decimal + Dim beta_k_pl As Decimal, Delta_theta_z_cl As Decimal + Dim Delta_P_WUE As Decimal, Delta_P_WUV As Decimal, Delta_P_RV As Decimal, Delta_p_z As Decimal + Dim k_n As Decimal, f_1_av As Decimal, f_2_av As Decimal, f_R_av As Decimal, T_W_1_i As Decimal, l_min_i As Decimal + Dim use_Oil As Decimal, use_LNG As Decimal, use_LPG As Decimal, use_Elec As Decimal, use_DH As Decimal + + '20100223 제거 i_count_chiller As Integer, 최적화중 사용안함 + 'Dim i_count_zone As Integer, i_count_c_d As Integer + Dim i_count_beta As Integer, k_n_index As Integer + ' Dim i_count_renewable As Integer + Dim i_HeatCool As Integer + Dim theta_i As Decimal, Q_hp_outg As Decimal, Q_c_f_hp As Decimal, Q_c_g_hp_aux As Decimal + Dim Q_chp_outg As Decimal, Q_c_f_chp As Decimal + Dim system_type As Integer + '==================================2010.2.21 수정 + Dim use_DC As Decimal + Dim d_op_mth As Integer + Dim d_op_max_mth As Integer + + Dim f_1_av_up As Decimal, f_1_av_dn As Decimal + + Dim Q_H_sol_out_m As Decimal, Q_W_sol_out_m As Decimal, W_sol_aux_m As Decimal + Dim Q_h_outg_i As Decimal + + '==================================2010.04.02 수정 + 'Dim priod_value As Decimal = 0 + Dim age As Decimal = 1 '//준공연도에 의한 경년변화값 + Dim age_heating As Decimal = 1.0F + + '==================================2013.08.18 추가 + Dim system_count As Decimal + + Dim 냉방용량합 As Decimal = 0 + Dim A_Q_c_b_i As Decimal = 0 + Dim A_Q_c_star_b_i As Decimal = 0 + Dim a_d_op_max_mth As Decimal = 0 + Dim a_t_h_max As Decimal = 0 + + + Public Overridable Sub Calc_CoolingSystem(ByVal i_count_month As Integer, ByVal theta_e As Decimal) + + pLog.LogEnable = True + pLog.Add(String.Format(">> Calc_CoolingSystem i_count_month={0},theta_e={1}", i_count_month, theta_e)) + + + ' Dim i_count_profile As Integer + use_DC = 0 + d_op_max_mth = 0 + '==================================2010.2.21 수정 + '==================================2010.04.02 수정 + + Q_H_sol_out_m = 0 + Q_h_outg_i = 0 + + + '==================================2010.04.02 수정 / 0901비활성 + 'For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + ' priod_value = CSng(DRpriod.priod) + 'Next + 'If priod_value > 20 Then priod_value = 20 + 'age = (1 - 0.01) ^ priod_value + 'age_heating = (1 - 0.005) ^ priod_value + + + eta_c_star_d = 0.95 '건물 내 배관 적용 + eta_c_star_ce_sens = 1 '습도요구 편차없음 적용 + eta_c_star_ce = 0.9 '공조기기로 냉열전달에서 현열전달효율로 우선 0.9 적용 + Q_c_star_s = 0 + Q_c_s = 0 '(3.2.8-22) + eta_c_d = 0.9 ' 우선 적용 추후 검토 + eta_c_ce = 1 ' 우선 적용 추후 검토 + eta_c_ce_sens = 0.9 '우선 적용 추후 검토 + f_c_ce_aux = 0.04 ' 표3.93 우선 적용 추후 검토 + f_Abgl = 1 '수리역학적으로 평형을 이룬 배관망 + Q_c_f = 0 + Q_c_aux = 0 + beta_k_pl = 0.3 + PLV_av = 1 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + i_HeatCool = 2 + system_type = 2 + system_count = 0 + 냉방용량합 = 0 '=================================2014.04.30 추가 + A_Q_c_b_i = 0 '=================================2014.04.30 추가 + A_Q_c_star_b_i = 0 '=================================2014.04.30 추가 + t_h_max = 0 '=================================2014.07.01 추가 + + Dim Mon As String = "M" & Format(i_count_month, "00") + + + 'total(1,2,3,45,6,7) / 냉방(1,2,3) + '1,2,3존에(A) , 4,5,6존(B) + + For Each dr냉방 As DS.tbl_nangbangkikiRow In DSET.tbl_nangbangkiki.Select("code<>'0' and 헤더적용=true", "code") + + pLog.Add(String.Format("헤더적용된 냉방기기={0}", dr냉방.code)) + + Dim DrZRows() As DS.tbl_zoneRow = DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'", "code") + If DrZRows.Length > 0 Then '//존재하는것만 합친다. 150112- arin + 냉방용량합 += dr냉방.냉동기용량 + End If + + For Each Dr존 As DS.tbl_zoneRow In DrZRows + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + system_count = TOSG(Dr존.입력존의수) 'IIf(dr냉방.개별기기적용 = "0", 1, TOSG(Dr존.입력존의수)) '//20130818 + If Dr존.열생산냉방생산기기 = dr냉방.code And (Dr존.냉난방방식 = "냉난방" OrElse Dr존.냉난방방식 = "냉방") Then + A_Q_c_b_i += Result.E분석(i_count_month).냉방에너지요구량열(Dr존.code) / system_count '2013.08.18 수정 ' CSng(Drow분석(0).냉방요구량열) ' Sheets("" & i_count_month & "").Cells(10, 7 + i_count_zone) + End If + If Dr존.공조냉방생산기기 = dr냉방.code And Dr존.냉난방공조 = "냉난방" OrElse Dr존.냉난방공조 = "냉방" OrElse ((Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예") Then + If (Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + A_Q_c_star_b_i += TOSG(Drow분석(0).냉방요구량공조) / system_count '2013.08.18 수정 '//2010.11.19 추가 + Else + A_Q_c_star_b_i += Result.E분석(i_count_month).공조에너지요구량냉방(Dr존.code) / system_count '2013.08.1 수정 ' CSng(Drow분석(0).공조요구량냉방) ' Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + End If + End If + '//프로필시간 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + If t_h_max < TOSG(Dr프로필.일일운전시간) * d_op_mth Then + t_h_max = CInt(TOSG(Dr프로필.일일운전시간) * d_op_mth) + End If + + If d_op_mth > a_d_op_max_mth Then a_d_op_max_mth = d_op_mth + If t_h_max > a_t_h_max Then a_t_h_max = t_h_max + Next + Next + pLog.Add(String.Format("헤더적용부분후의 결과값 냉방용량합={0},a_d_op_max_mth={1},a_t_h_max={2}", 냉방용량합, a_d_op_max_mth, a_t_h_max)) + + + For Each dr냉방 As DS.tbl_nangbangkikiRow In DSET.tbl_nangbangkiki.Select("code<>'0'", "code") + Dim DrZRows() As DS.tbl_zoneRow = DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'", "code") + If DrZRows.Length > 0 Then '//존재하는것만 합친다. 150112 - arin + + '// + pLog.Add(String.Format("사용된냉방기기로직실행준비 Code={0}", dr냉방.code)) + + '// + Dim 비율 As Decimal + If 냉방용량합 = 0 Then + 비율 = 1 + Else + 비율 = dr냉방.냉동기용량 / 냉방용량합 + End If + + '// + If dr냉방.개별기기적용 = "1" Then + Calc_개별기기적용시(dr냉방, Mon, 비율, i_count_month, theta_e) + Else + Calc_개별기기미적용시(dr냉방, Mon, 비율, i_count_month, theta_e) + End If + + End If + + Next '1 + + + '//계산결과 시트의 각 월에해당되는 곳에 데이터를 기록한다. + + Result.E소요량(i_count_month).냉방 = Q_c_f + Result.E소요량(i_count_month).냉방보조 = Q_c_aux + + use_Elec = use_Elec + Q_c_aux + + Result.일차E소요량(i_count_month).냉방등유 = use_Oil + Result.일차E소요량(i_count_month).냉방LNG = use_LNG + Result.일차E소요량(i_count_month).냉방LPG = use_LPG + Result.일차E소요량(i_count_month).냉방지역난방열 = use_DH + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Result.일차E소요량(i_count_month).냉방지역냉방열 = use_DC + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Result.일차E소요량(i_count_month).냉방전력 = use_Elec + + pLog.Add(String.Format("냉방시스템결과 냉방={0},냉방보조={1},등유={2},LNG={3},LPG={4},지역난방열={5},지역냉방열={6},전력={7}", Q_c_f, Q_c_aux, use_Oil, use_LNG, use_LPG, use_DH, use_DC, use_Elec)) + + End Sub + + Dim DSET As DS + Dim DSETR As DSR + Dim Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsr As DSR, ByRef presult As CResult) + DSET = pds + DSETR = pdsr + Result = presult + End Sub + + Private Sub Calc_개별기기적용시(ByRef dr냉방 As DS.tbl_nangbangkikiRow, Mon As String, 비율 As Single, i_count_month As Integer, theta_e As Decimal) + + pLog.Add(String.Format(">>Calc_개별기기적용시 냉방기={0},Mon={1},비율={2},월={3},theta_e={4}", dr냉방.code, Mon, 비율, i_count_month, theta_e)) + + ''//아 냉방기기를 사용한 존의수(입력존의수적용카운트) + 'Dim DRzz() As DS.tbl_zoneRow = DSET1.tbl_zone.Select("열생산냉방생산기기='" & dr냉방("code").ToString & "' or 공조냉방생산기기='" & dr냉방("code").ToString & "'") '//2010.12.02 수정 + 'Dim loopcnt As Integer = 0 + 'For Each drowz As DS.tbl_zoneRow In DRzz + ' Dim 입력존수문자 As Integer = drowz.입력존의수 + ' If IsNumeric(입력존수문자) = False Then 입력존수문자 = "1" + ' loopcnt += CInt(입력존수문자) + 'Next + + '//이 냉방기가가 존에서 사용되었는지확인한다. + + Dim dr존데이터() As DS.tbl_zoneRow = DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'", "code") + + If dr존데이터.Length > 0 Then + Q_c_b = 0 + Q_c_star_b = 0 + t_h_max = 0 + Q_c_f_elektr = 0 + Q_c_outg_therm = 0 + Q_c_g = 0 + Q_c_f_R_elektr = 0 + system_count = 0 + '==================================2014.07.01 수정 + d_op_max_mth = 0 + '==================================2014.07.01 수정 + + End If + + For Each Dr존 As DS.tbl_zoneRow In dr존데이터 '//3개 (5,1,1) + + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + system_count = TOSG(Dr존.입력존의수) 'IIf(dr냉방.개별기기적용 = "0", 1, TOSG(Dr존.입력존의수)) '//20130818 + ' 존데이터를가져올떄 해당 냉방기기에서 사용한 존만 가져왔따. + ' If Dr존.열생산냉방생산기기 <> "" Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) <> "" Then + ' If Dr존.열생산냉방생산기기 = dr냉방.code Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + + '==================================================2014.07.01 수정 + + 'If dr냉방.헤더적용 Then + ' Q_c_b_i = A_Q_c_b_i + ' Q_c_b_i *= 비율 '//130818 + ' Q_c_b = Q_c_b_i '//Q_c_b + Q_c_b_i + + ' Q_c_star_b_i = A_Q_c_star_b_i + ' Q_c_star_b_i *= 비율 '//130818 + ' Q_c_star_b = Q_c_star_b_i + 'Else + If Dr존.열생산냉방생산기기 = dr냉방.code And (Dr존.냉난방방식 = "냉난방" OrElse Dr존.냉난방방식 = "냉방") Then + Q_c_b_i = Result.E분석(i_count_month).냉방에너지요구량열(Dr존.code) / system_count '2013.08.18 수정 ' CSng(Drow분석(0).냉방요구량열) ' Sheets("" & i_count_month & "").Cells(10, 7 + i_count_zone) + Q_c_b = Q_c_b_i + End If + If Dr존.공조냉방생산기기 = dr냉방.code And Dr존.냉난방공조 = "냉난방" OrElse Dr존.냉난방공조 = "냉방" OrElse ((Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예") Then + If (Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_c_star_b_i = TOSG(Drow분석(0).냉방요구량공조) / system_count '2013.08.18 수정 '//2010.11.19 추가 + Else + Q_c_star_b_i = Result.E분석(i_count_month).공조에너지요구량냉방(Dr존.code) / system_count '2013.08.18 수정 ' CSng(Drow분석(0).공조요구량냉방) ' Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + End If + Q_c_star_b = Q_c_star_b_i + End If + 'End If + + + '===================================================================================2010.2.21 수정 + ' Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + + + '==================================================2014.07.01 수정 + 'If dr냉방.헤더적용 Then + ' '//헤더로 묶인 냉방기기의 존들에서 + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + 'Else + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + If t_h_max < TOSG(Dr프로필.일일운전시간) * d_op_mth Then t_h_max = CInt(TOSG(Dr프로필.일일운전시간) * d_op_mth) + 'End If + + + + + + + '===================================================================================2010.2.21 수정 + ' End If + ' End If + + + '//system = 7 + + 'Q_vh_b = Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + 'Q_vc_b = Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + 'Q_vm_b = Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) + + + '========================================================================================================================================== + ' 가열유닛에 대한 사용에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vh_d 는 0으로 적용 + + 'Q_dot_V_H_max = V_dot_star_rho_L(c_p_L * (theta_ZUL_wi - theta_AUL_wi) - Delta_h_WRG) '(3.2.5-58) + 'Q_dot_V_H_max = V_dot_star * rho_L(h_ZUL_wi - h_AUL_wi - Delta_h_WRG) '(3.2.5-57) + 'b_VH_a = sigma1_12(b_VH_month) '(3.2.8-7) + 'b_VH_mth = Q_vh_b / Q_dot_V_H_max '(3.2.8-6) + 't_H_r = t_H_r_14_12h + (t_H_r_22_12h - t_H_r_14_12h) * (theta_V_mech - 14) / 8 '(3-B.1) theta_V_mech은 (3-C.1) + 't_H_star_op_mth = t_H_r * b_VH_mth / b_VH_a '(3.2.8-5) + 'Q_vh_d = f_vh_d * A_K_A * t_H_star_opo_mth '(3.2.8-10) f_vh_d=16W/m + + 'Q_vh_ce = (1 - eta_vh_ce) * Q_vh_b '(3.2.8-9) eta_vh_ce 는 1로 Q_vh_ce 는 0이 됨 + 'Q_h_star_b = Q_vh_b 'Q_h_star_b = Q_vh_b + Q_vh_ce + Q_vh_d '(3.2.8-2) + '========================================================================================================================================== + + + + '========================================================================================================================================== + ' 냉각 유닛에 대한 사용 에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vc_d 는 0으로 적용 + + 'Q_dot_V_C_max = V_dot_star * rho_L(h_AUL_so - h_ZUL_so - Delta_h_WRG) '(3.2.5-62) + 'b_VC_a = sigma1_12(b_VC_month) '(3.2.8-13) + 'b_VC_mth = Q_vc_b / Q_dot_V_C_max '(3.2.8-12) + 't_C_r = (t_C_r_14_12h + (t_C_r_22_12h - t_C_r_14_12h) * (theta_V_mech - 14) / 8) * f_h_C '(3-B.2) theta_V_mech은 (3-C.1) + 't_C_star_op_mth = t_C_r * b_VC_mth / b_VC_a '(3.2.8-11) + 'Q_vc_d = f_vc_d * A_K_A * t_C_star_opo_mth '(3.2.8-10) f_vh_d=9W/m + 'Q_vc_ce = (1 - eta_vc_ce) * Q_vc_b '(3.2.8-9) eta_vc_ce 는 1로 Q_vc_ce 는 0이 됨 + + 'Q_c_star_b = Q_vc_b 'Q_c_star_b = Q_vc_b + Q_vc_ce + Q_vc_d '(3.2.8-8) + + '========================================================================================================================================== + + + '가습 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + + + ' 실-냉방 냉열 공급 + + 'Q_c_b = Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + + Q_c_d = (1 - eta_c_d) * Q_c_b '(3.2.8-21) eta_c_d는 (Tab.7-8) + Q_c_ce = ((1 - eta_c_ce) + (1 - eta_c_ce_sens)) * Q_c_b '(3.2.5-20) eta_c_ce는(Tab.7-8), eta_c_ce_sens는 (Tab.7-7) + + Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + + + + '========================================================================================================================================== + ' 실-냉방 2차 공기 송풍기의 전기에너지 요구량 + ' 추후 세부 변수 검토 + + 'beta_c_i = beat_c_we = Q_c_b_we / (Q_c_max_res * t_c_op_we) '(2-D.7) + 'beta_c_i = beta_c_nutz = Q_c_b_nutz / (Q_c_max_res * t_c_op_nutz) + 't_c_i = t_mth_nutz = d_nutz * t_c_op_nutz '(2-D.8) t_c_i=t_mth_we=d_we*t_c_op_we + 't_c_i = t_mth_i * beta_c_i / beta_c_grenz '(2-D.6) + 't_c_op = t_c_NR + t_c_we '(2-D.5) + 'Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + 'Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_c_op / 1000 '(3.2.8-23) f_c_ce_aux 는 (Tab.3.93) + Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_h_max / 1000 + + + '========================================================================================================================================== + + + + + '공조-냉방 냉열 공급 + + Q_c_star_d = (1 - eta_c_star_d) * Q_c_star_b '(3.2.8-18) eta_c_star_d는 (Tab.3.91) + Q_c_star_ce = ((1 - eta_c_star_ce) + (1 - eta_c_star_ce_sens)) * Q_c_star_b '(3.2.8-16) eta_c_star_ce는 (Tab.3.91), eta_c_star_ce_sens는 (Tab.3.91) + + Q_c_star_outg = Q_c_star_b + Q_c_star_ce + Q_c_star_d + Q_c_star_s '(3.2.8-15) + Q_z_star_outg_l = Q_c_star_outg + + + ' 공조기기 가습에 필요한 생산기의 이용열 교부 + + + 'Q_m_star_d = 0 + 'Q_m_star_ce = 0 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + 'Q_m_star_outg = Q_m_star_b 'Q_m_star_outg = Q_m_star_b + Q_m_star_ce + Q_m_star_d '(3.2.8-24) + + + Q_c_outg_total = Q_c_outg + Q_c_star_outg + + Q_z_outg_l = Q_c_outg_total + + + + '================================================================================================================================== + '================================================================================================================================== + '지열시스템 + + Dim CRenew As New CRenewable(DSET, Result) + If dr냉방.신재생연결여부 = "시스템연결" AndAlso dr냉방.연결된시스템 <> "0" Then ' 시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr냉방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//연결되었을시에는 + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + Case "태양광" '//태양광 + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_Elec = use_Elec + Q_c_f_hp + Q_c_g_hp_aux + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LNG = use_LNG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LPG = use_LPG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + End Select + Case "열병합" '//열병합 + End Select + End If + + '================================================================================================================================== + '================================================================================================================================== + + EER = TOSG(dr냉방.열성능비) * age ' Dr냉방.열성능비 + Q_dot_c_outg = TOSG(dr냉방.냉동기용량) ' dr냉방.냉동기용량 + + If t_h_max = 0 Then '=============================================2014.03.07 추가 + k_n = 0 + Else + k_n = Q_c_outg_total / (Q_dot_c_outg * t_h_max) + End If '=============================================2014.03.07 추가 + + + + If k_n > 1 Then k_n = 1 + + k_n_index = 100 ' 조건에 없는 압축방식에서 에러 발생 유도함 + + Select Case dr냉방.냉동기방식.Trim 'Dr냉방.냉동기방식 + Case "압축식", "압축식(LNG)" '압축식" + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) ' Dr냉방.냉각탑입구온도 + Select Case dr냉방.냉동기종류.Trim ' Dr냉방.냉동기종류 + Case "수냉식" '수냉식" + Select Case dr냉방.냉동기압축방식.Trim ' Dr냉방.냉동기압축방식 + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim 'Dr냉방.압축기제어방식 + Case "on/off제어" + k_n_index = 7 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 8 + Select Case dr냉방.증발식건식냉각기.Trim ' Dr냉방.증발식건식냉각기 + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("22") + End Select + Case "실린더off" + k_n_index = 9 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("21") + End Select + Case "바이패스제어" '바이패스제어" + k_n_index = 10 + f_2_av = 1 + Case Else + MsgBox("19") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 11 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(3.1851 - 0.0486 * T_W_1_i) + Case Else + MsgBox("18") + End Select + Case "터보압축기" '터보압축기" + k_n_index = 12 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("16") + End Select + Case Else + MsgBox("17") + End Select + + Case "공냉식" '공냉식" + Select Case dr냉방.냉동기압축방식.Trim + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim + Case "on/off제어" + k_n_index = 0 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 1 + f_2_av = 1 + Case Else + MsgBox("15") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 2 + f_2_av = 1 + Case Else + MsgBox("14") + End Select + + Case "실내공조시스템" '실내공조시스템" + Select Case dr냉방.냉동기설비시스템.Trim ' Dr냉방.냉동기설비시스템 + Case "콤팩트형시스템" '콤팩트형시스템" + k_n_index = 3 + f_2_av = 1 + Case "실내외분리시스템" '실내외분리시스템" + Select Case dr냉방.제어방식.Trim.ToLower '냉동기설비시스템의제어방식 Dr냉방.제어방식 + Case "on/off제어" + k_n_index = 3 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 5 + f_2_av = 1 + Case Else + MsgBox(dr냉방.제어방식.Trim) + End Select + Case "멀티분리시스템" '멀티분리시스템" + Select Case dr냉방.제어방식.Trim + Case "on/off제어" + k_n_index = 4 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 6 + f_2_av = 1 + Case Else + MsgBox("11") + End Select + Case Else + MsgBox("13") + End Select + Case Else + MsgBox("30") + End Select + '//이부분정확히 살펴보아야할듯 + If k_n = 0 Then k_n = 0.001 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + 'Dim Drow부분부하() As DS.tbl_buhaRow = DSET.tbl_buha.Rows(k_n_index) '.Select("code='" & Format(9 - Int((1 - k_n) * 10), "00") & "'") + + If k_n_index >= 100 Then + LogSB.AppendLine("냉방기기(" & dr냉방.설명 & ")의 냉동기방식(" & dr냉방.냉동기방식.Trim & ")에따른 종류(" & dr냉방.냉동기종류.Trim & ")를 확인할 수 없습니다") + Exit For 'Return + Else + f_1_av_up = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + + 'f_1_av = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) ' Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(k_n_index, 9 - Int((1 - k_n) * 10)) + End If + + PLV_av = f_1_av * f_2_av + + ' If i_count_month = 8 Then + ' Dim data As String = vbCrLf + "적용시 " + i_count_month.ToString() + "월 ply_av=" + PLV_av.ToString() + ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\kn.txt", data, True, System.Text.Encoding.Default) + ' End If + + If PLV_av = 0 Then '=======================================================================2014.03.07 추가 + Q_c_f_elektr = 0 + Q_c_outg_therm = 0 + Else + + If dr냉방.냉동기방식 = "압축식" Then + Q_c_f_elektr = Q_c_outg_total / (EER * PLV_av) + '======================================================================= 2010.10.5 추가 + ElseIf dr냉방.냉동기방식 = "압축식(LNG)" Then + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + use_LNG = use_LNG + Q_c_outg_therm + '======================================================================= 2010.10.5 추가 + End If + End If '=======================================================================2014.03.07 추가 + + + + If (dr냉방.냉동기방식 = "압축식" Or dr냉방.냉동기방식 = "압축식(LNG)") And dr냉방.냉동기종류 = "수냉식" Then 'If Dr냉방.냉동기방식 = "압축식" And Dr냉방.냉동기종류 = "수냉식" Then + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + If Q_dot_c_outg = 0 Or t_h_max = 0 Then '===================================================2014.03.07 추가 + f_R_av = 0 + Else + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + End If '===================================================2014.03.07 추가 + + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim 'Dr냉방.증발식냉각기 + Case "폐쇄형" '폐쇄형" + Select Case dr냉방.보조방음기유무.Trim 'Dr냉방.보조방음기유무 + Case "아니오" '아니오" + q_R_elektr = 0.033 + Case "예" '예" + q_R_elektr = 0.04 + End Select + Case "개방형" '개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" '아니오" + q_R_elektr = 0.018 + Case "예" '예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + Else + Q_c_f_R_elektr = 0 + End If + + + Case "흡수식" '흡수식" + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + + + If Q_dot_c_outg = 0 Or t_h_max = 0 Then '===================================================2014.03.07 추가 + f_R_av = 0 + Else + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + End If '===================================================2014.03.07 추가 + + + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim + Case "폐쇄형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.033 + Case "예" + q_R_elektr = 0.04 + End Select + Case "개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.018 + Case "예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" + f_2_av = TOSG(1.7174 - 0.0217 * T_W_1_i) + Case "건식" + f_2_av = TOSG(2.3235 - 0.0294 * T_W_1_i) + Case Else + 'MsgBox("증발식건식냉각기를 확인할 수 없습니다" & vbCrLf & "Calc_CoolingSystem 429번줄 Case else 를 입력하세요", MsgBoxStyle.Critical, dr냉방.증발식건식냉각기) + + End Select + + '//13번째줄 + If k_n = 0 Then k_n = 0.01 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + f_1_av_up = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + 'f_1_av = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) 'Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(13, 9 - Int((1 - k_n) * 10)) + PLV_av = f_1_av * f_2_av + + If PLV_av = 0 Then '===========================================2014.03.07 추가 + Q_c_outg_therm = 0 + Else + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + End If '===========================================2014.03.07 추가 + + + + ': 흡수식 냉동기에서 사용되는 보일러의 생산손실에너지 계산 + If dr냉방.열생산연결방식.ToString = "외부연결" Then '==============================2010.04.02 if문 추가 + + + '//냉방의 온수열생산기기로 지정된 난방기기만을 취한다 10.02.23 최적화중변경 + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code = '" & dr냉방.온수열생산기기 & "' and code <> '0'", "code") + 'If Dr난방.code = dr냉방.온수열생산기기 Then ' Dr냉방.온수열생산기기 Then + + theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_c_d - 1) + theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_c_d - 1) + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VA + theta_RA)) + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CNew As New CRenewable(DSET, Result) + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_c_d - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & Dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + '========================================================================================2010.04.02 추가 + If Q_c_outg_therm > 0 Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_c_outg_therm, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_c_outg_therm = Q_c_outg_therm - Q_W_sol_out_m + Q_c_aux = Q_c_aux + W_sol_aux_m + End If + '========================================================================================2010.04.02 추가 + Case "태양광" '//태양광 + Case "지열" '//지열 + Case "열병합" '//열병합 + If Q_c_outg_therm > 0 Then '===========================2010.04.02 And Q_c_outg_therm > 0 추가 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_Oil = use_Oil + Q_c_f_chp + + Case "천연가스" '천연가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LNG = use_LNG + Q_c_f_chp + + Case "액화가스" '액화가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LPG = use_LPG + Q_c_f_chp + + End Select + End If + + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + + Q_dot_N = TOSG(Dr난방.정격보일러효율) * age_heating ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_c_d - 1) + If t_h_max = 0 Then '====================================2014.03.07 추가 + Q_dot_d_in = 0 + Else + Q_dot_d_in = Q_c_outg_therm / t_h_max + End If '====================================2014.03.07 추가 + + + + Select Case Dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_c_d - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = Q_dot_d_in / (Q_dot_N * TOSG(Dr난방.보일러대수)) ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(1, i_count_c_d - 1)) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(Dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + + + eta_k_100 = TOSG(Dr난방.정격보일러효율) * age_heating / 100 'Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_c_d - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + Select Case Dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_c_d - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + If beta_h > beta_k_pl Then + Q_c_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) + Q_c_g_v_i = Q_c_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * n_beta + Else + Q_c_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) + End If + + + Q_c_g = Q_c_g_v_i * t_h_max ' 추후 검토 + + Else + + ':지역난방의 경우 적용 추후 검토 + Q_c_g = 0 + + End If + + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + Select Case Dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + End Select + Else + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_c_outg_therm * system_count '========2013.0818 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + Q_c_outg_therm * system_count '========2013.0818 수정 + + End Select + + End If + + + ' End If + + + Next + '=================================================================================================2010.04.02 if문 추가 + ElseIf dr냉방.열생산연결방식 = "직화식" Then + Select Case dr냉방.사용연료.ToString + Case "난방유" + use_Oil = use_Oil + Q_c_outg_therm * system_count '========2013.0818 수정 + Case "천연가스" + use_LNG = use_LNG + Q_c_outg_therm * system_count '========2013.0818 수정 + Case "액화가스" + use_LPG = use_LPG + Q_c_outg_therm * system_count '========2013.0818 수정 + Case Else + MsgBox("냉동기기(" & dr냉방.설명 & ")가 직화식이나 사용연료가 없습니다.확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End Select + Else + MsgBox("냉동기기(" & dr냉방.설명 & ")의 열생산연결방식을 확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End If + + '=================================================================================================2010.04.02 if문 추가 + Case "지역냉방" '지역냉방" + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + use_DC = use_DC + Q_c_outg_total * system_count + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Q_c_outg_therm = Q_c_outg_total + + End Select + + Q_c_f = Q_c_f + (Q_c_f_elektr + Q_c_f_R_elektr + Q_c_outg_therm + Q_c_g) * system_count + use_Elec = use_Elec + (Q_c_f_elektr + Q_c_f_R_elektr) * system_count + + + 'If i_count_month = 6 Then + ' i_count_month = 6 + 'End If + ' 분배에 대한 전기 에너지 소비 + For Each Dr분배 As DS.tbl_bunbaeRow In DSET.tbl_bunbae.Select("냉동기='" & dr냉방.code & "' and code <> '0'", "code") + 'If Dr분배.냉동기 = dr냉방.code Then ' Worksheets("냉방분배시스템").Range("냉동기분배1").Offset(0, i_count_c_d - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + Q_dot_z = Q_dot_c_outg * (1 + 1 / EER) '(3.2.8-30) + Delta_theta_z_cl = TOSG(Dr분배.설정점에서의온도차) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(3, i_count_c_d - 1) 6 + c_cl = TOSG(Dr분배.냉매의비열) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(4, i_count_c_d - 1) 4.18 + rho_cl = TOSG(Dr분배.냉매의밀도) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(5, i_count_c_d - 1) 1000 + V_dot_z = (3600 * Q_dot_z) / (Delta_theta_z_cl * c_cl * rho_cl) '(3.2.8-29) + L = TOSG(Dr분배.공급범위의길이) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(0, i_count_c_d - 1) + b = TOSG(Dr분배.공급범위의넓이) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(1, i_count_c_d - 1) + n_G = TOSG(Dr분배.열층의수) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(2, i_count_c_d - 1) + h_G = TOSG(Dr분배.층고) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(3, i_count_c_d - 1) + L_max = 2 * (L + b / 2 + h_G * n_G + 10) '(3.2.8-32) + R = TOSG(Dr분배.배관의압력손실) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(7, i_count_c_d - 1) 0.3 + z = TOSG(Dr분배.개별저항비율) '("냉방분배시스템").Range("급수온도1").Offset(8, i_count_c_d - 1) 0.4 + Delta_P_WUE = TOSG(Dr분배.생산기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(0, i_count_c_d - 1) + Delta_P_WUV = TOSG(Dr분배.사용기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(1, i_count_c_d - 1) + Delta_P_RV = TOSG(Dr분배.제어밸브압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(2, i_count_c_d - 1) + + Delta_p_z = R * L_max * (1 + z) + Delta_P_WUE + Delta_P_RV + Delta_P_WUV '(3.2.8-31) R(7-Tab.11), Delta_P_WUE, Delta_P_RV, Delta_P_WUV (7-Tab.12) + + P_d_hydr = 1000 * Delta_p_z * V_dot_z / 3600 '(3.2.8-28) + + 'f_e = f_dash_e * (1 + (nu_cl ^ 2 / (16 * P_d_hydr)) ^ 0.4) '기존건물 관련 + 'f_e = (1.25 + (200 / P_d_hydr) ^ 0.5) * f_Adap * b '(3.2.8-38) '기존건물 관련 + P_Pump = TOSG(Dr분배.펌프동력) 'Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) + 'P_Pump = Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) << 이거오류인듯 펌프는 8번인덱스여야한다.9번줄에는 아무것도 없다. + + If P_d_hydr = 0 Then '===================================================2014.03.07 추가 + f_e = 0 + Else + f_e = P_Pump / P_d_hydr '원래는 P_hydr '(3.2.8-37) + End If '===================================================2014.03.07 추가 + + + + If Dr분배.펌프운전제어유무 = "제어" Then ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(-1, i_count_c_d - 1) = "제어" Then + c_p1 = 0.85 + c_p2 = 0.15 + ElseIf Dr분배.펌프운전제어유무 = "대수제어" Then + c_p1 = 0.75 + c_p2 = 0.25 + Else + c_p1 = 0.25 + c_p2 = 0.75 + End If + + 'beta_d_l = beta_dash_ + (1 - beta_dash_d_l) * V_dot_z_min / V_dot_z '(3.2.8-35) + If Q_z_outg_l <> 0 Then + + If Q_dot_z = 0 Or t_h_max = 0 Then '===========================================2014.03.07 추가 + beta_d_l = 0 + e_d_l = 0 + Else + beta_d_l = Q_z_outg_l / (Q_dot_z * t_h_max) '(3.2.8-34) t_d_l 을 t_h_max으로 사용 + + e_d_l = f_e * (c_p1 + c_p2 / beta_d_l) '(3.2.8-36) + + End If '===========================================2014.03.07 추가 + + + W_d_hydr_l = P_d_hydr / 1000 * t_h_max * beta_d_l * f_Abgl '(3.2.8-27) t_d_l 을 t_h_max으로 사용 + + Q_z_aux_d_l = W_d_hydr_l * e_d_l '(3.2.8-26) + 'Q_z_aux_d_a = sigma(Q_z_zux_d_l) '(3.2.8-25) + + Q_c_aux = Q_c_aux + Q_z_aux_d_l * system_count + End If + + 'End If + + Next + + Next '//for zonerow + End Sub + Private Sub Calc_개별기기미적용시(ByRef dr냉방 As DS.tbl_nangbangkikiRow, Mon As String, 비율 As Single, i_count_month As Integer, theta_e As Decimal) + + pLog.Add(String.Format(">>Calc_Calc_개별기기미적용시 냉방기={0},Mon={1},비율={2},월={3},theta_e={4}", dr냉방.code, Mon, 비율, i_count_month, theta_e)) + + Dim dr존데이터() As DS.tbl_zoneRow = DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'", "code") + If dr존데이터.Length > 0 Then + Q_c_b = 0 + Q_c_star_b = 0 + t_h_max = 0 + Q_c_f_elektr = 0 + Q_c_outg_therm = 0 + Q_c_g = 0 + Q_c_f_R_elektr = 0 + system_count = 0 + '==================================2014.07.01 수정 + d_op_max_mth = 0 + '==================================2014.07.01 수정 + + End If + + For Each Dr존 As DS.tbl_zoneRow In dr존데이터 '//5,1,1 + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + ' 존데이터를가져올떄 해당 냉방기기에서 사용한 존만 가져왔따. + ' If Dr존.열생산냉방생산기기 <> "" Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) <> "" Then + ' If Dr존.열생산냉방생산기기 = dr냉방.code Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + system_count = 1 ''IIf(dr냉방.개별기기적용 = "0", 1, TOSG(Dr존.입력존의수)) '//20130818 + + '=========================================================2014.07.01 수정 + 'If dr냉방.헤더적용 Then + ' Q_c_b_i = A_Q_c_b_i + ' Q_c_b_i *= 비율 '//130818 + ' Q_c_b = Q_c_b_i '//Q_c_b + Q_c_b_i + + ' Q_c_star_b_i = A_Q_c_star_b_i + ' Q_c_star_b_i *= 비율 '//130818 + ' Q_c_star_b = Q_c_star_b_i '//Q_c_star_b + Q_c_star_b_i 2014.04.30 수정 + 'Else + If Dr존.열생산냉방생산기기 = dr냉방.code And (Dr존.냉난방방식 = "냉난방" OrElse Dr존.냉난방방식 = "냉방") Then + Q_c_b_i = Result.E분석(i_count_month).냉방에너지요구량열(Dr존.code) / system_count '2013.08.18 수정 ' CSng(Drow분석(0).냉방요구량열) ' Sheets("" & i_count_month & "").Cells(10, 7 + i_count_zone) + Q_c_b = Q_c_b + Q_c_b_i + End If + If Dr존.공조냉방생산기기 = dr냉방.code And Dr존.냉난방공조 = "냉난방" OrElse Dr존.냉난방공조 = "냉방" OrElse ((Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예") Then + If (Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_c_star_b_i = TOSG(Drow분석(0).냉방요구량공조) / system_count '2013.08.18 수정 '//2010.11.19 추가 + Else + Q_c_star_b_i = Result.E분석(i_count_month).공조에너지요구량냉방(Dr존.code) / system_count '2013.08.18 수정 ' CSng(Drow분석(0).공조요구량냉방) ' Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + End If + Q_c_star_b = Q_c_star_b + Q_c_star_b_i + End If + 'End If + + '===================================================================================2010.2.21 수정 + ' Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + + '=========================================================2014.07.01 수정 + 'If dr냉방.헤더적용 Then + ' '//헤더로 묶인 냉방기기의 존들에서 + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + 'Else + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + If t_h_max < TOSG(Dr프로필.일일운전시간) * d_op_mth Then t_h_max = CInt(TOSG(Dr프로필.일일운전시간) * d_op_mth) + 'End If + + '===================================================================================2010.2.21 수정 + ' End If + ' End If + Next + '=========================================================2014.07.01 수정 + If dr냉방.헤더적용 Then + Q_c_b = A_Q_c_b_i * 비율 + Q_c_star_b = A_Q_c_star_b_i * 비율 + End If + + 'Q_vh_b = Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + 'Q_vc_b = Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + 'Q_vm_b = Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) + + + '========================================================================================================================================== + ' 가열유닛에 대한 사용에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vh_d 는 0으로 적용 + + 'Q_dot_V_H_max = V_dot_star_rho_L(c_p_L * (theta_ZUL_wi - theta_AUL_wi) - Delta_h_WRG) '(3.2.5-58) + 'Q_dot_V_H_max = V_dot_star * rho_L(h_ZUL_wi - h_AUL_wi - Delta_h_WRG) '(3.2.5-57) + 'b_VH_a = sigma1_12(b_VH_month) '(3.2.8-7) + 'b_VH_mth = Q_vh_b / Q_dot_V_H_max '(3.2.8-6) + 't_H_r = t_H_r_14_12h + (t_H_r_22_12h - t_H_r_14_12h) * (theta_V_mech - 14) / 8 '(3-B.1) theta_V_mech은 (3-C.1) + 't_H_star_op_mth = t_H_r * b_VH_mth / b_VH_a '(3.2.8-5) + 'Q_vh_d = f_vh_d * A_K_A * t_H_star_opo_mth '(3.2.8-10) f_vh_d=16W/m + + 'Q_vh_ce = (1 - eta_vh_ce) * Q_vh_b '(3.2.8-9) eta_vh_ce 는 1로 Q_vh_ce 는 0이 됨 + 'Q_h_star_b = Q_vh_b 'Q_h_star_b = Q_vh_b + Q_vh_ce + Q_vh_d '(3.2.8-2) + '========================================================================================================================================== + + + + '========================================================================================================================================== + ' 냉각 유닛에 대한 사용 에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vc_d 는 0으로 적용 + + 'Q_dot_V_C_max = V_dot_star * rho_L(h_AUL_so - h_ZUL_so - Delta_h_WRG) '(3.2.5-62) + 'b_VC_a = sigma1_12(b_VC_month) '(3.2.8-13) + 'b_VC_mth = Q_vc_b / Q_dot_V_C_max '(3.2.8-12) + 't_C_r = (t_C_r_14_12h + (t_C_r_22_12h - t_C_r_14_12h) * (theta_V_mech - 14) / 8) * f_h_C '(3-B.2) theta_V_mech은 (3-C.1) + 't_C_star_op_mth = t_C_r * b_VC_mth / b_VC_a '(3.2.8-11) + 'Q_vc_d = f_vc_d * A_K_A * t_C_star_opo_mth '(3.2.8-10) f_vh_d=9W/m + 'Q_vc_ce = (1 - eta_vc_ce) * Q_vc_b '(3.2.8-9) eta_vc_ce 는 1로 Q_vc_ce 는 0이 됨 + + 'Q_c_star_b = Q_vc_b 'Q_c_star_b = Q_vc_b + Q_vc_ce + Q_vc_d '(3.2.8-8) + + '========================================================================================================================================== + + + '가습 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + + + ' 실-냉방 냉열 공급 + + 'Q_c_b = Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + + Q_c_d = (1 - eta_c_d) * Q_c_b '(3.2.8-21) eta_c_d는 (Tab.7-8) + Q_c_ce = ((1 - eta_c_ce) + (1 - eta_c_ce_sens)) * Q_c_b '(3.2.5-20) eta_c_ce는(Tab.7-8), eta_c_ce_sens는 (Tab.7-7) + + Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + + + + '========================================================================================================================================== + ' 실-냉방 2차 공기 송풍기의 전기에너지 요구량 + ' 추후 세부 변수 검토 + + 'beta_c_i = beat_c_we = Q_c_b_we / (Q_c_max_res * t_c_op_we) '(2-D.7) + 'beta_c_i = beta_c_nutz = Q_c_b_nutz / (Q_c_max_res * t_c_op_nutz) + 't_c_i = t_mth_nutz = d_nutz * t_c_op_nutz '(2-D.8) t_c_i=t_mth_we=d_we*t_c_op_we + 't_c_i = t_mth_i * beta_c_i / beta_c_grenz '(2-D.6) + 't_c_op = t_c_NR + t_c_we '(2-D.5) + 'Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + 'Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_c_op / 1000 '(3.2.8-23) f_c_ce_aux 는 (Tab.3.93) + Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_h_max / 1000 + + + '========================================================================================================================================== + + + + + '공조-냉방 냉열 공급 + + Q_c_star_d = (1 - eta_c_star_d) * Q_c_star_b '(3.2.8-18) eta_c_star_d는 (Tab.3.91) + Q_c_star_ce = ((1 - eta_c_star_ce) + (1 - eta_c_star_ce_sens)) * Q_c_star_b '(3.2.8-16) eta_c_star_ce는 (Tab.3.91), eta_c_star_ce_sens는 (Tab.3.91) + + Q_c_star_outg = Q_c_star_b + Q_c_star_ce + Q_c_star_d + Q_c_star_s '(3.2.8-15) + Q_z_star_outg_l = Q_c_star_outg + + + ' 공조기기 가습에 필요한 생산기의 이용열 교부 + + + 'Q_m_star_d = 0 + 'Q_m_star_ce = 0 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + 'Q_m_star_outg = Q_m_star_b 'Q_m_star_outg = Q_m_star_b + Q_m_star_ce + Q_m_star_d '(3.2.8-24) + + + Q_c_outg_total = Q_c_outg + Q_c_star_outg + + Q_z_outg_l = Q_c_outg_total + + + + '================================================================================================================================== + '================================================================================================================================== + '지열시스템 + + Dim CRenew As New CRenewable(DSET, Result) + If dr냉방.신재생연결여부 = "시스템연결" AndAlso dr냉방.연결된시스템 <> "0" Then ' 시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr냉방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//연결되었을시에는 + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + Case "태양광" '//태양광 + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_Elec = use_Elec + Q_c_f_hp + Q_c_g_hp_aux + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LNG = use_LNG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LPG = use_LPG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + End Select + Case "열병합" '//열병합 + End Select + End If + + '================================================================================================================================== + '================================================================================================================================== + + EER = TOSG(dr냉방.열성능비) * age ' Dr냉방.열성능비 + Q_dot_c_outg = TOSG(dr냉방.냉동기용량) ' dr냉방.냉동기용량 + + If Q_dot_c_outg = 0 Or t_h_max = 0 Then '==================================================================================2014.03.07 추가 + k_n = 0 + Else + k_n = Q_c_outg_total / (Q_dot_c_outg * t_h_max) + End If '==================================================================================2014.03.07 추가 + + + If k_n > 1 Then k_n = 1 + + k_n_index = 100 ' 조건에 없는 압축방식에서 에러 발생 유도함 + + Select Case dr냉방.냉동기방식.Trim 'Dr냉방.냉동기방식 + Case "압축식", "압축식(LNG)" '압축식" + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) ' Dr냉방.냉각탑입구온도 + Select Case dr냉방.냉동기종류.Trim ' Dr냉방.냉동기종류 + Case "수냉식" '수냉식" + Select Case dr냉방.냉동기압축방식.Trim ' Dr냉방.냉동기압축방식 + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim 'Dr냉방.압축기제어방식 + Case "on/off제어" + k_n_index = 7 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 8 + Select Case dr냉방.증발식건식냉각기.Trim ' Dr냉방.증발식건식냉각기 + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("22") + End Select + Case "실린더off" + k_n_index = 9 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("21") + End Select + Case "바이패스제어" '바이패스제어" + k_n_index = 10 + f_2_av = 1 + Case Else + MsgBox("19") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 11 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(3.1851 - 0.0486 * T_W_1_i) + Case Else + MsgBox("18") + End Select + Case "터보압축기" '터보압축기" + k_n_index = 12 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("16") + End Select + Case Else + MsgBox("17") + End Select + + Case "공냉식" '공냉식" + Select Case dr냉방.냉동기압축방식.Trim + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim + Case "on/off제어" + k_n_index = 0 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 1 + f_2_av = 1 + Case Else + MsgBox("15") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 2 + f_2_av = 1 + Case Else + MsgBox("14") + End Select + + Case "실내공조시스템" '실내공조시스템" + Select Case dr냉방.냉동기설비시스템.Trim ' Dr냉방.냉동기설비시스템 + Case "콤팩트형시스템" '콤팩트형시스템" + k_n_index = 3 + f_2_av = 1 + Case "실내외분리시스템" '실내외분리시스템" + Select Case dr냉방.제어방식.Trim.ToLower '냉동기설비시스템의제어방식 Dr냉방.제어방식 + Case "on/off제어" + k_n_index = 3 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 5 + f_2_av = 1 + Case Else + MsgBox(dr냉방.제어방식.Trim) + End Select + Case "멀티분리시스템" '멀티분리시스템" + Select Case dr냉방.제어방식.Trim + Case "on/off제어" + k_n_index = 4 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 6 + f_2_av = 1 + Case Else + MsgBox("11") + End Select + Case Else + MsgBox("13") + End Select + Case Else + MsgBox("30") + End Select + '//이부분정확히 살펴보아야할듯 + If k_n = 0 Then k_n = 0.001 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + 'Dim Drow부분부하() As DS.tbl_buhaRow = DSET.tbl_buha.Rows(k_n_index) '.Select("code='" & Format(9 - Int((1 - k_n) * 10), "00") & "'") + + If k_n_index >= 100 Then + LogSB.AppendLine("냉방기기(" & dr냉방.설명 & ")의 냉동기방식(" & dr냉방.냉동기방식.Trim & ")에따른 종류(" & dr냉방.냉동기종류.Trim & ")를 확인할 수 없습니다") + Return + Else + f_1_av_up = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + + 'f_1_av = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) ' Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(k_n_index, 9 - Int((1 - k_n) * 10)) + End If + + PLV_av = f_1_av * f_2_av + + ' If i_count_month = 8 Then + ' Dim data As String = vbCrLf + "미적용시 " + i_count_month.ToString() + "월 ply_av=" + PLV_av.ToString() + ' My.Computer.FileSystem.WriteAllText(My.Application.Info.DirectoryPath & "\kn.txt", data, True, System.Text.Encoding.Default) + ' End If + + If PLV_av = 0 Then '===========================================================================2014.03.07 추가 + Q_c_f_elektr = 0 + Q_c_outg_therm = 0 + Else + If dr냉방.냉동기방식 = "압축식" Then + Q_c_f_elektr = Q_c_outg_total / (EER * PLV_av) + '======================================================================= 2010.10.5 추가 + ElseIf dr냉방.냉동기방식 = "압축식(LNG)" Then + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + use_LNG = use_LNG + Q_c_outg_therm + '======================================================================= 2010.10.5 추가 + End If + End If '===========================================================================2014.03.07 추가 + + + + If (dr냉방.냉동기방식 = "압축식" Or dr냉방.냉동기방식 = "압축식(LNG)") And dr냉방.냉동기종류 = "수냉식" Then 'If Dr냉방.냉동기방식 = "압축식" And Dr냉방.냉동기종류 = "수냉식" Then + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + + If Q_dot_c_outg = 0 Or t_h_max = 0 Then '====================================================================2014.03.07 추가 + f_R_av = 0 + Else + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + End If '====================================================================2014.03.07 추가 + + + + + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim 'Dr냉방.증발식냉각기 + Case "폐쇄형" '폐쇄형" + Select Case dr냉방.보조방음기유무.Trim 'Dr냉방.보조방음기유무 + Case "아니오" '아니오" + q_R_elektr = 0.033 + Case "예" '예" + q_R_elektr = 0.04 + End Select + Case "개방형" '개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" '아니오" + q_R_elektr = 0.018 + Case "예" '예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + Else + Q_c_f_R_elektr = 0 + End If + + + Case "흡수식" '흡수식" + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + If Q_dot_c_outg = 0 Or t_h_max = 0 Then '====================================================================2014.03.07 추가 + f_R_av = 0 + Else + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + End If '====================================================================2014.03.07 추가 + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim + Case "폐쇄형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.033 + Case "예" + q_R_elektr = 0.04 + End Select + Case "개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.018 + Case "예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" + f_2_av = TOSG(1.7174 - 0.0217 * T_W_1_i) + Case "건식" + f_2_av = TOSG(2.3235 - 0.0294 * T_W_1_i) + Case Else + 'MsgBox("증발식건식냉각기를 확인할 수 없습니다" & vbCrLf & "Calc_CoolingSystem 429번줄 Case else 를 입력하세요", MsgBoxStyle.Critical, dr냉방.증발식건식냉각기) + + End Select + + '//13번째줄 + If k_n = 0 Then k_n = 0.01 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + f_1_av_up = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + 'f_1_av = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) 'Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(13, 9 - Int((1 - k_n) * 10)) + PLV_av = f_1_av * f_2_av + + If PLV_av = 0 Then '==============================================2014.03.07 추가 + Q_c_outg_therm = 0 + Else + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + End If '==============================================2014.03.07 추가 + + + + ': 흡수식 냉동기에서 사용되는 보일러의 생산손실에너지 계산 + If dr냉방.열생산연결방식.ToString = "외부연결" Then '==============================2010.04.02 if문 추가 + + + '//냉방의 온수열생산기기로 지정된 난방기기만을 취한다 10.02.23 최적화중변경 + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code = '" & dr냉방.온수열생산기기 & "' and code <> '0'", "code") + 'If Dr난방.code = dr냉방.온수열생산기기 Then ' Dr냉방.온수열생산기기 Then + + theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_c_d - 1) + theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_c_d - 1) + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VA + theta_RA)) + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CNew As New CRenewable(DSET, Result) + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_c_d - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & Dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + '========================================================================================2010.04.02 추가 + If Q_c_outg_therm > 0 Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_c_outg_therm, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_c_outg_therm = Q_c_outg_therm - Q_W_sol_out_m + Q_c_aux = Q_c_aux + W_sol_aux_m + End If + '========================================================================================2010.04.02 추가 + Case "태양광" '//태양광 + Case "지열" '//지열 + Case "열병합" '//열병합 + If Q_c_outg_therm > 0 Then '===========================2010.04.02 And Q_c_outg_therm > 0 추가 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_Oil = use_Oil + Q_c_f_chp + + Case "천연가스" '천연가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LNG = use_LNG + Q_c_f_chp + + Case "액화가스" '액화가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, 2, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LPG = use_LPG + Q_c_f_chp + + End Select + End If + + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + + Q_dot_N = TOSG(Dr난방.정격보일러효율) * age_heating ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_c_d - 1) + + If t_h_max = 0 Then '===========================================================2014.03.07 추가 + beta_h = 0 + Else + Q_dot_d_in = Q_c_outg_therm / t_h_max + + Select Case Dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_c_d - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = Q_dot_d_in / (Q_dot_N * TOSG(Dr난방.보일러대수)) ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(1, i_count_c_d - 1)) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(Dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + End If '===========================================================2014.03.07 추가 + + + + + eta_k_100 = TOSG(Dr난방.정격보일러효율) * age_heating / 100 'Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_c_d - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + Select Case Dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_c_d - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + If beta_h > beta_k_pl Then + Q_c_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) + Q_c_g_v_i = Q_c_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * n_beta + Else + Q_c_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) + End If + + + Q_c_g = Q_c_g_v_i * t_h_max ' 추후 검토 + + Else + + ':지역난방의 경우 적용 추후 검토 + Q_c_g = 0 + + End If + + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + Select Case Dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_c_g + Q_c_outg_therm) * system_count '========2013.0818 수정 + + End Select + Else + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_c_outg_therm * system_count '========2013.0818 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + Q_c_outg_therm * system_count '========2013.0818 수정 + + End Select + + End If + + + ' End If + + + Next + '=================================================================================================2010.04.02 if문 추가 + ElseIf dr냉방.열생산연결방식 = "직화식" Then + Select Case dr냉방.사용연료.ToString + Case "난방유" + use_Oil = use_Oil + Q_c_outg_therm * system_count '========2013.0818 수정 + Case "천연가스" + use_LNG = use_LNG + Q_c_outg_therm * system_count '========2013.0818 수정 + Case "액화가스" + use_LPG = use_LPG + Q_c_outg_therm * system_count '========2013.0818 수정 + Case Else + MsgBox("냉동기기(" & dr냉방.설명 & ")가 직화식이나 사용연료가 없습니다.확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End Select + Else + MsgBox("냉동기기(" & dr냉방.설명 & ")의 열생산연결방식을 확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End If + + '=================================================================================================2010.04.02 if문 추가 + Case "지역냉방" '지역냉방" + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + use_DC = use_DC + Q_c_outg_total * system_count + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Q_c_outg_therm = Q_c_outg_total + + End Select + + Q_c_f = Q_c_f + (Q_c_f_elektr + Q_c_f_R_elektr + Q_c_outg_therm + Q_c_g) * system_count + use_Elec = use_Elec + (Q_c_f_elektr + Q_c_f_R_elektr) * system_count + + + 'If i_count_month = 6 Then + ' i_count_month = 6 + 'End If + ' 분배에 대한 전기 에너지 소비 + For Each Dr분배 As DS.tbl_bunbaeRow In DSET.tbl_bunbae.Select("냉동기='" & dr냉방.code & "' and code <> '0'", "code") + 'If Dr분배.냉동기 = dr냉방.code Then ' Worksheets("냉방분배시스템").Range("냉동기분배1").Offset(0, i_count_c_d - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + Q_dot_z = Q_dot_c_outg * (1 + 1 / EER) '(3.2.8-30) + Delta_theta_z_cl = TOSG(Dr분배.설정점에서의온도차) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(3, i_count_c_d - 1) 6 + c_cl = TOSG(Dr분배.냉매의비열) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(4, i_count_c_d - 1) 4.18 + rho_cl = TOSG(Dr분배.냉매의밀도) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(5, i_count_c_d - 1) 1000 + V_dot_z = (3600 * Q_dot_z) / (Delta_theta_z_cl * c_cl * rho_cl) '(3.2.8-29) + L = TOSG(Dr분배.공급범위의길이) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(0, i_count_c_d - 1) + b = TOSG(Dr분배.공급범위의넓이) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(1, i_count_c_d - 1) + n_G = TOSG(Dr분배.열층의수) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(2, i_count_c_d - 1) + h_G = TOSG(Dr분배.층고) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(3, i_count_c_d - 1) + L_max = 2 * (L + b / 2 + h_G * n_G + 10) '(3.2.8-32) + R = TOSG(Dr분배.배관의압력손실) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(7, i_count_c_d - 1) 0.3 + z = TOSG(Dr분배.개별저항비율) '("냉방분배시스템").Range("급수온도1").Offset(8, i_count_c_d - 1) 0.4 + Delta_P_WUE = TOSG(Dr분배.생산기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(0, i_count_c_d - 1) + Delta_P_WUV = TOSG(Dr분배.사용기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(1, i_count_c_d - 1) + Delta_P_RV = TOSG(Dr분배.제어밸브압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(2, i_count_c_d - 1) + + Delta_p_z = R * L_max * (1 + z) + Delta_P_WUE + Delta_P_RV + Delta_P_WUV '(3.2.8-31) R(7-Tab.11), Delta_P_WUE, Delta_P_RV, Delta_P_WUV (7-Tab.12) + + P_d_hydr = 1000 * Delta_p_z * V_dot_z / 3600 '(3.2.8-28) + + 'f_e = f_dash_e * (1 + (nu_cl ^ 2 / (16 * P_d_hydr)) ^ 0.4) '기존건물 관련 + 'f_e = (1.25 + (200 / P_d_hydr) ^ 0.5) * f_Adap * b '(3.2.8-38) '기존건물 관련 + P_Pump = TOSG(Dr분배.펌프동력) 'Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) + 'P_Pump = Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) << 이거오류인듯 펌프는 8번인덱스여야한다.9번줄에는 아무것도 없다. + + If P_d_hydr = 0 Then '========================================================2014.03.07 추가 + f_e = 0 + Else + f_e = P_Pump / P_d_hydr '원래는 P_hydr '(3.2.8-37) + End If '========================================================2014.03.07 추가 + + + + If Dr분배.펌프운전제어유무 = "제어" Then ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(-1, i_count_c_d - 1) = "제어" Then + c_p1 = 0.85 + c_p2 = 0.15 + ElseIf Dr분배.펌프운전제어유무 = "대수제어" Then + c_p1 = 0.75 + c_p2 = 0.25 + Else + c_p1 = 0.25 + c_p2 = 0.75 + End If + + 'beta_d_l = beta_dash_ + (1 - beta_dash_d_l) * V_dot_z_min / V_dot_z '(3.2.8-35) + If Q_z_outg_l <> 0 Then + + If Q_dot_z = 0 Or t_h_max = 0 Then '======================================================2014.03.07 추가 + + Else + beta_d_l = Q_z_outg_l / (Q_dot_z * t_h_max) '(3.2.8-34) t_d_l 을 t_h_max으로 사용 + + e_d_l = f_e * (c_p1 + c_p2 / beta_d_l) '(3.2.8-36) + + W_d_hydr_l = P_d_hydr / 1000 * t_h_max * beta_d_l * f_Abgl '(3.2.8-27) t_d_l 을 t_h_max으로 사용 + + Q_z_aux_d_l = W_d_hydr_l * e_d_l '(3.2.8-26) + 'Q_z_aux_d_a = sigma(Q_z_zux_d_l) '(3.2.8-25) + + Q_c_aux = Q_c_aux + Q_z_aux_d_l * system_count + End If '======================================================2014.03.07 추가 + + + End If + + 'End If + + Next '//for Dr분배 + + + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/CD.cd b/ArinWarev1/DataSet/Calculator/CD.cd new file mode 100644 index 0000000..4304a0b --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CD.cd @@ -0,0 +1,18 @@ + + + + + + AAAAAEAAAAAAAAAAAAAEAAAAAAABAAABACAABCAAABA= + Calculator\CShared.vb + + + + + + AAAAAAEAAAAAAAgAAAAAAAAhAAABAAgAAAAAIAACAAA= + Calculator\Zone\CZone.vb + + + + \ No newline at end of file diff --git a/ArinWarev1/DataSet/Calculator/CD_RESULT.cd b/ArinWarev1/DataSet/Calculator/CD_RESULT.cd new file mode 100644 index 0000000..8bb4e90 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CD_RESULT.cd @@ -0,0 +1,54 @@ + + + + + + + + + AAAACAAAAAAAAEAEAAAEEAAiIAAAAAAAAgAAABAAAAA= + Calculator\Result\CResult.vb + + + + + + AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgEQYAAA= + Calculator\Result\C사용면적.vb + + + + + + + + + + + + Calculator\Result\CZones.vb + + + + + AAAAAAAAAAAACAAAAAAAAAQAAAAAAAAAAAAAAAAAAIA= + Calculator\Result\CZones.vb + Calculator\Result\C최대냉난방부하.vb + + + + + + + + Calculator\Result\C최대냉난방부하.vb + + + + + AAAAACAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAA= + Calculator\Result\C최대냉난방부하.vb + + + + \ No newline at end of file diff --git a/ArinWarev1/DataSet/Calculator/CHeating.vb b/ArinWarev1/DataSet/Calculator/CHeating.vb new file mode 100644 index 0000000..56bf72c --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CHeating.vb @@ -0,0 +1,3945 @@ +Public Class CHeating + + Dim Q_w_ce As Decimal, Q_w_b As Decimal, theta_NA_Grenz As Decimal, theta_WA_Grenz As Decimal, Q_w_d_i As Decimal, t_h As Decimal + Dim L_G As Decimal, B_G As Decimal, n_G As Decimal, h_G As Decimal, V_s As Decimal, f_verbindung As Decimal, q_B_S As Decimal, Q_dot_N As Decimal, theta_g_m As Decimal + Dim theta_i As Integer, t_Nutz_d As Integer, d_Nutz_a As Integer + Dim eta_k_100 As Decimal, Q_w_g_100 As Decimal, Q_w_outg_i As Decimal, q_B_theta As Decimal, Q_B_w As Decimal, Q_w_g As Decimal, d_h_rB As Decimal + Dim theta_e_min As Decimal, f_L_WA As Decimal + Dim Q_w_ce_aux As Decimal, Q_w_d_aux As Decimal, Q_w_g_aux As Decimal, P_Pump_w As Decimal, c_p1 As Decimal, c_p2 As Decimal, t_P As Decimal, P_aux_100 As Decimal + Dim Q_w_s_aux As Decimal, d_Nutz_mth As Integer, Q_w_s As Decimal, Q_w_d As Decimal, L_i As Decimal, Q_w_outg As Decimal + Dim f_Hs_Hi As Decimal, t_w_100 As Decimal, q_B_70 As Decimal, Q_w_f As Decimal, Q_w_aux As Decimal, Q_w_g_i As Decimal + Dim use_Oil As Decimal, use_LNG As Decimal, use_LPG As Decimal, use_Elec As Decimal, use_DH As Decimal + 'Dim i_count_renewable As Integer + Dim Q_h_outg_i As Decimal + Dim Q_W_sol_out_m As Decimal, Q_H_sol_out_m As Decimal, W_sol_aux_m As Decimal, W_sol_aux As Decimal + Dim system_type As Integer + + Dim Q_dot_HP_waterheating As Decimal, COP_HP_7 As Decimal, COP_HP_10 As Decimal, L_HP_waterheating As Decimal + Dim COP_HP_total As Decimal + + Dim D_DS As Decimal, B_DS As Decimal, theta_prim_DS As Decimal, theta_DS As Decimal, Psi_DS As Decimal, H_DS As Decimal + + + '==================================2010.2.21 수정 + Dim d_op_mth As Integer + Dim d_op_max_mth As Integer + + '==================================2010.2.21 수정 + + Dim Q_w_CHP As Decimal, Q_w_f_CHP As Decimal '==============2011.07.19 추가 + Dim Q_wp_outg As Decimal, Q_w_f_hp As Decimal, Q_w_g_hp_aux As Decimal '==================================2013.01.13 추가 + + '==================================2013.08.18 추가 + Dim system_count As Decimal + + Dim a_Q_w_b As Decimal = 0 + Dim a_d_op_max_mth As Decimal = 0 + Dim a_t_h As Decimal = 0 + + Public Overridable Sub Calc_WaterheatingSystem(ByVal i_count_month As Integer, ByVal d_mth As Integer, ByVal theta_e As Decimal) + + pLog.Add("================================") + pLog.Add(String.Format(" Enter >> Calc_WaterheatingSystem Mon={0},d_mth={1},theta_e={2}", i_count_month, d_mth, theta_e)) + pLog.Add("================================") + d_op_max_mth = 0 + + Q_w_ce = 0 '급탕에서는 공급손실이 없음 + theta_NA_Grenz = 10 + theta_WA_Grenz = 10 + theta_e_min = -11.3 + f_verbindung = 1.2 '동일공간의 경우임, 타공간의 경우 (3.2.7-36) 참조 + theta_i = 22 '2011.04.01 수정 기존 13에서 주변온도를 22도로 수정(급탕에 대한 설정조건 완화) + t_Nutz_d = 11 '2011.04.01 수정 기존 24에서 운영시간를 11로 수정(급탕에 대한 설정조건 완화) + Q_w_g_100 = 0 + d_Nutz_a = 365 + Q_w_g = 0 + Q_w_g_aux = 0 + Q_w_d_aux = 0 + Q_w_s_aux = 0 + Q_w_ce_aux = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + Q_w_outg = 0 + Q_h_outg_i = 0 + W_sol_aux = 0 + system_type = 3 + '====================================2011.07.21 추가 + Q_w_CHP = 0 + Q_w_f_CHP = 0 + '====================================2011.07.21 추가 + + '======================2013.01.13 추가 + system_count = 1 + '======================2013.01.13 추가 + + '======================2013.08.18 추가 + Q_w_f_hp = 0 + Q_wp_outg = 0 + Q_w_g_hp_aux = 0 + '======================2013.08.18 추가 + + '//각달별로데이터를 초기화해야함(131020-arin) + Q_w_f = 0 + Q_w_aux = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_DH = 0 + use_Elec = 0 + + a_Q_w_b = 0 + a_d_op_max_mth = 0 + a_t_h = 0 + + '====================================2010.2.21 수정 + 'd_Nutz_mth = d_mth ' 연중가동으로 계산 추후 검토 + '====================================2010.2.21 수정 + + Dim Mon As String = "M" & Format(i_count_month, "00") + + '태양광 시스템 + Dim Calc_태양 As New CRenewable(DSET, Result) : Calc_태양.Calc_PhotovoltaicSystem_EN(i_count_month, d_mth) + + + Dim 급탕용량합 As Decimal = 0 + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0' and 헤더적용=true", "code") + + pLog.Add(String.Format("Loop 난방기기 code={0},급탕용량합={1}", Dr난방.code, 급탕용량합)) + + If DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "' and code <> '0'").GetUpperBound(0) <> -1 Then '//급탕생산기기로 지정되어있는가 '//존에서 이 난방기기가 사용되었는가? ' Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + pLog.Add(String.Format("급탕기기로 사용됨 기기방식={0}", Dr난방.열생산기기방식)) + Select Case Dr난방.열생산기기방식.Trim.ToUpper + Case "보일러" + 급탕용량합 += TOSG(Dr난방.보일러정격출력) + Case "지역난방" + 급탕용량합 += TOSG(Dr난방.열교환기정격출력) + Case "히트펌프" + 급탕용량합 += TOSG(Dr난방.히트난방용량) + Case "전기보일러" + 급탕용량합 += TOSG(Dr난방.보일러정격출력) + End Select + pLog.Add(String.Format("급탕용량합 값={0}", 급탕용량합)) + End If + + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "' and code <> '0'", "code") + + pLog.Add(String.Format("Process Zone = {0},난방기기={1}", Dr존.code, Dr난방.code)) + + Dim Drow결과() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + a_Q_w_b += (TOSG(Drow결과(0).급탕요구량) / system_count) ' Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '//급탕에너지요구량 + + '===================================================================================2010.2.21 수정 + Dim a_d_op_mth As Decimal = 0 + Dim Dr프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'", "code"), DS.tbl_profileRow()) + If Dr프로필.GetUpperBound(0) = -1 Then + LogSB.AppendLine(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + 'MsgBox(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + Else + a_d_op_mth = CInt(TOSG(Dr프로필(0)("day" & Format(i_count_month, "00")))) ' Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + End If + + If a_t_h < Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth Then + a_t_h = Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth + End If + + If a_d_op_max_mth < a_d_op_mth Then a_d_op_max_mth = a_d_op_mth + + pLog.Add(String.Format("a_Q_w_b={0},a_d_op_mth={1},a_t_h={2},a_d_op_max_mth={3}", a_Q_w_b, a_d_op_mth, a_t_h, a_d_op_max_mth)) + Next + Next + + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0'", "code") + + pLog.Add(String.Format("Process 난방기기 Code={0}", Dr난방.code)) + + '=====================2010.2.21 수정 + d_op_max_mth = 0 + '=====================2010.2.21 수정 + + Dim 비율 As Decimal + If 급탕용량합 = 0 Then + 비율 = 1 + Else + + '===================================================================================2014.02.24 추가 + Select Case Dr난방.열생산기기방식.Trim.ToUpper + Case "보일러" + 비율 = Dr난방.보일러정격출력 / 급탕용량합 + Case "지역난방" + 비율 = Dr난방.열교환기정격출력 / 급탕용량합 + Case "히트펌프" + 비율 = Dr난방.히트난방용량 / 급탕용량합 + Case "전기보일러" + 비율 = Dr난방.보일러정격출력 / 급탕용량합 + End Select + + '===================================================================================2014.02.24 추가 + + End If + + pLog.Add(String.Format("비율 = {0}", 비율)) + + If Dr난방.개별기기적용 = "1" Then + pLog.Add("개별기기적용로직 실행") + Calc_급탕_개별기기적용시(Dr난방, Mon, 비율, i_count_month, theta_e, d_mth) + Else + pLog.Add("개별기기(미)적용로직 실행") + Calc_급탕_개별기기미적용시(Dr난방, Mon, 비율, i_count_month, theta_e, d_mth) + End If + Next + + + Q_w_f = Q_w_f + Q_w_outg + Q_w_g ' - Q_w_reg '(3.2.9-5) 급탕에너지소요량 + 'Q_w_aux = Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux '급탕보조에너지소요량 (3.2.9-7) + + Result.E소요량(i_count_month).급탕 = Q_w_f + Result.E소요량(i_count_month).급탕보조 = Q_w_aux + + '//열원별에너지소요량 - 급탕에너지소요량 + Result.일차E소요량(i_count_month).급탕등유 = use_Oil + + Result.일차E소요량(i_count_month).급탕LNG = use_LNG + Result.일차E소요량(i_count_month).급탕LPG = use_LPG + Result.일차E소요량(i_count_month).급탕지역 = use_DH + Result.일차E소요량(i_count_month).급탕전력 = use_Elec + + pLog.Add(String.Format("급탕={0},급탕보조={1},급탕등유={2},급탕LNG={3},급탕LPG={4},급탕지역={5},급탕전력={6}", Q_w_f, Q_w_aux, use_Oil, use_LNG, use_LPG, use_DH, use_Elec)) + End Sub + + Private Sub Calc_급탕_개별기기미적용시(dr난방 As DS.tbl_nanbangkikiRow, Mon As String, 비율 As Decimal, i_count_month As Integer, theta_e As Decimal, d_mth As Integer) + + pLog.Add(String.Format(">> Calc_급탕_개별기기미적용시(난방기기={0},Mon={1},비율={2},i_count_month={3},theta_e={4},d_mth={5}", _ + dr난방.code, Mon, 비율, i_count_month, theta_e, d_mth)) + + Dim 적용기기목록() As DS.tbl_zoneRow = DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "' and code <> '0'", "code") + pLog.Add(String.Format("급탕기기로적용된 갯수={0}", 적용기기목록.Length)) + + If 적용기기목록.Length > 0 Then '//급탕생산기기로 지정되어있는가 '//존에서 이 난방기기가 사용되었는가? ' Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + pLog.Add(">> ") + + Q_w_b = 0 + Q_w_s = 0 + Q_w_d = 0 + Q_w_outg_i = 0 + Q_w_g_i = 0 + W_sol_aux_m = 0 + t_h = 0 + d_op_max_mth = 0 + Q_w_ce_aux = 0 + Q_w_d_aux = 0 + Q_w_s_aux = 0 + Q_w_g_aux = 0 + 'W_sol_aux_m = 0 + system_count = 1 '//160315 + + If dr난방.열생산기기방식.Trim = "전기보일러" Then + pLog.Add("전기보일러는 q_w_b 값을 0으로 처리합니다") + Q_w_b = 0 + End If + + ' Dim Dr존 As DS.tbl_zoneRow '//여기존 할당부분은엑셀하고 다시 비교해야할듯 하다 이존은 아래쪽에 프로시져 넘길떄 사용한다. + + '//현재난방기기를 급탕생산기기로 사용하는 존을 가져와서 누적시킴 + For Each Dr존 As DS.tbl_zoneRow In 적용기기목록 + 'MsgBox(Mon & "/" & Dr존.code) + + system_count = 1 'IIf(dr난방.개별기기적용 = "0", 1, TOSG(Dr존.입력존의수)) '//20130818 + + pLog.Add(String.Format("Process Zone:{0}", Dr존.code)) + + 'If dr난방.헤더적용 Then + ' Q_w_b = a_Q_w_b + ' Q_w_b *= 비율 + + ' d_op_max_mth = a_d_op_max_mth + ' t_h = a_t_h + 'Else + Dim Drow결과() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + Q_w_b = Q_w_b + TOSG(Drow결과(0).급탕요구량) / system_count ' Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '//급탕에너지요구량 + + '===================================================================================2010.2.21 수정 + Dim Dr프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'", "code"), DS.tbl_profileRow()) + If Dr프로필.GetUpperBound(0) = -1 Then + LogSB.AppendLine(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + 'MsgBox(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + Else + d_op_mth = CInt(TOSG(Dr프로필(0)("day" & Format(i_count_month, "00")))) ' Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + End If + + If t_h < Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth Then + t_h = Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + 'End If + + pLog.Add(String.Format("q_w_b={0},d_op_mth={1},t_h={2},d_op_max_mth={3}", Q_w_b, d_op_mth, t_h, d_op_max_mth)) + + Next + '===================================================================================2014.2.25 수정 + If dr난방.헤더적용 Then + Q_w_b = a_Q_w_b + Q_w_b *= 비율 + pLog.Add(String.Format("헤더적용으로인해 q_w_b 값이 수정됩니다 q_w_b=", Q_w_b)) + End If + + '===================================================================================2014.2.25 수정 + + '====================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '====================================2010.2.21 수정 + + If dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + If dr난방.배관길이 <> "" AndAlso dr난방.배관길이 <> "0" Then '//입력치 + L_i = TOSG(dr난방.배관길이) * 0.255 + Else + L_G = TOSG(dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(dr난방.건물넓이) 'Dr난방.건물넓이 + n_G = TOSG(dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(dr난방.층고) 'Worksheets("난방기기").Range("급탕분배건물길이1").Offset(3, i_count_boiler - 1) + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("배관망유형='급탕' and 생산기기구분='" & dr난방.code & "'", "code") + L_i += TOSG(Dr난방분배.배관구간길이) * TOSG(Dr난방분배.열관류율) + Next + 'For i_count_pipe = 1 To Range("배관구간").Columns.Count + ' If Worksheets("난방분배시스템").Range("분배생산기기1").Offset(2, i_count_pipe - 1) = "급탕" Then + ' If Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) = Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + ' L_i = L_i + Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) * Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + ' End If + ' End If + 'Next + '=================================================2010. 02. 11 수정 + + If dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + + Else + + theta_g_m = 40 '2013.01.12 추가 개별식의 경우 비순환시스템으로 적용 + + End If + + + Select Case dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = TOSG((55 - theta_i) / 45 * d_Nutz_mth * q_B_S) '(3.2.9-29) : 전기가열식 저탕조 + + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = TOSG((55 - theta_i) / 50 * d_Nutz_mth * q_B_S) '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + ' q_B_S = 'CSng(0.8 + 2 * V_s ^ 0.77) '(3.2.9-18) 여기맞아요? 예 0. + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '===================================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + + + Q_w_outg = Q_w_outg + Q_w_outg_i * system_count + + + pLog.Add(String.Format("Q_w_outg_i={0},Q_w_outg={1}", Q_w_outg_i, Q_w_outg)) + + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(급탕) 시스템 + Dim CRenew As New CRenewable(DSET, Result) + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템 <> "0" Then 'Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code <> '0' and code='" & dr난방.연결된시스템 & "'")(0), DS.tbl_newRow) + ' If dr신재생.기기종류.Trim.IndexOf("태") <> -1 Then + Select Case dr신재생.기기종류.Trim + Case "태양열" '//태양열 + If dr신재생.태양열종류 = "급탕" Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, dr신재생.code, i_count_month, d_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m + End If + '=======================================================================2011.007.19 추가 + Case "열병합" '//열병합 + Select Case dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_Oil = use_Oil + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LNG = use_LNG + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LPG = use_LPG + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, dr신재생.가동연료) + End Select + '=======================================================================2011.007.19 추가 + + Case "지열" '//지열 + Select Case dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_Elec = use_Elec + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LNG = use_LNG + Q_w_f_hp * system_count '===========2013.08.18 수정 + use_Elec = use_Elec + Q_w_g_hp_aux * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LPG = use_LPG + Q_w_f_hp * system_count '===========2013.08.18 수정 + use_Elec = use_Elec + Q_w_g_hp_aux * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + End Select + Case Else + '//160428 + If MsgBox("알수없는 기기종류" + vbCrLf + dr신재생.기기종류 + vbCrLf + _ + "계산을 중단하시겠습니까?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "확인") = MsgBoxResult.Yes Then + Return + End If + End Select + 'End If + End If + + pLog.Add(String.Format("신재생 : 태양열급탕 결과 Q_w_outg={0},Q_w_outg_i={1},use_LPG={2},use_LNG={5},use_Elec={3},Q_w_f={4}", Q_w_outg, Q_w_outg_i, use_LPG, use_Elec, Q_w_f, use_LNG)) + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + If dr난방.열생산기기방식 = "히트펌프" Then + + pLog.Add("히트펌프조건 진입") + + Q_dot_HP_waterheating = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(dr난방.히트난방정격7) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(dr난방.히트난방정격10) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) ' 새로운 버전에서 15도로 입력값 수정 + L_HP_waterheating = TOSG(dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_waterheating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.002)) + Else + If Q_dot_HP_waterheating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0014)) + End If + End If + + Q_w_outg = Q_w_outg - Q_w_outg_i '===================================================2013.01.16 추가 + + If Q_dot_HP_waterheating = 0 Or t_h = 0 Then '=============================================================2014.03.07 추가 + Q_w_outg_i = 0 + Else + If Q_w_outg_i / (Q_dot_HP_waterheating * t_h) > 1 Or dr난방.히트펌프시스템종류 = "실내외분리시스템" Then + Q_w_outg_i = Q_w_outg_i / COP_HP_total + Else + Q_w_outg_i = Q_w_outg_i / (COP_HP_total * (Q_w_outg_i / (Q_dot_HP_waterheating * t_h) * 0.5 + 0.5)) + End If + + End If '=============================================================2014.03.07 추가 + + Q_w_outg = Q_w_outg + Q_w_outg_i '===================================================2013.01.16 추가 + + pLog.Add(String.Format("히트펌프조건 완료 Q_w_outg={0}", Q_w_outg)) + End If + + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + + Q_dot_N = TOSG(IIf(dr난방.보일러정격출력 = "", 0, dr난방.보일러정격출력)) 'Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + eta_k_100 = TOSG(IIf(dr난방.정격보일러효율 = "", 0, TOSG(dr난방.정격보일러효율))) / 100 ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + pLog.Add("열생산기기방식 - 보일러진입") + + If d_Nutz_mth = 0 Or eta_k_100 = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '====2014.03.07 추가 + Q_w_g_100 = 0 + Else + Q_w_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_w_outg_i / d_Nutz_mth '(3.2.9-58) + End If + + If d_Nutz_mth = 0 Or Q_dot_N = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결)'====2014.03.07 추가 + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "기름보일러" '기름보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온가스보일러" '저온가스보일러" + q_B_70 = TOSG((4.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온기름보일러" '저온기름보일러" + q_B_70 = TOSG((4.25 * Q_dot_N ^ (-0.4)) / 100) + + Case "콘덴싱보일러" '콘덴싱보일러" + q_B_70 = TOSG((4 * Q_dot_N ^ (-0.4)) / 100) + Case Else + MsgBox("난방.보일러방식을 알수없습니다", MsgBoxStyle.Critical, "값=" & dr난방.보일러방식) + End Select + + q_B_theta = q_B_70 * (theta_g_m - theta_i) / (70 - 20) '(3.2.9-60) + If eta_k_100 = 0 Then '===========================================2014.03.07 추가 + Q_B_w = 0 + Else + Q_B_w = q_B_theta * Q_dot_N / eta_k_100 * (t_Nutz_d - t_w_100) * f_Hs_Hi '(3.2.9-59) + End If '===========================================2014.03.07 추가 + + + If theta_WA_Grenz - theta_e_min = 0 Then '====================================================2014.03.07 추가 + f_L_WA = 1 + Else + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + End If '====================================================2014.03.07 추가 + + If d_mth = 0 Then + d_h_rB = 0 + Else + d_h_rB = d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24)) '(3.2.7-21) + End If + + + ':d_h_rB > d_Nutz_mth 일 경우 + If d_h_rB > d_Nutz_mth Then + d_Nutz_mth = CInt(d_h_rB) + End If + + Q_w_g = Q_w_g + (Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB)) * system_count '=====2013.08.13 수정 '(3.2.9-57) + Q_w_g_i = Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB) + + pLog.Add(String.Format("열생산기기방식 - 보일러완료 : Q_w_g={0},Q_w_g_i={1}", Q_w_g, Q_w_g_i)) + + Else + + If dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + + pLog.Add("열생산기기방식 - 지역난방") + + If dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_w_g = Q_w_g + (H_DS * (theta_DS - theta_i)) * system_count '=====2013.08.13 수정 + use_DH = use_DH + (H_DS * (theta_DS - theta_i)) * system_count '========2013.08.18 수정 + + pLog.Add(String.Format("열생산기기방식 - 지역난방완료 : Q_w_g={0},use_DH={1}", Q_w_g, use_DH)) + + End If + + End If + + ': 급탕 전기 보조에너지 시작 + + Q_w_ce_aux = 0 + Q_w_g_aux = 0 '// 2014.01.08 추가 + + P_Pump_w = TOSG(dr난방.펌프동력급탕) ' Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case dr난방.펌프제어.Trim 'Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.94 + Case "제어" '제어" + c_p1 = 0.5 + c_p2 = 0.63 + Case "(없음)" + c_p1 = 0 + c_p2 = 0 + Case Else + '//160428 중단기능추가 + Dim msg As String = String.Format("[난방기기:{0}] 알수없는 펌프제어 값={1}", dr난방.code, dr난방.펌프제어) + If MsgBox(msg + vbCrLf + "계산을 중단하시겠습니까?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "확인") = MsgBoxResult.Yes Then + Return + End If + End Select + + Q_w_d_aux = Q_w_d_aux + P_Pump_w / 1000 * d_Nutz_mth * t_Nutz_d * (c_p1 + c_p2) '(3.2.9-15) + + Select Case dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "가스가열식" '가스가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "간접가열식" '간접가열식" + + '=================================================================================2010.10.19 추가 + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "보일러" + t_P = TOSG(Q_w_outg_i * 1.1 / Q_dot_N) '(3.2.9-28) + Case "지역난방" + t_P = TOSG(Q_w_outg_i * 1.1 / TOSG(dr난방.열교환기정격출력)) + Case "전기보일러" + t_P = 1 + Case "히트펌프" + t_P = 1 + End Select + '=================================================================================2010.10.19 추가 + Q_w_s_aux = TOSG(Q_w_s_aux + 0.001 * P_Pump_w * t_P) '(3.2.9-27) + + End Select + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-77) + + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-78) + + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-79) + + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-80) + + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-81) + + End Select + + If d_Nutz_mth = 0 Or Q_dot_N = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '===2014.03.07 추가 + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Q_w_g_aux = Q_w_g_aux + P_aux_100 * t_w_100 * d_Nutz_mth '+ P_aux_SB * (24 - t_w_100) * (d_Nutz_mth - d_h_rB) '(3.2.9-7) + + End If + + + + If dr난방.열생산기기방식 = "보일러" Then ' Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + End Select + Else + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_w_outg_i * system_count '========2013.08.18 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + (Q_w_outg_i + (Q_w_outg_i * 0.09)) * system_count '========2013.08.18 수정 '2011.03.08 개별전기보일러 생산손실을 내부 생산식저장으로 설정 + Q_w_outg = Q_w_outg + (Q_w_outg_i * 0.09) * system_count '========2013.11.6 수정 + + '====================================================================================2010.03.14 추가 + Case "히트펌프" + + Select Case dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + Case "천연가스" + use_LNG = use_LNG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + Case "액화가스" + use_LPG = use_LPG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + End Select + '====================================================================================2010.03.14 추가 + + End Select + + End If + + use_Elec = use_Elec + (Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux) * system_count '========2013.08.18 수정 + Q_w_aux = Q_w_aux + (Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux) * system_count '========2013.08.18 수정 '급탕보조에너지소요량 (3.2.9-7) 2011.03.23 추가 + + pLog.Add(String.Format("급탕_개별기기미적용시 완료 use_Elec={0},Q_w_aux={1}", use_Elec, Q_w_aux)) + End If + End Sub + + Private Sub Calc_급탕_개별기기적용시(dr난방 As DS.tbl_nanbangkikiRow, Mon As String, 비율 As Decimal, i_count_month As Integer, theta_e As Decimal, d_mth As Integer) + + pLog.Add(String.Format(">> Enter Process : Calc_급탕_개별기기적용시 : mon={0},비율={1},i_count_month={2},theta_e={3},d_mth={4}", Mon, 비율, i_count_month, theta_e, d_mth)) + + Dim dr존데이터() As DS.tbl_zoneRow = DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "' and code <> '0'", "code") + If dr존데이터.Length > 0 Then '//급탕생산기기로 지정되어있는가 '//존에서 이 난방기기가 사용되었는가? ' Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + pLog.Add("급탕생산기기로 적용된 건수가 있으므로 값들을 초기화한다") + + Q_w_b = 0 + Q_w_s = 0 + Q_w_d = 0 + Q_w_outg_i = 0 + Q_w_g_i = 0 + W_sol_aux_m = 0 + t_h = 0 + d_op_max_mth = 0 + Q_w_ce_aux = 0 + Q_w_d_aux = 0 + Q_w_s_aux = 0 + Q_w_g_aux = 0 + 'W_sol_aux_m = 0 + system_count = 1 + End If + + pLog.Add(String.Format("system_count={0}", system_count)) + + If dr난방.열생산기기방식.Trim = "전기보일러" Then Q_w_b = 0 + + pLog.Add(String.Format("Q_w_b={0}", Q_w_b)) + + ' Dim Dr존 As DS.tbl_zoneRow '//여기존 할당부분은엑셀하고 다시 비교해야할듯 하다 이존은 아래쪽에 프로시져 넘길떄 사용한다. + + '//현재난방기기를 급탕생산기기로 사용하는 존을 가져와서 누적시킴 + For Each Dr존 As DS.tbl_zoneRow In dr존데이터 + system_count = TOSG(Dr존.입력존의수) '//20130818 + If system_count = 0 Then system_count = 1 + + pLog.Add(String.Format("ZoneCode={0},System_Count={1}", Dr존.code, system_count)) + + + 'If dr난방.헤더적용 Then + ' Q_w_b = a_Q_w_b + ' Q_w_b *= 비율 + + ' d_op_max_mth = a_d_op_max_mth + ' t_h = a_t_h + 'Else + Dim Drow결과() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + Q_w_b = TOSG(Drow결과(0).급탕요구량) / system_count ' Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '//급탕에너지요구량 + + '===================================================================================2010.2.21 수정 + Dim Dr프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'", "code"), DS.tbl_profileRow()) + If Dr프로필.GetUpperBound(0) = -1 Then + LogSB.AppendLine(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + 'MsgBox(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + Else + d_op_mth = CInt(TOSG(Dr프로필(0)("day" & Format(i_count_month, "00")))) ' Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + End If + + If t_h < Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth Then + t_h = Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + 'End If + + + '====================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '====================================2010.2.21 수정 + + pLog.Add(String.Format("q_w_b={0},d_op_mth={1},t_h={2},d_op_max_mth={3},d_nutz_mth={4}", Q_w_b, d_op_mth, t_h, d_op_max_mth, d_Nutz_mth)) + + If dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + If dr난방.배관길이 <> "" AndAlso dr난방.배관길이 <> "0" Then '//입력치 + L_i = TOSG(dr난방.배관길이) * 0.255 + Else + L_G = TOSG(dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(dr난방.건물넓이) 'Dr난방.건물넓이 + n_G = TOSG(dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(dr난방.층고) 'Worksheets("난방기기").Range("급탕분배건물길이1").Offset(3, i_count_boiler - 1) + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("배관망유형='급탕' and 생산기기구분='" & dr난방.code & "'", "code") + L_i += TOSG(Dr난방분배.배관구간길이) * TOSG(Dr난방분배.열관류율) + Next + 'For i_count_pipe = 1 To Range("배관구간").Columns.Count + ' If Worksheets("난방분배시스템").Range("분배생산기기1").Offset(2, i_count_pipe - 1) = "급탕" Then + ' If Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) = Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + ' L_i = L_i + Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) * Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + ' End If + ' End If + 'Next + '=================================================2010. 02. 11 수정 + + If dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + + Else + + theta_g_m = 40 '2013.01.12 추가 개별식의 경우 비순환시스템으로 적용 + + End If + + pLog.Add(String.Format("theta_g_m={0}", theta_g_m)) + + + Select Case dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = TOSG((55 - theta_i) / 45 * d_Nutz_mth * q_B_S) '(3.2.9-29) : 전기가열식 저탕조 + + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = TOSG((55 - theta_i) / 50 * d_Nutz_mth * q_B_S) '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + ' q_B_S = 'CSng(0.8 + 2 * V_s ^ 0.77) '(3.2.9-18) 여기맞아요? 예 0. + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '===================================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + + + Q_w_outg = Q_w_outg + Q_w_outg_i * system_count + + pLog.Add(String.Format("q_w_outg_i={0},Q_w_outg={1}", Q_w_outg_i, Q_w_outg)) + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(급탕) 시스템 + 'If Dr난방.설명.ToUpper.IndexOf("B-1") <> -1 Then + ' MsgBox(Dr난방.code) + 'End If + Dim CRenew As New CRenewable(DSET, Result) + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템 <> "0" Then 'Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code <> '0' and code='" & dr난방.연결된시스템 & "'")(0), DS.tbl_newRow) + ' If dr신재생.기기종류.Trim.IndexOf("태") <> -1 Then + Select Case dr신재생.기기종류.Trim + Case "태양열" '//태양열 + If dr신재생.태양열종류 = "급탕" Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, dr신재생.code, i_count_month, d_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m + End If + '=======================================================================2011.007.19 추가 + Case "열병합" '//열병합 + Select Case dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_Oil = use_Oil + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LNG = use_LNG + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, 3, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LPG = use_LPG + Q_w_f_CHP * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + Q_w_f_CHP * system_count '============================2013.01.13 수정, 2013.08.18 수정 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, dr신재생.가동연료) + End Select + '=======================================================================2011.007.19 추가 + + Case "지열" '//지열 + Select Case dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_Elec = use_Elec + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LNG = use_LNG + Q_w_f_hp * system_count '===========2013.08.18 수정 + use_Elec = use_Elec + Q_w_g_hp_aux * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LPG = use_LPG + Q_w_f_hp * system_count '===========2013.08.18 수정 + use_Elec = use_Elec + Q_w_g_hp_aux * system_count '===========2013.08.18 수정 + Q_w_f = Q_w_f + (Q_w_f_hp + Q_w_g_hp_aux) * system_count '============================2010.04.17 추가, 2013.08.18 수정 + End Select + + + + End Select + 'End If + End If + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + If dr난방.열생산기기방식 = "히트펌프" Then + + pLog.Add("열생산기기방식-히트펌프진입") + Q_dot_HP_waterheating = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(dr난방.히트난방정격7) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(dr난방.히트난방정격10) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) ' 새로운 버전에서 15도로 입력값 수정 + L_HP_waterheating = TOSG(dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_waterheating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.002)) + Else + If Q_dot_HP_waterheating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0014)) + End If + End If + + Q_w_outg = Q_w_outg - Q_w_outg_i '===================================================2013.01.16 추가 + + + If Q_dot_HP_waterheating = 0 Or t_h = 0 Then '=============================================================2014.03.07 추가 + Q_w_outg_i = 0 + Else + If Q_w_outg_i / (Q_dot_HP_waterheating * t_h) > 1 Or dr난방.히트펌프시스템종류 = "실내외분리시스템" Then + Q_w_outg_i = Q_w_outg_i / COP_HP_total + Else + Q_w_outg_i = Q_w_outg_i / (COP_HP_total * (Q_w_outg_i / (Q_dot_HP_waterheating * t_h) * 0.5 + 0.5)) + End If + + End If '=============================================================2014.03.07 추가 + + Q_w_outg = Q_w_outg + Q_w_outg_i '===================================================2013.01.16 추가 + + pLog.Add(String.Format("열생산기기방식-히트펌프완료 Q_w_outg={0}", Q_w_outg)) + + End If + + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + Q_dot_N = TOSG(IIf(dr난방.보일러정격출력 = "", 0, dr난방.보일러정격출력)) 'Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + eta_k_100 = TOSG(IIf(dr난방.정격보일러효율 = "", 0, TOSG(dr난방.정격보일러효율))) / 100 ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + pLog.Add("열생산기기방식-보일러진입") + + If d_Nutz_mth = 0 Or eta_k_100 = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '==============2014.03.07 추가 + Q_w_g_100 = 0 + Else + Q_w_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_w_outg_i / d_Nutz_mth '(3.2.9-58) + End If + + If d_Nutz_mth = 0 Or Q_dot_N = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '=================2014.03.07 추가 + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "기름보일러" '기름보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온가스보일러" '저온가스보일러" + q_B_70 = TOSG((4.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온기름보일러" '저온기름보일러" + q_B_70 = TOSG((4.25 * Q_dot_N ^ (-0.4)) / 100) + + Case "콘덴싱보일러" '콘덴싱보일러" + q_B_70 = TOSG((4 * Q_dot_N ^ (-0.4)) / 100) + Case Else + MsgBox("난방.보일러방식을 알수없습니다", MsgBoxStyle.Critical, "값=" & dr난방.보일러방식) + End Select + + q_B_theta = q_B_70 * (theta_g_m - theta_i) / (70 - 20) '(3.2.9-60) + If eta_k_100 = 0 Then '===========================================2014.03.07 추가 + Q_B_w = 0 + Else + Q_B_w = q_B_theta * Q_dot_N / eta_k_100 * (t_Nutz_d - t_w_100) * f_Hs_Hi '(3.2.9-59) + End If '===========================================2014.03.07 추가 + + If theta_WA_Grenz - theta_e_min = 0 Then '====================================================2014.03.07 추가 + f_L_WA = 1 + Else + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + End If '====================================================2014.03.07 추가 + + If d_mth = 0 Then + d_h_rB = 0 + Else + d_h_rB = d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24)) '(3.2.7-21) + End If + + + ':d_h_rB > d_Nutz_mth 일 경우 + If d_h_rB > d_Nutz_mth Then + d_Nutz_mth = CInt(d_h_rB) + End If + + Q_w_g = Q_w_g + (Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB)) * system_count '=====2013.08.13 수정 '(3.2.9-57) + Q_w_g_i = Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB) + + pLog.Add(String.Format("열생산기기방식-보일러완료 Q_w_g={0},Q_w_g_i={1}", Q_w_g, Q_w_g_i)) '===2017.02.26 당초 Q_w_g_i={1]" 을 Q_w_g_i={1}" 으로 오류 수정 + + Else + + If dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + + pLog.Add("열생산기기방식-지역난방진입") + + If dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_w_g = Q_w_g + (H_DS * (theta_DS - theta_i)) * system_count '=====2013.08.13 수정 + use_DH = use_DH + (H_DS * (theta_DS - theta_i)) * system_count '========2013.08.18 수정 + + + pLog.Add(String.Format("열생산기기방식-지역난방완료 {0},{1}", Q_w_g, use_DH)) + End If + + End If + + ': 급탕 전기 보조에너지 시작 + + Q_w_ce_aux = 0 + Q_w_g_aux = 0 '// 2014.01.08 추가 + + P_Pump_w = TOSG(dr난방.펌프동력급탕) ' Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case dr난방.펌프제어.Trim 'Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.94 + Case "제어" '제어" + c_p1 = 0.5 + c_p2 = 0.63 + Case "(없음)" + c_p1 = 0 + c_p2 = 0 + Case Else + MsgBox("[난방기가: " & dr난방.code & "] 알수없는 펌프제어방식(" & dr난방.펌프제어.Trim & ")", MsgBoxStyle.Critical, dr난방.펌프제어) + + + End Select + + Q_w_d_aux = Q_w_d_aux + P_Pump_w / 1000 * d_Nutz_mth * t_Nutz_d * (c_p1 + c_p2) '(3.2.9-15) + + Select Case dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "가스가열식" '가스가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "간접가열식" '간접가열식" + + '=================================================================================2010.10.19 추가 + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "보일러" + t_P = TOSG(Q_w_outg_i * 1.1 / Q_dot_N) '(3.2.9-28) + Case "지역난방" + t_P = TOSG(Q_w_outg_i * 1.1 / TOSG(dr난방.열교환기정격출력)) + Case "전기보일러" + t_P = 1 + Case "히트펌프" + t_P = 1 + End Select + '=================================================================================2010.10.19 추가 + Q_w_s_aux = TOSG(Q_w_s_aux + 0.001 * P_Pump_w * t_P) '(3.2.9-27) + + End Select + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-77) + + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-78) + + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-79) + + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-80) + + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-81) + + End Select + + If d_Nutz_mth = 0 Or Q_dot_N = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '================2014.03.07 추가 + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Q_w_g_aux = Q_w_g_aux + P_aux_100 * t_w_100 * d_Nutz_mth '+ P_aux_SB * (24 - t_w_100) * (d_Nutz_mth - d_h_rB) '(3.2.9-7) + + End If + + + + If dr난방.열생산기기방식 = "보일러" Then ' Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + + End Select + Else + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_w_outg_i * system_count '========2013.08.18 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + (Q_w_outg_i + (Q_w_outg_i * 0.09)) * system_count '========2013.08.18 수정 '2011.03.08 개별전기보일러 생산손실을 내부 생산식저장으로 설정 + Q_w_outg = Q_w_outg + (Q_w_outg_i * 0.09) * system_count '========2013.11.6 수정 + + '====================================================================================2010.03.14 추가 + Case "히트펌프" + + Select Case dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + Case "천연가스" + use_LNG = use_LNG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + Case "액화가스" + use_LPG = use_LPG + (Q_w_outg_i + Q_w_g_i) * system_count '========2013.08.18 수정 + End Select + '====================================================================================2010.03.14 추가 + + End Select + + End If + + use_Elec = use_Elec + (Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux) * system_count '========2013.08.18 수정 + Q_w_aux = Q_w_aux + (Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux) * system_count '========2013.08.18 수정 '급탕보조에너지소요량 (3.2.9-7) 2011.03.23 추가 + + pLog.Add(String.Format("급탕개별기기적용시 완료 : use_ele={0},q_w_aux={1}", use_Elec, Q_w_aux)) + Next '//for zonerow + + End Sub + + + '//i_ce As Integer 제거함 사용안됨 + Dim i_count_beta As Integer + Dim Q_h_f As Decimal, Q_h_outg As Decimal, Q_h_g As Decimal + Dim Q_h_b As Decimal, Q_h_b_i As Decimal, Q_h_ce As Decimal, Q_h_ce_i As Decimal, Q_dot_h_max As Decimal, Q_h_d As Decimal, Q_h_s As Decimal + Dim f_hydr As Decimal, f_int As Decimal, f_Radiant As Decimal + Dim beta_k_pl As Decimal, beta_k_100 As Decimal, n As Decimal, t_h_op_d As Integer, n_beta As Integer + Dim theta_i_h_soll As Decimal, theta_VA As Decimal, theta_RA As Decimal + Dim e As Decimal, f As Decimal, Q_V_g_100 As Decimal, Q_V_g_pl As Decimal, Q_h_g_v_i As Decimal + Dim Q_h_ce_aux As Decimal, Q_h_d_aux As Decimal, Q_h_d_aux_i As Decimal, beta_h_s As Decimal, Q_h_s_aux As Decimal, Q_h_g_aux As Decimal, P_h_g_aux As Decimal, P_aux_pl As Decimal, P_aux_SB As Decimal + Dim eta_L As Decimal, eta_B As Decimal, eta_C As Decimal, eta_h_ce As Decimal, beta_h_d As Decimal, beta_h As Decimal + Dim theta_VL_m_beta_h_d As Decimal, theta_RL_m_beta_h_d As Decimal, theta_HK_m_beta_h_d As Decimal, eta_k_pl As Decimal + Dim f_L_NA As Decimal, t_h_rL_T As Decimal, t_h_rL As Decimal + Dim Q_dot_d_in As Decimal, Q_dot_B_h As Decimal, Q_h_g_i As Decimal + Dim P_Pump As Decimal, f_P_A As Decimal + Dim P_C As Decimal, P_V As Decimal, P_P As Decimal, n_V As Decimal, n_P As Decimal, Q_V_P As Decimal, Q_c As Decimal, Q_h_aux As Decimal + Dim t_h_max As Integer + Dim Q_h_CHP As Decimal, Q_h_f_CHP As Decimal + Dim i_HeatCool As Integer, Q_hp_outg As Decimal, Q_h_f_hp As Decimal, Q_h_g_hp_aux As Decimal + Dim Q_dot_HP_heating As Decimal, L_HP_heating As Decimal '=======================2010.03.14 추가 + Dim U_i As Decimal + + Dim a_Q_h_b_i As Decimal = 0 + Dim a_Q_dot_h_max As Decimal = 0 + Dim a_t_h_max As Decimal = 0 + Dim a_t_h_op_d As Decimal = 0 + Dim a_d_op_mth As Decimal = 0 + Dim priod_value As Single = 0 + Dim age As Decimal = 1 '//준공연도에 의한 경년변화값 + Dim age_heating As Decimal = 1 + + Public Overridable Sub Calc_HeatingSystem(ByVal i_count_month As Integer, ByVal theta_e As Decimal) + + pLog.Add(String.Format("Enter >> Calc_HeatingSystem i_count_month={0},theta_e={1}", i_count_month, theta_e)) + + d_op_max_mth = 0 + '==================================2010.2.21 수정 + + + 'For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + ' priod_value = CSng(DRpriod.priod) + 'Next + 'If priod_value > 20 Then priod_value = 20 + 'age = (1 - 0.01) ^ priod_value + 'age_heating = (1 - 0.005) ^ priod_value + + '==================================2013.08.18 추가 + + 'Dim system_count_check As Integer '체크여부 리턴값 확인 필요 + 'Dim header_check As Integer '체크여부 리턴값 확인 필요 + + U_i = 0D + theta_NA_Grenz = 10 + theta_WA_Grenz = 10 + beta_k_pl = 0.3 + beta_k_100 = 1 + f_verbindung = 1.2 '동일공간의 경우임, 타공간의 경우 (3.2.7-36) 참조 + f_hydr = 1 '리버스리턴 계수로 지금은 1로 적용, 추후 검토 + f_int = 1 ' 간헐(0.97-0.98), 지속 1 우선 1로 적용, 추후 검토 + f_verbindung = 1.2 + theta_i_h_soll = 20 + theta_i = 13 ' 비난방공간으로 가정 + n = 1.33 '라디에이터 1.33, 바닥난방 1.1, 우선 라디에이터 적용 + theta_e_min = -11.3 + d_Nutz_a = 365 '연간이용일수 우선 연중가동으로 적용 + Q_h_outg = 0 + 'd_Nutz_mth = d_mth ' 연중가동으로 계산 추후 검토 '================2010.2.21 수정 + Q_h_g = 0 + Q_h_ce_aux = 0 + Q_h_d_aux = 0 + Q_h_s_aux = 0 + Q_h_g_aux = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + Q_h_outg = 0 + Q_w_outg = 0 + Q_h_CHP = 0 + Q_h_f_CHP = 0 + i_HeatCool = 1 + Q_hp_outg = 0 + Q_h_f_hp = 0 + Q_h_g_hp_aux = 0 + W_sol_aux = 0 + system_type = 1 + Q_h_f = 0 '===============================2010.04.17 추가 + t_Nutz_d = 24 '==========================2010.04.24 추가 + + '======================2013.01.13 추가 + system_count = 1 + '======================2013.01.13 추가 + + '//각달별로데이터를 초기화(131020-arin) + Q_h_aux = 0 + use_Elec = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_DH = 0 + use_Elec = 0 + + a_Q_h_b_i = 0 + a_Q_dot_h_max = 0 + a_t_h_max = 0 + a_t_h_op_d = 0 + a_d_op_mth = 0 + priod_value = 0 + age = 1 '//준공연도에 의한 경년변화값 + age_heating = 1 + + + + Dim Mon As String = "M" & Format(i_count_month, "00") + + '//130822 + Dim 보일러정격출력합 As Decimal = 0 '//acc + + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0' and 헤더적용=true", "code") + + '=======================================================================================================2014.02.24 수정 + Select Case Dr난방.열생산기기방식.Trim.ToUpper + Case "보일러" + 보일러정격출력합 += TOSG(Dr난방.보일러정격출력) + Case "지역난방" + 보일러정격출력합 += TOSG(Dr난방.열교환기정격출력) + Case "히트펌프" + 보일러정격출력합 += TOSG(Dr난방.히트난방용량) + Case "전기보일러" + 보일러정격출력합 += TOSG(Dr난방.보일러정격출력) + End Select + '=======================================================================================================2014.02.24 수정 + + + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') and code <> '0'") ' For i_count_zone = 1 To DSET.tbl_zone.Rows.Count + Dim 판단1 As Boolean = False + Dim 판단2 As Boolean = False + If DR존.열생산난방생산기기 = Dr난방.code Then 판단1 = True + If DR존.공조난방생산기기 = Dr난방.code Then 판단2 = True + + If 판단1 And (DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방") Then + Dim Dr월에너지 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + + system_count = IIf(Dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '===========2013.08.18 추가 + If system_count = 0 Then system_count = 1 + + + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then + a_Q_h_b_i += TOSG(Dr월에너지.난방요구량열) / system_count '===========2012.08.18 수정 + Else + a_Q_h_b_i += TOSG(Dr월에너지.난방요구량열 + Dr월에너지.난방요구량공조) / system_count '===========2012.08.18 수정 ' Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + End If + '=========================================================================================================================================================2010.2.21 수정 + a_Q_dot_h_max += TOSG(Drow최대(0).최대난방기기부하) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + '===================================================================================2010.2.21 수정 + Dim DR프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필("day" & Format(i_count_month, "00")))) + End If + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + '===================================================================================2010.2.21 수정 + If t_h > t_h_max Then t_h_max = t_h + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + + '//acc + If d_op_max_mth > a_d_op_max_mth Then a_d_op_max_mth = d_op_max_mth + If t_h > a_t_h Then a_t_h = t_h + If t_h_max > a_t_h_max Then a_t_h_max = t_h_max + If t_h_op_d > a_t_h_op_d Then a_t_h_op_d = t_h_op_d + End If '//판단1 + + If DR존.냉난방공조 = "냉난방" OrElse DR존.냉난방공조 = "난방" OrElse ((DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예") Then ' 공조기 사용에 따른 난방에너지 + '=========================================================================================================================================================2010.2.21 수정 + system_count = IIf(Dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '//20130818 + If system_count = 0 Then system_count = 1 + + If 판단2 Then + + Dim 월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + a_Q_h_b_i += TOSG(월에너지분석.난방요구량공조) / system_count '=========2013.08.18 수정 + Else + a_Q_h_b_i += TOSG(월에너지분석.공조요구량난방) / system_count '=========2013.08.18 수정 ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + End If + + '// + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) / system_count '=====2013.08.18 수정 ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + If t_h > t_h_max Then + t_h_max = t_h + End If + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then + t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + End If + + '//acc + If Q_dot_h_max > a_Q_dot_h_max Then a_Q_dot_h_max = Q_dot_h_max + If d_op_mth > a_d_op_mth Then a_d_op_mth = d_op_mth + If t_h > a_t_h Then a_t_h = t_h + If d_op_max_mth > a_d_op_max_mth Then a_d_op_max_mth = d_op_max_mth + If t_h_max > a_t_h_max Then a_t_h_max = t_h_max + If t_h_op_d > a_t_h_op_d Then a_t_h_op_d = t_h_op_d + End If + End If + Next + Next + + + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0'", "code") + + Dim 비율 As Decimal + If 보일러정격출력합 = 0 Then + 비율 = 1 + Else + + '=======================================================================================================2014.02.24 수정 + Select Case Dr난방.열생산기기방식.Trim.ToUpper + Case "보일러" + 비율 = Dr난방.보일러정격출력 / 보일러정격출력합 + Case "지역난방" + 비율 = Dr난방.열교환기정격출력 / 보일러정격출력합 + Case "히트펌프" + 비율 = Dr난방.히트난방용량 / 보일러정격출력합 + Case "전기보일러" + 비율 = Dr난방.보일러정격출력 / 보일러정격출력합 + End Select + '=======================================================================================================2014.02.24 수정 + + End If + + If Dr난방.개별기기적용 = "1" Then + Calc_난방_개별기기적용시(Dr난방, Mon, 비율, i_count_month, theta_e) + Else + Calc_난방_개별기기미적용시(Dr난방, Mon, 비율, i_count_month, theta_e) + End If + + Next + + '//에너지소요량 - 에너지소요량분석 - 난방에너지소요량 + Q_h_f = Q_h_f + Q_h_outg + Q_h_g '- Q_h_reg '(3.2.7-4)신재생에너지는 추후 추가 '===================2010.04.17 수정 + + 'DSETR.TReqUse.Rows(CEnum.ResultRow.난방에너지소요량)(Mon) = Q_h_f 'Sheets("계산결과").Cells(39, 7 + i_count_month) = Q_h_f + Result.E소요량(i_count_month).난방 = Q_h_f + + ': 난방 전기 보조에너지 연결 + For Each dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("냉난방열공급시스템<>'0' and code<>'0'", "code") + 'If dr존.열생산난방생산기기 <> "0" Or dr존.냉난방열공급시스템 <> "0" Then 'dr존.냉난방열공급시스템 <> "" Then + + system_count = TOSG(dr존.입력존의수) '===========2013.08.18 추가 + + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + + For Each Dr공급 As DS.tbl_kongkubRow In DSET.tbl_kongkub.Select("code='" & dr존.냉난방열공급시스템 & "' and code <> '0'", "code") + '===================================================================================2010.2.21 수정 + t_h = CInt(TOSG(Result.최대부하.Item(dr존.code).일일난방최대가동시간) * d_op_mth) + If theta_WA_Grenz - theta_e_min = 0 Then '=============================================2014.03.07 추가 + f_L_WA = 1 + Else + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + End If '=============================================2014.03.07 추가 + + + If d_op_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + d_h_rB = 0 + Else + d_h_rB = TOSG(d_op_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_mth * 24))) '(3.2.7-21) + End If + t_h_op_d = CInt(TOSG(Result.최대부하.Item(dr존.code).일일난방최대가동시간)) + + If theta_NA_Grenz - theta_e_min = 0 Then '=============================================2014.03.07 추가 + f_L_NA = 1 + Else + f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + End If '=============================================2014.03.07 추가 + + + + t_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + t_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + + P_C = TOSG(Dr공급.제어기의정격전력) ' Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(0, i_count_ce - 1) + P_V = TOSG(Dr공급.팬송풍기정격전력) 'Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(1, i_count_ce - 1) + P_P = TOSG(Dr공급.펌프정격전력) 'Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(2, i_count_ce - 1) + n_V = TOSG(Dr공급.팬송풍기수) ' Worksheets("난방공급시스템").Range("난방공급팬1").Offset(0, i_count_ce - 1) + n_P = TOSG(Dr공급.추가펌프수) 'Worksheets("난방공급시스템").Range("난방공급팬1").Offset(1, i_count_ce - 1) + Q_V_P = ((P_V * n_V + P_P * n_P) * t_h_rL) / 1000 '(3.2.7-34) + Q_c = P_C * d_op_mth * 24 / 1000 '(3.2.7-33) + Q_h_ce_aux = Q_h_ce_aux + (Q_c + Q_V_P) * TOSG(dr존.냉난방열공급시스템수) * system_count ' Worksheets("입력존").Range("입력난방공급기기1").Offset(1, i_count_zone - 1) '(3.2.7-32) '////2012.07.08 입력존의 수 추가 + Next + + 'End If + Next + + + Q_h_aux = Q_h_ce_aux + Q_h_d_aux + Q_h_s_aux + Q_h_g_aux + W_sol_aux '(3.2.7-5) 난방보조에너지소요량 + 'DSETR.TReqUse.Rows(CEnum.ResultRow.난방보조에너지소요량)(Mon) = Q_h_aux 'Sheets("계산결과").Cells(41, 7 + i_count_month) = Q_h_aux + Result.E소요량(i_count_month).난방보조 = Q_h_aux + use_Elec = use_Elec + Q_h_ce_aux + Q_h_d_aux + Q_h_s_aux + Q_h_g_aux + W_sol_aux + + '//연간 Co2 배출량 - 난방에너지소요량 + Result.일차E소요량(i_count_month).난방등유 = use_Oil + Result.일차E소요량(i_count_month).난방LNG = use_LNG + Result.일차E소요량(i_count_month).난방LPG = use_LPG + Result.일차E소요량(i_count_month).난방지역 = use_DH + Result.일차E소요량(i_count_month).난방전력 = use_Elec + + pLog.Add(String.Format("q_h_aux={0},난방등유={1},LNG={2},LPG={3},지역={4},전력={5}", Q_h_aux, use_Oil, use_LNG, use_LPG, use_DH, use_Elec)) + + End Sub + + Private Sub Calc_난방_개별기기미적용시(dr난방 As DS.tbl_nanbangkikiRow, mon As String, 비율 As Decimal, i_count_month As Integer, theta_e As Decimal) + + pLog.Add(" >> Enter : Calc_난방_개별기기미적용시") + + '//이 난방기기가 존전체내역에서 사용이되엇나? + If DSET.tbl_zone.Select("(공조난방생산기기 = '" & dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') ").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(4, i_count_boiler - 1) = "예" Then + '"(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') " + Q_h_b = 0 + Q_h_ce = 0 + Q_dot_h_max = 0 + t_h_max = 0 + t_h = 0 '원래 식은 t_h = t_h_op + t_h_we 월간 난방 시간 + t_h_op_d = 0 + Q_h_d = 0 + Q_h_s = 0 + n_beta = 0 ' 순차가동시 full 부하 대수 + Q_h_g_v_i = 0 + '==================================2010.2.21 수정 + d_op_max_mth = 0 + d_Nutz_mth = 0 + '==================================2010.2.21 수정 + + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("(공조난방생산기기 = '" & dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') and code <> '0'") ' For i_count_zone = 1 To DSET.tbl_zone.Rows.Count + + '//지금 사용하는 존이 공조에의한것인지 아닌지를 판단 + Dim 판단1 As Boolean = False + Dim 판단2 As Boolean = False + If DR존.열생산난방생산기기 = dr난방.code Then 판단1 = True + If DR존.공조난방생산기기 = dr난방.code Then 판단2 = True + + '//다시 생각을... + + 'If Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) <> "" And Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + ' If DR존.열생산난방생산기기 = Dr난방.code Then ' Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + '=========================================================================================================================================================2010.2.21 수정 + '1105 소스백업 If DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방" Then ' Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) <> "냉난방" Then + If 판단1 And (DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방") Then + Dim Dr월에너지 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + + system_count = 1 'IIf(dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '===========2013.08.18 추가 + + 'If dr난방.헤더적용 Then + ' 'Q_h_b_i = a_Q_h_b_i + ' 'Q_h_b_i *= 비율 '//130818 + ' 'Q_h_b = Q_h_b_i + ' 'Q_dot_h_max = a_Q_dot_h_max + 'Else + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then + Q_h_b_i = TOSG(Dr월에너지.난방요구량열) / system_count '===========2012.08.18 수정 + Else + Q_h_b_i = TOSG(Dr월에너지.난방요구량열 + Dr월에너지.난방요구량공조) / system_count '===========2012.08.18 수정 ' Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + End If + Q_h_b = Q_h_b + Q_h_b_i + '=========================================================================================================================================================2010.2.21 수정 + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + 'End If + + + + '===================================================================================2010.2.21 수정 + 'If dr난방.헤더적용 Then + ' d_op_mth = a_d_op_mth + ' t_h = a_t_h + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + ' t_h_op_d = a_t_h_op_d + 'Else + Dim DR프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + If t_h > t_h_max Then t_h_max = t_h + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + 'i_ce = 0 + 'End If + + '//아래 if 문이 모두 공급기기 데이터를 가지고 게산을 하고잇네요 이 부분을 전부 실행못하게 해야합니다. + If DR존.냉난방열공급시스템 = "0" Then + '//0일떄 특정 변수를 초기화(=0) 하려면 이곳에 입력하세요. + Else + + Dim Dr공급 As DS.tbl_kongkubRow = CType(DSET.tbl_kongkub.Select("code='" & DR존.냉난방열공급시스템 & "' and code <> '0'")(0), DS.tbl_kongkubRow) + + If (DR존.천장고 = "" OrElse TOSG(DR존.천장고) < 4) Then ' Worksheets("입력존").Range("천장고1").Offset(0, i_count_zone - 1) < 4 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + eta_L = (0.93 + 0.95) / 2 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + eta_L = 1 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.78 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.95 + End Select + Select Case Dr공급.바닥난방열건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥열시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "바닥난방(전기)" '바닥난방(전기)" + eta_L = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.91 + Case "on/off제어" + eta_C = 0.93 '2011.05.03 추가, 우선 on/off 제어와 PI제어를 같게 적용, 추후검토 + Case "PI제어" 'PI제어" + eta_C = 0.93 + End Select + Select Case Dr공급.바닥난방전기건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥전기시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "전기난방" '전기난방" + eta_L = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + eta_B = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Select Case Dr공급.전기난방제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" + eta_C = -1.1235955 '2011.05.03 추가, 우선 on/off 제어와 비제어를 같게 적용, 추후검토 + Case "on/off제어" + eta_C = -1.1235955 ' eta_h_ce 0.89 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Case "PI제어" 'PI제어" + eta_C = -1.07527 ' eta_h_ce 0.93 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + End Select + End Select + f_Radiant = 1 + Else + If TOSG(DR존.천장고) >= 4 And TOSG(DR존.천장고) < 10 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.9 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.935 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + End Select + Else + + + Select Case Dr공급.열공급시스템.Trim + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.72 ' 우선 15m 기준 설정 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방열제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.78 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + End Select + + End If + + End If + + eta_h_ce = 1 / (4 - (eta_L + eta_C + eta_B)) '(3.27-28) + + Q_h_ce_i = (f_Radiant * f_int * f_hydr / eta_h_ce - 1) * Q_h_b_i '(3.2.7-27) + Q_h_ce = Q_h_ce + Q_h_ce_i + + End If + End If '//판단1 //난방생산기기 완료 + + If DR존.냉난방공조 = "냉난방" OrElse DR존.냉난방공조 = "난방" OrElse ((DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예") Then ' 공조기 사용에 따른 난방에너지 + '=========================================================================================================================================================2010.2.21 수정 + system_count = 1 'IIf(dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '//20130818 + If 판단2 Then + + 'If dr난방.헤더적용 Then + ' Q_h_b_i = a_Q_h_b_i + ' Q_h_b_i *= 비율 '//130818 + ' Q_h_b = Q_h_b_i '//Q_c_b + Q_c_b_i + + 'Else + Dim 월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_h_b_i = TOSG(월에너지분석.난방요구량공조) / system_count '=========2013.08.18 수정 + Else + Q_h_b_i = TOSG(월에너지분석.공조요구량난방) / system_count '=========2013.08.18 수정 ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + End If + Q_h_b = Q_h_b + Q_h_b_i + 'End If + 'Q_h_ce_i = 0 '공조기는 0으로 설정 '==============================================================2010.03.20 수정 공조기는 0으로 설정한 것을 수정 + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + + Else + If TOSG(DR존.천장고p) >= 4 Then + If TOSG(DR존.천장고p) >= 20 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.71 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 15 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.78 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 12 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.84 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 10 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.87 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 8 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.91 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 6 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.96 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.99 + 0.97 + 1))) - 1) * Q_h_b_i) + End If + End If + End If + End If + End If + End If + End If + + '===============================================================================================2010.03.20 수정 + + Q_h_ce = Q_h_ce + Q_h_ce_i + End If + + 'If dr난방.헤더적용 Then + ' Q_dot_h_max = a_Q_dot_h_max + ' d_op_mth = a_d_op_mth + ' t_h = a_t_h + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + ' t_h_op_d = a_t_h_op_d + 'Else + '//프로필 + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) / system_count '=====2013.08.18 수정 ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + If t_h > t_h_max Then t_h_max = t_h + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + + 'End If + + + + + + End If + '=========================================================================================================================================================2010.2.21 수정 + + + End If + '//공조 난방기기 완료 ㅋㅋ 끝 + ' End If + + Next + + If dr난방.헤더적용 Then + Q_h_b = a_Q_h_b_i * 비율 + End If + + + + + + '==================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '==================================2010.2.21 수정 + 'beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + + 'theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + 'theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + 'theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + 'theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + 'theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + + 'f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + 'd_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + + 'f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + 't_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + 't_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + + + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + If dr난방.열생산기기방식 = "히트펌프" Then + If dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(dr난방.히트난방용량) * TOSG(dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + + If t_h_max = 0 Or Q_dot_h_max = 0 Then '======================================================================2014.043.07 추가 + beta_h_d = 0 + Else + beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + End If '======================================================================2014.043.07 추가 + + + If beta_h_d > 1 Then beta_h_d = 1 + + theta_VA = TOSG(dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + theta_RA = TOSG(dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + + If theta_WA_Grenz - theta_e_min = 0 Then '==================================================================2014.03.07 추가 + f_L_WA = 1 + Else + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + End If '==================================================================2014.03.07 추가 + + If d_op_max_mth = 0 Then '==================================================================2014.03.07 추가 + d_h_rB = 0 + Else + d_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + End If '==================================================================2014.03.07 추가 + + + If theta_NA_Grenz - theta_e_min = 0 Then + f_L_NA = 1 + Else + f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + End If + + + + t_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + t_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("생산기기구분='" & dr난방.code & "' and code <> '0'", "code") + 'If Dr난방.code = Dr난방분배.생산기기구분 Then ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + + Select Case Dr난방분배.표준치적용.Trim ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(1, i_count_pipe - 1) + Case "상세입력" '상세입력" + L_i = TOSG(Dr난방분배.배관구간길이) '= Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) + U_i = TOSG(Dr난방분배.열관류율) ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + Select Case Dr난방분배.배관설치장소.Trim ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(3, i_count_pipe - 1) + Case "표준난방존" '표준난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 + Case "표준비난방존" '표준비난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - 13) * L_i * t_h_rL) / 1000 + Case "외부" '외부" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_e) * L_i * t_h_rL) / 1000 + End Select + Case "표준치조건" '표준치조건" + L_G = TOSG(Dr난방분배.건물길이x) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(0, i_count_pipe - 1) + B_G = TOSG(Dr난방분배.건물길이y) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(1, i_count_pipe - 1) + n_G = TOSG(Dr난방분배.층수) 'Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(2, i_count_pipe - 1) + h_G = TOSG(Dr난방분배.층고) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(3, i_count_pipe - 1) + If dr난방.배관망유형 = "이중배관" Then ' then Worksheets("난방기기").Range("난방기기배관망1").Offset(0, i_count_boiler - 1) = "이중배관" Then + If Dr난방분배.지관장소 = "외부" Then ' then외부" Then + L_i = TOSG((2 * L_G + 0.01625 * L_G * B_G * B_G) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '외부배관난방적용 + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '내부배관난방적용 + End If + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + Q_h_d = (Q_h_d + (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 '(3.2.7-36) 'theta_i를 theta_i_h_soll 로 수정 추후 검토 ' U_i는 L_i에 포함 + Case Else + MsgBox("표준치적용을 알수없습니다", MsgBoxStyle.Critical, Dr난방분배.표준치적용) + End Select + 'End If + Next + + '=================================================2010. 02. 11 수정 + If dr난방.축열탱크방식 <> "축열탱크없음" Then ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) <> "축열탱크없음" Then + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.4 + 0.14 * V_s ^ 0.45) '(3.2.7-43) + Q_h_s = f_verbindung * (theta_VA - theta_i) / 45 * d_op_max_mth * q_B_S '(3.2.7-41) theta_h_s 는 theta_VA 로 설정'================== d_op_max_mth 2010.2.21 수정 + End If + + '===================================================================================================================2010.2.21 수정 + Q_h_outg_i = Q_h_b + Q_h_ce + Q_h_d + Q_h_s '(3.2.7-1) + + If dr난방.열생산기기방식 = "전기보일러" Then + Q_h_outg_i = Q_h_outg_i / (TOSG(dr난방.정격보일러효율) * age_heating / 100) + End If + + + + + Q_h_outg = Q_h_outg + Q_h_outg_i * system_count '=====2013.08.13 수정 '(3.2.7-1) + '===================================================================================================================2010.2.21 수정 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + '//아래는 급탕생산기기로 지정되어잇는가? + If DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "'").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + Q_w_b = 0 + For Each Dr입력존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0' and 열생산급탕생산기기='" & dr난방.code & "'", "code") + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr입력존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & Dr입력존.code & "'")(0), DSR.월별에너지분석Row) + + system_count = IIf(dr난방.개별기기적용 = "0", 1, TOSG(Dr입력존.입력존의수)) '//20130818 + If system_count = 0 Then system_count = 1 + + Q_w_b = TOSG(Q_w_b + TOSG(Dr월에너지분석.급탕요구량)) / system_count 'Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) + '===================================================================================2010.2.21 수정 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr입력존.프로필 & "'")(0), DS.tbl_profileRow) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + Next + End If + End If + + + ' 여기에 신재생에너지를 산출하고 Q_h_outg 와 Q_h_outg_i 에서 신재생에너지를 차감해야 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CRenew As New CRenewable(DSET, Result) + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템.Trim <> "" AndAlso dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//식은 맞는듯한게 값이 이상하게 들었네요... 뭘해도 되도록 수정해버리죠 ㅋㅋ + + + Select Case Dr신재생.기기종류.Trim ' Dr난방.연결된시스템.Trim + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_Elec = use_Elec + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LNG = use_LNG + Q_h_f_hp * system_count '=============2013.08.18 수정 + use_Elec = use_Elec + Q_h_g_hp_aux * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LPG = use_LPG + Q_h_f_hp * system_count '=============2013.08.18 수정 + use_Elec = use_Elec + Q_h_g_hp_aux * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + End Select + Case "열병합" '//열병합 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_Oil = use_Oil + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LNG = use_LNG + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LPG = use_LPG + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, Dr신재생.가동연료) + End Select + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '===========================================================================================2013.01.13 이동 + If dr난방.열생산기기방식 = "히트펌프" Then + + Q_dot_HP_heating = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(dr난방.히트난방정격7) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(dr난방.히트난방정격10) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) + L_HP_heating = TOSG(dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_heating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.002)) + Else + If Q_dot_HP_heating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0014)) + End If + End If + + + + Q_h_outg = Q_h_outg - Q_h_outg_i '===================================================2013.01.16 추가 + '======================================================================================================================================================2010.04.23 추가 + + + '======================================================================================================================================================2012.07.08 추가 + + If dr난방.운전방식.Trim = "동시가동" Or dr난방.운전방식.Trim = "순차가동" Then + Q_dot_HP_heating = Q_dot_HP_heating * TOSG(dr난방.보일러대수) + End If + + + If t_h_max = 0 Or Q_dot_HP_heating = 0 Then '=================================================================================2014.03.07 추가 + Q_h_outg_i = 0 + Else + If Q_h_outg_i / (Q_dot_HP_heating * t_h_max) >= 1 Or dr난방.히트펌프시스템종류 = "실내외분리시스템" Then '====2010.04.26 수정 + Q_h_outg_i = Q_h_outg_i / COP_HP_total + Else + If dr난방.운전방식.Trim = "순차가동" Then + For i_count_beta = 1 To CInt(TOSG(dr난방.보일러대수)) + If Q_h_outg_i <= (Q_dot_HP_heating * t_h_max / TOSG(dr난방.보일러대수) * i_count_beta) Then + Q_h_outg_i = ((Q_h_outg_i / COP_HP_total) * (i_count_beta - 1) + (Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max / TOSG(dr난방.보일러대수)) * 0.5 + 0.5)))) / i_count_beta + Exit For + End If + Next + + Else + Q_h_outg_i = Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max) * 0.5 + 0.5)) '====2010.04.26 수정 + End If + + End If + + End If '=================================================================================2014.03.07 추가 + + '======================================================================================================================================================2010.04.23 추가 + Q_h_outg = Q_h_outg + Q_h_outg_i * system_count '=====2013.08.13 수정 '===================================================2013.01.16 추가 + + + End If + + '===========================================================================================2013.01.13 이동 + + + + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + If DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "' and code <> '0'").GetUpperBound(0) <> -1 Then ' If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + If dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + L_G = TOSG(dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(dr난방.건물넓이) ' Dr난방.건물넓이 + n_G = TOSG(dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(dr난방.층고) ' Dr난방.층고 + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + + If dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + End If + + + Select Case dr난방.축열탱크방식.Trim 'Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = (55 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-29) : 전기가열식 저탕조 + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = (55 - theta_i) / 50 * d_Nutz_mth * q_B_S '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '============================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + Q_w_outg = Q_w_outg + Q_w_outg_i * system_count '=====2013.08.13 수정 + + Else + Q_w_outg_i = 0 + End If + + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(난방+급탕) 시스템 + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열일때 + If Dr신재생.태양열종류 = "난방+급탕" Then '난방+급탕" Then + + 'Dim Dr존 As DS.tbl_zoneRow = CType(DSET.tbl_zone.Select("code<>'0'", "code")(i_count_zone - 1), DS.tbl_zoneRow) + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_h_outg = Q_h_outg - Q_H_sol_out_m + Q_h_outg_i = Q_h_outg_i - Q_H_sol_out_m + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m * system_count '=======2013.08.18 수정 + End If + End Select + End If + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + Q_dot_N = TOSG(dr난방.보일러정격출력) ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + If d_Nutz_mth = 0 Or Q_dot_N = 0 Or d_h_rB = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) '=====================2014.03.07 추가 + t_w_100 = 0 + Q_dot_d_in = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + Q_dot_d_in = Q_h_outg_i / (d_h_rB * (t_h_rL_T - t_w_100)) '(3.2.7-69) 난방 또는 난방 및 급탕 + ' 우선 미적용 Q_dot_d_in = sigma_Q_h_outg / (t_Betrieb_K - t_W_100) * d_Nutz_mth '(3.2.7-70) 난방, 급탕 및 공조 + End If + + + Select Case dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_boiler - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = TOSG(Q_dot_d_in / (Q_dot_N * TOSG(dr난방.보일러대수))) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + + + '------------------------------------------------------------------------------------ + ' 보일러 가동 손실의 경우 국내 데이타 미비로 정격효율을 부분부하효율로 적용 추후 검토 필요 + + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-83) 일반보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 100 '(3.2.7-84) 일반보일러 + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-85) 콘덴싱보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 105 '(3.2.7-86) 콘덴싱보일러 + + + 'q_B_70 = (E * (Q_dot_N ^ F)) / 100 '(3.2.7-64) + 'q_B_theta = q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) '(3.2.7-72) + 'Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) 정지 대기모드 + + + + 'beta_h_g = (Q_h_b + Q_h_ce + Q_h_d + Q_h_s) / (Q_dot_h_max * t_h) '(3.2.7-10) + 'theta_VL_m_beta_h_g = (theta_VA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.13) + 'theta_RL_m_beta_h_g = (theta_RA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.-14) + + 'eta_k_pl_Betrieb = eta_k_pl + H * (theta_g_test_pl - theta_HK_m_beta_h_g) '(3.2.7-76) + 'eta_k_100_Betrieb = eta_k_100 + G * (theta_g_test100 - theta_HK_m_beta_h_g) '(3.2.7-75) + 'Q_V_g_100 = (f_Hs_Hi - eta_k_100_Betrieb) / eta_k_100_Betrieb * Q_dot_N '(3.2.7-74) + 'Q_V_g_pl = (f_Hs_Hi - eta_k_pl_Betrieb) / eta_k_pl_Betrieb * beta_k_pl * Q_dot_N '(3.2.7-73) + + '-- ------- ----- --- --- --- -- + + eta_k_100 = TOSG(TOSG(dr난방.정격보일러효율) * age_heating / 100) ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + + Else + q_B_70 = 1 + End If + + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + + + + + If beta_h > beta_k_pl Then + Q_h_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) + Q_h_g_v_i = Q_h_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) * n_beta + Else + '======================================================================================== 2010.2.21 수정 + If beta_h = 0 Then + Q_h_g_v_i = 0 + Else + Q_h_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) * (t_h_rL_T - t_w_100) + End If + '======================================================================================== 2010.2.21 수정 + End If + + Q_h_g = Q_h_g + (Q_h_g_v_i * d_h_rB) * system_count '=====2013.08.13 수정 '(3.2.7-66) + Q_h_g_i = Q_h_g_v_i * d_h_rB + + Else + + If dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + If dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_h_g = Q_h_g + (H_DS * (theta_DS - theta_i)) * system_count '=====2013.08.13 수정 + use_DH = use_DH + (H_DS * (theta_DS - theta_i)) * system_count '========2013.08.18 수정 + + End If + + + End If + + + ' 전기보조에너지 Q_h_d_aux 산출 관련 + + P_Pump = TOSG(dr난방.펌프동력) ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case dr난방.펌프제어유형.Trim ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.75 + Case "정압" '정압" + c_p1 = 0.75 + c_p2 = 0.25 + Case "변압" '변압" + c_p1 = 0.9 + c_p2 = 0.1 + End Select + + If beta_h_d = 0 Then + Q_h_d_aux_i = 0 + Else + Q_h_d_aux_i = P_Pump / 1000 * beta_h_d * t_h * (c_p1 + c_p2 / beta_h_d) '(3.2.7-39) + End If + Select Case dr난방.펌프교정계수.Trim ' Worksheets("난방기기").Range("난방펌프교정계수1").Offset(0, i_count_boiler - 1) + Case "정상가동" '정상가동" + f_P_A = 1 + Case "감소가동" '감소가동" + f_P_A = 0.6 + Case "가동정지" '" + f_P_A = 0 + End Select + + If t_h = 0 Or Q_h_d_aux_i = 0 Then '=========================================================================2014.03.07 추가 + + Else + Q_h_d_aux = TOSG(Q_h_d_aux + (Q_h_d_aux_i * (1.03 * t_h_rL + f_P_A * (t_h - t_h_rL)) / t_h) * system_count) '(3.2.7-40) + End If '=========================================================================2014.03.07 추가 + + + + + + If dr난방.축열탱크방식 = "축열탱크없음" Then + P_Pump = 0 ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + Else + P_Pump = TOSG(dr난방.펌프정격전력) ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + '=================================================================2010.11.04 위치 수정 + If dr난방.열생산기기방식 = "히트펌프" Then + If dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(dr난방.히트난방용량) * TOSG(dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + + If Q_dot_h_max = 0 Or t_h = 0 Then '============================================================2014.03.07 추가 + beta_h_s = 0 + Else + beta_h_s = (Q_h_b + Q_h_ce + Q_h_d) / (Q_dot_h_max * t_h) '(3.2.7-9) + End If '============================================================2014.03.07 추가 + + + If beta_h_s > 1 Then beta_h_s = 1 + t_P = beta_h_s * 24 * d_op_max_mth '(3.2.7-44) + Q_h_s_aux = Q_h_s_aux + (P_Pump * t_P / 1000) * system_count '===2013.08.18 수정 '(3.2.7-44) + '=================================================================2010.11.04 위치 수정 + + End If + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + P_aux_SB = 0.02 + + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + + End Select + + If beta_h > beta_k_pl Then + P_h_g_aux = (beta_h - beta_k_pl) / (1 - beta_k_pl) * (P_aux_100 - P_aux_pl) + P_aux_pl '(3.2.7-82) + Else + P_h_g_aux = (beta_h / beta_k_pl) * (P_aux_pl - P_aux_SB) + P_aux_SB '(3.2.7-81) + End If + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg / (Q_dot_N * d_Nutz_mth) + End If + + Q_h_g_aux = Q_h_g_aux + (P_h_g_aux * (t_h_rL - t_w_100 * d_op_max_mth * d_Nutz_a / 365) + P_aux_SB * (24 * d_op_max_mth - t_h_rL)) * system_count '=====2013.08.18 수정 '(3.2.7-80) + + + End If + + + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + End Select + Else + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + '====================================================================2010.2.21 수정 + Case "지역난방" '지역난방" + use_DH = use_DH + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + (Q_h_outg_i + (Q_h_outg_i * 0.09)) * system_count '========2013.08.18 수정 '2011.03.08 전기보일러 생산손실을 내부 생산식 저장으로 설정 + '====================================================================2010.2.21 수정 + '====================================================================2010.03.14 추가 + Case "히트펌프" + Select Case dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "천연가스" + use_LNG = use_LNG + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "액화가스" + use_LPG = use_LPG + Q_h_outg_i * system_count '========2013.08.18 수정 + + End Select + '====================================================================2010.03.14 추가 + End Select + + End If + + End If + End Sub + + Private Sub Calc_난방_개별기기적용시(dr난방 As DS.tbl_nanbangkikiRow, mon As String, 비율 As Decimal, i_count_month As Integer, theta_e As Decimal) + + pLog.Add(" >> Enter : Calc_난방_개별기기적용시") + '//이 난방기기가 존전체내역에서 사용이되엇나? + + Dim dr존데이터() As DS.tbl_zoneRow = DSET.tbl_zone.Select("(공조난방생산기기 = '" & dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') ") + If dr존데이터.Length > 0 Then + '"(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') " + Q_h_b = 0 + Q_h_ce = 0 + Q_dot_h_max = 0 + t_h_max = 0 + t_h = 0 '원래 식은 t_h = t_h_op + t_h_we 월간 난방 시간 + t_h_op_d = 0 + Q_h_d = 0 + Q_h_s = 0 + n_beta = 0 ' 순차가동시 full 부하 대수 + Q_h_g_v_i = 0 + '==================================2010.2.21 수정 + d_op_max_mth = 0 + d_Nutz_mth = 0 + '==================================2010.2.21 수정 + Q_w_outg = 0 '=================================2013.12.18 추가 + End If + + 'If DSET.tbl_zone.Select("(공조난방생산기기 = '" & dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') ").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(4, i_count_boiler - 1) = "예" Then + + + For Each DR존 As DS.tbl_zoneRow In dr존데이터 + + '//지금 사용하는 존이 공조에의한것인지 아닌지를 판단 + Dim 판단1 As Boolean = False + Dim 판단2 As Boolean = False + If DR존.열생산난방생산기기 = dr난방.code Then 판단1 = True + If DR존.공조난방생산기기 = dr난방.code Then 판단2 = True + + '//다시 생각을... + + 'If Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) <> "" And Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + ' If DR존.열생산난방생산기기 = Dr난방.code Then ' Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + '=========================================================================================================================================================2010.2.21 수정 + '1105 소스백업 If DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방" Then ' Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) <> "냉난방" Then + If 판단1 And (DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방") Then + Dim Dr월에너지 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + + system_count = IIf(dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '===========2013.08.18 추가 + + 'If dr난방.헤더적용 Then + ' Q_h_b_i = a_Q_h_b_i + ' Q_h_b_i *= 비율 '//130818 + ' Q_h_b = Q_h_b_i + ' Q_dot_h_max = a_Q_dot_h_max + 'Else + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then + Q_h_b_i = TOSG(Dr월에너지.난방요구량열) / system_count '===========2012.08.18 수정 + Else + Q_h_b_i = TOSG(Dr월에너지.난방요구량열 + Dr월에너지.난방요구량공조) / system_count '===========2012.08.18 수정 ' Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + End If + Q_h_b = Q_h_b_i + '=========================================================================================================================================================2010.2.21 수정 + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + 'End If + + '===================================================================================2010.2.21 수정 + 'If dr난방.헤더적용 Then + ' d_op_mth = a_d_op_mth + ' t_h = a_t_h + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + ' t_h_op_d = a_t_h_op_d + 'Else + Dim DR프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + If t_h > t_h_max Then t_h_max = t_h + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + 'i_ce = 0 + 'End If + + '//아래 if 문이 모두 공급기기 데이터를 가지고 게산을 하고잇네요 이 부분을 전부 실행못하게 해야합니다. + If DR존.냉난방열공급시스템 = "0" Then + '//0일떄 특정 변수를 초기화(=0) 하려면 이곳에 입력하세요. + Else + + Dim Dr공급 As DS.tbl_kongkubRow = CType(DSET.tbl_kongkub.Select("code='" & DR존.냉난방열공급시스템 & "' and code <> '0'")(0), DS.tbl_kongkubRow) + + If (DR존.천장고 = "" OrElse TOSG(DR존.천장고) < 4) Then ' Worksheets("입력존").Range("천장고1").Offset(0, i_count_zone - 1) < 4 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + eta_L = (0.93 + 0.95) / 2 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + eta_L = 1 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.78 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.95 + End Select + Select Case Dr공급.바닥난방열건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥열시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "바닥난방(전기)" '바닥난방(전기)" + eta_L = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.91 + Case "on/off제어" + eta_C = 0.93 '2011.05.03 추가, 우선 on/off 제어와 PI제어를 같게 적용, 추후검토 + Case "PI제어" 'PI제어" + eta_C = 0.93 + End Select + Select Case Dr공급.바닥난방전기건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥전기시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "전기난방" '전기난방" + eta_L = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + eta_B = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Select Case Dr공급.전기난방제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" + eta_C = -1.1235955 '2011.05.03 추가, 우선 on/off 제어와 비제어를 같게 적용, 추후검토 + Case "on/off제어" + eta_C = -1.1235955 ' eta_h_ce 0.89 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Case "PI제어" 'PI제어" + eta_C = -1.07527 ' eta_h_ce 0.93 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + End Select + End Select + f_Radiant = 1 + Else + If TOSG(DR존.천장고) >= 4 And TOSG(DR존.천장고) < 10 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.9 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.935 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + End Select + Else + + + Select Case Dr공급.열공급시스템.Trim + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.72 ' 우선 15m 기준 설정 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방열제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.78 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + End Select + + End If + + End If + + eta_h_ce = 1 / (4 - (eta_L + eta_C + eta_B)) '(3.27-28) + + Q_h_ce_i = (f_Radiant * f_int * f_hydr / eta_h_ce - 1) * Q_h_b_i '(3.2.7-27) + Q_h_ce = Q_h_ce_i + + End If + End If '//판단1 //난방생산기기 완료 + + If DR존.냉난방공조 = "냉난방" OrElse DR존.냉난방공조 = "난방" OrElse ((DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예") Then ' 공조기 사용에 따른 난방에너지 + '=========================================================================================================================================================2010.2.21 수정 + system_count = IIf(dr난방.개별기기적용 = "0", 1, TOSG(DR존.입력존의수)) '//20130818 + If system_count = 0 Then system_count = 1 + + If 판단2 Then + + 'If dr난방.헤더적용 Then + ' Q_h_b_i = a_Q_h_b_i + ' Q_h_b_i *= 비율 '//130818 + ' Q_h_b = Q_h_b_i '//Q_c_b + Q_c_b_i + + 'Else + Dim 월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_h_b_i = TOSG(월에너지분석.난방요구량공조) / system_count '=========2013.08.18 수정 + Else + Q_h_b_i = TOSG(월에너지분석.공조요구량난방) / system_count '=========2013.08.18 수정 ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + End If + Q_h_b = Q_h_b_i + 'End If + 'Q_h_ce_i = 0 '공조기는 0으로 설정 '==============================================================2010.03.20 수정 공조기는 0으로 설정한 것을 수정 + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + + Else + If TOSG(DR존.천장고p) >= 4 Then + If TOSG(DR존.천장고p) >= 20 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.71 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 15 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.78 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 12 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.84 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 10 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.87 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 8 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.91 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 6 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.96 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.99 + 0.97 + 1))) - 1) * Q_h_b_i) + End If + End If + End If + End If + End If + End If + End If + + '===============================================================================================2010.03.20 수정 + + Q_h_ce = Q_h_ce_i + End If + + 'If dr난방.헤더적용 Then + ' Q_dot_h_max = a_Q_dot_h_max + ' d_op_mth = a_d_op_mth + ' t_h = a_t_h + ' d_op_max_mth = a_d_op_max_mth + ' t_h_max = a_t_h_max + ' t_h_op_d = a_t_h_op_d + 'Else + '//프로필 + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) / system_count '=====2013.08.18 수정 ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + If d_op_max_mth < d_op_mth Then d_op_max_mth = d_op_mth + If t_h > t_h_max Then t_h_max = t_h + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + + 'End If + End If + '=========================================================================================================================================================2010.2.21 수정 + End If + '//공조 난방기기 완료 ㅋㅋ 끝 + ' End If + + '==================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '==================================2010.2.21 수정 + 'beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + + 'theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + 'theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + 'theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + 'theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + 'theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + + 'f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + 'd_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + + 'f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + 't_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + 't_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + + + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + If dr난방.열생산기기방식 = "히트펌프" Then + If dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(dr난방.히트난방용량) * TOSG(dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + + If Q_dot_h_max = 0 Or t_h_max = 0 Then '==========================================================2014.03.07 추가 + beta_h_d = 0 + Else + beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) + End If '==========================================================2014.03.07 추가 + + + ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + + If beta_h_d > 1 Then beta_h_d = 1 + + theta_VA = TOSG(dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + theta_RA = TOSG(dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + If theta_WA_Grenz - theta_e_min = 0 Then '==================================================2014.03.07 추가 + f_L_WA = 1 + Else + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + End If '==================================================2014.03.07 추가 + + If d_op_max_mth = 0 Then + d_h_rB = 0 + Else + d_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + End If + + If theta_NA_Grenz - theta_e_min = 0 Then '==================================================2014.03.07 추가 + f_L_NA = 1 + Else + f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + End If '==================================================2014.03.07 추가 + + + t_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + t_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("생산기기구분='" & dr난방.code & "' and code <> '0'", "code") + 'If Dr난방.code = Dr난방분배.생산기기구분 Then ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + + Select Case Dr난방분배.표준치적용.Trim ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(1, i_count_pipe - 1) + Case "상세입력" '상세입력" + L_i = TOSG(Dr난방분배.배관구간길이) '= Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) + U_i = TOSG(Dr난방분배.열관류율) ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + Select Case Dr난방분배.배관설치장소.Trim ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(3, i_count_pipe - 1) + Case "표준난방존" '표준난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 + Case "표준비난방존" '표준비난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - 13) * L_i * t_h_rL) / 1000 + Case "외부" '외부" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_e) * L_i * t_h_rL) / 1000 + End Select + Case "표준치조건" '표준치조건" + L_G = TOSG(Dr난방분배.건물길이x) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(0, i_count_pipe - 1) + B_G = TOSG(Dr난방분배.건물길이y) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(1, i_count_pipe - 1) + n_G = TOSG(Dr난방분배.층수) 'Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(2, i_count_pipe - 1) + h_G = TOSG(Dr난방분배.층고) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(3, i_count_pipe - 1) + If dr난방.배관망유형 = "이중배관" Then ' then Worksheets("난방기기").Range("난방기기배관망1").Offset(0, i_count_boiler - 1) = "이중배관" Then + If Dr난방분배.지관장소 = "외부" Then ' then외부" Then + L_i = TOSG((2 * L_G + 0.01625 * L_G * B_G * B_G) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '외부배관난방적용 + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '내부배관난방적용 + End If + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + Q_h_d = (Q_h_d + (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 '(3.2.7-36) 'theta_i를 theta_i_h_soll 로 수정 추후 검토 ' U_i는 L_i에 포함 + Case Else + MsgBox("표준치적용을 알수없습니다", MsgBoxStyle.Critical, Dr난방분배.표준치적용) + End Select + 'End If + Next + + '=================================================2010. 02. 11 수정 + If dr난방.축열탱크방식 <> "축열탱크없음" Then ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) <> "축열탱크없음" Then + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.4 + 0.14 * V_s ^ 0.45) '(3.2.7-43) + Q_h_s = f_verbindung * (theta_VA - theta_i) / 45 * d_op_max_mth * q_B_S '(3.2.7-41) theta_h_s 는 theta_VA 로 설정'================== d_op_max_mth 2010.2.21 수정 + End If + + '===================================================================================================================2010.2.21 수정 + Q_h_outg_i = Q_h_b + Q_h_ce + Q_h_d + Q_h_s '(3.2.7-1) + + If dr난방.열생산기기방식 = "전기보일러" Then + Q_h_outg_i = Q_h_outg_i / (TOSG(dr난방.정격보일러효율) * age_heating / 100) + End If + + + + + Q_h_outg = Q_h_outg + Q_h_outg_i * system_count '=====2013.08.13 수정 '(3.2.7-1) + '===================================================================================================================2010.2.21 수정 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + '//아래는 급탕생산기기로 지정되어잇는가? + If DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "'").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + Q_w_b = 0 + For Each Dr입력존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0' and 열생산급탕생산기기='" & dr난방.code & "'", "code") + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr입력존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & mon & "' and 존='" & Dr입력존.code & "'")(0), DSR.월별에너지분석Row) + + Dim system_count_2 As Decimal = IIf(dr난방.개별기기적용 = "0", 1, TOSG(Dr입력존.입력존의수)) '//20130818 '=====2013.12.18 system_count_2 추가 + + 'Q_w_b = TOSG(Q_w_b + (TOSG(Dr월에너지분석.급탕요구량) / system_count_2)) 'Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '=====2013.12.18 system_count_2 추가 + Q_w_b = TOSG(Dr월에너지분석.급탕요구량) / system_count_2 'Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '=====2013.12.18 system_count_2 추가 '=============2014.05.29 누적오류 수정 + '===================================================================================2010.2.21 수정 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr입력존.프로필 & "'")(0), DS.tbl_profileRow) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + Next + End If + End If + + + ' 여기에 신재생에너지를 산출하고 Q_h_outg 와 Q_h_outg_i 에서 신재생에너지를 차감해야 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CRenew As New CRenewable(DSET, Result) + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템.Trim <> "" AndAlso dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//식은 맞는듯한게 값이 이상하게 들었네요... 뭘해도 되도록 수정해버리죠 ㅋㅋ + + + Select Case Dr신재생.기기종류.Trim ' Dr난방.연결된시스템.Trim + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_Elec = use_Elec + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LNG = use_LNG + Q_h_f_hp * system_count '=============2013.08.18 수정 + use_Elec = use_Elec + Q_h_g_hp_aux * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LPG = use_LPG + Q_h_f_hp * system_count '=============2013.08.18 수정 + use_Elec = use_Elec + Q_h_g_hp_aux * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + (Q_h_f_hp + Q_h_g_hp_aux) * system_count '=============2013.08.18 수정 '============================2010.04.17 추가 + End Select + Case "열병합" '//열병합 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_Oil = use_Oil + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LNG = use_LNG + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, 1, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LPG = use_LPG + Q_h_f_CHP * system_count '=============2013.08.18 수정 + Q_h_f = Q_h_f + Q_h_f_CHP * system_count '=============2013.08.18 수정 '============================2010.04.17 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, Dr신재생.가동연료) + End Select + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '===========================================================================================2013.01.13 이동 + If dr난방.열생산기기방식 = "히트펌프" Then + + Q_dot_HP_heating = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(dr난방.히트난방정격7) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(dr난방.히트난방정격10) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) + L_HP_heating = TOSG(dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 22 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 22 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_heating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.002)) + Else + If Q_dot_HP_heating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0014)) + End If + End If + + + + Q_h_outg = Q_h_outg - Q_h_outg_i '===================================================2013.01.16 추가 + '======================================================================================================================================================2010.04.23 추가 + + + '======================================================================================================================================================2012.07.08 추가 + + If dr난방.운전방식.Trim = "동시가동" Or dr난방.운전방식.Trim = "순차가동" Then + Q_dot_HP_heating = Q_dot_HP_heating * TOSG(dr난방.보일러대수) + End If + + + + If Q_dot_HP_heating = 0 Or t_h_max = 0 Then '===========================================================2014.03.07 추가 + Q_h_outg_i = 0 + Else + If Q_h_outg_i / (Q_dot_HP_heating * t_h_max) >= 1 Or dr난방.히트펌프시스템종류 = "실내외분리시스템" Then '====2010.04.26 수정 + Q_h_outg_i = Q_h_outg_i / COP_HP_total + Else + If dr난방.운전방식.Trim = "순차가동" Then + For i_count_beta = 1 To CInt(TOSG(dr난방.보일러대수)) + If Q_h_outg_i <= (Q_dot_HP_heating * t_h_max / TOSG(dr난방.보일러대수) * i_count_beta) Then + Q_h_outg_i = ((Q_h_outg_i / COP_HP_total) * (i_count_beta - 1) + (Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max / TOSG(dr난방.보일러대수)) * 0.5 + 0.5)))) / i_count_beta + Exit For + End If + Next + + Else + Q_h_outg_i = Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max) * 0.5 + 0.5)) '====2010.04.26 수정 + End If + + End If + End If '===========================================================2014.03.07 추가 + + + + '======================================================================================================================================================2010.04.23 추가 + Q_h_outg = Q_h_outg + Q_h_outg_i * system_count '=====2013.08.13 수정 '===================================================2013.01.16 추가 + + + End If + + '===========================================================================================2013.01.13 이동 + + + + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + If DSET.tbl_zone.Select("열생산급탕생산기기='" & dr난방.code & "' and code <> '0'").GetUpperBound(0) <> -1 Then ' If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + If dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + L_G = TOSG(dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(dr난방.건물넓이) ' Dr난방.건물넓이 + n_G = TOSG(dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(dr난방.층고) ' Dr난방.층고 + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + + If dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + End If + + + Select Case dr난방.축열탱크방식.Trim 'Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = (55 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-29) : 전기가열식 저탕조 + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = (55 - theta_i) / 50 * d_Nutz_mth * q_B_S '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '============================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + Q_w_outg = Q_w_outg + Q_w_outg_i * system_count '=====2013.08.13 수정 + + Else + Q_w_outg_i = 0 + End If + + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(난방+급탕) 시스템 + If dr난방.신재생연결여부 = "시스템연결" AndAlso dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열일때 + If Dr신재생.태양열종류 = "난방+급탕" Then '난방+급탕" Then + + 'Dim Dr존 As DS.tbl_zoneRow = CType(DSET.tbl_zone.Select("code<>'0'", "code")(i_count_zone - 1), DS.tbl_zoneRow) + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_h_outg = Q_h_outg - Q_H_sol_out_m + Q_h_outg_i = Q_h_outg_i - Q_H_sol_out_m + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m * system_count '=======2013.08.18 수정 + End If + End Select + End If + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + Q_dot_N = TOSG(dr난방.보일러정격출력) ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + Q_dot_d_in = Q_h_outg_i / (d_h_rB * (t_h_rL_T - t_w_100)) '(3.2.7-69) 난방 또는 난방 및 급탕 + ' 우선 미적용 Q_dot_d_in = sigma_Q_h_outg / (t_Betrieb_K - t_W_100) * d_Nutz_mth '(3.2.7-70) 난방, 급탕 및 공조 + End If + + + Select Case dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_boiler - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = TOSG(Q_dot_d_in / (Q_dot_N * TOSG(dr난방.보일러대수))) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + + + '------------------------------------------------------------------------------------ + ' 보일러 가동 손실의 경우 국내 데이타 미비로 정격효율을 부분부하효율로 적용 추후 검토 필요 + + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-83) 일반보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 100 '(3.2.7-84) 일반보일러 + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-85) 콘덴싱보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 105 '(3.2.7-86) 콘덴싱보일러 + + + 'q_B_70 = (E * (Q_dot_N ^ F)) / 100 '(3.2.7-64) + 'q_B_theta = q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) '(3.2.7-72) + 'Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) 정지 대기모드 + + + + 'beta_h_g = (Q_h_b + Q_h_ce + Q_h_d + Q_h_s) / (Q_dot_h_max * t_h) '(3.2.7-10) + 'theta_VL_m_beta_h_g = (theta_VA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.13) + 'theta_RL_m_beta_h_g = (theta_RA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.-14) + + 'eta_k_pl_Betrieb = eta_k_pl + H * (theta_g_test_pl - theta_HK_m_beta_h_g) '(3.2.7-76) + 'eta_k_100_Betrieb = eta_k_100 + G * (theta_g_test100 - theta_HK_m_beta_h_g) '(3.2.7-75) + 'Q_V_g_100 = (f_Hs_Hi - eta_k_100_Betrieb) / eta_k_100_Betrieb * Q_dot_N '(3.2.7-74) + 'Q_V_g_pl = (f_Hs_Hi - eta_k_pl_Betrieb) / eta_k_pl_Betrieb * beta_k_pl * Q_dot_N '(3.2.7-73) + + '-- ------- ----- --- --- --- -- + + eta_k_100 = TOSG(TOSG(dr난방.정격보일러효율) * age_heating / 100) ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + + If dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + + Else + q_B_70 = 1 + End If + + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + + + + + If beta_h > beta_k_pl Then + Q_h_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) + Q_h_g_v_i = Q_h_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) * n_beta + Else + '======================================================================================== 2010.2.21 수정 + If beta_h = 0 Then + Q_h_g_v_i = 0 + Else + Q_h_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) * (t_h_rL_T - t_w_100) + End If + '======================================================================================== 2010.2.21 수정 + End If + + Q_h_g = Q_h_g + (Q_h_g_v_i * d_h_rB) * system_count '=====2013.08.13 수정 '(3.2.7-66) + Q_h_g_i = Q_h_g_v_i * d_h_rB + + Else + + If dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + If dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_h_g = Q_h_g + (H_DS * (theta_DS - theta_i)) * system_count '=====2013.08.13 수정 + use_DH = use_DH + (H_DS * (theta_DS - theta_i)) * system_count '========2013.08.18 수정 + + End If + + + End If + + + ' 전기보조에너지 Q_h_d_aux 산출 관련 + + P_Pump = TOSG(dr난방.펌프동력) ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case dr난방.펌프제어유형.Trim ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.75 + Case "정압" '정압" + c_p1 = 0.75 + c_p2 = 0.25 + Case "변압" '변압" + c_p1 = 0.9 + c_p2 = 0.1 + End Select + + If beta_h_d = 0 Then + Q_h_d_aux_i = 0 + Else + Q_h_d_aux_i = P_Pump / 1000 * beta_h_d * t_h * (c_p1 + c_p2 / beta_h_d) '(3.2.7-39) + End If + Select Case dr난방.펌프교정계수.Trim ' Worksheets("난방기기").Range("난방펌프교정계수1").Offset(0, i_count_boiler - 1) + Case "정상가동" '정상가동" + f_P_A = 1 + Case "감소가동" '감소가동" + f_P_A = 0.6 + Case "가동정지" '" + f_P_A = 0 + End Select + + If t_h = 0 Then '====================================================================2014.03.07 추가 + Q_h_d_aux = 0 + Else + Q_h_d_aux = TOSG(Q_h_d_aux + (Q_h_d_aux_i * (1.03 * t_h_rL + f_P_A * (t_h - t_h_rL)) / t_h) * system_count) '(3.2.7-40) + End If '====================================================================2014.03.07 추가 + + + + + + If dr난방.축열탱크방식 = "축열탱크없음" Then + P_Pump = 0 ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + Else + P_Pump = TOSG(dr난방.펌프정격전력) ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + '=================================================================2010.11.04 위치 수정 + If dr난방.열생산기기방식 = "히트펌프" Then + If dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(dr난방.히트난방용량) * TOSG(dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + + If Q_dot_h_max = 0 Or t_h = 0 Then '========================================================2014.03.07 추가 + beta_h_s = 0 + Else + beta_h_s = (Q_h_b + Q_h_ce + Q_h_d) / (Q_dot_h_max * t_h) '(3.2.7-9) + End If '========================================================2014.03.07 추가 + + + If beta_h_s > 1 Then beta_h_s = 1 + t_P = beta_h_s * 24 * d_op_max_mth '(3.2.7-44) + Q_h_s_aux = Q_h_s_aux + (P_Pump * t_P / 1000) * system_count '===2013.08.18 수정 '(3.2.7-44) + '=================================================================2010.11.04 위치 수정 + + End If + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + P_aux_SB = 0.02 + + Select Case dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + + End Select + + If beta_h > beta_k_pl Then + P_h_g_aux = (beta_h - beta_k_pl) / (1 - beta_k_pl) * (P_aux_100 - P_aux_pl) + P_aux_pl '(3.2.7-82) + Else + P_h_g_aux = (beta_h / beta_k_pl) * (P_aux_pl - P_aux_SB) + P_aux_SB '(3.2.7-81) + End If + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + If system_count = 0 Then + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) + Else + t_w_100 = (Q_w_outg_i) / (Q_dot_N * d_Nutz_mth) '//2011.12.04 수정 + End If + + End If + + Q_h_g_aux = Q_h_g_aux + (P_h_g_aux * (t_h_rL - t_w_100 * d_op_max_mth * d_Nutz_a / 365) + P_aux_SB * (24 * d_op_max_mth - t_h_rL)) * system_count '=====2013.08.18 수정 '(3.2.7-80) + + + End If + + + If dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + Case "천연가스" '천연가스" + use_LNG = use_LNG + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + Case "액화가스" '액화가스" + use_LPG = use_LPG + (Q_h_outg_i + Q_h_g_i) * system_count '========2013.08.18 수정 + + End Select + Else + Select Case dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + '====================================================================2010.2.21 수정 + Case "지역난방" '지역난방" + use_DH = use_DH + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + (Q_h_outg_i + (Q_h_outg_i * 0.09)) * system_count '========2013.08.18 수정 '2011.03.08 전기보일러 생산손실을 내부 생산식 저장으로 설정 + '====================================================================2010.2.21 수정 + '====================================================================2010.03.14 추가 + Case "히트펌프" + Select Case dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "천연가스" + use_LNG = use_LNG + Q_h_outg_i * system_count '========2013.08.18 수정 + + Case "액화가스" + use_LPG = use_LPG + Q_h_outg_i * system_count '========2013.08.18 수정 + + End Select + '====================================================================2010.03.14 추가 + End Select + + End If + + Next + + pLog.Add("Calc_난방_개별기기적용시 : 완료") + + End Sub + + Private DSET As DS + Private DSETR As DSR + Dim Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult) + DSET = pds + DSETR = pdsetr + Result = presult + End Sub +End Class + + diff --git a/ArinWarev1/DataSet/Calculator/CRenewable.vb b/ArinWarev1/DataSet/Calculator/CRenewable.vb new file mode 100644 index 0000000..7912a64 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CRenewable.vb @@ -0,0 +1,745 @@ +Public Class CRenewable + + Private Result As CResult + Private DSET As DS + Public Sub New(ByRef pds As DS, ByRef presult As CResult) + DSET = pds + Result = presult + 'ByVal dr존 As DS.tbl_zoneRow, + End Sub + ' Public Overridable Sub Calc_ThermalSolarSystem_EN(ByVal i_system_ts As Integer, ByVal i_count_ts As Integer, ByVal i_ts_month As Integer, ByVal i_ts_d_mth As Integer, ByVal Q_H_sol_us_m as decimal, ByVal Q_W_sol_us_m as decimal, ByRef Q_W_sol_out_m as decimal, ByRef Q_H_sol_out_m as decimal, ByRef W_sol_aux_m as decimal) + + Public Overridable Sub Calc_ThermalSolarSystem_EN(ByVal i_system_ts As Integer, ByVal DR_code As String, ByVal i_ts_month As Integer, ByVal i_ts_d_mth As Integer, ByVal Q_H_sol_us_m As Decimal, ByVal Q_W_sol_us_m As Decimal, _ + ByRef Q_W_sol_out_m As Decimal, ByRef Q_H_sol_out_m As Decimal, ByRef W_sol_aux_m As Decimal) + + pLog.Add(String.Format(">>Calc_ThermalSolarSystem_EN 진입 : i_system_ts={0}, DR_code={1}, i_ts_month={2}, i_ts_d_mth={3}, Q_H_sol_us_m={4}, Q_W_sol_us_m={5}, Q_W_sol_out_m={6}, Q_H_sol_out_m={7}, W_sol_aux_m={8}", _ + i_system_ts, DR_code, i_ts_month, i_ts_d_mth, Q_H_sol_us_m, Q_W_sol_us_m, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m)) + + + Dim theta_ref As Decimal, theta_w As Decimal, theta_cw As Decimal, U_loop_p As Decimal, U_loop As Decimal, Delta_T As Decimal + Dim A_ As Decimal, a As Decimal, b As Decimal, c As Decimal, d As Decimal, e As Decimal, f As Decimal, eta_loop As Decimal, IAM As Decimal, eta_0 As Decimal + Dim a_1 As Decimal, a_2 As Decimal, P_H As Decimal, P_W As Decimal, V_ref As Decimal, V_sol As Decimal, t_m As Decimal, I_m As Decimal, P_aux_nom As Decimal + 'Dim i_ts_location As Integer, i_count_ts_location As Integer + ' Dim i_count_month As Integer + Dim i_direction As Integer + Dim t_aux_m As Decimal, l_tot As Decimal, f_st As Decimal, U_st As Decimal + Dim theta_setpoint As Decimal, theta_a_avg As Decimal, theta_e_avg As Decimal + Dim Q_sol_ls_rbl_m As Decimal, Q_sol_aux_rbl_m As Decimal, Q_sol_st_ls_rbl_m As Decimal, Q_bu_dis_ls_rbl_m As Decimal, Q_bu_dis_ls_m As Decimal, Q_sol_ls_m As Decimal + Dim Q_W_bu_dis_ls_m As Decimal, Q_H_bu_dis_ls_m As Decimal, Q_W_sol_st_ls_m As Decimal, Q_H_sol_st_ls_m As Decimal + Dim A_H As Decimal, A_W As Decimal, X As Decimal, Y As Decimal + Dim Q_W_sol_out_net As Decimal, Q_H_sol_out_net As Decimal, H_W_ratio As Decimal + + Q_W_sol_out_net = 0 + Q_H_sol_out_net = 0 + + + 'Dim Dr기상데이터 As DS.tbl_weatherRow + 'For i_count_ts_location = 1 To DSET.tbl_weather.Rows.Count ' Range("건물위치").Columns.Count + ' Dr기상데이터 = DSET.tbl_weather(i_count_ts_location - 1) + ' If dr존.지역 = Dr기상데이터.건물위치 Then '//이상하다 1버번쨰 존의 지역값만 계속쓴다 -_-;; 지역은 즉 존에할당된게아니고 1개만 존재하는듯하다 + ' i_ts_location = i_count_ts_location '//기상데이터에서 현재지정된 존.지역의 기상데이터의 지역의 열번호(엑셀에서만)를 기억한다 (나중에 이번호로 데이터 참조하려고) + ' Exit For + ' End If + ' '//지역찾을떄그냥 DR지역을 사용하도록한다. + ' 'If Worksheets("입력존").Range("지역1").Offset(0, 0) = Worksheets("기상데이타").Range("건물위치1").Offset(0, i_count_ts_location - 1) Then + ' ' i_ts_location = i_count_ts_location + ' ' Exit For + ' 'End If + 'Next + + l_tot = 0 + + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & DR_code & "' and code <> '0'", "code")(0), DS.tbl_newRow) '//신재생의 태양열시스템 + + Select Case Dr신재생.집열판방위.Trim ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(3, i_count_ts - 1) + Case "동" '동" + i_direction = 12 + + Case "남동" '남동" + i_direction = 10 + + Case "남" '남" + i_direction = 9 + + Case "남서" '남서" + i_direction = 11 + + Case "서" '서" + i_direction = 13 + + Case "수평" '수평" '//월별평균일사 수평면을 사용 나머지것들은 45도짜리를 사용한다. 45도짜리 코드값을 해당코드+1000이다. 해당코드+1000으로 미리 셋팅햇다(변경불가) + i_direction = 0 + Case Else + MsgBox("신재생에너지-태양열의 집열판 방위값이 올바르지않습니다", MsgBoxStyle.Critical, "확인") + End Select + + '//집열판방위에따른 월별평균일사의 총합을 가져온다 + '//weather_ilsa 의 p코드에는 지역코드값이 들어가고 코드값은 집열판방위+1000 의값이 해당 각도의 방향에대한 데이터가된다. + + + '///만약값이 서울 방향이 남 이엇을경우에는 해당 일사데이터를 찾는게 목적이에요. 여기서 서울의 코드값은 찾을수잇어요 + '//그담이 방향 남에 맞는 일사데이터를 찾아야하는데.. 일사데이터 코드로는 못찾으니깐. 이름으로 찾아요. + '//이름 45도를 앞에 붙이기 200915 + + + Dim 일사이름 As String = "45도" & Dr신재생.집열판방위 & "향" '//이렇게되면 남(45) 라는 최종이름이 되겟죠? + If Dr신재생.집열판방위 = "수평" Then 일사이름 = "수평면" + + Dim Drow평균일사() As DS.weather_ilsaRow = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & _ + "' and 설명='" & 일사이름 & "'"), DS.weather_ilsaRow()) + '//그렇게해서 서울의 코드에 해당하는 pcode 와 이름이 남(45)로 되어잇는 일사데이터테이블에서 데이터를 검색하게되겟죠? + '//즉 데이터가 나오면 해당 데이터가 맞는거에요 ..이건 데이터베이스 이름을 남(45) 식으로 모두 고쳐주세요 + + If Drow평균일사.GetUpperBound(0) = -1 Then + MsgBox("지역코드=" + Calc.Pub.기상데이터.code + vbCrLf + "집열판방위코드=" + Dr신재생.집열판방위 + _ + vbCrLf + "예상일사코드=" + 일사이름 + _ + vbCrLf + "에 해당하는 평균일사데이터가 없습니다. 1개의 행이 반환되어야 합니다", MsgBoxStyle.Critical, "계산실패") + I_m = 0 + ' Return + Else + l_tot += TOSG(Drow평균일사(0).m01) + TOSG(Drow평균일사(0).m02) + TOSG(Drow평균일사(0).m03) + TOSG(Drow평균일사(0).m04) + _ + TOSG(Drow평균일사(0).m05) + TOSG(Drow평균일사(0).m06) + TOSG(Drow평균일사(0).m07) + TOSG(Drow평균일사(0).m08) + _ + TOSG(Drow평균일사(0).m09) + TOSG(Drow평균일사(0).m10) + TOSG(Drow평균일사(0).m11) + TOSG(Drow평균일사(0).m12) + I_m = TOSG(Drow평균일사(0)("m" & i_ts_month.ToString("00"))) '//이줄로 위의 케이스문을 대체햇다 오류나면 케이스문으로 일단 사용할예정 + + End If + t_aux_m = I_m / l_tot * 2000 + + '//월별외기평균온도(i_ts_month << 파라미터) + theta_e_avg = TOSG(Calc.Pub.기상데이터("m" & i_ts_month.ToString("00"))) + 'theta_e_avg = Worksheets("기상데이타").Range("최소외기온도1").Offset(2 + i_ts_month, i_ts_location - 1) '//월별외기평균온도 tbl_weather에 존재 + + Select Case Dr신재생.축열탱크설치장소.Trim ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + theta_a_avg = 20 + Case "비난방공간" '비난방공간" + theta_a_avg = theta_e_avg + (20 - theta_e_avg) / 2 + Case "외부공간" '외부공간" + theta_a_avg = theta_e_avg + End Select + + theta_w = 40 + theta_cw = 15 + a_2 = 0 + eta_loop = 0.8 + eta_0 = 0.6 + t_m = i_ts_d_mth * 24 + a = 1.029 + b = -0.065 + c = -0.245 + d = 0.0018 + e = 0.0215 + f = 0 + + + Select Case Dr신재생.집열기유형.Trim 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(1, i_count_ts - 1) + Case "평판형" '평판형" + a_1 = 6 + IAM = 0.94 + Case "진공관형" '진공관형" + a_1 = 3 + IAM = 1 + End Select + + If Dr신재생.태양열시스템의성능 = "성능치" Then ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(5, i_count_ts - 1) = "성능치" Then + eta_0 = TOSG(Dr신재생.무손실효율계수) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(6, i_count_ts - 1) + a_1 = TOSG(Dr신재생.열손실계수1차) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(7, i_count_ts - 1) + a_2 = TOSG(Dr신재생.열손실계수2차) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(8, i_count_ts - 1) + End If + + Select Case Dr신재생.태양열종류.Trim ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(0, i_count_ts - 1) + Case "급탕" '급탕" + A_ = TOSG(Dr신재생.집열판면적) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(2, i_count_ts - 1) + U_loop_p = TOSG(5 + 0.5 * A_) '(B.3) + U_loop = a_1 + a_2 * 40 + U_loop_p / A_ '(13) + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_ * 75 + V_sol = TOSG(Dr신재생.축열탱크체적급탕) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(0, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_W_sol_us_m <> 0 Then + X = A_ * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_W_sol_us_m * 1000) '(12) + Y = A_ * IAM * eta_0 * eta_loop * I_m * t_m / (Q_W_sol_us_m * 1000) '(15) + Q_W_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_W_sol_us_m '(11) + Else + Q_W_sol_out_m = 0 + End If + If Q_W_sol_out_m < 0 Then Q_W_sol_out_m = 0 + If Q_W_sol_out_m > Q_W_sol_us_m Then Q_W_sol_out_m = Q_W_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 60 + If Q_W_sol_us_m <> 0 Then + Q_W_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_W_sol_out_m / Q_W_sol_us_m) * t_m / 1000 '(17) + Q_bu_dis_ls_m = TOSG(0.02 * Q_W_sol_us_m * (Q_W_sol_out_m / Q_W_sol_us_m)) + Else + Q_W_sol_st_ls_m = 0 + Q_bu_dis_ls_m = 0 + End If + + If i_system_ts = 1 Then '=====================================================2010.04.02 추가 + + '난방 부분 + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_H * 75 + V_sol = TOSG(Dr신재생.축열탱크체적난방) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(1, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_H_sol_us_m <> 0 Then + X = A_H * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_H_sol_us_m * 1000) '(12) + Y = A_H * IAM * eta_0 * eta_loop * I_m * t_m / (Q_H_sol_us_m * 1000) '(15) + Q_H_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_H_sol_us_m '(11) + Else + Q_H_sol_out_m = 0 + End If + If Q_H_sol_out_m < 0 Then Q_H_sol_out_m = 0 + If Q_H_sol_out_m > Q_H_sol_us_m Then Q_H_sol_out_m = Q_H_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 40 + If Q_H_sol_us_m <> 0 Then + Q_H_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_H_sol_out_m / Q_H_sol_us_m) * t_m / 1000 '(17) + Q_H_bu_dis_ls_m = TOSG(0.02 * Q_H_sol_us_m * (Q_H_sol_out_m / Q_H_sol_us_m)) + Else + Q_H_sol_st_ls_m = 0 + Q_H_bu_dis_ls_m = 0 + End If + Q_sol_ls_m = Q_H_sol_st_ls_m + Q_H_bu_dis_ls_m + Q_W_sol_st_ls_m + Q_W_bu_dis_ls_m + + End If '=====================================================2010.04.02 추가 + + ' Q_sol_ls_m = Q_W_sol_st_ls_m + Q_bu_dis_ls_m + + ' 보조에너지 + P_aux_nom = TOSG(Dr신재생.솔라펌프의정격출력) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(4, i_count_ts - 1) + W_sol_aux_m = P_aux_nom * t_aux_m / 1000 + + Q_sol_aux_rbl_m = TOSG(W_sol_aux_m * 0.5) + + Select Case Dr신재생.축열탱크설치장소.Trim 'Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + Q_sol_st_ls_rbl_m = Q_W_sol_st_ls_m + Q_bu_dis_ls_rbl_m = Q_bu_dis_ls_m + Case "비난방공간" '비난방공간" + Q_sol_st_ls_rbl_m = TOSG(Q_W_sol_st_ls_m * 0.5) + Q_bu_dis_ls_rbl_m = TOSG(Q_bu_dis_ls_m * 0.5) + Case "외부공간" '외부공간" + Q_sol_st_ls_rbl_m = 0 + Q_bu_dis_ls_rbl_m = 0 + End Select + + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + Q_sol_st_ls_rbl_m + Q_bu_dis_ls_rbl_m '(20) + + + + Case "난방+급탕" '난방+급탕" + P_H = Q_H_sol_us_m / (Q_H_sol_us_m + Q_W_sol_us_m) '(9) + P_W = Q_W_sol_us_m / (Q_H_sol_us_m + Q_W_sol_us_m) '(10) + A_ = TOSG(Dr신재생.집열판면적) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(2, i_count_ts - 1) + A_H = P_H * A_ + A_W = P_W * A_ + + '급탕 부분 + U_loop_p = 5 + 0.5 * A_W '(B.3) '===========================2010.04.24 추가 + If A_W <> 0 Then + U_loop = a_1 + a_2 * 40 + U_loop_p / A_W '(13) '===============2010.04.24 추가 + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_W * 75 + V_sol = TOSG(Dr신재생.축열탱크체적급탕) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(0, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + End If + If Q_W_sol_us_m <> 0 Then + X = A_W * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_W_sol_us_m * 1000) '(12) + Y = A_W * IAM * eta_0 * eta_loop * I_m * t_m / (Q_W_sol_us_m * 1000) '(15) + Q_W_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_W_sol_us_m '(11) + Else + Q_W_sol_out_m = 0 + End If + If Q_W_sol_out_m < 0 Then Q_W_sol_out_m = 0 + If Q_W_sol_out_m > Q_W_sol_us_m Then Q_W_sol_out_m = Q_W_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 60 + If Q_W_sol_us_m <> 0 Then + Q_W_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_W_sol_out_m / Q_W_sol_us_m) * t_m / 1000 '(17) + Q_W_bu_dis_ls_m = TOSG(0.02 * Q_W_sol_us_m * (Q_W_sol_out_m / Q_W_sol_us_m)) + Else + Q_W_sol_st_ls_m = 0 + Q_W_bu_dis_ls_m = 0 + End If + + + '난방 부분 + U_loop_p = 5 + 0.5 * A_H '(B.3) '===========================2010.04.24 추가 + U_loop = a_1 + a_2 * 40 + U_loop_p / A_H '(13) '===============2010.04.24 추가 + + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_H * 75 + V_sol = TOSG(Dr신재생.축열탱크체적난방) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(1, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_H_sol_us_m <> 0 Then + X = A_H * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_H_sol_us_m * 1000) '(12) + Y = A_H * IAM * eta_0 * eta_loop * I_m * t_m / (Q_H_sol_us_m * 1000) '(15) + Q_H_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_H_sol_us_m '(11) + Else + Q_H_sol_out_m = 0 + End If + If Q_H_sol_out_m < 0 Then Q_H_sol_out_m = 0 + If Q_H_sol_out_m > Q_H_sol_us_m Then Q_H_sol_out_m = Q_H_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 40 + If Q_H_sol_us_m <> 0 Then + Q_H_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_H_sol_out_m / Q_H_sol_us_m) * t_m / 1000 '(17) + Q_H_bu_dis_ls_m = TOSG(0.02 * Q_H_sol_us_m * (Q_H_sol_out_m / Q_H_sol_us_m)) + Else + Q_H_sol_st_ls_m = 0 + Q_H_bu_dis_ls_m = 0 + End If + Q_sol_ls_m = Q_H_sol_st_ls_m + Q_H_bu_dis_ls_m + Q_W_sol_st_ls_m + Q_W_bu_dis_ls_m + + + + ' 보조에너지 + P_aux_nom = TOSG(Dr신재생.솔라펌프의정격출력) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(4, i_count_ts - 1) + W_sol_aux_m = P_aux_nom * t_aux_m / 1000 + + Q_sol_aux_rbl_m = TOSG(W_sol_aux_m * 0.5) + + Select Case Dr신재생.축열탱크설치장소.Trim ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + Q_sol_ls_m + Case "비난방공간" '비난방공간" + Q_sol_ls_rbl_m = TOSG(Q_sol_aux_rbl_m + Q_sol_ls_m * 0.5) + Case "외부공간" '외부공간" + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + End Select + + End Select + + + ''보조에너지 + ''f_sol_m = Q_sol_out_m / Q_sol_us_m '(21) + ''W_bu_aux_m = W_bu_nom_m * (1 - f_sol_m) '(22) + + ''P_aux_nom = 50 + 5 * A_ '(B.4) + + + '// 신재생에너지 자립률 추가(2017.01.20) + If (Q_H_sol_out_m + Q_W_sol_out_m) = 0 Then + H_W_ratio = 0 ' Q_H_sol_out_m / (Q_H_sol_out_m + Q_W_sol_out_m) + + Else + H_W_ratio = Q_H_sol_out_m / (Q_H_sol_out_m + Q_W_sol_out_m) + End If + + ' Q_H_sol_out_net = Q_H_sol_out_m + H_W_ratio * W_sol_aux_m * 2.75 + Q_W_sol_out_net = Q_W_sol_out_m + (1 - H_W_ratio) * W_sol_aux_m * 2.75 + + + + '// 신재생에너지 자립률 추가 + + + + + + + + '//열에너지생산량-태양열 + Result.생산E(i_ts_month).태양열생산량 += Q_W_sol_out_net + Q_H_sol_out_net '// 20170120 추가 + '//Result.생산E(i_ts_month).태양열생산량 += Q_W_sol_out_m + Q_H_sol_out_m '20170120 삭제 + 'DSETR.TReqUse.Rows(CEnum.ResultRow.생산_열생산량_태양열)(CStr("M" & Format(i_ts_month, "00"))) = CSng(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_열생산량_태양열)(CStr("M" & Format(i_ts_month, "00")))) + Q_W_sol_out_m + Q_H_sol_out_m 'Sheets("계산결과").Cells(97, 7 + i_ts_month) = Q_W_sol_out_m + Q_H_sol_out_m + 'Dim TDR As DSR.TReqUseRow = CType(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_단위면적당생산량_태양열), DSR.TReqUseRow) + Select Case i_system_ts '//이것도 프로시져 파라미터이다. + Case 1 '//난방?급탕 혼합형태? + If Q_W_sol_out_m <> 0 Then + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_net / Result.사용면적.W) '// 20170120 추가 + 'Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_m / Result.사용면적.W) 삭제 + Else + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_net / Result.사용면적.H) '// 20170120 추가 + 'Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_m / Result.사용면적.H) + End If + Case 2 '//냉방? + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_net / Result.사용면적.C) '// 20170120 추가 + 'Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_m / Result.사용면적.C) + Case 3 '//급탕 + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_net / Result.사용면적.W) '// 20170120 추가 + 'Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_m / Result.사용면적.W) + Case Else + MsgBox("단위면적당생산량 누적시 i_syste_ts 가 알수없음", MsgBoxStyle.Critical, "확인") + End Select + + pLog.Add(String.Format(">>Calc_ThermalSolarSystem_EN 진입 : 태양열생산량={0}, 면적당생산량태양열={1}, Q_W_sol_out_m={2}, Q_H_sol_out_m={3}", _ + Result.생산E(i_ts_month).태양열생산량, Result.생산E(i_ts_month).면적당생산량태양열, Q_W_sol_out_net, Q_H_sol_out_net)) '// 20170120 수정 + 'pLog.Add(String.Format(">>Calc_ThermalSolarSystem_EN 진입 : 태양열생산량={0}, 면적당생산량태양열={1}, Q_W_sol_out_m={2}, Q_H_sol_out_m={3}", _ + ' Result.생산E(i_ts_month).태양열생산량, Result.생산E(i_ts_month).면적당생산량태양열, Q_W_sol_out_m, Q_H_sol_out_m)) + + End Sub + + Public Overridable Sub Calc_PhotovoltaicSystem_EN(ByVal i_count_pv_month As Integer, ByVal i_pv_d_mth As Integer) + + pLog.Add(String.Format(">>Calc_PhotovoltaicSystem_EN 진입 : i_count_pv_month={0}, i_pv_d_mth={1}", _ + i_count_pv_month, i_pv_d_mth)) + + Dim E_el_pv_out As Decimal, P_pk As Decimal, f_perf As Decimal, E_sol As Decimal + Dim a As Decimal, K_pk As Decimal + 'Dim i_count_pv As Integer, i_count_pv_location As Integer, i_pv_location As Integer + + E_el_pv_out = 0 + + 'If DSET.tbl_new.Rows.Count > 0 Then ' Worksheets("신재생기기").Range("신재생생산기기1").Offset(0, 0) <> "" Then '//신재생기기 처음칸에 뭐가 잇다? 즉 데이터가잇느냐 + For Each Dr신재생 As DS.tbl_newRow In DSET.tbl_new.Select("code <> '0'", "code") + If Dr신재생.기기종류 = "태양광" Then + + a = TOSG(Dr신재생.태양광모듈면적) ' Worksheets("신재생기기").Range("태양광모듈1").Offset(0, i_count_pv - 1) + + Select Case Dr신재생.태양광모듈적용타입.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(4, i_count_pv - 1) + Case "밀착형" '밀착형" + f_perf = 0.7 + Case "후면통풍형" '후면통풍형" + f_perf = 0.75 + Case "기계환기형" '기계환기형" + f_perf = 0.8 + End Select + + + 'If a <> 0 Then '//태양광모듈면적이있을경우에만 작동하도록한다. + + + Dim Dr일사 As DS.weather_ilsaRow + Select Case Dr신재생.태양광모듈기울기.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(1, i_count_pv - 1) + Case "수평" '수평" + '//수평면에해당하는 월별평균일사 값을 가져온다.수평면 0001은 고정값이된다. + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='0001'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + + Case "45도" '45도" + Select Case Dr신재생.태양광모듈방위.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(2, i_count_pv - 1) + Case "남" '"남" + '//45도 남에대한건 기본 수평면하고 +9를 하면 나온다 나머지도 순서이므로 +1을 게속해주면된다. + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 9, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남동" '"남동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 10, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남서" '"남서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 11, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "동" '"동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 12, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "서" '"서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 13, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + End Select + + Case "수직" '수직" + Select Case Dr신재생.태양광모듈방위.Trim 'Worksheets("신재생기기").Range("태양광모듈1").Offset(2, i_count_pv - 1) + Case "남" '"남" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 1, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남동" '"남동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 2, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남서" '"남서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 3, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "동" '"동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 4, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "서" '"서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 5, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + End Select + End Select + + 'E_sol = E_sol_hor * f_tlt 수평면일사에 계수를 곱하지 않고 직접 기상데이타 적용 + + Select Case Dr신재생.태양광모듈종류.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(3, i_count_pv - 1) + Case "단결정" '단결정" + K_pk = 0.12 + Case "다결정" '다결정" + K_pk = 0.1 + Case "비정질박막형" '비정질박막형" + K_pk = 0.04 + Case "기타박막형" '기타박막형" + K_pk = 0.035 + Case "CIS박막형" 'CIS박막형" + K_pk = 0.105 + Case "CdTe박막형" 'CdTe박막형" + K_pk = 0.095 + Case "성능치 입력" + Try + K_pk = TOSG(Dr신재생.태양광모듈효율) + Catch ex As Exception + MsgBox("태양광모듈효율을 알 수 없습니다.", MsgBoxStyle.Critical, "값=" & Dr신재생.태양광모듈효율) + K_pk = 0 + End Try + + Case Else + MsgBox("알수없는 태양광모듈종류입니다.", MsgBoxStyle.Critical, "값=" & Dr신재생.태양광모듈종류) + + End Select + + P_pk = K_pk * a + E_el_pv_out = E_el_pv_out + E_sol * P_pk * f_perf + 'End If + End If + Next + + + 'If Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = "" Then + ' Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = E_el_pv_out + 'Else + ' Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = Sheets("계산결과").Cells(104, 7 + i_count_pv_month) + E_el_pv_out + 'End If + + Result.생산E(i_count_pv_month).태양광전력생산량 += E_el_pv_out + + pLog.Add(String.Format(">>Calc_PhotovoltaicSystem_EN 진입 : E_el_pv_out={0}, 태양광전력생산량={1}", _ + E_el_pv_out, Result.생산E(i_count_pv_month).태양광전력생산량)) + + + + 'DSETR.TReqUse.Rows(CEnum.ResultRow.생산_전기_태양광)("M" & Format(i_count_pv_month, "00")) = CSng(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_전기_태양광)("M" & Format(i_count_pv_month, "00"))) + E_el_pv_out ' Sheets("계산결과").Cells(95, 7 + i_count_pv_month) + End Sub + + Public Overridable Sub Calc_HeatpumpSystem(ByVal i_system_hp As Integer, ByVal i_HeatCool As Integer, ByVal Dr신재생 As DS.tbl_newRow, ByVal Q_hp_outg As Decimal, ByVal i_hp_month As Integer, _ + ByVal d_h_mth As Integer, ByVal t_hp As Integer, ByVal theta_VA As Decimal, ByVal theta_i As Decimal, ByRef Q_h_outg As Decimal, ByRef Q_h_f_hp As Decimal, ByRef Q_h_g_aux As Decimal) + + pLog.Add(String.Format(">>Calc_HeatpumpSystem 진입 : i_system_hp={0}, i_HeatCool={1},dr신재생={2},Q_hp_outg={3},i_hp_month={4},d_h_mth={5},t_hp={6},theta_VA={7},theta_i={8},Q_h_outg={9},Q_h_f_hp={10},Q_h_g_aux={11}", _ + i_system_hp, i_HeatCool, Dr신재생.code, Q_hp_outg, i_hp_month, d_h_mth, t_hp, theta_VA, theta_i, Q_h_outg, Q_h_f_hp, Q_h_g_aux)) + + + Dim f_Verwindung As Decimal, V As Decimal, q_B_S As Decimal, Phi_g As Decimal + Dim Q_h_g As Decimal, Q_h_g_s As Decimal, Q_h_g_WP As Decimal + Dim P_rd_mot As Decimal + 'Dim Q_h_f_hp as decimal 'DIN 에서는 Q_h_f로 표기 + 'Dim Delta_p_prim as decimal, Delta_p_sek as decimal + Dim Phi_prim_aux As Decimal, Phi_sek_aux As Decimal, t_ON_aux As Decimal + Dim theta_h_s As Decimal + Dim COP As Decimal + Dim Q_h_outg_net As Decimal + + + Q_h_g_s = 0 + Q_h_g_WP = 0 '전기히트펌프인 경우 0 가스히트펌프는 ? + P_rd_mot = 0 + Q_h_f_hp = 0 + Q_h_outg_net = 0 + + + 'eta_aux = 0.3 + 'Delta_p_prim = 40 'kPa 1차측 + 'Delta_p_sek = 10 'kPa 2차측 + + 'MsgBox(i_count_hp) + + 'i_count_hp = 0 '//신재생 줄번호는 무조건 0이된다. 20100127 '//연습용데이터 문제있음 + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + + Phi_g = TOSG(Dr신재생.지열히트펌프용량) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(0, i_count_hp - 1) + + If Dr신재생.가동연료 <> "전기" And i_HeatCool = 1 And Dr신재생.열교환기설치여부 = "예" Then ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(5, i_count_hp - 1) = "예" Then + P_rd_mot = 0.4 + End If + + If Q_hp_outg < (Phi_g * t_hp) * (1 + P_rd_mot) Then + Q_h_outg = Q_hp_outg + Else + Q_h_outg = Phi_g * t_hp * (1 + P_rd_mot) + End If + + If i_HeatCool = 1 Or i_HeatCool = 3 Then '난방 1 , 냉방 2, 급탕 3 + '난방, 급탕 + If Dr신재생.팽창탱크설치여부 = "예" Then ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(6, i_count_hp - 1) = "예" Then + f_Verwindung = 1.2 + V = TOSG(Dr신재생.팽창탱크체적) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(7, i_count_hp - 1) + q_B_S = TOSG(0.4 + 0.14 * V ^ 0.45) '(51) + theta_h_s = theta_VA '급수온도로 적용 + Q_h_g_s = f_Verwindung * (theta_h_s - theta_i) / 45 * d_h_mth * q_B_S '(49) 외부완충(팽창탱크 유무) + + End If + + Q_h_g = Q_h_g_s + Q_h_g_WP + COP = TOSG(Dr신재생.열성능비난방) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) + + Else + '냉방 + + COP = TOSG(Dr신재생.열성능비냉방) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(2, i_count_hp - 1) + + End If + + + If Dr신재생.가동연료 = "전기" Then ' Worksheets("신재생기기").Range("신재생및열병합기기종류1").Offset(1, i_count_hp - 1) = "전기" Then + Q_h_f_hp = (Q_h_outg + Q_h_g) / COP + ' Q_h_in = Q_h_outg + Q_h_g - Q_h_f_hp '월간 전기히트펌프(재생에너지유입량) + Else + Q_h_f_hp = Q_h_outg / COP + ' If i_HeatCool = 1 And Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(5, i_count_hp - 1) = "예" Then + ' P_rd_mot = 0.4 + ' End If + ' Q_h_in = Q_h_outg + Q_h_g - Q_h_f_hp * (1 + P_rd_mot) '월간 가스히트펌프(재생에너지유입량) + End If + + 'Q_h_f = Q_h_outg + Q_h_g - k_rd_g * Q_h_g_aux - Q_h_in '월간(A.1) 전기히트펌프(난방요구량 충당) + 'Q_h_f = (Q_h_outg + Q_h_g - k_rd_g * Q_h_g_aux - Q_h_in) / (1 + P_rd_mot) '월간(A.2) 가스히트펌프(난방요구량 충당) + + + '보조에너지 + + + 'Phi_prim_aux = Delta_p_prim * V_dot / (eta_aux * 3600) '(89) 사용자 입력항목이므로 확인 요망 + 'Phi_sek_aux = Delta_p_sek * V_dot / (eta_aux * 3600) '(89) 사용자 입력항목이므로 확인 요망 + + t_ON_aux = Q_h_outg / (Phi_g) '(81) + Phi_prim_aux = TOSG(Dr신재생.펌프용량1차) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(3, i_count_hp - 1) + Phi_sek_aux = TOSG(Dr신재생.펌프용량2차) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(4, i_count_hp - 1) + + Q_h_g_aux = TOSG((Phi_prim_aux + Phi_sek_aux) * 0.001 * t_ON_aux) '(88) + + + '// 신재생에너지 자립률 추가(2017.01.20) + + If Dr신재생.가동연료 = "전기" Then + Q_h_outg_net = Q_h_outg - ((Q_h_f_hp + Q_h_g_aux) * 2.75) '전기 1차에너지계수 적용 + If Q_h_outg_net < 0 Then Q_h_outg_net = 0 + + Else + Q_h_outg_net = Q_h_outg - (Q_h_f_hp * 1.1 + Q_h_g_aux * 2.75) '가스 1차에너지계수 적용 + If Q_h_outg_net < 0 Then Q_h_outg_net = 0 + End If + + + + '// 신재생에너지 자립률 추가 + + + '//열에너지생산량 (지열) + Result.생산E(i_hp_month).지열생산량 += Q_h_outg_net '//20170120 추가 + '// Result.생산E(i_hp_month).지열생산량 += Q_h_f_hp '20170120 지열생산량을 수정 + 'DSETR.TReqUse.Rows(79)("M" & Format(i_hp_month, "00")) = CSng(DSETR.TReqUse.Rows(79)("M" & Format(i_hp_month, "00"))) + Q_h_f_hp 'DrT생산.열생산량지열 += Q_h_f_hp + + pLog.Add(String.Format(">>Calc_HeatpumpSystem 결과0 Q_h_f_hp={0},t_ON_aux={1},Q_h_g_aux={2}", _ + Q_h_f_hp, t_ON_aux, Q_h_g_aux)) + + pLog.Add(String.Format(">>Calc_HeatpumpSystem 결과1 지열생산량={0}", _ + Result.생산E(i_hp_month).지열생산량)) + + '100 : Total >> DrT생산.단위면적당생산량지열 + Select Case i_system_hp + Case 1 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_outg_net / Result.사용면적.H) '//20170120 추가 + '//Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.H) '20170120 지열생산량을 수정 + 'DSETR.TReqUse.Rows(100)("M00") = CSng(DSETR.TReqUse.Rows(100)("M00")) + Q_h_f_hp / CSng(DSETR.TReqUse.Rows(10)("M00")) ' DrT요구량.난방사용면적 ' Sheets("계산결과").Cells(15, 7) + Case 2 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_outg_net / Result.사용면적.C) '//20170120 추가 + '//Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.C) '20170120 지열생산량을 수정 + 'DSETR.TReqUse.Rows(100)("M00") = CSng(DSETR.TReqUse.Rows(100)("M00")) + Q_h_f_hp / CSng(DSETR.TReqUse.Rows(15)("M00")) 'DrT요구량.냉방사용면적 '("계산결과").Cells(20, 7) + Case 3 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_outg_net / Result.사용면적.W) '//20170120 추가 + '//Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.W) '20170120 지열생산량을 수정 + End Select + + pLog.Add(String.Format(">>Calc_HeatpumpSystem 결과2 면적당생산량지열={0}", _ + Result.생산E(i_hp_month).면적당생산량지열)) + + End Sub + + Public Overridable Sub Calc_CogenerationSystemEN(ByVal Dr신재생 As DS.tbl_newRow, i_system_chp As Integer, ByVal i_chp_month As Integer, ByVal Q_h_outg As Decimal, ByVal t_chp As Integer, _ + ByRef Q_chp_gen_out As Decimal, ByRef E_chp_gen_in As Decimal) + + pLog.Add(String.Format(">>Calc_CogenerationSystemEN 진입 : Dr신재생={0}, i_system_chp={1},i_chp_month={2},Q_h_outg={3},t_chp={4},Q_chp_gen_out={5},E_chp_gen_in={6}", _ + Dr신재생.code, i_system_chp, i_chp_month, Q_h_outg, t_chp, Q_chp_gen_out, E_chp_gen_in)) + + 'EN15316-4-4_2007 5.6.2에서 시작 + 'Dim Wmsg As New System.Text.StringBuilder + 'Wmsg.AppendLine("Calc_CogenerationSystemEN 이 함수의경우") + 'Wmsg.AppendLine("i_count_chp 에따라서 열을 할당해야한다.... 지만..아직 이 파라미터값을 모르게삳") + 'Wmsg.AppendLine("사용하는곳의 참조확인을해서 저곳이 신재생기기 코드값이 바로오는건지 다른값인지 확인해봐야겠다") + 'MsgBox(Wmsg.ToString) + + Dim Q_dot_T_chp As Decimal + Dim eta_T_chp_an As Decimal, eta_el_chp_an As Decimal + Dim E_el_chp_out As Decimal + Dim Q_chp_gen_out_net As Decimal, E_el_chp_out_net As Decimal, Q_E_ratio As Decimal, net_ratio As Decimal + + Q_chp_gen_out_net = 0 + E_el_chp_out_net = 0 + Q_E_ratio = 0 + net_ratio = 0 + + + + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + + Q_dot_T_chp = TOSG(Dr신재생.열생산능력) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(0, i_count_chp - 1) + eta_T_chp_an = TOSG(Dr신재생.열생산효율) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(1, i_count_chp - 1) + eta_el_chp_an = TOSG(Dr신재생.발전효율) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(2, i_count_chp - 1) + + If Q_h_outg > (Q_dot_T_chp * t_chp) Then + Q_chp_gen_out = Q_dot_T_chp * t_chp + Else + Q_chp_gen_out = Q_h_outg + End If + + E_chp_gen_in = Q_chp_gen_out / (eta_T_chp_an / 100) + E_el_chp_out = E_chp_gen_in * eta_el_chp_an / 100 + + Result.생산E(i_chp_month).열병합전력생산량 += E_el_chp_out + + pLog.Add(String.Format("Calc_CogenerationSystemEN 결과0 E_chp_gen_in={0},E_el_chp_out={1}", E_chp_gen_in, E_el_chp_out)) + pLog.Add(String.Format("Calc_CogenerationSystemEN 결과1 열병합전력생산량={0}", Result.생산E(i_chp_month).열병합전력생산량)) + + '//전기생산량 열병합 + If Dr신재생.열병합신재생여부 Then + + + '// 신재생에너지 자립률 추가(2017.01.20) + + net_ratio = (Q_chp_gen_out + E_el_chp_out * 2.75) / (E_chp_gen_in * 1.1) + Q_E_ratio = Q_chp_gen_out / (Q_chp_gen_out + E_el_chp_out * 2.75) + Q_chp_gen_out_net = Q_chp_gen_out * (net_ratio - 1) * Q_E_ratio + E_el_chp_out_net = (E_el_chp_out * 2.75 * (net_ratio - 1) * (1 - Q_E_ratio)) / 2.75 + If Q_chp_gen_out_net < 0 Then Q_chp_gen_out_net = 0 + If E_el_chp_out_net < 0 Then E_el_chp_out_net = 0 + + + + '// 신재생에너지 자립률 추가 + + + '//전력 + Result.생산E(i_chp_month).신재생열병합전력생산량 += (E_el_chp_out_net) '//20170120 추가 + 'Result.생산E(i_chp_month).신재생열병합전력생산량 += (E_el_chp_out) + + pLog.Add(String.Format("Calc_CogenerationSystemEN 결과2 신재생열병합전력생산량={0}", Result.생산E(i_chp_month).신재생열병합전력생산량)) + + '//면적당열병합 (신재생면적당열생산량) + Select Case i_system_chp + Case 1 + Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out_net / Result.사용면적.H) '// 20170120 추가 + 'Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out / Result.사용면적.H) + Case 2 + Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out_net / Result.사용면적.C) '// 20170120 추가 + 'Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out / Result.사용면적.C) + Case 3 + Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out_net / Result.사용면적.W) '// 20170120 추가 + 'Result.생산E(i_chp_month).신재생면적당열생산량 += (Q_chp_gen_out / Result.사용면적.W) + + End Select + + pLog.Add(String.Format("Calc_CogenerationSystemEN 결과3 신재생면적당열생산량={0}", Result.생산E(i_chp_month).신재생면적당열생산량)) + + End If + 'DSETR.TReqUse.Rows(77)("M" & Format(i_chp_month, "00")) = CSng(DSETR.TReqUse.Rows(77)("M" & Format(i_chp_month, "00"))) + E_el_chp_out ' Sheets("계산결과").Cells(96, 7 + i_chp_month) = E_el_chp_out + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/CShared.vb b/ArinWarev1/DataSet/Calculator/CShared.vb new file mode 100644 index 0000000..16222df --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CShared.vb @@ -0,0 +1,181 @@ +''' 공용으로 사용되는 값을을 이곳에서 설정한다 +Public Class CShared + Public ReadOnly Property 기상데이터() As DS.tbl_weatherRow + Get + + If DSET1.tbl_Desc.Rows.Count = 0 Then + MsgBox("건물개요데이터가 없습니다.", MsgBoxStyle.Critical, "오류") + Return Nothing + Else + Try + Dim drArea As DS.tbl_DescRow = CType(DSET1.tbl_Desc.Rows(0), DS.tbl_DescRow) + Dim AreaGrpCode As String = drArea.buildarea + + '/그룹코드에서 데이터를 찾아야한다. + Dim drWeatherGrp As DS.weather_groupRow = CType(DSET1.weather_group.Select("code='" + AreaGrpCode + "'")(0), DS.weather_groupRow) + Dim AreaName As String = drWeatherGrp.area + + 'Dim drtblWeather As DS.tbl_weatherRow = DSET1.tbl_weather.Select("name='" + AreaName + "'")(0) + + Return CType(DSET1.tbl_weather.Select("건물위치 ='" & AreaName & "'")(0), DS.tbl_weatherRow) + Catch ex As Exception + MsgBox("건물개요의 지역정보를 찾을수없습니다.", MsgBoxStyle.Critical, "오류") + Return Nothing + End Try + End If + + End Get + + End Property + ''' + ''' 오류가있는가? + ''' + Public IsError As Boolean = False + ''' + ''' 주6일근무제로 변경 + ''' + ''' + Public d_full() As Decimal + ''' + ''' 외기온도값 + ''' + Public theta_e(12) As Decimal + ''' + ''' 평균일사값이 들어있다. + ''' + Public I_s(8, 12) As Decimal + ''' + ''' 외기온도 난방기(최대) + ''' + Public theta_e_min As Decimal + ''' + ''' 외기온도 냉방기(최대) + ''' + Public theta_e_max As Decimal + + Public F_sh_gl(7, 11) As Decimal '//2010.02.26 차양감소계수 + + + ''' + ''' 클래스 생성자 + ''' + Public Sub New() + + If 기상데이터 Is Nothing Then Return + + '//지정된 존에 해당하는 지역정보를 가지고옴(현재기상정보가 존에 할당되어있어서 그렇다) + '//1번째 존에 지역이 설정된걸로 간주한다 + + 'Dr신재생 = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + + d_full = New Decimal() {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} '우선 휴일없는 것으로 설정 + 'd_op = new decimal() {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} '우선 휴일없는 것으로 설정 각달의 일수 ##### 02/21 삭제됨 + 'd_we = new decimal() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} ' 우선 휴일없는 것으로 설정 + + '//최소외기온도 설정 + theta_e_min = TOSG(기상데이터.난방기) + theta_e_max = TOSG(기상데이터.냉방기) + + '//지역의 외기온도값 + theta_e(0) = 0 + theta_e(1) = TOSG(기상데이터.m01) + theta_e(2) = TOSG(기상데이터.m02) + theta_e(3) = TOSG(기상데이터.m03) + theta_e(4) = TOSG(기상데이터.m04) + theta_e(5) = TOSG(기상데이터.m05) + theta_e(6) = TOSG(기상데이터.m06) + theta_e(7) = TOSG(기상데이터.m07) + theta_e(8) = TOSG(기상데이터.m08) + theta_e(9) = TOSG(기상데이터.m09) + theta_e(10) = TOSG(기상데이터.m10) + theta_e(11) = TOSG(기상데이터.m11) + theta_e(12) = TOSG(기상데이터.m12) + + '//월별평균일사(기상데이터) 9개를 가져온다. 그중 최대부하값만 취한다. + '//현재 기상ROW의 CODE 와같은 Weather ilsa 데이터를 가져온다. + '//엑셀의 0 to 8 은 9개의 평균일사 데이터를 의미한다 + Dim DRow일사() As DS.weather_ilsaRow = CType(DSET1.weather_ilsa.Select("pcode='" & 기상데이터.code & "'", "code"), DS.weather_ilsaRow()) + If DRow일사.GetUpperBound(0) = -1 Then + MsgBox("월별평균일사데이터중 " & 기상데이터.code & "에 해당되는 지역이 없습니다", MsgBoxStyle.Critical, "CShared") + Me.IsError = True + Else + + For i As Short = 0 To 8 'DRow일사.GetUpperBound(0) <- 이식을 사용하려했으나 45도용데이터떄문에 사용못함 + Dim DR일사 As DS.weather_ilsaRow = DRow일사(i) + I_s(i, 0) = TOSG(DR일사.최대부하) + I_s(i, 1) = TOSG(DR일사.m01) + I_s(i, 2) = TOSG(DR일사.m02) + I_s(i, 3) = TOSG(DR일사.m03) + I_s(i, 4) = TOSG(DR일사.m04) + I_s(i, 5) = TOSG(DR일사.m05) + I_s(i, 6) = TOSG(DR일사.m06) + I_s(i, 7) = TOSG(DR일사.m07) + I_s(i, 8) = TOSG(DR일사.m08) + I_s(i, 9) = TOSG(DR일사.m09) + I_s(i, 10) = TOSG(DR일사.m10) + I_s(i, 11) = TOSG(DR일사.m11) + I_s(i, 12) = TOSG(DR일사.m12) + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\일사.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("기상코드 I M0 1 2 3 4 5 6 7 8 9 10 11 12") + ' End If + ' b.AppendLine(기상데이터.code + vbTab + i.ToString() + vbTab + DR일사.최대부하 + vbTab + _ + ' DR일사.m01 + vbTab + DR일사.m02 + vbTab + DR일사.m03 + vbTab + DR일사.m04 + vbTab + DR일사.m05 + vbTab + _ + ' DR일사.m06 + vbTab + DR일사.m07 + vbTab + DR일사.m08 + vbTab + DR일사.m09 + vbTab + DR일사.m10 + vbTab + DR일사.m11 + vbTab + DR일사.m12) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + + Next + End If + + '=============================================================================2010.02.26 추가 + Dim DRow차양() As DS.weather_chaRow = CType(DSET1.weather_cha.Select("pcode='" & 기상데이터.code & "'", "code"), DS.weather_chaRow()) + If DRow차양.GetUpperBound(0) = -1 Then + MsgBox("월별차양감소데이터중 " & 기상데이터.code & "에 해당되는 지역이 없습니다", MsgBoxStyle.Critical, "CShared") + Me.IsError = True + Else + '//차양감소계수 추가 + For i As Short = 0 To 7 '총 8개의 종류가있따. + Dim DR차양 As DS.weather_chaRow = DRow차양(i) + F_sh_gl(i, 0) = TOSG(DR차양.m01) + F_sh_gl(i, 1) = TOSG(DR차양.m02) + F_sh_gl(i, 2) = TOSG(DR차양.m03) + F_sh_gl(i, 3) = TOSG(DR차양.m04) + F_sh_gl(i, 4) = TOSG(DR차양.m05) + F_sh_gl(i, 5) = TOSG(DR차양.m06) + F_sh_gl(i, 6) = TOSG(DR차양.m07) + F_sh_gl(i, 7) = TOSG(DR차양.m08) + F_sh_gl(i, 8) = TOSG(DR차양.m09) + F_sh_gl(i, 9) = TOSG(DR차양.m10) + F_sh_gl(i, 10) = TOSG(DR차양.m11) + F_sh_gl(i, 11) = TOSG(DR차양.m12) + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\차양.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("기상코드 I M0 1 2 3 4 5 6 7 8 9 10 11") + ' End If + ' b.AppendLine(기상데이터.code + vbTab + i.ToString() + vbTab + _ + ' DR차양.m01 + vbTab + DR차양.m02 + vbTab + DR차양.m03 + vbTab + DR차양.m04 + vbTab + DR차양.m05 + vbTab + _ + ' DR차양.m06 + vbTab + DR차양.m07 + vbTab + DR차양.m08 + vbTab + DR차양.m09 + vbTab + DR차양.m10 + vbTab + DR차양.m11 + vbTab + DR차양.m12) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + + Next + End If + + '=============================================================================2010.02.26 추가 + 'For i = 0 To 7 + ' For j = 0 To 11 + ' F_sh_gl(i, j) = Worksheets("기상데이타").Range("차양감소계수1").Offset(i * 13 + j, i_count_location - 1) + ' Next + 'Next + + End Sub + + +End Class diff --git a/ArinWarev1/DataSet/Calculator/CSummary.vb b/ArinWarev1/DataSet/Calculator/CSummary.vb new file mode 100644 index 0000000..7bcf5ca --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CSummary.vb @@ -0,0 +1,892 @@ +Public Class CSummary + Public Event Message(ByVal Msg As String, pval As Integer, pmin As Integer, pmax As Integer) '//메세지표시 + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult) + DSETR = pdsetr + Result = presult + End Sub + + ''' + ''' 모든 집계데이터를 갱신합니다. + ''' + ''' + Public Sub All() + + ''TMon() + RaiseEvent Message("최종데이터 집계중..." + vbCrLf + "잠시만기다려주세요", 1, 0, 1) + + For Each Dr As C에너지분석 In Result.E분석 '//12달치의 각존들의 데이터를 가지고 합계내역을 추린다. '//LoadOfZone 에서 계산완료한다. + Dr.Calc() + Next + Result.최대부하.Calc_Summary() '//최대냉난방부하(합계-zone='00') 계산 + 'Result.생산E(0).Calc_Summary() '//합계필드(M00)에데이터를 누적합니다. + Result.일차E소요량(0).Calc_Summary() '//1차소요량의 합계데이터를 계산 + Result.E소요량(0).Calc_Summary() '//1차소요량의 합계데이터를 계산 + + 'TReqUse_M01M12() '//이것들은 현재 사용하지 않고있다. + 'TReqUse_M00() '//현재 사용하지않고있따. + + Me.Make_ResultSheet() '//최종결과를 보여주는 시트를 작성한다. + DSETR.AcceptChanges() '//변경된모든내용을 적용함 + End Sub + +#Region "미사용개체" + + ''' + ''' 1월부터 10월까지 집계데이터를 계산한다. + ''' + ''' + Public Sub TReqUse_M01M12() + For i As Short = 1 To 12 + 'MOn = "M" & Format(i, "00") + 'Dim DR() As DSR.TReqUseRow = CType(DSETR.TReqUse.Select("", "code"), DSR.TReqUseRow()) + + + ''//////////////////////////////////// + '' 연간 Co2 배출량 + ''//////////////////////////////////// + + ''조명/환기에너지소요량 + 'DR(56 - 1)(MOn) = CType(DSETR.월별에너지분석.Select("월='" & MOn & "' and 존='00'")(0), DSR.월별에너지분석Row).조명요구량 + 'DR(57 - 1)(MOn) = CType(DSETR.월별에너지분석.Select("월='" & MOn & "' and 존='00'")(0), DSR.월별에너지분석Row).환기요구량 + + ''//SUMProduct 계산 + 'Dim Acc1 as decimal = 0 + 'Dim Acc2 as decimal = 0 + 'For j As Short = 41 To 57 + ' Acc1 += Ru(j, MOn) * Ru(j, "sign") + 'Next + 'For j As Short = 58 To 59 + ' Acc2 += Ru(j, MOn) * Ru(j, "sign") + 'Next + 'Ru(ResultRow.CO2_연간배출량, MOn) = Acc1 - Acc2 '//최상단 합계(연가Co2배출량 + + ''//Excel 67번줄데이터가 필요하므로 먼저계산한다..해당데이터는 마지막(64번줄에 할당함) + ''//(I95+I96)/(I76+I82+I88+I90+I92)*$C$76 + 'Ru(64, MOn) = (Ru(58, MOn) + Ru(59, MOn)) / (Ru(45, MOn) + Ru(50, MOn) + Ru(55, MOn) + Ru(56, MOn) + Ru(57, MOn)) * Ru(45, "sign") + + ''//난방에너지소요량(계수(sign)* Sumproduct) + 'Dim ACc_Nan as decimal = 0 + 'For j As Short = 41 To 45 + ' ACc_Nan += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + 'Dim ACc_Naeng as decimal = 0 + 'For j As Short = 46 To 50 + ' ACc_Naeng += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + 'Dim ACc_KUb as decimal = 0 + 'For j As Short = 51 To 55 + ' ACc_KUb += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + + ''//67>64 + ''IF(csng(ru(7,"00"))=0,0,(ACc_Nan-ru(45,mon)*ru(64,mon))/$H$15)+IF($H$20=0,0,(SUMPRODUCT($C$78:$C$82,I78:I82)-I82*I67)/$H$20)+IF($H$26=0,0,(SUMPRODUCT($C$84:$C$88,I84:I88)-I88*I67)/$H$26)+IF($H$23=0,0,($C$90*I90-I90*I67)/$H$23)+IF($H$27=0,0,($C$92*I92-I92*I67)/$H$27) + ''IF(csng(ru(7))=0,0,(ACc_Nan-ru(45,mon)*ru(64,mon))/ru(7))+IF(ru(12)=0,0,(acc_naeng-ru(50,mon)*ru(64,mon))/ru(12))+IF(ru(18)=0,0,(acc_kub-ru(55,mon)*ru(64,mon))/ru(18))+IF(ru(15)=0,0,(ru(56,"sign")*ru(56,mon)-ru(56,mon)*ru(64,mon))/ru(15))+IF(ru(19)=0,0,(ru(57,"sign")*ru(57,mon)-ru(57,mon)*ru(64,mon))/ru(19)) + + ''//단위면적당Co2배출량) + 'If Ru(ResultRow.요구량_난방_사용면적) = 0 Then + ' Ru(ResultRow.CO2_단위면적당배출량, MOn) = 0 + 'Else + ' '(ACc_Nan-ru(45,mon)*ru(64,mon))/ru(7))+IF(ru(12)=0,0,(acc_naeng-ru(50,mon)*ru(64,mon))/ru(12))+IF(ru(18)=0,0,(acc_kub-ru(55,mon)*ru(64,mon))/ru(18))+IF(ru(15)=0,0,(ru(56,"sign")*ru(56,mon)-ru(56,mon)*ru(64,mon))/ru(15))+IF(ru(19)=0,0,(ru(57,"sign")*ru(57,mon)-ru(57,mon)*ru(64,mon))/ru(19) + ' Ru(ResultRow.CO2_단위면적당배출량, MOn) = (ACc_Nan - Ru(45, MOn) * Ru(64, MOn)) / Ru(7) + CSng(IIf(Ru(12) = 0, 0, (ACc_Naeng - Ru(50, MOn) * Ru(64, MOn)) / Ru(12))) + CSng(IIf(Ru(18) = 0, 0, (ACc_KUb - Ru(55, MOn) * Ru(64, MOn)) / Ru(18))) + CSng(IIf(Ru(15) = 0, 0, (Ru(56, "sign") * Ru(56, MOn) - Ru(56, MOn) * Ru(64, MOn)) / Ru(15))) + CSng(IIf(Ru(19) = 0, 0, (Ru(57, "sign") * Ru(57, MOn) - Ru(57, MOn) * Ru(64, MOn)) / Ru(19))) + 'End If + Next + End Sub + + ''' + ''' 에너지요구량및소요량 테이블의 M00(합계)를 누적(M01~M12)로 채웁니다. 그렇지않은건 이후에 합계프로시져별도로 생성함 + ''' + ''' + Public Sub TReqUse_M00() + ''//LT(LineType 이 SL Sum Line 인경우가져와서 m00 = m01~m12 한다 + 'Dim DR() As DSR.TReqUseRow = CType(DSETR.TReqUse.Select("", "code"), DSR.TReqUseRow()) + 'For Each Drs As DSR.TReqUseRow In DSETR.TReqUse.Select("lt='SL'") + ' Drs.M00 = Drs.M01 + Drs.M02 + Drs.M03 + Drs.M04 + Drs.M05 + Drs.M06 + Drs.M07 + Drs.M08 + Drs.M09 + Drs.M10 + Drs.M11 + Drs.M12 + 'Next + + ''//커스텀 합계필드 계산 + + ''자주사용되는 SUM(1~12)를 미리 계산해둔다 + 'Dim L45, L50, L55, L56, L57, L22, L27, L31, L33, L37 as decimal : Dim Drow As DSR.TReqUseRow + 'Drow = CType(DSETR.TReqUse.Rows(45 - 1), DSR.TReqUseRow) + 'L45 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(50 - 1), DSR.TReqUseRow) + 'L50 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(55 - 1), DSR.TReqUseRow) + 'L55 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(56 - 1), DSR.TReqUseRow) + 'L56 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(57 - 1), DSR.TReqUseRow) + 'L57 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(22 - 1), DSR.TReqUseRow) + 'L22 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(27 - 1), DSR.TReqUseRow) + 'L27 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(31 - 1), DSR.TReqUseRow) + 'L31 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(33 - 1), DSR.TReqUseRow) + 'L33 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(37 - 1), DSR.TReqUseRow) + 'L37 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + ''//실제 데이터 집계 + 'Drow = CType(DSETR.TReqUse.Rows(45 - 1), DSR.TReqUseRow) + 'Drow.M00 = L45 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L45 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + + + 'Drow = CType(DSETR.TReqUse.Rows(50 - 1), DSR.TReqUseRow) + 'Drow.M00 = L50 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 ' + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L50 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + + 'Drow = CType(DSETR.TReqUse.Rows(55 - 1), DSR.TReqUseRow) + 'Drow.M00 = L55 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L55 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + + 'Drow = CType(DSETR.TReqUse.Rows(56 - 1), DSR.TReqUseRow) + 'Drow.M00 = L56 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L56 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + + 'Drow = CType(DSETR.TReqUse.Rows(57 - 1), DSR.TReqUseRow) + 'Drow.M00 = L57 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L57 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L57 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L57 + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(22 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L22 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + 'Drow.COLG = L22 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + '' End If + + 'Drow = CType(DSETR.TReqUse.Rows(27 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L27 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + 'Drow.COLG = L27 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + '' End If + + 'Drow = CType(DSETR.TReqUse.Rows(31 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L31 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + 'Drow.COLG = L31 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + '' End If + + + 'Drow = CType(DSETR.TReqUse.Rows(33 - 1), DSR.TReqUseRow) + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L33 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + 'Drow.COLG = L33 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + '' End If + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(20 - 1), DSR.TReqUseRow) + 'Drow.M00 = DR(22 - 1).M00 + DR(27 - 1).M00 + DR(31 - 1).M00 + DR(33 - 1).M00 + DR(37 - 1).M00 + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(26 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(7 - 1).M00 = 0, 0, DR(22 - 1).M00 / DR(7 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(30 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(12 - 1).M00 = 0, 0, DR(27 - 1).M00 / DR(12 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(32 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(15 - 1).M00 = 0, 0, DR(31 - 1).M00 / DR(15 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(36 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(18 - 1).M00 = 0, 0, DR(33 - 1).M00 / DR(18 - 1).M00)) + + + ''=SUM(I58:T58)-(H95+H96)/(SUM(I76:T76)+SUM(I82:T82)+SUM(I88:T88)+SUM(I90:T90)+SUM(I92:T92))*SUM(I92:T92) + ''=L37-(ru(58)+ru(59))/(L45+L50+L55+L56+L57)*L57 + 'Drow = CType(DSETR.TReqUse.Rows(37 - 1), DSR.TReqUseRow) '//환기에너지소요량(X) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L37 - (Ru(58) + Ru(59)) / (L45 + L50 + L55 + L56 + L57) * L57 + 'Drow.COLG = L37 - (Ru(58)) / (L45 + L50 + L55 + L56 + L57) * L57 + '' End If + + + 'Drow = CType(DSETR.TReqUse.Rows(38 - 1), DSR.TReqUseRow) '//환기에너지 단위면적당 소요량 + 'Drow.M00 = CSng(IIf(Ru(19) = 0, 0, Ru(37) / Ru(19))) + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(21 - 1), DSR.TReqUseRow) + 'Drow.M00 = DR(26 - 1).M00 + DR(30 - 1).M00 + DR(32 - 1).M00 + DR(36 - 1).M00 + DR(38 - 1).M00 + + End Sub + + +#End Region + + Public Sub Make_ResultSheet() + '//에너지요구량 + DSETR.TReqUse.Clear() + DSETR.TReqUse.AcceptChanges() + + Dim Array As New ArrayList + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).요구량) + Next + Set_ReqUseRow("100", "에너지요구량", "[kWh]", "Qb", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).면적당요구량) + Next + Set_ReqUseRow("100", "단위면적당 에너지 요구량", "[kWh/m²]", "Σ(Qb / Ab)", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방요구량) + Next + Set_ReqUseRow("110", "난방에너지 요구량", "[kWh]", "QH,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방열) + Next + Set_ReqUseRow("110", "난방에너지 요구량(열)", "[kWh]", "Qh,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방공조) + Next + Set_ReqUseRow("110", "난방에너지 요구량(공조,환기)", "[kWh]", "Qh*,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QH,b / AH", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(난방)", "[m²]", "AH", "=", Result.사용면적.H, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방요구량) + Next + Set_ReqUseRow("110", "냉방에너지 요구량", "[kWh]", "QC,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방열) + Next + Set_ReqUseRow("110", "냉방에너지 요구량(열)", "[kWh]", "Qc,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방공조) + Next + Set_ReqUseRow("110", "냉방에너지 요구량(공조,환기)", "[kWh]", "Qc*,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QC,b / AC", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(냉방)", "[m²]", "AC", "=", Result.사용면적.C, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).조명요구량) + Next + Set_ReqUseRow("110", "조명에너지 요구량", "[kWh]", "QL,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).조명면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QL,b / AL", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(조명)", "[m²]", "AL", "=", Result.사용면적.L, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).급탕요구량) + Next + Set_ReqUseRow("110", "급탕에너지 요구량", "[kWh]", "QW,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).급탕면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QW,b / AW", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(급탕)", "[m²]", "AW", "=", Result.사용면적.W, "N1") + Set_ReqUseRow("110", "사용면적(환기)", "[m²]", "AV", "=", Result.사용면적.V, "N1") + + '//에너지소요량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).소요량) + Next + Set_ReqUseRow("200", "에너지소요량", "[kWh]", "Qf", "", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).면적소요량) + Next + Set_ReqUseRow("200", "단위면적당 에너지 소요량", "[kWh/m²]", "Σ(Qf / Ab)", "", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방S) + Next + Set_ReqUseRow("210", "난방에너지 소요량", "[kWh]", "QH,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방) + Next + Set_ReqUseRow("210", "난방에너지 소요량", "[kWh]", "Qh,f", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방보조) + Next + Set_ReqUseRow("210", "난방보조에너지 소요량", "[kWh]", "Qh,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QH,f / AH", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방S) + Next + Set_ReqUseRow("210", "냉방에너지 소요량", "[kWh]", "QC,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방) + Next + Set_ReqUseRow("210", "냉방에너지 소요량", "[kWh]", "Qc,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방보조) + Next + Set_ReqUseRow("210", "냉방보조에너지 소요량", "[kWh]", "Qc,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QC,f / AC", "=", Array, "N1") + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).조명S) + Next + Set_ReqUseRow("210", "조명에너지 소요량", "[kWh]", "QL,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).조명면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QL,f / AL", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕S) + Next + Set_ReqUseRow("210", "급탕에너지 소요량", "[kWh]", "QW,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕) + Next + Set_ReqUseRow("210", "급탕에너지 소요량", "[kWh]", "Qw,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕보조) + Next + Set_ReqUseRow("210", "급탕보조에너지 소요량", "[kWh]", "Qw,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QW,f / AW", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).환기S) + Next + Set_ReqUseRow("210", "환기에너지 소요량", "[kWh]", "QV,aux", "=", Array) '//36 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).환기면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QV.aux / AV", "=", Array, "N1") + + '//1차에너지 소요량(10-02 추가) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).소요량) + Next + Set_ReqUseRow("300", "1차에너지 소요량", "[kWh]", "", "", Array) '//38 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).단위면적) + Next + Set_ReqUseRow("300", "단위면적당 1차에너지 소요량", "[kWh/m²]", "", "", Array, "N1") '//39 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방소요량) + Next + Set_ReqUseRow("310", "난방 1차에너지 소요량", "", "", "", Array) '//40 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방지역) + Next + Set_ReqUseRow("310", "지역난방열료 소요량", "[kWh]", "0.728", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//45 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).난방펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방면적) + Next + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//46 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방소요량) + Next + Set_ReqUseRow("310", "냉방 1차에너지 소요량", "", "", "", Array) '//47 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) '//48 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) '//50 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방지역난방열) + Next + Set_ReqUseRow("310", "지역난방열 소요량", "[kWh]", "0.728", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방지역냉방열) + Next + Set_ReqUseRow("310", "지역냉방열 소요량", "[kWh]", Result.E변환계수.지역냉방.ToString("N3"), "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//52 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).냉방펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방면적) + Next + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//53 + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕소요량) + Next + Set_ReqUseRow("310", "급탕 1차에너지 소요량", "", "", "", Array) '//54 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) '//55 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) '//57 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕지역) + Next + Set_ReqUseRow("310", "지역난방열 소요량", "[kWh]", "0.728", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//59 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).급탕펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//60 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명소요량) + Next + Set_ReqUseRow("310", "조명 1차에너지 소요량", "", "", "", Array) '//61 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//62 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//63 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기소요량) + Next + Set_ReqUseRow("310", "환기 1차에너지 소요량", "", "", "", Array) '//64 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//65 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//66 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).태양광전력생산량) + Next + Set_ReqUseRow("310", "전기에너지 생산량(태양광)", "[kWh]", CStr(Result.E변환계수.전력), "=", Array) '//67 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).열병합전력생산량) + Next + Set_ReqUseRow("310", "전기에너지 생산량(열병합)", "[kWh]", CStr(Result.E변환계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).태양열생산량) + Next + Set_ReqUseRow("310", "열에너지 생산량(태양열)", "[kWh]", "", "=", Array) '//69 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).지열생산량) + Next + Set_ReqUseRow("310", "열에너지 생산량(지열)", "[kWh]", "", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).면적당생산량태양열) + Next + + Set_ReqUseRow("310", "단위면적당 생산량(태양열)", "[kWh]", "", "=", Array, "N1") '//71 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).면적당생산량지열) + Next + + Set_ReqUseRow("310", "단위면적당 생산량(지열)", "[kWh]", "", "=", Array, "N1") '//72 + + + '//CO2배출량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).발생량) + Next + Set_ReqUseRow("400", "연간 CO2 배출량", "[kg CO2]", "", "", Array) '//73 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).단위면적) + Next + + Set_ReqUseRow("400", "단위면적당 CO2 배출량", "[kg CO2/m²]", "", "", Array, "N1") '//74 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방발생량) + Next + Set_ReqUseRow("410", "난방 CO2 발생량", "", "", "", Array) '//75 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방지역) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역냉방), "=", Array) + + 'Array.Clear() '//펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).난방펠렛) + 'Next + 'Set_ReqUseRow("410", "펠렛 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방발생량) + Next + Set_ReqUseRow("410", "냉방 CO2 발생량", "", "", "", Array) '//82 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방지역난방열) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방지역냉방열) + Next + Set_ReqUseRow("410", "지역냉방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역냉방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + 'Array.Clear() '//낸ㅇ방펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).냉방펠렛) + 'Next + 'Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕발생량) + Next + Set_ReqUseRow("410", "급탕 CO2 발생량", "", "", "", Array) '//89 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕지역) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + 'Array.Clear() '//급탕펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).급탕펠렛) + 'Next + 'Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명발생량) + Next + Set_ReqUseRow("410", "조명 CO2 발생량", "", "", "", Array) '//96 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기발생량) + Next + Set_ReqUseRow("410", "환기 CO2 발생량", "", "", "", Array) '//99 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + '//CO2저감량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).저감량태양광) + Next + Set_ReqUseRow("410", "전력 CO2 저감량(태양광)", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) '//102 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).저감량열병합) + Next + Set_ReqUseRow("410", "전력 CO2 저감량(열병합)", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) '//103 + DSETR.AcceptChanges() + + End Sub + + Private Sub Set_ReqUseRow(ByVal GRP As String, ByVal desc As String, ByVal unit As String, ByVal sign As String, ByVal eq As String, ByVal Value As ArrayList, Optional ByVal F As String = "N0") + Dim DR As DSR.TReqUseRow : DR = DSETR.TReqUse.NewTReqUseRow + + DR.Code = Format(DSETR.TReqUse.Rows.Count + 1, "000") + DR.GRP = GRP '//그룹 출력할떄 그룹으로 뽑는다. + DR.Desc = desc '//설명 + DR.UNIT = unit '//단위 + DR.SIGN = sign '//기호 + DR.EQ = eq '//등호 = + DR.M00 = TOSG(Value.Item(0)) + DR.M01 = TOSG(Value.Item(1)) + DR.M02 = TOSG(Value.Item(2)) + DR.M03 = TOSG(Value.Item(3)) + DR.M04 = TOSG(Value.Item(4)) + DR.M05 = TOSG(Value.Item(5)) + DR.M06 = TOSG(Value.Item(6)) + DR.M07 = TOSG(Value.Item(7)) + DR.M08 = TOSG(Value.Item(8)) + DR.M09 = TOSG(Value.Item(9)) + DR.M10 = TOSG(Value.Item(10)) + DR.M11 = TOSG(Value.Item(11)) + DR.M12 = TOSG(Value.Item(12)) + DR.F = F + DSETR.TReqUse.AddTReqUseRow(DR) + End Sub + Private Sub Set_ReqUseRow(ByVal GRP As String, ByVal desc As String, ByVal unit As String, ByVal sign As String, ByVal eq As String, ByVal Value As Decimal, Optional ByVal F As String = "N0") + Dim DR As DSR.TReqUseRow : DR = DSETR.TReqUse.NewTReqUseRow + + DR.Code = Format(DSETR.TReqUse.Rows.Count + 1, "000") + DR.GRP = GRP '//그룹 출력할떄 그룹으로 뽑는다. + DR.Desc = desc '//설명 + DR.UNIT = unit '//단위 + DR.SIGN = sign '//기호 + DR.EQ = eq '//등호 = + DR.M00 = Value + DR.F = F + 'DR.M01 = CSng(Value.Item(1)) + 'DR.M02 = CSng(Value.Item(2)) + 'DR.M03 = CSng(Value.Item(3)) + 'DR.M04 = CSng(Value.Item(4)) + 'DR.M05 = CSng(Value.Item(5)) + 'DR.M06 = CSng(Value.Item(6)) + 'DR.M07 = CSng(Value.Item(7)) + 'DR.M08 = CSng(Value.Item(8)) + 'DR.M09 = CSng(Value.Item(9)) + 'DR.M10 = CSng(Value.Item(10)) + 'DR.M11 = CSng(Value.Item(11)) + 'DR.M12 = CSng(Value.Item(12)) + DSETR.TReqUse.AddTReqUseRow(DR) + End Sub + +End Class diff --git a/ArinWarev1/DataSet/Calculator/CZone.vb b/ArinWarev1/DataSet/Calculator/CZone.vb new file mode 100644 index 0000000..9a6696f --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/CZone.vb @@ -0,0 +1,907 @@ +Public Class CZone + + 'Public Event PBarSet(ByVal min As Integer, ByVal max As Integer) '//프로그레시브바 초기화 + Public Event Message(ByVal Msg As String, pval As Integer, pmin As Integer, pmax As Integer) '//메세지표시 + ' Public Event PBarVal(ByVal Value As Integer) '//프로그레시브 값설정 + + ''' + ''' (main)에너지요구량 계산 + ''' + ''' 에너지소요량을 추가로 계산하려면 True 를 입력 + ''' 로그가 입력될 스트링빌더 + ''' + Public Overridable Function Calc_LoadOfZones(showmsg As String, isSimul As Boolean, 기저비율 As Decimal, Optional ByVal p_난방설정온도 As Decimal = 20, Optional ByVal p_냉방설정온도 As Decimal = 26) As Boolean + + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + pLog.Add("Calc_LoadOfZones") + pLog.Add(String.Format("기저비율:{0},난방설정온도:{1},냉방설정온도:{2}", 기저비율, p_난방설정온도, p_냉방설정온도)) + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + + pLog.Add("요구량log는 임시 종료함", True) + pLog.LogEnable = False + + + Dim title As String = "" + + RaiseEvent Message(showmsg + "에너지요구량계산을 준비중입니다." + vbCrLf + "잠시만기다려주세요", 0, 0, 0) + 'i_count_OpWe As Integer, d_we_month As Integer, Q_h_b_we as decimal, ==================================2010.2.21 삭제 + + Dim t_24 As Integer, f_wind As Integer, t_NA As Integer, t_h_op_d As Integer, i_count_Is As Integer + Dim Delta_theta_er As Decimal, Delta_theta_i_NA As Decimal, Delta_theta_i_WE As Decimal, theta_i As Decimal, theta_i_h As Decimal, theta_i_c As Decimal, F_f As Decimal, F__F As Decimal, F_W As Decimal, F_S As Decimal, F_V As Decimal, h_r As Decimal, c_p_arhoa As Decimal, e_wind As Decimal, n_50 As Decimal, n_ue As Decimal, n_mech As Decimal, n_inf As Decimal, A_B As Decimal, A_u As Decimal, h_u As Decimal, V As Decimal, V_ue As Decimal + Dim H_V_inf As Decimal, H_V_mech As Decimal, H_V_ue As Decimal, H_V_z As Decimal, theta_z As Decimal, theta_u As Decimal, H_T_D As Decimal, H_T_iu As Decimal, H_T_iz As Decimal, H_T_s As Decimal, Delta_U_WB As Decimal, H_V_mech_theta As Decimal, theta_i_h_soll As Decimal, theta_i_c_soll As Decimal, theta_V_mech As Decimal ', theta_e_min as decimal, theta_e_max as decimal + Dim C_wirk As Decimal, tau As Decimal, a As Decimal, a_tb As Decimal, f_we As Decimal, f_NA As Decimal, f_tb As Decimal, Q_h_max As Decimal, theta_V_mech_RLT As Decimal + Dim Q_V_inf_sink As Decimal, Q_V_mech_sink As Decimal, Q_V_z_sink As Decimal, Q_V_sink As Decimal, Q_T_e_sink As Decimal, Q_T_u_sink As Decimal, Q_T_z_sink As Decimal, Q_T_s_sink As Decimal, Q_T_sink As Decimal, Q_S_sink As Decimal, R_se As Decimal, Q_source As Decimal, Q_sink As Decimal, Q_I_source As Decimal + Dim Q_V_inf_source As Decimal, Q_V_mech_source As Decimal, Q_V_z_source As Decimal, Q_V_source As Decimal, Q_T_e_source As Decimal, Q_T_u_source As Decimal, Q_T_z_source As Decimal, Q_T_s_source As Decimal, Q_T_source As Decimal, Q_S_source As Decimal + Dim Q_I_source_p As Decimal, Q_I_source_fac As Decimal, Q_I_L As Decimal, Q_l_b As Decimal, Q_w_b As Decimal, gamma As Decimal, eta As Decimal, Q_h_b As Decimal, Q_h_b_op As Decimal, g_TI As Decimal + Dim V_mech As Decimal + 'Dim d_op_month As Integer, theta_e_month as decimal + 'Dim A_H as decimal, A_C as decimal, A_L as decimal, A_W as decimal, A_V as decimal + Dim Q_vh_b_op As Decimal + Dim g_blinds As Decimal, tau_e_B As Decimal, rho_e_B As Decimal, U_blinds As Decimal, tau_e_B_corr As Decimal, rho_e_B_corr As Decimal 'EN 13363-1 적용 + Dim g As Decimal, alpa As Decimal + 'Dim i_sub_wall As Integer + Dim V_mech_outdoor As Decimal + + '//2010.02.04추가 + Dim Phi As Decimal + '//2010.02.21추가 + Dim d_op_mth As Integer + '//2011.04.04 추가 + Dim Q_V_win_sink As Decimal, Q_V_win_source As Decimal, H_V_win As Decimal, n_win As Decimal + Dim zone_count As Decimal '//2012.07.08 추가 입력존의 수 + + 'Dim priod_value As Single = 0 + Dim age As Decimal = 1 '//준공연도에 의한 경년변화값 + 'For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + ' priod_value = CSng(DRpriod.priod) + 'Next + 'If priod_value = 0 Then + ' age = 1 + 'Else + ' age = 1 / (1 - priod_value * 0.0012) + 'End If + + t_24 = 24 + F_f = 0.5 '구조체와 하늘과의 형태계수 + F__F = 0.7 '창 프레임 감소계수 __필요 + F_W = 0.9 '수직입사가 아닌경우에 대한 감소계수 + F_S = 1 '주변환경에 의한 그늘짐 + F_V = 1 '0.9 '우선 먼지팩터는 없는 것으로 가정 + h_r = 5 * 0.9 '= 5*e(모를경우 e=0.9) + Delta_theta_er = 10 + Delta_theta_i_NA = 4 '(용도별조건) + 'theta_i = 21 + 'theta_i_h = 21 + theta_i_h_soll = p_난방설정온도 ' 20 '//난방설정온도 + theta_i_c = 24 + theta_i_c_soll = p_냉방설정온도 ' 26 '//냉방설정온도 + theta_V_mech_RLT = 27 + 'theta_e_min = -11.3 + 'theta_e_max = 31.5 + c_p_arhoa = 0.34 '//먼지모름 + 'n_50 = 1.5 + n_ue = 0.6 + e_wind = 0.07 + f_wind = 15 + R_se = 0.043 '외기에 직접 열전달저항 확인요망 + g_TI = 0.35 '(2-113) + alpa = 0.4 '우선 0.4으로 설정 표면흡수율 도표 2-6 참조 + n_mech = 1 '임시 + A_u = 1 + h_u = 1 '임시 + + + + RaiseEvent Message("요구량계산준비완료", 0, 0, 0) + + + + '///////////////////////////////////////////////////// + For i_count_HeatCool As Integer = 1 To 2 '(1) 루프회전 난방/냉방 구분해서 회전한다. 둘의 산식이 거의 비슷하므로 루프를 이용해서 계산 + + For i_count_month As Short = 0 To 12 '(2) --월전체의 루프? + + If i_count_HeatCool = 1 AndAlso i_count_month = 1 Then + Console.WriteLine("col") + End If + + + title = showmsg + "요구량계산중..." & CStr(IIf(i_count_HeatCool = 1, "난방", "냉방")) & "(" & i_count_month & "/12)" + + pLog.Add(String.Format("요구량계산({0}),Month={1}", IIf(i_count_HeatCool = 1, "난방", "냉방"), i_count_month), True) + + RaiseEvent Message(title, i_count_month, 0, 12) + + Dim Mon As String = "M" & Format(i_count_month, "00") '//저장소의 필드명이 M00 식으로되어있다. + If i_count_month = 0 Then '//난방이라면? '//최소외기온도 난방기(theta_e_min) + Calc.Pub.theta_e(i_count_month) = TOSG(IIf(i_count_HeatCool = 1, Calc.Pub.theta_e_min, Calc.Pub.theta_e_max)) + pLog.Add(String.Format(" Calc.Pub.theta_e({0}) = {1}", i_count_month, Calc.Pub.theta_e(i_count_month))) + End If + + '//존 루프 + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") ' DSET.tbl_zone.Rows.Count '(3) + + '//방식이나 공조는 ZZ는 사용안함이다 V=환기 외기부하처리여부의경우 0001 은 예이다. + zone_count = TOSG(DR존.입력존의수) + + pLog.Add(String.Format("Start Zone Code={0},Desc={1},입력존수={2}", DR존.code, DR존.설명, zone_count)) + + If DR존.냉난방방식 <> "기능없음" Or (DR존.냉난방공조 <> "기능없음" And (DR존.냉난방공조 <> "환기" Or DR존.외기부하처리여부 = "예")) Then + Q_vh_b_op = 0 + + '//i_count_OpWe 1은 평일 2는 주말이다ㅡㅡ/ + '======================================2010.2.21 삭제 + 'For i_count_OpWe = 1 To 2 + '======================================2010.2.21 삭제 + Q_V_inf_sink = 0 + Q_V_inf_source = 0 + Q_V_mech_sink = 0 + Q_V_mech_source = 0 + Q_V_z_sink = 0 + Q_V_z_source = 0 + Q_V_win_sink = 0 '//2011.04.04 추가 + Q_V_win_source = 0 '//2011.04.04 추가 + + Q_T_e_sink = 0 + Q_T_e_source = 0 + Q_T_u_sink = 0 + Q_T_u_source = 0 + Q_T_z_sink = 0 + Q_T_z_source = 0 + Q_T_s_sink = 0 + Q_T_s_source = 0 + + A_B = TOSG(DR존.면적) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + V = TOSG(DR존.순실체적) ' Worksheets("입력존").Range("체적1").Offset(0, i_count_zone - 1) + V_ue = A_u * h_u + 'Log.AppendLine(" >> V_ue = A_u * h_u = // au와 hu 는 선언부에서 1값으로 고정되어있음 v_ue는 항상 1") + + '//존의 프로필설정에대한 실제 프로필의 데이터를 가져옴 + Dim DR프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'"), DS.tbl_profileRow()) + If DR프로필.GetUpperBound(0) = -1 Then + MsgBox("존=" & DR존.code & " 의 프로필=" & DR존.프로필 & " 의 데이터가 존재하지않습니다", MsgBoxStyle.Critical, "확인") + Return False + Else + 'Log.AppendLine(" >> 존의 프로필코드(" & DR존.프로필 & ") 에 해당하는 프로필정보를 가져옵니다") + t_h_op_d = TOIT(DR프로필(0).운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + '===================================================================================2010.2.21 추가 + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필(0)("day" & Format(i_count_month, "00")))) + End If + '===================================================================================2010.2.21 추가 + If Not isSimul Then '//개선계산중이아닌경우에만 사용한다. + theta_i_h_soll = TOSG(DR프로필(0).난방설정온도) ' Worksheets("설정조건").Range("난방설정온도1").Offset(0, i_count_profile) + theta_i_c_soll = TOSG(DR프로필(0).냉방설정온도) ' Worksheets("설정조건").Range("냉방설정온도1").Offset(0, i_count_profile) + End If + Delta_theta_i_NA = TOSG(DR프로필(0).야간최저허용온도) ' Worksheets("설정조건").Range("야간최저허용온도1").Offset(0, i_count_profile) + Delta_theta_i_WE = TOSG(DR프로필(0).주말최저허용온도) ' Worksheets("설정조건").Range("주말최저허용온도1").Offset(0, i_count_profile) + ' If i_count_OpWe = 1 Then=============================================================2010.2.21 삭제 + 'Log.AppendLine(" >> i_count_OpWe = 1 >> Q_I_source_p/Q_I_source_fac/V_mech 계산됨") + Q_I_source_p = TOSG(DR프로필(0).사람) * A_B ' Worksheets("설정조건").Range("사람1").Offset(0, i_count_profile) * A_B '(2-118) + Q_I_source_fac = (TOSG(DR프로필(0).작업보조기기) * A_B) + 기저비율 ' Worksheets("설정조건").Range("작업보조기기1").Offset(0, i_count_profile) * A_B '(2-119) + V_mech = TOSG(DR프로필(0).최소도입외기량) * A_B ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) * A_B + ' Else '=============================================================2010.2.21 삭제 + ' Log.AppendLine(" >> i_count_OpWe <> 1 >> Q_I_source_p/Q_I_source_fac 는 0입니다") + ' Q_I_source_p = 0 '주말 사람없음 + ' Q_I_source_fac = 0 '주말 기기발열 없음 + 'End If + 'Q_I_L = 0 'mu_L*Q_I_L_elektr (2-123)추후 추가 + End If + + V_mech_outdoor = 1 '외기처리 관련 (ZZ=사용안함 Y=예) + If DR존.냉난방방식 <> "기능없음" And DR존.냉난방공조 <> "기능없음" And DR존.외기부하처리여부 = "예" Then + If i_count_HeatCool = 1 Then '//난방이라면 + If DR존.냉난방공조 <> "난방" AndAlso DR존.냉난방공조 <> "냉난방" Then '난방/냉난방 이 아니면! + If theta_i_h_soll > Calc.Pub.theta_e(i_count_month) Then '//난방설정온도 > 외기온도(난방기) + Q_vh_b_op = V_mech * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) * t_h_op_d * c_p_arhoa * d_op_mth * zone_count '===============d_op(i_count_month) 2010.2.21 수정 + V_mech_outdoor = 0 ' 외기처리된 상태인 경우 + 'Log.AppendLine(" >> 외기처리됨") + End If + End If + Else + If DR존.냉난방공조 <> "냉방" AndAlso DR존.냉난방공조 <> "냉난방" Then '냉방/냉난방이 아닐경우 + If theta_i_c_soll < Calc.Pub.theta_e(i_count_month) Then + Q_vh_b_op = V_mech * (Calc.Pub.theta_e(i_count_month) - theta_i_c_soll) * t_h_op_d * c_p_arhoa * d_op_mth * zone_count '===============d_op(i_count_month) 2010.2.21 수정 + V_mech_outdoor = 0 ' 외기처리된 상태인 경우 + 'Log.AppendLine(" >> 외기처리됨") + End If + End If + End If + End If + + pLog.Add(String.Format("Q_vh_b_op:{0},V_mech_outdoor:{1}", Q_vh_b_op, V_mech_outdoor)) + + + + n_50 = TOSG(DR존.침기율) '//tosg 는 빈값일경우 0을 반환 + n_inf = n_50 * e_wind '(2-59) 환기기기 없는 경우 + 'n_inf = n_50 * e_wind * (1 + f_V_mech * t_V_mech / 24) '(2-60) 급기 및 배기에 대한 환기회수 필요 + '///////////////////////////////////////////////////////////////////////////////////////////////////////2011.04.04 추가 + 'If n_nutz < 1.2 Then + ' Delta_n_win = n_nutz - (n_nutz - 0.2) * n_inf - 0.1 + 'Else + ' Delta_n_win = n_nutz - n_inf - 0.1 + 'End If + 'If Delta_n_win < 0 Then + ' Delta_n_win = 0 + 'End If + 'n_win = 0.1 + Delta_n_win * t_h_op_d / 24 + n_win = 0.1 ' 최소외기 도입량은 환기기기 유무와 상관없이 적용되는 것으로 평가하기 때문에 자연환기 기본값만 적용 + '///////////////////////////////////////////////////////////////////////////////////////////////////////2011.04.04 추가 + + + H_T_D = 0 + H_T_iu = 0 + H_T_iz = 0 + + + Dim Drow프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If DR존.조명부하산출방법 = "계산치" Then + Q_I_L = TOSG(DR존.조명에너지부하율계산치) * TOSG(Drow프로필.일일사용시간) * A_B + Else + Q_I_L = TOSG(DR존.조명에너지부하율입력치) * TOSG(Drow프로필.일일사용시간) * A_B + End If + 'Q_I_L = TOSG(IIf(DR존.조명부하산출방법 = "계산치", TOSG(DR존.조명에너지부하율계산치), TOSG(DR존.조명에너지부하율입력치))) * TOSG(Drow프로필.일일사용시간) * A_B + Q_w_b = TOSG(Drow프로필.일일급탕요구량) * A_B * d_op_mth + '===================================2010.2.21 삭제 + 'If DR존.조명부하산출방법 = "CALC" Then '//OpWe의 2번은 주말인거 같다. + ' '//부하율계산치?입력치구분 + ' Q_w_b = TOSG(DR존.급탕요구량) * A_B * Calc.Pub.d_op_mth(i_count_month) + 'Else + ' Q_I_L = 0 '주말 소등으로 설정 + ' Q_w_b = 0 '주말은 급탕사용안함 + 'End If + '===================================2010.2.21 삭제 + + 'Log.AppendLine(" >> 현재존을 사용하는 각 입력면(" & DSET.tbl_myoun.Select("존분류='" & DR존.code & "'").GetUpperBound(0) & ")으로부터 데이터를 누적") + For Each Dr입력면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("존분류='" & DR존.code & "'") + If Dr입력면.code <> "0" Then + If DR존.열교가산치 = "내단열" Then + Delta_U_WB = 0.15 '내단열(=0001) Worksheets("입력존").Range("열교1").Offset(0, i_count_zone - 1) = "내단열" Then + Else + Delta_U_WB = 0.1 '내단열(=0001) Worksheets("입력존").Range("열교1").Offset(0, i_count_zone - 1) = "내단열" Then + End If + Select Case Dr입력면.건축부위방식.Trim ' Case Worksheets("입력면").Range("입력부위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "외벽" '"외벽" + 'Dr입력면.열관류율 >> Calc.Get_열관류율(Dr입력면) + H_T_D = H_T_D + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) + Delta_U_WB * TOSG(Dr입력면.건축부위면적) ' Worksheets("입력면").Range("부위면적" & i_sub_wall & "").Offset(0, i_count_wall) '(2-44) Delta_U_WB는 외단열 0.1, 내단열 0.15 + Case "외부창", "내부창" '=================2010.03.20 수정 + If Dr입력면.블라인드유무 = "유" Then ' '0001(=유) Range("에너지투과율" & i_sub_wall & "").Offset(3, i_count_wall) = "유" Then + If Calc.Get_열관류율(Dr입력면) = 0 Then + MsgBox("블라인드 사용이지만 열관류율 수치가 입력되지 않았습니다", MsgBoxStyle.Critical, "확인") + Else + Select Case Dr입력면.블라인드위치.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(4, i_count_wall) + Case "내부" '"내부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 30)) + Case "중간" '중간" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 3)) + Case "외부" ' '외부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 5 + 1 / 10)) + End Select + End If + + Else + U_blinds = Calc.Get_열관류율(Dr입력면) * age 'Worksheets("입력면").Range("열관류율" & i_sub_wall & "").Offset(0, i_count_wall) + End If + + '=========================================================================================================2010.03.20 수정 + If Dr입력면.건축부위방식.Trim = "외부창" Then + H_T_D = H_T_D + U_blinds * TOSG(Dr입력면.건축부위면적) + Delta_U_WB * TOSG(Dr입력면.건축부위면적) '(2-44) Delta_U_WB는 외단열 0.1, 내단열 0.15 + Else + H_T_iu = H_T_iu + U_blinds * TOSG(Dr입력면.건축부위면적) + End If + '=========================================================================================================2010.03.20 수정 + Case "내벽" ' "내벽" + H_T_iu = H_T_iu + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) '(2-48) + Case "간벽" '"간벽" + H_T_iz = H_T_iz + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) '(2-52) + Case Else + MsgBox("입력면 건축부위방식이 없습니다", MsgBoxStyle.Critical, "확인") + Return False + End Select + End If + Next + + + If H_T_D = 0 Then + H_V_inf = 0 + Else + H_V_inf = n_inf * V * c_p_arhoa '(2-58) c_p_arhoa는 0.34 V는 존의 체적 + End If + H_V_win = n_win * V * c_p_arhoa '//2011.04.04 추가 + H_V_mech = V_mech * c_p_arhoa 'n_mech * V * c_p_arhoa '(2-83) + H_V_ue = n_ue * V_ue * c_p_arhoa '(2-94) + 'H_V_z = n_z_d * c_p_arhoa '(2-99) + + pLog.Add(String.Format("H_V_inf:{0},H_V_win:{1},H_V_mech:{2},H_V_ue:{3}", H_V_inf, H_V_win, H_V_mech, H_V_ue)) + + + If DR존.열저장능력 = "" Then + MsgBox(DR존.설명 & "의 열저장능력이 입력되어 있지않습니다", MsgBoxStyle.Critical, "확인") + C_wirk = 0 + Else + C_wirk = TOSG(DR존.열저장능력) * A_B ' .Worksheets("입력존").Range("열저장능력1").Offset(0, i_count_zone - 1) * A_B + End If + + If i_count_HeatCool = 1 Then + H_V_mech_theta = 0 'H_V_mech * (theta_i_h_soll - theta_V_mech) / 6 '(2-130) 우선 고려안함 + Else + H_V_mech_theta = 0 'H_V_mech * (theta_i_c_soll - theta_V_mech) / 6 '(2-130) + End If + tau = C_wirk / ((H_T_D + H_T_iu + H_T_iz) + (H_V_inf + H_V_mech + H_V_ue + H_V_win) + H_V_mech_theta) '(2-22, 129) 추후 H_V_z 추가 '//2011.04.04 H_V_win 추가 + If tau < 48 Then tau = 48 + + a = 1 + tau / 16 '(2-25) + + a_tb = 1 ' =A_beheizt / A_B 'A_beheizt는 난방면적, A_B는 전용면적 + + t_NA = 24 - t_h_op_d + f_tb = TOSG(0.8 * (1 - Math.Exp(-Q_h_max / (A_B * 35))) * a_tb ^ 2) '(2-34) + + pLog.Add(String.Format("t_NA:{0},f_tb:{1}", t_NA, f_tb)) + + '================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '================================================2010.2.21 삭제 + Select Case DR존.야간운전방식.Trim '공통1002 Worksheets("입력존").Range("야간가동1").Offset(0, i_count_zone - 1) + Case "정상가동" '정상가동" + f_NA = 0 + Case "감소가동" '감소가동" + f_NA = TOSG(0.13 * t_NA * Math.Exp(-tau / 250) / 24) '(2-28) 감소가동 + Case "가동정지" '가동정지" + f_NA = TOSG(0.26 * t_NA * Math.Exp(-tau / 250) / 24) '(2-29) 가동정지 + End Select + theta_i_h = theta_i_h_soll - f_NA * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) + If theta_i_h < theta_i_h_soll - Delta_theta_i_NA * t_NA / 24 Then theta_i_h = theta_i_h_soll - Delta_theta_i_NA * t_NA / 24 '(2-27) 야간감소 + '================================================2010.2.21 삭제 + 'Else + '================================================2010.2.21 삭제 + Select Case DR존.주말운전방식.Trim ' Worksheets("입력존").Range("주말가동1").Offset(0, i_count_zone - 1) + Case "정상가동" '정상가동" + f_we = 0 + Case "감소가동" '감소가동" + f_we = TOSG(0.2 * (1 - 0.4 * tau / 250)) '(2-31) 난방감소 + Case "가동정지" '가동정지" + f_we = TOSG(0.3 * (1 - 0.2 * tau / 250)) '(2-32) 난방정지식 + End Select + theta_i_h = theta_i_h_soll - f_we * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) + If theta_i_h < theta_i_h_soll - Delta_theta_i_WE Then theta_i_h = theta_i_h_soll - Delta_theta_i_WE '(2-30) 주말감소식 변형 + '================================================2010.2.21 삭제 + 'End If + '================================================2010.2.21 삭제 + + pLog.Add(String.Format("theta_i_h:{0}", theta_i_h)) + + If i_count_HeatCool = 1 Then + theta_i = theta_i_h + theta_z = theta_i_h + theta_u = TOSG(theta_i_h_soll - 0.7 * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month))) + Else + theta_i = theta_i_c_soll '24'에너지 사용량 계산할때 24 사용 + theta_z = theta_i_c_soll + theta_u = TOSG(theta_i_c_soll - 0.7 * (theta_i_c_soll - Calc.Pub.theta_e(i_count_month))) + End If + + 'theta_i_h = theta_i_h_soll - f_tb * (theta_i_h_soll - theta_e(i_count_month)) '(2-33) 공간적제한 + 'theta_i_h = theta_i_NA - f_tb * (theta_i_NA - theta_e(i_count_month)) '(2-35) 공간적 시간적 제한 + + 'theta_V_mech = theta_e(i_count_month) '(2-90) 공조처리 없는 경우 + 'theta_V_mech = theta_e(i_count_month) + eta_V_mech * (theta_i - theta_e(i_count_month)) '(2-91) 비제어적 열교환 eta_V_mech은 사용자입력 + theta_V_mech_RLT = TOSG(IIf(i_count_HeatCool = 1, 27, 16)) + + theta_V_mech = Calc.Pub.theta_e(i_count_month) 'theta_V_mech_RLT '(2-92) 공조처리된 급기온도(도표 3-3, 3-4, 7-5) 난방 27, 냉방 16으로 설정 + + pLog.Add(String.Format("theta_i:{0},theta_z:{1},theta_u:{2},theta_V_mech_RLT:{3},theta_V_mech:{4}", theta_i, theta_z, theta_u, theta_V_mech_RLT, theta_V_mech)) + + + '=======================================================================2010.02.04 추가부분 시작 + If DR존.냉난방공조처리시스템 <> "0" And DR존.냉난방공조 = "환기" Then '//냉난방공조처리시스템이 선택되어있고 공조가 환기라면 + '//공조처리스템과 일치하는 공조기기(tbl_kongjo) 를 찾아서 계산한다. + Dim DR() As DS.tbl_kongjoRow = CType(DSET.tbl_kongjo.Select("code='" & DR존.냉난방공조처리시스템 & "' and code <> '0'"), DS.tbl_kongjoRow()) + If DR.GetUpperBound(0) = 0 Then + Select Case DR(0).열교환기유형.Trim + Case "현열교환", "전열교환" '//현열교환,전열교환 + Phi = TOSG(DR(0).열회수율) ' Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) + Case Else + Phi = 0 + End Select + theta_V_mech = Calc.Pub.theta_e(i_count_month) + Phi * (theta_i - Calc.Pub.theta_e(i_count_month)) + Else + MsgBox(DR존.설명 & "존의 냉난방공조처리스템(" & DR존.냉난방공조처리시스템 & ") 의값이 일치하지않습니다", MsgBoxStyle.Critical, "확인") + End If + End If + '=======================================================================2010.02.04 추가부분 끝 + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_V_inf_sink = H_V_inf * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-56) + Q_V_win_sink = H_V_win * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '//2011.04.04 추가 + Else + Q_V_inf_source = H_V_inf * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2- + Q_V_win_source = H_V_win * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '//2011.04.04 추가 + End If + '================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '================================================2010.2.21 삭제 + If theta_i > theta_V_mech Then + Q_V_mech_sink = H_V_mech * V_mech_outdoor * (theta_i - theta_V_mech) * t_h_op_d '(2-81) + Else + Q_V_mech_source = H_V_mech * V_mech_outdoor * (theta_V_mech - theta_i) * t_h_op_d '(2- + End If + '================================================2010.2.21 삭제 + 'Else + 'If theta_i > theta_V_mech Then + ' Q_V_mech_sink = 0 + 'Else + ' Q_V_mech_source = 0 + 'End If + 'End If + '================================================2010.2.21 삭제 + + pLog.Add(String.Format("Q_V_inf_sink:{0},Q_V_win_sink:{1},Q_V_mech_sink:{2},Q_V_mech_source:{3}", _ + Q_V_inf_sink, Q_V_win_sink, Q_V_mech_sink, Q_V_mech_source)) + + + If theta_i > theta_z Then + Q_V_z_sink = H_V_z * (theta_i - theta_z) * t_24 '(2-97) + Else + Q_V_z_source = H_V_z * (theta_z - theta_i) * t_24 '(2- + End If + + + Q_V_sink = Q_V_inf_sink + Q_V_mech_sink + Q_V_z_sink + Q_V_win_sink '(2-13) '//2011.04.04 추가 + + '//Console.WriteLine(String.Format("mon={0},QV_sink={1},{2},{3},{4},{5}", i_count_month, Q_V_sink, Q_V_inf_sink, Q_V_mech_sink, Q_V_z_sink, Q_V_win_sink)) + + Q_V_source = Q_V_inf_source + Q_V_mech_source + Q_V_z_source + Q_V_win_source '(2- '//2011.04.04 추가 + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_T_e_sink = H_T_D * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-42) + Else + Q_T_e_source = H_T_D * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2- + End If + + If theta_i > theta_u Then + Q_T_u_sink = H_T_iu * (theta_i - theta_u) * t_24 '(2-46) + Else + Q_T_u_source = H_T_iu * (theta_u - theta_i) * t_24 '(2- + End If + + If theta_i > theta_z Then + Q_T_z_sink = H_T_iz * (theta_i - theta_z) * t_24 '(2-50) + Else + Q_T_z_source = H_T_iz * (theta_z - theta_i) * t_24 '(2- + End If + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_T_s_sink = H_T_s * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-53) 추후수정 + Else + Q_T_s_source = H_T_s * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2-53) 추후수정 + End If + + Q_T_sink = Q_T_e_sink + Q_T_u_sink + Q_T_z_sink + Q_T_s_sink '(2-12) + Q_T_source = Q_T_e_source + Q_T_u_source + Q_T_z_source + Q_T_s_source '(2-12) + + Q_S_sink = 0 + Q_S_source = 0 + + pLog.Add(String.Format("Q_T_sink:{0},Q_T_source:{1}", Q_T_sink, Q_T_source)) + + For Each DRF입력면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("존분류='" & DR존.code & "' and code <> '0'") '//해당존을 사용하는 모든 입력면을 가져옴 + Select Case DRF입력면.방위.Trim ' Worksheets("입력면").Range("방위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "수평" '"수평" + i_count_Is = 0 + Case "남" '"남" + i_count_Is = 1 + Case "남동" '"남동" + i_count_Is = 2 + Case "남서" '"남서" + i_count_Is = 3 + Case "동" '"동" + i_count_Is = 4 + Case "서" '"서" + i_count_Is = 5 + Case "북동" '"북동" + i_count_Is = 6 + Case "북서" '"북서" + i_count_Is = 7 + Case "북" '"북" + i_count_Is = 8 + '==========================================================2010.03.20 추가 + Case Else + i_count_Is = -1 + '==========================================================2010.03.20 추가 + End Select + + If i_count_Is <> -1 Then '=====================================2010.03.20 추가 + + + Select Case DRF입력면.건축부위방식.Trim ' Range("입력부위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "외벽" '외벽 + If alpa * Calc.Pub.I_s(i_count_Is, i_count_month) < F_f * h_r * Delta_theta_er Then + Q_S_sink = Q_S_sink + R_se * Calc.Get_열관류율(DRF입력면) * age * TOSG(DRF입력면.건축부위면적) * (F_f * h_r * Delta_theta_er - alpa * Calc.Pub.I_s(i_count_Is, i_count_month)) * t_24 '(2-111) + Else + 'Log.AppendLine("외벽 if else = " & Q_S_source) + Q_S_source = Q_S_source + R_se * Calc.Get_열관류율(DRF입력면) * age * TOSG(DRF입력면.건축부위면적) * (alpa * Calc.Pub.I_s(i_count_Is, i_count_month) - F_f * h_r * Delta_theta_er) * t_24 '(2- + 'Log.AppendLine(">>" & Q_S_source) + End If + + Case "외부창", "내부창" '=====================================2010.03.20 수정 + If TOSG(DRF입력면.수평차양각) < 67.5 Then 'Range("에너지투과율" & i_sub_wall & "").Offset(1, i_count_wall) < 67.5 Then + + If DRF입력면.블라인드유무 = "유" Then ' Range("에너지투과율" & i_sub_wall & "").Offset(3, i_count_wall) = "유" Then + Select Case DRF입력면.블라인드빛종류.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(6, i_count_wall) + Case "불투과(t=0.0)" '불투과(t=0.0)" + tau_e_B = 0 + Select Case DRF입력면.블라인드색상.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" '흰색" + rho_e_B = 0.7 + Case "밝은색" '밝은색" + rho_e_B = 0.5 + Case "어두운색" '어두운색" + rho_e_B = 0.3 + Case "검은색" '검은색" + rho_e_B = 0.1 + Case Else + MsgBox("불투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + Case "약투과(t=0.2)" '약투과(t=0.2)" + tau_e_B = 0.2 + Select Case DRF입력면.블라인드색상.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" + rho_e_B = 0.6 + Case "밝은색" + rho_e_B = 0.4 + Case "어두운색" + rho_e_B = 0.2 + Case "검은색" + rho_e_B = 0.1 + Case Else + MsgBox("약투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + Case "반투과(t=0.4)" '반투과(t=0.4)" + tau_e_B = 0.4 + Select Case DRF입력면.블라인드색상.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" + rho_e_B = 0.4 + Case "밝은색" + rho_e_B = 0.3 + Case "어두운색" + rho_e_B = 0.2 + Case "검은색" + rho_e_B = 0.1 + Case Else + MsgBox("반투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + End Select + + If DRF입력면.블라인드각도 = "45도" Then ' Range("에너지투과율" & i_sub_wall & "").Offset(5, i_count_wall) = "45도" Then + tau_e_B_corr = TOSG(0.65 * tau_e_B + 0.15 * rho_e_B) + rho_e_B_corr = TOSG(rho_e_B * (0.75 + 0.7 * tau_e_B)) + tau_e_B = tau_e_B_corr + rho_e_B = rho_e_B_corr + End If + + g = TOSG(DRF입력면.투과율) ' Range("에너지투과율" & i_sub_wall & "").Offset(0, i_count_wall) + If DRF입력면.블라인드위치.Trim <> "" AndAlso Calc.Get_열관류율(DRF입력면) = 0 Then + MsgBox(DRF입력면.설명 & "의 열관류율이 0입니다", MsgBoxStyle.Critical, "확인") + Else + Select Case DRF입력면.블라인드위치.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(4, i_count_wall) + Case "내부" '내부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 30)) + g_blinds = g * (1 - g * rho_e_B - (1 - tau_e_B - rho_e_B) * U_blinds / 30) + Case "중간" '중간" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 3)) + g_blinds = g * tau_e_B + g * ((1 - tau_e_B - rho_e_B) + (1 - g) * rho_e_B) * U_blinds / 3 + Case "외부" '외부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 5 + 1 / 10)) + g_blinds = tau_e_B * g + (1 - tau_e_B - rho_e_B) * U_blinds / 10 + tau_e_B * (1 - g) * g / 5 + Case Else + MsgBox("블라인드위치가 없습니다", MsgBoxStyle.Critical, "확인") + End Select + End If + '===========================================================================2010.02.27 추가 + If i_count_month = 0 Then + If i_count_HeatCool = 1 Then + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, 1 - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, 1 - 1) * g_blinds + Else + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, 7 - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, 7 - 1) * g_blinds + End If + Else + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, i_count_month - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, i_count_month - 1) * g_blinds + End If + '===========================================================================2010.02.27 추가 + + Else + g_blinds = TOSG(DRF입력면.투과율) ' Range("에너지투과율" & i_sub_wall & "").Offset(0, i_count_wall) + + End If + If TOSG(DRF입력면.수평차양각) < 67.5 Then '===================================================================2014.04.03 if문 추가 + Q_S_source = TOSG(Q_S_source + F__F * TOSG(DRF입력면.건축부위면적) * F_S * F_W * F_V * g_blinds * Math.Cos(1.33 * TOSG(DRF입력면.수평차양각) * 3.141592 / 180) * (1 - TOSG(DRF입력면.수직차양각) / 300) * Calc.Pub.I_s(i_count_Is, i_count_month) * t_24) '(2-113) + End If + + End If + End Select + End If '==========================================================2010.03.20 추가 + Next + + Q_I_source = Q_I_source_p + Q_I_source_fac + Q_I_L '(2-20) + Q_source = Q_S_source + Q_T_source + Q_V_source + Q_I_source '(2-16) + If i_count_month = 0 AndAlso i_count_HeatCool = 1 Then Q_source = 0 ' 난방 최대부하 계산 + Q_sink = Q_T_sink + Q_V_sink + Q_S_sink '(2-11) Q_I_sink는 현재 고려안함 + + If Q_sink = 0 Then + eta = 0 + Else + gamma = Q_source / Q_sink '(2-21) + 'If gamma > 1.1 And a > 100 Then + If gamma ^ a > 1000000 Then + eta = 1 / gamma + Else + If gamma = 1 Then + eta = a / (a + 1) '(2-24) + Else + eta = TOSG((1 - gamma ^ a) / (1 - gamma ^ (a + 1))) '(2-23) + End If + End If + + If 1 - (eta * gamma) < 0.01 Then eta = 1 / gamma '(2-137) + If (1 - eta) * gamma < 0.01 Then eta = 1 '(2-138) + 'If V_mech >= Q_C_max / (c_p_arhoa * (theta_i - theta_mech)) Then eta = 1 '(2-139) 추후 고민 + End If + + If i_count_HeatCool = 1 Then + Q_h_b = Q_sink - eta * Q_source '(2-1) + Else + Q_h_b = (1 - eta) * Q_source '(2-7) + End If + + If Q_h_b < 0.001 Then Q_h_b = 0 '1W 미만 제거 + + pLog.Add(String.Format("Q_h_b:{0}", Q_h_b)) + + '========================================================2010.2.21 수정 And i_count_OpWe = 1 삭제 + If i_count_month = 0 Then + If t_h_op_d <> 0 Then + Q_h_b_op = Q_h_b / t_h_op_d * zone_count + Else + Q_h_b_op = Q_h_b * zone_count + End If + Else + '=================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '=================================================2010.2.21 삭제 + Q_h_b_op = Q_h_b * d_op_mth * zone_count + ' MsgBox(i_count_month & " " & Q_h_b & " " & d_op(i_count_month) & " " & Q_h_b_op) + '=================================================2010.2.21 삭제 + 'Else + 'Q_h_b_we = Q_h_b * Calc.Pub.d_we(i_count_month) + '=================================================2010.2.21 삭제 + Dim DRProf As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If DR존.조명부하산출방법 = "계산치" Then 'Worksheets("조명").Range("조명부하산출방법1").Offset(0, i_count_zone - 1) = "계산치" Then + Q_l_b = TOSG(DR존.조명에너지부하율계산치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth * zone_count + Else + Q_l_b = TOSG(DR존.조명에너지부하율입력치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth * zone_count + End If + Q_w_b = TOSG(DRProf.일일급탕요구량) * A_B * d_op_mth * zone_count 'Worksheets("입력존").Range("일일급탕요구량1").Offset(0, i_count_zone - 1) * A_B * d_op(i_count_month) + '=================================================2010.2.21 삭제 + 'End If + '=================================================2010.2.21 삭제 + End If + 'Q_h_b_mth = d_op(i_count_month) * (Q_sink_op - eta_op * Q_source_op) + d_we(i_count_month) * (Q_sink_we - eta_we * Q_source_we) '(2-6) + '======================================2010.2.21 삭제 + 'Next + '======================================2010.2.21 삭제 + Else + A_B = TOSG(DR존.면적) ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + + Q_vh_b_op = 0 + Q_h_b_op = 0 + 'Q_h_b_we = 0 + + '//조명부하산출방법이 계산치(0001)일경우 계산치로 그렇지않을경우 입력치로 계산함 + Dim DRProf As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + + If DR존.조명부하산출방법 = "계산치" Then + Q_l_b = TOSG(DR존.조명에너지부하율계산치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth * zone_count + Else + Q_l_b = TOSG(DR존.조명에너지부하율입력치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth * zone_count + End If + + Q_w_b = TOSG(DRProf.일일급탕요구량) * A_B * d_op_mth * zone_count '===============d_op(i_count_month) 2010.2.21 수정 + End If + + pLog.Add(String.Format("Q_w_b:{0}", Q_w_b)) + + Dim Dr최대부하 As New C최대냉난방부하.Citem(DSETR, DR존.code) ' DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'")(0), DSR.최대냉난방부하Row) + + If i_count_HeatCool = 1 Then + If i_count_month = 0 Then '//0번시트는최대 냉난방부하 시트이다. + Dr최대부하.최대난방기기부하 = TOSG((Q_h_b_op) / 1000) ''=================== Q_h_b_we 2010.2.21 삭제 + 'Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(0, i_count_zone - 1) = (Q_h_b_op + Q_h_b_we) / 1000 + If DR존.야간운전방식 = "가동정지" Then ' Worksheets("입력존").Range("야간가동1").Offset(0, i_count_zone - 1) = "가동정지" Then + Dr최대부하.일일난방최대가동시간 = t_h_op_d + 'Dr최대냉난방부하.난방최대가동시간 = t_h_op_d ' Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(2, i_count_zone - 1) = t_h_op_d + Else + Dr최대부하.일일난방최대가동시간 = 24 + 'Dr최대냉난방부하.난방최대가동시간 = 24 ' Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(2, i_count_zone - 1) = 24 + End If + Else + Dim Dr월에너지요구량 As New C에너지분석(DSETR, Result, i_count_month, DR존.code) + + 'Dim Dr월에너지요구량 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + 'Dr월에너지요구량 = DSETR.에너지분석및요구량.Rows(i_count_month - 1) '//각 월별 시트에 값을 셋트(에너지분석및요구량 테이블에 들어있다) + If DR존.냉난방방식 = "냉난방" Or DR존.냉난방방식 = "난방" Then '//냉난방,난방 + Dr월에너지요구량.난방에너지요구량열 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG(Q_vh_b_op / 1000) + ' If i_count_month = 1 Then MsgBox("1") + 'Log.AppendLine("공조값설정=" & CSng(Q_vh_b_op / 1000)) + ElseIf DR존.냉난방공조 = "냉난방" Or DR존.냉난방공조 = "난방" Then '//냉난방,난방 + Dr월에너지요구량.난방에너지요구량열 = 0 + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + + '//오류확인용 존1만 확인한다. + 'If DR존.code = "0001" Then MsgBox(DR존.냉난방방식 & vbCrLf & DR존.냉난방공조 & vbCrLf & CSng((Q_h_b_op + Q_h_b_we) / 1000), MsgBoxStyle.Information, DR존.code) + + Else + If (DR존.냉난방공조 = "냉방" Or DR존.냉난방공조 = "환기") And DR존.외기부하처리여부 = "예" Then '냉방/환기/"예" Then + Dr월에너지요구량.난방에너지요구량열 = 0 + ' If i_count_month = 1 Then MsgBox("3") + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG(Q_vh_b_op / 1000) + Else + ' If i_count_month = 1 Then MsgBox("4") + Dr월에너지요구량.난방에너지요구량열 = 0 + Dr월에너지요구량.난방에너지요구량공조환기 = 0 + End If + End If + + Dr월에너지요구량.조명에너지요구량 = Q_l_b / 1000 + + ' Log.AppendLine("i_count_HeatCool=" & i_count_HeatCool & "i_count_month=" & i_count_month & ",급탕에너지요구량=" & CSng(Q_w_b / 1000)) + Dr월에너지요구량.급탕에너지요구량 = Q_w_b / 1000 + ' MsgBox("난방요구량" & Dr월에너지요구량.난방요구량공조, MsgBoxStyle.Information, i_count_month & "CZONE") + + pLog.Add(String.Format("난방에너지요구량열:{0},공조환기:{1},조명에너지요구량:{2},급탕에너지요구량:{3}", _ + Dr월에너지요구량.난방에너지요구량열, _ + Dr월에너지요구량.난방에너지요구량공조환기, _ + Dr월에너지요구량.조명에너지요구량, _ + Dr월에너지요구량.급탕에너지요구량)) + + End If + + Else + If i_count_month = 0 Then + Dr최대부하.최대냉방기기부하 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + 'Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(0, i_count_zone - 1) = (Q_h_b_op + Q_h_b_we) / 1000 + If DR존.야간운전방식 = "가동정지" Then '//가동정지 + Dr최대부하.일일냉방최대가동시간 = t_h_op_d ' Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(2, i_count_zone - 1) = t_h_op_d + Else + Dr최대부하.일일냉방최대가동시간 = 24 'Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(2, i_count_zone - 1) = 24 + End If + + pLog.Add(String.Format("Dr최대부하.일일냉방최대가동시간:{0}", Dr최대부하.일일냉방최대가동시간)) + + Else + Dim Dr월에너지요구량 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If DR존.냉난방방식 = "냉난방" Or DR존.냉난방방식 = "냉방" Then '//냉난방/냉방 + Dr월에너지요구량.냉방요구량열 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Dr월에너지요구량.냉방요구량공조 = TOSG(Q_vh_b_op / 1000) + Else + If DR존.냉난방공조 = "냉난방" Or DR존.냉난방공조 = "냉방" Then '//냉난방/냉방 + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Else + If (DR존.냉난방공조 = "난방" Or DR존.냉난방공조 = "환기") And DR존.냉난방공조 = "예" Then '//난방/환기/예 + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = TOSG(Q_vh_b_op / 1000) + Else + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = 0 + End If + + End If + End If + + pLog.Add(String.Format("냉방요구량열:{0},냉방요구량공조{1}", Dr월에너지요구량.냉방요구량열, Dr월에너지요구량.냉방요구량공조)) + End If + + + + End If + Next '(3) + + Dim CAir As New CAirHandling(DSET, DSETR, Result) + If i_count_month = 0 Then + CAir.Calc_Max_Power(i_count_HeatCool) '//AIR HANDLING 모듈 에 존재함..역시 내용이 크다 ㅠ_ㅠ + End If + + Next '(2) + Next '(1) + + title = showmsg + "분석데이터 집계중..." + RaiseEvent Message(title, 12, 0, 12) + + '//요구량 계산이 완료되었으므로 Summary 계산한다. (이것이 없어서 소요량이 오류났음) + For Each Dr As C에너지분석 In Result.E분석 '//12달치의 각존들의 데이터를 가지고 합계내역을 추린다. + Dr.Calc() + Next + DSETR.AcceptChanges() + Return True + End Function + + + ''' + ''' (main2)소요량 계산 + ''' + ''' + Public Function Calc_Useage(isSimul As String) As Boolean + + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>") + pLog.Add("Calc_Useage") + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>") + + 'Dim d_op_month As Integer + Dim theta_e_month As Decimal + Dim d_full_mth As Integer + + Dim title = isSimul + "소요량계산준비중..." + RaiseEvent Message(title, 12, 0, 12) + + '//160428 + + + For i_count_month As Short = 1 To 12 '//월별로 난/냉방 소요량을 계산 + + pLog.LogEnable = False + + + title = isSimul + "소요량계산중..." & "(" & i_count_month & "/12)" + RaiseEvent Message(title, i_count_month, 0, 12) + + '===============================================2010.2.21 수정 + 'd_op_month = d_op(i_count_month) + d_full_mth = CInt(Calc.Pub.d_full(i_count_month)) + '===============================================2010.2.21 수정 + theta_e_month = Calc.Pub.theta_e(i_count_month) + + pLog.Add(String.Format("소요량계산 Mon={0},d_full_mth={1},theta_e_month={2}", i_count_month, d_full_mth, theta_e_month)) + + '///난방 + + pLog.Add("급탕소요량 시작") + Calc.Heating.Calc_WaterheatingSystem(i_count_month, d_full_mth, theta_e_month) '//급탕소요량 '========2010.2.21 수정 + + + pLog.Add("환기소요량 시작") + Calc.AirHandling.Calc_AirHandling(i_count_month, d_full_mth) '//환기? '========2010.2.21 수정 + + '// + If Result.E분석(i_count_month).난방에너지요구량 <> 0 Then + pLog.Add(String.Format("난방에너지요구량({0})이 0보다 큽니다 추가 계산을 실행 : Calc.Heating.Calc_HeatingSystem", Result.E분석(i_count_month).난방에너지요구량)) + Calc.Heating.Calc_HeatingSystem(i_count_month, theta_e_month) '//난방소요량 + End If + + '///냉방 + pLog.LogEnable = True + If Result.E분석(i_count_month).냉방에너지요구량 <> 0 Then + pLog.Add(String.Format("냉방에너지요구량({0})이 0보다 큽니다 추가 계산을 실행 : Calc.Cooling.Calc_CoolingSystem", Result.E분석(i_count_month).냉방에너지요구량)) + Calc.Cooling.Calc_CoolingSystem(i_count_month, theta_e_month) + End If + + pLog.Add(String.Format("==== 소요량 Mon={0} 완료==========", i_count_month)) + Next + DSETR.AcceptChanges() + Return True + End Function + + Private DSET As DS + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult) + DSET = pds + DSETR = pdsetr + Result = presult + End Sub +End Class + diff --git a/ArinWarev1/DataSet/Calculator/Calculator.vb b/ArinWarev1/DataSet/Calculator/Calculator.vb new file mode 100644 index 0000000..0e70b55 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Calculator.vb @@ -0,0 +1,719 @@ +Public Class Calculator + + Public WithEvents Zone As CZone '//존에클래스할당 + Public WithEvents AirHandling As CAirHandling '//존에클래스할당 + Public WithEvents Cooling As CCooling '//존에클래스할당 + Public WithEvents Heating As CHeating '//존에클래스할당 + Public WithEvents Renewable As CRenewable '//존에클래스할당 + Public WithEvents Summary As CSummary + Public WithEvents Pub As CShared + + Public IsError As Boolean = False + Public IsSimulation As Boolean = False + + Enum ECalc + All = 0 + REq = 1 + Use = 2 + 설계개선안 = 3 + End Enum + + Private DSET As DS + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByVal Version As String, ByRef pds As DS, ByRef pdsetr As DSR, ByRef prresult As CResult, p_simul As Boolean) + Me.IsError = False + DSET = pds + DSETR = pdsetr + Result = prresult + IsSimulation = p_simul '//평가계산에의해서는 시뮬레이션모드로 작동 + Select Case Version + Case "2009123100", StartVersion + Me.Zone = New CZone(DSET, DSETR, Result) '//존 + Me.AirHandling = New CAirHandling(DSET, DSETR, Result) '//공기 + Me.Cooling = New CCooling(DSET, DSETR, Result) + Me.Heating = New CHeating(DSET, DSETR, Result) + Me.Renewable = New CRenewable(DSET, Result) '//신재상 + Me.Summary = New CSummary(DSETR, Result) '//계산결과 집계 + Me.Pub = New CShared '//공용변수(여기추가됬을거에요)- 기상오류처리 + Me.IsError = Me.Pub.IsError '//공용변수값에 오류확인 + Case Else + MsgBox("LG계산식에 지원되지않는 버젼(" & StartVersion & "/" & Version & ")입니다", MsgBoxStyle.Critical, "확인") + Me.IsError = True + End Select + End Sub + + Private Function 설계개선안사용여부(findcode As String) As Boolean + Dim retval As Boolean = False + For Each dr As DS.tbl_monuseRow In DSET1.tbl_monuse.Select("code='" + findcode + "'", "월") + If dr.도시가스 <> "0" Then + retval = True + Exit For + End If + If dr.전력 <> "0" Then + retval = True + Exit For + End If + If dr.지역난방 <> "0" Then + retval = True + Exit For + End If + Next + Return retval + End Function + + Private Sub 입력값계수변환(code As String) + If 설계개선안사용여부(code) Then + For Each dr As DS.tbl_monuseRow In DSET1.tbl_monuse.Select("code='" + code + "'", "월") + Dim newdr As DSR.월별1차에너지사용량Row = DSETR1.월별1차에너지사용량.NewRow + newdr.도시가스 = dr.도시가스 * Result2.E변환계수.LNG + newdr.전력 = dr.전력 * Result2.E변환계수.전력 + newdr.지역난방 = dr.지역난방 * Result2.E변환계수.지역난방 + newdr.code = dr.code + newdr.년 = dr.년 + newdr.월 = dr.월 + DSETR1.월별1차에너지사용량.Rows.Add(newdr) + Next + End If + End Sub + + + '''130824 + Public Function 설계개선안계산() As Boolean + Dim dr_desc As DS.tbl_DescRow = DSET.tbl_Desc.Rows(0) + + '//년면적값확인 + Dim 년면적 As Decimal = 0 + If IsNumeric(dr_desc.buildm23) = False Then dr_desc.buildm23 = "0" + 년면적 = CDec(dr_desc.buildm23) + If 년면적 = 0 Then + MsgBox("년면적값이 없습니다.", MsgBoxStyle.Critical, "확인") + Return False + End If + + '//월별에너지사용량에서 입력한 값 + Dim 사용자입력값에너지사용량(12) As Decimal + + '//현재계산되어있는 1차에너지사용량 + Dim 년면적당(12) As Decimal + Dim 년면적당원본(12) As Decimal + + Dim ok As Boolean = True + Dim 오차계산횟수 As Decimal = 0 + Dim 난방설정온도 As Decimal = 20 + Dim 냉방설정온도 As Decimal = 26 + Dim 실내발열 As Decimal = 0 + + Dim 전반기최저입력 As Decimal = 999999 + Dim 하반기최저입력 As Decimal = 999999 + Dim 전반기최저 As Decimal = 999999 + Dim 하반기최저 As Decimal = 999999 + + For i As Integer = 1 To 12 + 사용자입력값에너지사용량(i) = 0 + 년면적당(i) = 0 + Zone_Message("계산데이터와 입력데이터 집계중(" + i.ToString() + "/3)...", i, 0, 12) + + '//사용자에의해서 입력된 값을 누적한다. + For Each dr1 As DSR.월별1차에너지사용량Row In DSETR.월별1차에너지사용량.Select("월='" + i.ToString("00") + "'") + 사용자입력값에너지사용량(i) += TOSG(dr1.도시가스) + TOSG(dr1.전력) + TOSG(dr1.지역난방) + Next + + '//임시계산저장소의 값을 이용한다. + 년면적당원본(i) = (Result1.일차E소요량(i).난방소요량 / 년면적) + (Result1.일차E소요량(i).냉방소요량 / 년면적) _ + + (Result1.일차E소요량(i).급탕소요량 / 년면적) + (Result1.일차E소요량(i).조명소요량 / 년면적) _ + + (Result1.일차E소요량(i).환기소요량 / 년면적) + + If i <= 6 Then + If 사용자입력값에너지사용량(i) < 전반기최저입력 Then 전반기최저입력 = 사용자입력값에너지사용량(i) + If 년면적당원본(i) < 전반기최저 Then 전반기최저 = 년면적당원본(i) + Else + If 사용자입력값에너지사용량(i) < 하반기최저입력 Then 하반기최저입력 = 사용자입력값에너지사용량(i) + If 년면적당원본(i) < 하반기최저 Then 하반기최저 = 년면적당원본(i) + End If + Next + + Dim 입력값평균 As Decimal = (하반기최저입력 + 전반기최저입력) / 2 + Dim 계산값평균 As Decimal = (하반기최저 + 전반기최저) / 2 + Dim 오차 As Decimal = 계산값평균 - 입력값평균 + Dim 오차재계산횟수 As Integer = 5 + + + While (True) + + For i As Integer = 1 To 12 + 사용자입력값에너지사용량(i) = 0 + 년면적당(i) = 0 + Zone_Message("계산데이터와 입력데이터 집계중(" + i.ToString() + "/3)...", i, 0, 12) + + '//사용자에의해서 입력된 값을 누적한다. + For Each dr1 As DSR.월별1차에너지사용량Row In DSETR.월별1차에너지사용량.Select("월='" + i.ToString("00") + "'") + 사용자입력값에너지사용량(i) += TOSG(dr1.도시가스) + TOSG(dr1.전력) + TOSG(dr1.지역난방) + Next + + '//임시계산저장소의 값을 이용한다. + 년면적당(i) = (Result2.일차E소요량(i).난방소요량 / 년면적) + (Result2.일차E소요량(i).냉방소요량 / 년면적) _ + + (Result2.일차E소요량(i).급탕소요량 / 년면적) + (Result2.일차E소요량(i).조명소요량 / 년면적) _ + + (Result2.일차E소요량(i).환기소요량 / 년면적) + + 년면적당(i) += (-1 * 오차) + + Next + + '//여름피크확인(8월) + '//겨울피크확인(1월) + Dim 오차겨울 As Decimal = Math.Abs(년면적당(1) - 사용자입력값에너지사용량(1)) + Dim 오차여름 As Decimal = Math.Abs(년면적당(8) - 사용자입력값에너지사용량(8)) + + Dim 원본겨울 As Decimal = 년면적당원본(1) + Dim 원본여름 As Decimal = 년면적당원본(8) + + Dim 오차발생여름 As Boolean = False + Dim 오차발생겨울 As Boolean = False + + Dim 오차겨울퍼센트 As Decimal = (오차겨울 / 년면적당(1)) * 100 + Dim 오차여름퍼센트 As Decimal = (오차여름 / 년면적당(8)) * 100 + + '//오차계산에따른 반복제어 + If 오차계산횟수 > 오차재계산횟수 Then + ' MsgBox("오차계산횟수를 초과하였습니다" + vbCrLf + "개선작업이 종료됩니다.", MsgBoxStyle.Information, "확인") + ok = False + Exit While + End If + + If 오차겨울퍼센트 > 0.1 Then + 오차발생겨울 = True + If 년면적당(1) < 사용자입력값에너지사용량(1) Then + 난방설정온도 += 0.5 + Else + 난방설정온도 -= 0.5 + End If + End If + + If 오차여름퍼센트 > 0.1 Then + 오차발생여름 = True + If 년면적당(8) < 사용자입력값에너지사용량(8) Then + 냉방설정온도 -= 0.5 + Else + 냉방설정온도 += 0.5 + End If + End If + + '//오차가발생하지않았다면 더이상 진행하지 않는다. + If Not 오차발생여름 AndAlso Not 오차발생겨울 Then + ok = True + Exit While + End If + + + + '//변경될 온도정보를 가지고 다시 계산합니다. + If Me.Start("설계개선작업(" + (오차계산횟수 + 1).ToString() + "/" + 오차재계산횟수.ToString + ")" + vbCrLf + vbCrLf + _ + "(겨울/여름)오차발생율:" + 오차겨울퍼센트.ToString("#0.00") + "%/" + 오차여름퍼센트.ToString("#0.00") + "%" + vbCrLf, ECalc.All, LogSB, (-1 * 오차), 난방설정온도, 냉방설정온도) Then '//파라미터 True 라면 소요량이 추가로 게산된다. + 오차계산횟수 += 1 + Me.Summary.All() + '오차 = 0 + 'Continue While + Else + MsgBox("설계개선작업중 오류가 발생하였습니다." + vbCrLf + LogSB.ToString, MsgBoxStyle.Critical, "확인") + ok = False + Exit While + End If + + End While + + + '//가상결과데이터(DSR2)를 집계해서 실제결과DSR1에 넣는다. + DSETR1.설계계산결과.Clear() + DSETR1.설계계산결과.AcceptChanges() + + For i As Integer = 1 To 12 + Dim ndr As DSR.설계계산결과Row = DSETR1.설계계산결과.New설계계산결과Row + ndr.월 = i.ToString("00") + ndr.난방전 = (Result2.일차E소요량(i).난방소요량 / 년면적) + ndr.냉방전 = (Result2.일차E소요량(i).냉방소요량 / 년면적) + ndr.조명전 = (Result2.일차E소요량(i).조명소요량 / 년면적) + ndr.급탕전 = +(Result2.일차E소요량(i).급탕소요량 / 년면적) + ndr.환기전 = (Result2.일차E소요량(i).환기소요량 / 년면적) + DSETR1.설계계산결과.Rows.Add(ndr) + Next + + + '//벽체 열관류율, 창호 열관류율, 일사투과율, 장비 효율, 조명밀도 등 적용 + '//면형태 : 벽체 - 외,내벽 :: tbl_yk 모든 열관류율을 = 0.1 *get열관류율을 마지막에 한번만 작동하도록 상수지정 + '//면형태 : 창호 - 외부창,내부창 = 1.0 + '//면형태 : 창호 - 외부창,내부창 일사투과율 = 0.3 + For Each drmn As DS.tbl_ykRow In DSET.tbl_yk.Select("code <> '0'") + Dim 면형태코드 As String = drmn.면형태 + If 면형태코드.Trim = "" Then Continue For + Dim 면형태 As String = Get_CName("1088", 면형태코드) + Select Case 면형태 + Case "외벽(벽체)", "내벽(벽체)", "지중벽" + drmn.열관류율 = "0.1" + Case "외부창", "내부창" + drmn.열관류율 = "1" + drmn.일사에너지투과율 = "0.3" + End Select + Next : DSET.tbl_yk.AcceptChanges() + + '//난방기기 , 정격보일러효율=0.9 , 히트난방정격7=4.5 + For Each drmn As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code <> '0'") + If CDec(drmn.정격보일러효율) < 90 Then + drmn.정격보일러효율 = "90" + End If + If CDec(drmn.히트난방정격7) < 4.5 Then + drmn.히트난방정격7 = "4.5" + End If + Next : DSET.tbl_nanbangkiki.AcceptChanges() + + '//냉방기기 , 열성능비 = 5.0 + For Each drmn As DS.tbl_nangbangkikiRow In DSET.tbl_nangbangkiki.Select("code <> '0'") + If CDec(drmn.열성능비) < 5 Then + drmn.열성능비 = "5.0" + End If + Next : DSET.tbl_nangbangkiki.AcceptChanges() + + '//조명밀도 : 조명에너지부하율입력치 : 6 + For Each drmn As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'") + If drmn.조명부하산출방법 = "입력치" Then + drmn.조명에너지부하율입력치 = 6 + End If + Next : DSET.tbl_zone.AcceptChanges() + + '//보정데이터유지하고 계산실행 + '//그래프출력시 발생한 오차를 데이터테이블에 표시 + '//변경될 온도정보를 가지고 다시 계산합니다. + If Me.Start("설계개선작업II" + vbCrLf, ECalc.All, LogSB, (-1 * 오차), 난방설정온도, 냉방설정온도) Then '//파라미터 True 라면 소요량이 추가로 게산된다. + Me.Summary.All() + ok = False + End If + + For i As Integer = 1 To 12 + Dim ndr As DSR.설계계산결과Row = DSETR1.설계계산결과.Rows(i - 1) + ndr.난방 = (Result2.일차E소요량(i).난방소요량 / 년면적) + ndr.냉방 = (Result2.일차E소요량(i).냉방소요량 / 년면적) + ndr.조명 = (Result2.일차E소요량(i).조명소요량 / 년면적) + ndr.급탕 = +(Result2.일차E소요량(i).급탕소요량 / 년면적) + ndr.환기 = (Result2.일차E소요량(i).환기소요량 / 년면적) + ndr.AcceptChanges() + Next + + DSETR1.설계계산결과.AcceptChanges() + + '//파라미터저장 + DSETR1.설계계산파라미터.Clear() + Dim ndr3 As DSR.설계계산파라미터Row = DSETR1.설계계산파라미터.New설계계산파라미터Row + ndr3.난방 = 난방설정온도.ToString + ndr3.냉방 = 냉방설정온도.ToString + ndr3.기저비율 = CDec(-1 * 오차).ToString() + DSETR1.설계계산파라미터.Rows.Add(ndr3) + DSETR1.설계계산파라미터.AcceptChanges() + + If ok Then + Return True + Else + Return False + End If + Return True + End Function + + Public Function Start(showmsg As String, ByVal CalcType As ECalc, ByRef logBuffer As System.Text.StringBuilder, 기저비율 As Decimal, Optional ByVal 난방설정온도 As Decimal = 20, Optional ByVal 냉방설정온도 As Decimal = 26) As Boolean + + pLog.Add("=====================================") + pLog.Add("Calc Start") + pLog.Add("=====================================", True) + + Me.Pub = New CShared '//공용변수 + + '//계산을 시작 p_CalcUse : 는 소요량 계산도 할건지으 ㅣ플래그 나중에 분리해야겠따. + 'Dim ST As Date = Now + + If Me.IsError Then + MsgBox("계산준비중 오류발생", MsgBoxStyle.Critical, "확인") + Return False + End If + logBuffer = New System.Text.StringBuilder("") + Dim Cnt As Integer = FixData() + 'log.AppendLine(">>데이터보정(" & Cnt.ToString & ")개의 데이터가 보정되었습니다") + 'log.AppendLine(">>유효성검사시작") + If validation() = False Then Return False '//유효성 체크를 수행한다. + + If CalcType <> ECalc.Use AndAlso CalcType <> ECalc.설계개선안 Then + 'log.AppendLine(">>계산영역초기화") + Clear_ResultArea() '//과거의 계산영역을 클리어시킨다. + 'log.AppendLine(">>각존의 사용면적 계산") + Result.사용면적.Calc() '//A_H,C,W,L,V 의 누적값을 계산(사용면적) : 개별프로시져로 할당 + 'log.AppendLine(">>주계산시작") + End If + + '//사용자가입력한 1차에너지사용량(=월별에너지사용량)을 변환계수를 이용해 값을 생성한다. + DSETR1.월별1차에너지사용량.Rows.Clear() : DSETR2.월별1차에너지사용량.Rows.Clear() + DSETR1.월별1차에너지사용량.AcceptChanges() : DSETR2.월별1차에너지사용량.AcceptChanges() + Zone_Message("설계개선안 입력데이터 변환중(1/3)...", 1, 0, 3) : 입력값계수변환("0001") + Zone_Message("설계개선안 입력데이터 변환중(2/3)...", 2, 0, 3) : 입력값계수변환("0002") + Zone_Message("설계개선안 입력데이터 변환중(3/3)...", 1, 0, 3) : 입력값계수변환("0003") + DSETR1.월별1차에너지사용량.AcceptChanges() + DSETR2.월별1차에너지사용량.Merge(DSETR1.월별1차에너지사용량) + DSETR2.월별1차에너지사용량.AcceptChanges() + + Dim Retval As Boolean + Select Case CalcType + Case ECalc.All + pLog.LogEnable = False + Retval = Zone.Calc_LoadOfZones(showmsg, IsSimulation, 기저비율, 난방설정온도, 냉방설정온도) + pLog.LogEnable = True + If Retval Then Retval = Zone.Calc_Useage(showmsg) + Return Retval + Case ECalc.REq + pLog.LogEnable = True + Return Zone.Calc_LoadOfZones(showmsg, IsSimulation, 기저비율, 난방설정온도, 냉방설정온도) + Case ECalc.Use + pLog.LogEnable = True + Return Zone.Calc_Useage(showmsg) + Case ECalc.설계개선안 + pLog.LogEnable = True + Return 설계개선안계산() + End Select + + pLog.LogEnable = True + + End Function + + Private Function FixData() As Integer + Dim RetCnt As Integer = 0 + Dim Null As String = "(없음)" + '//보정할수있는데이터를 보정합니다. + ';//입력면 - 건축부위방식이 .내벽 or 간벽일경우 방위는 (없음)이다 + For Each DR면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("code <> '0'") + If DR면.건축부위방식 = "내벽" Or DR면.건축부위방식 = "간벽" Then + If DR면.방위 <> Null Then + RetCnt += 1 + DR면.방위 = Null + End If + End If + Next + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'") + If DR존.조명방식.ToString = "0" OrElse DR존.조명방식.ToString = "" Then + RetCnt += 1 + LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 조명방식이 없음으로 설정됩니다.") + DR존.조명방식 = "(없음)" + End If + If DR존.인공광원.ToString = "0" OrElse DR존.인공광원.ToString = "" Then + RetCnt += 1 + LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 인공광원이 없음으로 설정됩니다.") + DR존.인공광원 = "(없음)" + End If + If DR존.외기부하처리여부.ToString = "0" OrElse DR존.외기부하처리여부.ToString = "" Then + RetCnt += 1 + LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 외기부하처리여부가 아니오로 설정됩니다.") + DR존.외기부하처리여부 = "아니오" + End If + + 'If DR존.조명방식.ToString.Trim = "" Then DR존.조명방식 = "(없음)" + 'If DR존.인공광원.ToString.Trim = "" Then DR존.인공광원 = "(없음)" + Next + + DSET.AcceptChanges() '//변경내용 적용 + Return RetCnt + End Function + Public Function validation() As Boolean + pLog.Add("Calc Validation") + '//존이 2개이상있어야한다 (없음데이터로인해서 반드시 1개는 있기때문이다.) + '//여기보정데이터가잇네요.; + Dim NoErr As Boolean = True + + '//콤보박스들의 값이 지정되어잇는지 확인한다. 무조건 있어야한다 + Dim Title As String + Dim Columns() As String '//(없음)이 들어가는 콤보필드 + Dim ColumnC() As String '//공용코드전용 필드들 + Dim CGubun() As String '//공용코드필드의 구분값이 저장됨 + Dim Columnst() As String '//0이 들어가는 콤보필드 + + '//ZONE + Title = "Zone" + Columns = New String() {"냉난방열공급시스템", "열저장능력", "열교가산치", _ + "주말운전방식", "야간운전방식", "외기부하처리여부", _ + "냉난방공조", "냉난방방식", _ + "조명부하산출방법", "조명방식", "인공광원"} + ColumnC = New String() {"열저장능력", "열교가산치", _ + "주말운전방식", "야간운전방식", "외기부하처리여부"} ' + '//다를지도 모르니 나중에 함 확인하시구요 + CGubun = New String() {"1023", "1022", _ + "1002", "1002", "1054"} '//공용코드있는데는 모조리 설정하시구요 물론 길이는 바로위하고 같아야합닌다. + '//여기에 각 공용코드의 구분값 1009 뭐 이런것들을 같게 넣어주세요 column 가 8개가있었따면 cgubun 도 8개가 잇으면됩니다. + + Columnst = New String() {"프로필", "냉난방공조처리시스템", "열생산난방생산기기", _ + "열생산급탕생산기기", "열생산냉방생산기기", _ + "열생산가습생산기기", "냉난방공조분배시스템", _ + "냉난방분배시스템", "공조냉방생산기기", "공조난방생산기기"} + + Set_Null(Columns, DSET.tbl_zone, "(없음)") '//데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리 + Set_Null(ColumnC, DSET.tbl_zone, "(없음)") '//공용코드값이 아에없는 데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리 + 'Set_CheckCommon(ColumnC, DSET.tbl_zone, CGubun) '//이거는 // 공용코드오류난 데이터 검색하는부분이에요 + Set_Null(Columnst, DSET.tbl_zone, "0") + + Title = "신재생에너지" + Columns = New String() {"기기종류", "가동연료", "태양열종류", "집열기유형", _ + "집열판방위", "태양열시스템의성능", "축열탱크설치장소", _ + "태양광모듈기울기", "태양광모듈방위", _ + "태양광모듈종류", "태양광모듈적용타입", _ + "열교환기설치여부", "팽창탱크설치여부"} + Set_Null(Columns, DSET.tbl_new, "(없음)") + 'Set_Null(Columnst, DSET.tbl_bunbae, "0") + + Title = "난방분배시스템" + Columns = New String() {"생산기기구분", "표준치적용", "배관망유형", _ + "배관구간방식", "배관설치장소", _ + "배관설치장소", "지관장소"} + Set_Null(Columns, DSET.tbl_nbunbae, "(없음)") + 'Set_Null(Columnst, DSET.tbl_bunbae, "0") + + Title = "난방기기" + Columns = New String() {"열생산기기방식", "사용연료", "운전방식", "보일러방식", _ + "지역난방방식", "단열등급", "축열탱크방식", _ + "배관망유형", "펌프교정계수", "펌프제어유형", _ + "분배시스템방식", "순환유무", "펌프제어", _ + "히트펌프시스템종류", "신재생연결여부"} + Columnst = New String() {"연결된시스템"} + Set_Null(Columns, DSET.tbl_nanbangkiki, "(없음)") + Set_Null(Columnst, DSET.tbl_nanbangkiki, "0") + + Title = "냉방기기" + Columns = New String() {"냉동기방식", "냉동기종류", "냉동기압축방식", _ + "압축기제어방식", "냉동기설비시스템", _ + "냉동기설비시스템", "제어방식", _ + "열생산연결방식", "사용연료", "증발식건식냉각기", _ + "증발식냉각기", "보조방음기유무", "신재생연결여부"} + Columnst = New String() {"온수열생산기기", "연결된시스템"} + Set_Null(Columns, DSET.tbl_nangbangkiki, "(없음)") + Set_Null(Columnst, DSET.tbl_nangbangkiki, "0") + + + Title = "입력면" + Columns = New String() {"건축부위방식", "블라인드유무", _ + "블라인드위치", "방위", "블라인드빛종류", _ + "블라인드색상", "블라인드각도"} + Columnst = New String() {"존분류", "대차대조존"} + Set_Null(Columns, DSET.tbl_myoun, "(없음)") + Set_Null(Columnst, DSET.tbl_myoun, "0") + + + Title = "난방공급시스템" + Columns = New String() {"열공급시스템", "노출형제어", "바닥난방열제어", _ + "바닥난방열건축부위", "바닥난방전기제어", "바닥난방전기건축부위", "전기난방제어"} + Columnst = New String() {"열공급생산기기"} + Set_Null(Columns, DSET.tbl_kongkub, "(없음)") + Set_Null(Columnst, DSET.tbl_kongkub, "0") + + + Title = "공조처리" + Columns = New String() {"공조방식", "리턴공기혼합여부", "가습기유형", "외기냉방제어유무", "열교환기유형"} + Set_Null(Columns, DSET.tbl_kongjo, "(없음)") + 'Set_Null(Columnst, DSET.tbl_bunbae, "0") + + Title = "냉방분배시스템" + Columns = New String() {"냉매방식", "펌프운전제어유무"} + Columnst = New String() {"냉동기"} + Set_Null(Columns, DSET.tbl_bunbae, "(없음)") + Set_Null(Columnst, DSET.tbl_bunbae, "0") + + + '//모든공조데이터 순환 + For Each DR As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code<>'0'") + DR.팬효율산출방식 = DR.팬효율산출방식.Trim + 'MsgBox(DR.설명 & "==현재저장된값 : " & DR.팬효율산출방식 & " 길이 = " & DR.팬효율산출방식.Length) + If DR.팬효율산출방식.Trim = "" Then DR.팬효율산출방식 = "입력치" + Next + 'DSET.tbl_kongjo.AcceptChanges() + DSET.AcceptChanges() + + + '//그값이 존에잇어요?cnrkehlsrp?추가된게?공조기기요 + For Each Dr As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'") '//모든존을 검사 없음(0)은 빼고 + 'If Dr.공조난방생산기기 = "0" And Dr.공조냉방생산기기 = "0" Then '//둘다 0일경우 + '//오류를 내고싶으면 여기서 return false 해버리면됩니다.'다른족건이 잇다면.. 아까처럼.. + 'Return False 냉난방공조 라는 공조에 냉난방이 있으면 : : + 'End If + If Dr.냉난방공조 = "냉난방" Then '// + If Dr.공조난방생산기기 = "0" OrElse Dr.공조냉방생산기기 = "0" Then + MsgBox("입력존에서 공조방식에 대응하는 공조냉난방생산기기가 지정되지 않은 것이 있습니다.") + Return False + End If + End If + If Dr.냉난방공조 = "난방" OrElse (Dr.냉난방공조 = "냉방" And Dr.외기부하처리여부 = "예") Then '// + If Dr.공조난방생산기기 = "0" Then + MsgBox("입력존에서 공조방식에 대응하는 공조난방생산기기가 지정되지 않은 것이 있습니다.") + Return False + End If + End If + If Dr.냉난방공조 = "냉방" OrElse (Dr.냉난방공조 = "난방" And Dr.외기부하처리여부 = "예") Then '// + If Dr.공조냉방생산기기 = "0" Then + MsgBox("입력존에서 공조방식에 대응하는 공조냉방생산기기가 지정되지 않은 것이 있습니다.") + Return False + End If + End If + If Dr.냉난방공조 = "환기" And Dr.외기부하처리여부 = "예" Then '// + If Dr.공조난방생산기기 = "0" OrElse Dr.공조냉방생산기기 = "0" Then + MsgBox("입력존에서 외기부하처리에 따른 공조냉난방생산기기가 지정되지 않은 것이 있습니다.") + Return False + End If + End If + + + + Next + + '//여기에서 FAlse 를 반환해버리면.. 게산은 돌지않아요 게산전에 수행되는곳이구요 + '//아까 파일오픈시에도 여기를 호출합니다. 바로 윗부분이 nul l값에대한 기본값 처리구요. + Return NoErr + End Function + + Private Sub Set_Null(ByVal Columns() As String, ByRef dt As DataTable, ByVal val As String) + For Each Dr As DataRow In dt.Select("code<>'0'", "code") + For Each Col As String In Columns + If Dr(Col).ToString.Trim = "" Then '//값이없으면 기본값(val)으로 설정 + Dr(Col) = val + End If + Next + Next + End Sub + + '''공용코드에값이있는지확인 + Private Sub Set_CheckCommon(ByVal Columns() As String, ByRef dt As DataTable, ByVal gubunval() As String) + Dim index As Short = -1 + For Each Dr As DataRow In dt.Select("code<>'0'", "code") + index = 0 + For Each Col As String In Columns + If Dr(Col).ToString.Trim = "" Then '//값이없으면 기본값(val)으로 설정 + 'Dr(Col) = val + Else '//값이있을때 + Dim V As String = Dr(Col).ToString.Trim + '//v의값이 공용ㅇ코드에 있는지 확인 공용코드는 name 을 저장하므로 name 으로검사를 수행 + Dim Cdr() As DS.tbl_commonRow = DSET.tbl_common.Select("gubun='" & gubunval(index) & "' and name='" & V & "'") + If Cdr.GetUpperBound(0) = -1 Then + MsgBox("값이있으나 공용코드에없음(여기에 경고문구좀 날려주시면되구요") + End If + End If + index += 1 + Next + Next + End Sub + + + ''' + ''' 계산결과 영역을 초기화시킵니다. + ''' + ''' + Private Sub Clear_ResultArea() + pLog.Add("Clear_ResultArea") + + DSETR.Clear() : DSETR.AcceptChanges() '//기존데이터 클리어 + + '//0번시트의 결과값을 저장할 장소를 생성한다. Zone=00 은 합계필드이다(이것이 일률적이지않아서 00으로 할당을 따로 해서 나중에 합산작업을 할 예정) + '//00번 존을포함하여 현재 존의 갯수+1개를 생성한다. + + '//최대냉난방/E분석 + Dim ZoneCode As String + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("", "code") + If Dr존.code = "0" Then + ZoneCode = "00" + Else + ZoneCode = Dr존.code + End If + + Dim Res1 As DSR.최대냉난방부하Row = DSETR.최대냉난방부하.New최대냉난방부하Row + Res1.Zone = ZoneCode : DSETR.최대냉난방부하.Add최대냉난방부하Row(Res1) + For ii As Integer = 1 To 12 + Dim DrE분석 As DSR.월별에너지분석Row = DSETR.월별에너지분석.New월별에너지분석Row + DrE분석.월 = "M" & Format(ii, "00") '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함 + DrE분석.존 = ZoneCode + DSETR.월별에너지분석.Add월별에너지분석Row(DrE분석) + 'MsgBox("M" & Format(ii, "00"), MsgBoxStyle.Information, ZoneCo'de) + Next + Next + + '//월별로 움직이는데이터 + Dim Mon As String + Dim Dr As DataRow + For ii As Integer = 0 To 12 + Mon = "M" & Format(ii, "00") + + Dr = DSETR.생산에너지.NewRow + Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함 + DSETR.생산에너지.Rows.Add(Dr) + + Dr = DSETR.에너지소요량.NewRow + Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함 + DSETR.에너지소요량.Rows.Add(Dr) + + Dr = DSETR.에너지소요량1.NewRow + Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함 + DSETR.에너지소요량1.Rows.Add(Dr) + + Next + '//전부다시 구성해야함 + DSETR.AcceptChanges() + End Sub + + + '''열관류율값ㅇㄹ 반환 + Public Function Get_열관류율(ByVal Dr As DS.tbl_myounRow) As Decimal + Dim 열관류율2 As String = Dr.열관류율2 '//저장된 코드값 cmb_열관류율 + + If IsNumeric(열관류율2) Then + If CInt(열관류율2) > 0 Then + Try + Dim Drow As DS.tbl_ykRow = DSET.tbl_yk.Select("code='" & 열관류율2 & "'")(0) + Return TOSG(Drow.열관류율) '//코드내에 저장된 값을 보낸다 + Catch ex As Exception + MsgBox("열관류율코드값(" & 열관류율2 & ") 값오류" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인") + Return 0 + End Try + End If + End If + + Dim 열관 As Single = 0 + Try + 열관 = Single.Parse(Dr.열관류율) + Catch ex As Exception + 열관 = 0 + End Try + + Return TOSG(Dr.열관류율) + 'If 열관 = 0 Then '//0이므로 코드값을 찾는다. + + ' Try + ' Dim Drow As DS.tbl_ykRow = DSET.tbl_yk.Select("code='" & 열관류율2 & "'")(0) + ' Return TOSG(Drow.열관류율) '//코드내에 저장된 값을 보낸다 + ' Catch ex As Exception + ' MsgBox("열관류율코드값(" & 열관류율2 & ") 값오류" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인") + ' Return 0 + ' End Try + 'Else '//입력값이 잇으므로 입력값을 바로사용한다. + + 'End If + End Function + + + Private Sub Zone_Message(Msg As String, pval As Integer, pmin As Integer, pmax As Integer) Handles Zone.Message + If Not msgf Is Nothing Then + msgf.Label1.Text = Msg + msgf.ProgressBar1.Minimum = pmin + msgf.ProgressBar1.Maximum = pmax + msgf.ProgressBar1.Value = pval + msgf.Label1.Refresh() + Else + msgf = New Frm_Work("계산중...") + msgf.Label1.Text = Msg + msgf.ProgressBar1.Minimum = pmin + msgf.ProgressBar1.Maximum = pmax + msgf.ProgressBar1.Value = pval + msgf.TopMost = True + msgf.Show() + End If + + msgf.Refresh() + End Sub + +End Class + diff --git a/ArinWarev1/DataSet/Calculator/Cooling/CCooling.vb b/ArinWarev1/DataSet/Calculator/Cooling/CCooling.vb new file mode 100644 index 0000000..8c2ddeb --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Cooling/CCooling.vb @@ -0,0 +1,813 @@ +Public Class CCooling + Public Overridable Sub Calc_CoolingSystem(ByVal i_count_month As Integer, ByVal theta_e As Decimal) + + + Dim c_p1 As Decimal, c_p2 As Decimal, c_cl As Decimal + Dim b As Decimal, L As Decimal, n_G As Decimal, h_G As Decimal, L_max As Decimal, R As Decimal, z As Decimal + Dim rho_cl As Decimal + Dim eta_c_star_d As Decimal, eta_c_star_ce_sens As Decimal, eta_c_star_ce As Decimal, eta_c_d As Decimal, eta_c_ce As Decimal, eta_c_ce_sens As Decimal + Dim Q_c_star_s As Decimal, Q_c_s As Decimal, Q_c_b As Decimal, Q_vc_b As Decimal, Q_vm_b As Decimal, Q_c_b_i As Decimal, Q_c_star_b_i As Decimal + Dim Q_c_star_b As Decimal, Q_m_star_b As Decimal, Q_c_star_d As Decimal, Q_c_star_ce As Decimal, Q_c_d As Decimal, Q_c_ce As Decimal + Dim Q_c_star_outg As Decimal, Q_z_outg_l As Decimal, Q_m_star_outg As Decimal, Q_dot_c_outg As Decimal, Q_c_outg As Decimal, Q_c_outg_total As Decimal, Q_dot_z As Decimal + Dim Q_c_ce_aux As Decimal, Q_z_aux_d_l As Decimal, Q_z_star_outg_l As Decimal + Dim f_c_ce_aux As Decimal, f_Abgl As Decimal, f_e As Decimal + Dim V_dot_z As Decimal + Dim EER As Decimal, PLV_av As Decimal + Dim P_d_hydr As Decimal, P_Pump As Decimal + Dim beta_d_l As Decimal, e_d_l As Decimal + Dim W_d_hydr_l As Decimal + Dim Q_c_f_elektr As Decimal, Q_c_f_R_elektr As Decimal, Q_dot_R_outg As Decimal, Q_c_outg_therm As Decimal, Q_c_f As Decimal, Q_c_aux As Decimal + Dim t_h_max As Integer + Dim Q_c_g As Decimal, Q_c_g_v_i As Decimal, Q_dot_N As Decimal, Q_dot_d_in As Decimal + Dim theta_VA As Decimal, theta_RA As Decimal, theta_HK_m_beta_h_d As Decimal, beta_h As Decimal, n_beta As Decimal + Dim eta_k_100 As Decimal, eta_k_pl As Decimal, f As Decimal, e As Decimal, q_B_70 As Decimal, q_B_theta As Decimal, f_Hs_Hi As Decimal + Dim Q_V_g_100 As Decimal, Q_dot_B_h As Decimal, Q_V_g_pl As Decimal, q_R_elektr As Decimal + Dim beta_k_pl As Decimal, Delta_theta_z_cl As Decimal + Dim Delta_P_WUE As Decimal, Delta_P_WUV As Decimal, Delta_P_RV As Decimal, Delta_p_z As Decimal + Dim k_n As Decimal, f_1_av As Decimal, f_2_av As Decimal, f_R_av As Decimal, T_W_1_i As Decimal, l_min_i As Decimal + Dim use_Oil As Decimal, use_LNG As Decimal, use_LPG As Decimal, use_Elec As Decimal, use_DH As Decimal + + '20100223 제거 i_count_chiller As Integer, 최적화중 사용안함 + 'Dim i_count_zone As Integer, i_count_c_d As Integer + Dim i_count_beta As Integer, k_n_index As Integer + ' Dim i_count_renewable As Integer + Dim i_HeatCool As Integer + Dim theta_i As Decimal, Q_hp_outg As Decimal, Q_c_f_hp As Decimal, Q_c_g_hp_aux As Decimal + Dim Q_chp_outg As Decimal, Q_c_f_chp As Decimal + Dim system_type As Integer + '==================================2010.2.21 수정 + Dim use_DC As Decimal + Dim d_op_mth As Integer + Dim d_op_max_mth As Integer + + Dim f_1_av_up As Decimal, f_1_av_dn As Decimal + ' Dim i_count_profile As Integer + use_DC = 0 + d_op_max_mth = 0 + '==================================2010.2.21 수정 + '==================================2010.04.02 수정 + Dim Q_H_sol_out_m As Decimal, Q_W_sol_out_m As Decimal, W_sol_aux_m As Decimal + Dim Q_h_outg_i As Decimal + + Q_H_sol_out_m = 0 + Q_h_outg_i = 0 + '==================================2010.04.02 수정 + Dim priod_value As Single = 0 + Dim age As Single '//준공연도에 의한 경년변화값 + Dim age_heating As Single + For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + priod_value = CSng(DRpriod.priod) + Next + If priod_value > 20 Then priod_value = 20 + age = (1 - 0.01) ^ priod_value + age_heating = (1 - 0.005) ^ priod_value + + + eta_c_star_d = 0.95 '건물 내 배관 적용 + eta_c_star_ce_sens = 1 '습도요구 편차없음 적용 + eta_c_star_ce = 0.9 '공조기기로 냉열전달에서 현열전달효율로 우선 0.9 적용 + Q_c_star_s = 0 + Q_c_s = 0 '(3.2.8-22) + eta_c_d = 0.9 ' 우선 적용 추후 검토 + eta_c_ce = 1 ' 우선 적용 추후 검토 + eta_c_ce_sens = 0.9 '우선 적용 추후 검토 + f_c_ce_aux = 0.04 ' 표3.93 우선 적용 추후 검토 + f_Abgl = 1 '수리역학적으로 평형을 이룬 배관망 + Q_c_f = 0 + Q_c_aux = 0 + beta_k_pl = 0.3 + PLV_av = 1 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + i_HeatCool = 2 + system_type = 2 + + Dim Mon As String = "M" & Format(i_count_month, "00") + For Each dr냉방 As DS.tbl_nangbangkikiRow In DSET.tbl_nangbangkiki.Select("code<>'0'", "code") + + '//이 냉방기가가 존에서 사용되었는지확인한다. + Dim Drow존() As DS.tbl_zoneRow = CType(DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'"), DS.tbl_zoneRow()) + If Drow존.GetUpperBound(0) <> -1 Then ' Worksheets("냉방기기").Range("냉방생산기기1").Offset(2, i_count_chiller - 1) = "0001" Then '2 + Q_c_b = 0 + Q_c_star_b = 0 + t_h_max = 0 + Q_c_f_elektr = 0 + Q_c_outg_therm = 0 + Q_c_g = 0 + Q_c_f_R_elektr = 0 + + + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("(공조냉방생산기기 = '" & dr냉방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '냉방') ) or (열생산냉방생산기기='" & dr냉방.code & "' and 냉난방방식 <> '난방' and 냉난방방식 <> '기능없음') and code <> '0'", "code") + Dim Drow분석() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + ' 존데이터를가져올떄 해당 냉방기기에서 사용한 존만 가져왔따. + ' If Dr존.열생산냉방생산기기 <> "" Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) <> "" Then + ' If Dr존.열생산냉방생산기기 = dr냉방.code Then ' Worksheets("입력존").Range("입력냉방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + If Dr존.열생산냉방생산기기 = dr냉방.code And (Dr존.냉난방방식 = "냉난방" OrElse Dr존.냉난방방식 = "냉방") Then + Q_c_b_i = Result.E분석(i_count_month).냉방에너지요구량열(Dr존.code) ' CSng(Drow분석(0).냉방요구량열) ' Sheets("" & i_count_month & "").Cells(10, 7 + i_count_zone) + Q_c_b = Q_c_b + Q_c_b_i + End If + If Dr존.공조냉방생산기기 = dr냉방.code And Dr존.냉난방공조 = "냉난방" OrElse Dr존.냉난방공조 = "냉방" OrElse ((Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예") Then + If (Dr존.냉난방공조 = "환기" OrElse Dr존.냉난방공조 = "난방") And Dr존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_c_star_b_i = TOSG(Drow분석(0).냉방요구량공조) '//2010.11.19 추가 + Else + Q_c_star_b_i = Result.E분석(i_count_month).공조에너지요구량냉방(Dr존.code) ' CSng(Drow분석(0).공조요구량냉방) ' Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + End If + + Q_c_star_b = Q_c_star_b + Q_c_star_b_i + End If + + '===================================================================================2010.2.21 수정 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + + 'If t_h_max < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + ' t_h_max = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + 'End If + + If t_h_max < TOSG(Dr프로필.일일운전시간) * d_op_mth Then + t_h_max = CInt(TOSG(Dr프로필.일일운전시간) * d_op_mth) + End If + + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + ' End If + ' End If + Next + + 'Q_vh_b = Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + 'Q_vc_b = Sheets("" & i_count_month & "").Cells(21, 7 + i_count_zone) + 'Q_vm_b = Sheets("" & i_count_month & "").Cells(23, 7 + i_count_zone) + + + '========================================================================================================================================== + ' 가열유닛에 대한 사용에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vh_d 는 0으로 적용 + + 'Q_dot_V_H_max = V_dot_star_rho_L(c_p_L * (theta_ZUL_wi - theta_AUL_wi) - Delta_h_WRG) '(3.2.5-58) + 'Q_dot_V_H_max = V_dot_star * rho_L(h_ZUL_wi - h_AUL_wi - Delta_h_WRG) '(3.2.5-57) + 'b_VH_a = sigma1_12(b_VH_month) '(3.2.8-7) + 'b_VH_mth = Q_vh_b / Q_dot_V_H_max '(3.2.8-6) + 't_H_r = t_H_r_14_12h + (t_H_r_22_12h - t_H_r_14_12h) * (theta_V_mech - 14) / 8 '(3-B.1) theta_V_mech은 (3-C.1) + 't_H_star_op_mth = t_H_r * b_VH_mth / b_VH_a '(3.2.8-5) + 'Q_vh_d = f_vh_d * A_K_A * t_H_star_opo_mth '(3.2.8-10) f_vh_d=16W/m + + 'Q_vh_ce = (1 - eta_vh_ce) * Q_vh_b '(3.2.8-9) eta_vh_ce 는 1로 Q_vh_ce 는 0이 됨 + 'Q_h_star_b = Q_vh_b 'Q_h_star_b = Q_vh_b + Q_vh_ce + Q_vh_d '(3.2.8-2) + '========================================================================================================================================== + + + + '========================================================================================================================================== + ' 냉각 유닛에 대한 사용 에너지(3차 에너지) + ' 외부 공조덕트가 없어서 Q_vc_d 는 0으로 적용 + + 'Q_dot_V_C_max = V_dot_star * rho_L(h_AUL_so - h_ZUL_so - Delta_h_WRG) '(3.2.5-62) + 'b_VC_a = sigma1_12(b_VC_month) '(3.2.8-13) + 'b_VC_mth = Q_vc_b / Q_dot_V_C_max '(3.2.8-12) + 't_C_r = (t_C_r_14_12h + (t_C_r_22_12h - t_C_r_14_12h) * (theta_V_mech - 14) / 8) * f_h_C '(3-B.2) theta_V_mech은 (3-C.1) + 't_C_star_op_mth = t_C_r * b_VC_mth / b_VC_a '(3.2.8-11) + 'Q_vc_d = f_vc_d * A_K_A * t_C_star_opo_mth '(3.2.8-10) f_vh_d=9W/m + 'Q_vc_ce = (1 - eta_vc_ce) * Q_vc_b '(3.2.8-9) eta_vc_ce 는 1로 Q_vc_ce 는 0이 됨 + + 'Q_c_star_b = Q_vc_b 'Q_c_star_b = Q_vc_b + Q_vc_ce + Q_vc_d '(3.2.8-8) + + '========================================================================================================================================== + + + '가습 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + + + ' 실-냉방 냉열 공급 + + 'Q_c_b = Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + + Q_c_d = (1 - eta_c_d) * Q_c_b '(3.2.8-21) eta_c_d는 (Tab.7-8) + Q_c_ce = ((1 - eta_c_ce) + (1 - eta_c_ce_sens)) * Q_c_b '(3.2.5-20) eta_c_ce는(Tab.7-8), eta_c_ce_sens는 (Tab.7-7) + + Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + + + + '========================================================================================================================================== + ' 실-냉방 2차 공기 송풍기의 전기에너지 요구량 + ' 추후 세부 변수 검토 + + 'beta_c_i = beat_c_we = Q_c_b_we / (Q_c_max_res * t_c_op_we) '(2-D.7) + 'beta_c_i = beta_c_nutz = Q_c_b_nutz / (Q_c_max_res * t_c_op_nutz) + 't_c_i = t_mth_nutz = d_nutz * t_c_op_nutz '(2-D.8) t_c_i=t_mth_we=d_we*t_c_op_we + 't_c_i = t_mth_i * beta_c_i / beta_c_grenz '(2-D.6) + 't_c_op = t_c_NR + t_c_we '(2-D.5) + 'Q_c_outg = Q_c_b + Q_c_ce + Q_c_d + Q_c_s '(3.2.8-19) + 'Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_c_op / 1000 '(3.2.8-23) f_c_ce_aux 는 (Tab.3.93) + Q_c_ce_aux = f_c_ce_aux * Q_c_outg * t_h_max / 1000 + + + '========================================================================================================================================== + + + + + '공조-냉방 냉열 공급 + + Q_c_star_d = (1 - eta_c_star_d) * Q_c_star_b '(3.2.8-18) eta_c_star_d는 (Tab.3.91) + Q_c_star_ce = ((1 - eta_c_star_ce) + (1 - eta_c_star_ce_sens)) * Q_c_star_b '(3.2.8-16) eta_c_star_ce는 (Tab.3.91), eta_c_star_ce_sens는 (Tab.3.91) + + Q_c_star_outg = Q_c_star_b + Q_c_star_ce + Q_c_star_d + Q_c_star_s '(3.2.8-15) + Q_z_star_outg_l = Q_c_star_outg + + + ' 공조기기 가습에 필요한 생산기의 이용열 교부 + + + 'Q_m_star_d = 0 + 'Q_m_star_ce = 0 + 'Q_m_star_b = Q_vm_b '(3.2.8-14) + 'Q_m_star_outg = Q_m_star_b 'Q_m_star_outg = Q_m_star_b + Q_m_star_ce + Q_m_star_d '(3.2.8-24) + + + Q_c_outg_total = Q_c_outg + Q_c_star_outg + + Q_z_outg_l = Q_c_outg_total + + + + '================================================================================================================================== + '================================================================================================================================== + '지열시스템 + + Dim CRenew As New CRenewable + If dr냉방.신재생연결여부 = "시스템연결" AndAlso dr냉방.연결된시스템 <> "0" Then ' 시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & dr냉방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//연결되었을시에는 + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + Case "태양광" '//태양광 + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_Elec = use_Elec + Q_c_f_hp + Q_c_g_hp_aux + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LNG = use_LNG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_c_outg_total, i_count_month, d_op_max_mth, t_h_max, theta_VA, theta_i, Q_hp_outg, Q_c_f_hp, Q_c_g_hp_aux) + Q_c_outg_total = Q_c_outg_total - Q_hp_outg + Q_c_f = Q_c_f + Q_c_f_hp + Q_c_g_hp_aux + use_LPG = use_LPG + Q_c_f_hp + use_Elec = use_Elec + Q_c_g_hp_aux + End Select + Case "열병합" '//열병합 + End Select + End If + + '================================================================================================================================== + '================================================================================================================================== + + EER = TOSG(dr냉방.열성능비) * age ' Dr냉방.열성능비 + Q_dot_c_outg = TOSG(dr냉방.냉동기용량) ' dr냉방.냉동기용량 + + k_n = Q_c_outg_total / (Q_dot_c_outg * t_h_max) + + If k_n > 1 Then k_n = 1 + + k_n_index = 100 ' 조건에 없는 압축방식에서 에러 발생 유도함 + + Select Case dr냉방.냉동기방식.Trim 'Dr냉방.냉동기방식 + Case "압축식", "압축식(LNG)" '압축식" + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) ' Dr냉방.냉각탑입구온도 + Select Case dr냉방.냉동기종류.Trim ' Dr냉방.냉동기종류 + Case "수냉식" '수냉식" + Select Case dr냉방.냉동기압축방식.Trim ' Dr냉방.냉동기압축방식 + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim 'Dr냉방.압축기제어방식 + Case "on/off제어" + k_n_index = 7 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 8 + Select Case dr냉방.증발식건식냉각기.Trim ' Dr냉방.증발식건식냉각기 + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("22") + End Select + Case "실린더off" + k_n_index = 9 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("21") + End Select + Case "바이패스제어" '바이패스제어" + k_n_index = 10 + f_2_av = 1 + Case Else + MsgBox("19") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 11 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(3.1851 - 0.0486 * T_W_1_i) + Case Else + MsgBox("18") + End Select + Case "터보압축기" '터보압축기" + k_n_index = 12 + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + f_2_av = TOSG(2.0614 - 0.0307 * T_W_1_i) + Case "건식" '건식" + f_2_av = TOSG(2.1181 - 0.0249 * T_W_1_i) + Case Else + MsgBox("16") + End Select + Case Else + MsgBox("17") + End Select + + Case "공냉식" '공냉식" + Select Case dr냉방.냉동기압축방식.Trim + Case "왕복동/스크롤 압축기" '왕복동/스크롤압축기" + Select Case dr냉방.압축기제어방식.Trim + Case "on/off제어" + k_n_index = 0 + f_2_av = 1 + Case "다단제어" '다단제어" + k_n_index = 1 + f_2_av = 1 + Case Else + MsgBox("15") + End Select + Case "스크류압축기" '스크류압축기" + k_n_index = 2 + f_2_av = 1 + Case Else + MsgBox("14") + End Select + + Case "실내공조시스템" '실내공조시스템" + Select Case dr냉방.냉동기설비시스템.Trim ' Dr냉방.냉동기설비시스템 + Case "콤팩트형시스템" '콤팩트형시스템" + k_n_index = 3 + f_2_av = 1 + Case "실내외분리시스템" '실내외분리시스템" + Select Case dr냉방.제어방식.Trim.ToLower '냉동기설비시스템의제어방식 Dr냉방.제어방식 + Case "on/off제어" + k_n_index = 3 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 5 + f_2_av = 1 + Case Else + MsgBox(dr냉방.제어방식.Trim) + End Select + Case "멀티분리시스템" '멀티분리시스템" + Select Case dr냉방.제어방식.Trim + Case "on/off제어" + k_n_index = 4 + f_2_av = 1 + Case "회전수제어" '회전수제어" + k_n_index = 6 + f_2_av = 1 + Case Else + MsgBox("11") + End Select + Case Else + MsgBox("13") + End Select + Case Else + MsgBox("30") + End Select + '//이부분정확히 살펴보아야할듯 + If k_n = 0 Then k_n = 0.001 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + 'Dim Drow부분부하() As DS.tbl_buhaRow = DSET.tbl_buha.Rows(k_n_index) '.Select("code='" & Format(9 - Int((1 - k_n) * 10), "00") & "'") + + If k_n_index >= 100 Then + Log.AppendLine("냉방기기(" & dr냉방.설명 & ")의 냉동기방식(" & dr냉방.냉동기방식.Trim & ")에따른 종류(" & dr냉방.냉동기종류.Trim & ")를 확인할 수 없습니다") + Exit For 'Return + Else + f_1_av_up = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + + 'f_1_av = TOSG(DSET.tbl_buha.Rows(k_n_index)(CInt(9 - Int((1 - k_n) * 10) + 2))) ' Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(k_n_index, 9 - Int((1 - k_n) * 10)) + End If + + PLV_av = f_1_av * f_2_av + If dr냉방.냉동기방식 = "압축식" Then + Q_c_f_elektr = Q_c_outg_total / (EER * PLV_av) + '======================================================================= 2010.10.5 추가 + ElseIf dr냉방.냉동기방식 = "압축식(LNG)" Then + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + use_LNG = use_LNG + Q_c_outg_therm + '======================================================================= 2010.10.5 추가 + End If + If (dr냉방.냉동기방식 = "압축식" Or dr냉방.냉동기방식 = "압축식(LNG)") And dr냉방.냉동기종류 = "수냉식" Then 'If Dr냉방.냉동기방식 = "압축식" And Dr냉방.냉동기종류 = "수냉식" Then + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim 'Dr냉방.증발식냉각기 + Case "폐쇄형" '폐쇄형" + Select Case dr냉방.보조방음기유무.Trim 'Dr냉방.보조방음기유무 + Case "아니오" '아니오" + q_R_elektr = 0.033 + Case "예" '예" + q_R_elektr = 0.04 + End Select + Case "개방형" '개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" '아니오" + q_R_elektr = 0.018 + Case "예" '예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + Else + Q_c_f_R_elektr = 0 + End If + + + Case "흡수식" '흡수식" + Q_dot_R_outg = Q_dot_c_outg * (1 + 1 / EER) + T_W_1_i = TOSG(dr냉방.냉각탑입구온도) + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" '증발식" + l_min_i = TOSG(1.2103 - 0.0162 * theta_e) '원래는 습구온도로 입력요망 우선 외기건구온도로 입력 추후 수정 + 'f_R_av = (Log(1 - 0.5 / 0.8) * l_min_i / (Log(1 - 0.5 / 0.8) * 0.87)) ^ 2 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + f_R_av = Q_c_outg_total * 4 / (Q_dot_c_outg * t_h_max) ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산 추후 수정 + If f_R_av > 1 Then f_R_av = 1 ' 냉각탑 가동시간을 부분부하 25%이상이면 가동하는 것으로 계산하고 최대가동시간 이하로 계산 추후 수정 + Select Case dr냉방.증발식냉각기.Trim + Case "폐쇄형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.033 + Case "예" + q_R_elektr = 0.04 + End Select + Case "개방형" + Select Case dr냉방.보조방음기유무.Trim + Case "아니오" + q_R_elektr = 0.018 + Case "예" + q_R_elektr = 0.021 + End Select + End Select + Case "건식" '건식" + f_R_av = 1 '우선 1로 적용 추후 검토 + q_R_elektr = 0.045 + End Select + Q_c_f_R_elektr = Q_dot_R_outg * q_R_elektr * f_R_av * t_h_max + + Select Case dr냉방.증발식건식냉각기.Trim + Case "증발식" + f_2_av = TOSG(1.7174 - 0.0217 * T_W_1_i) + Case "건식" + f_2_av = TOSG(2.3235 - 0.0294 * T_W_1_i) + Case Else + 'MsgBox("증발식건식냉각기를 확인할 수 없습니다" & vbCrLf & "Calc_CoolingSystem 429번줄 Case else 를 입력하세요", MsgBoxStyle.Critical, dr냉방.증발식건식냉각기) + + End Select + + '//13번째줄 + If k_n = 0 Then k_n = 0.01 ' 부분부하율이 0일 경우 부분부하를 0에서 0.1구간으로 설정 + f_1_av_up = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) + If k_n < 0.1 Then + f_1_av_dn = f_1_av_up + Else + f_1_av_dn = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 1))) + End If + f_1_av = f_1_av_up - (f_1_av_up - f_1_av_dn) * (1 - (k_n * 10 - Int(k_n * 10))) + 'f_1_av = TOSG(DSET.tbl_buha.Rows(13)(CInt(9 - Int((1 - k_n) * 10) + 2))) 'Worksheets("부분부하율").Range("냉동기부분부하율1").Offset(13, 9 - Int((1 - k_n) * 10)) + PLV_av = f_1_av * f_2_av + + + + Q_c_outg_therm = Q_c_outg_total / (EER * PLV_av) + + ': 흡수식 냉동기에서 사용되는 보일러의 생산손실에너지 계산 + If dr냉방.열생산연결방식.ToString = "외부연결" Then '==============================2010.04.02 if문 추가 + + + '//냉방의 온수열생산기기로 지정된 난방기기만을 취한다 10.02.23 최적화중변경 + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code = '" & dr냉방.온수열생산기기 & "' and code <> '0'", "code") + 'If Dr난방.code = dr냉방.온수열생산기기 Then ' Dr냉방.온수열생산기기 Then + + theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_c_d - 1) + theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_c_d - 1) + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VA + theta_RA)) + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CNew As New CRenewable + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_c_d - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & Dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열 + '========================================================================================2010.04.02 추가 + If Q_c_outg_therm > 0 Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_c_outg_therm, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_c_outg_therm = Q_c_outg_therm - Q_W_sol_out_m + Q_c_aux = Q_c_aux + W_sol_aux_m + End If + '========================================================================================2010.04.02 추가 + Case "태양광" '//태양광 + Case "지열" '//지열 + Case "열병합" '//열병합 + If Q_c_outg_therm > 0 Then '===========================2010.04.02 And Q_c_outg_therm > 0 추가 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CNew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_Oil = use_Oil + Q_c_f_chp + + Case "천연가스" '천연가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LNG = use_LNG + Q_c_f_chp + + Case "액화가스" '액화가스" + CNew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_c_outg_therm, t_h_max, Q_chp_outg, Q_c_f_chp) + Q_c_outg_therm = Q_c_outg_therm - Q_chp_outg + use_LPG = use_LPG + Q_c_f_chp + + End Select + End If + + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + + Q_dot_N = TOSG(Dr난방.정격보일러효율) * age_heating ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_c_d - 1) + Q_dot_d_in = Q_c_outg_therm / t_h_max + + Select Case Dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_c_d - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = Q_dot_d_in / (Q_dot_N * TOSG(Dr난방.보일러대수)) ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(1, i_count_c_d - 1)) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(Dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + + + eta_k_100 = TOSG(Dr난방.정격보일러효율) * age_heating / 100 'Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_c_d - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + Select Case Dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_c_d - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + If beta_h > beta_k_pl Then + Q_c_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) + Q_c_g_v_i = Q_c_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * n_beta + Else + Q_c_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) + End If + + + Q_c_g = Q_c_g_v_i * t_h_max ' 추후 검토 + + Else + + ':지역난방의 경우 적용 추후 검토 + Q_c_g = 0 + + End If + + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) = "보일러" Then + Select Case Dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_c_d - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + Q_c_g + Q_c_outg_therm + + Case "천연가스" '천연가스" + use_LNG = use_LNG + Q_c_g + Q_c_outg_therm + + Case "액화가스" '액화가스" + use_LPG = use_LPG + Q_c_g + Q_c_outg_therm + + End Select + Else + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_c_d - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_c_outg_therm + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + Q_c_outg_therm + + End Select + + End If + + + ' End If + + + Next + '=================================================================================================2010.04.02 if문 추가 + ElseIf dr냉방.열생산연결방식 = "직화식" Then + Select Case dr냉방.사용연료.ToString + Case "난방유" + use_Oil = use_Oil + Q_c_outg_therm + Case "천연가스" + use_LNG = use_LNG + Q_c_outg_therm + Case "액화가스" + use_LPG = use_LPG + Q_c_outg_therm + Case Else + MsgBox("냉동기기(" & dr냉방.설명 & ")가 직화식이나 사용연료가 없습니다.확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End Select + Else + MsgBox("냉동기기(" & dr냉방.설명 & ")의 열생산연결방식을 확인바랍니다.", vbOKOnly, "건물 에너지 평가 프로그램(ECO2)") + End If + + '=================================================================================================2010.04.02 if문 추가 + Case "지역냉방" '지역냉방" + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + use_DC = use_DC + Q_c_outg_total + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Q_c_outg_therm = Q_c_outg_total + + End Select + + Q_c_f = Q_c_f + Q_c_f_elektr + Q_c_f_R_elektr + Q_c_outg_therm + Q_c_g + use_Elec = use_Elec + Q_c_f_elektr + Q_c_f_R_elektr + + If i_count_month = 6 Then + i_count_month = 6 + End If + ' 분배에 대한 전기 에너지 소비 + For Each Dr분배 As DS.tbl_bunbaeRow In DSET.tbl_bunbae.Select("냉동기='" & dr냉방.code & "' and code <> '0'", "code") + 'If Dr분배.냉동기 = dr냉방.code Then ' Worksheets("냉방분배시스템").Range("냉동기분배1").Offset(0, i_count_c_d - 1) = Worksheets("냉방기기").Range("냉방생산기기1").Offset(0, i_count_chiller - 1) Then + + Q_dot_z = Q_dot_c_outg * (1 + 1 / EER) '(3.2.8-30) + Delta_theta_z_cl = TOSG(Dr분배.설정점에서의온도차) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(3, i_count_c_d - 1) 6 + c_cl = TOSG(Dr분배.냉매의비열) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(4, i_count_c_d - 1) 4.18 + rho_cl = TOSG(Dr분배.냉매의밀도) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(5, i_count_c_d - 1) 1000 + V_dot_z = (3600 * Q_dot_z) / (Delta_theta_z_cl * c_cl * rho_cl) '(3.2.8-29) + L = TOSG(Dr분배.공급범위의길이) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(0, i_count_c_d - 1) + b = TOSG(Dr분배.공급범위의넓이) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(1, i_count_c_d - 1) + n_G = TOSG(Dr분배.열층의수) ' Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(2, i_count_c_d - 1) + h_G = TOSG(Dr분배.층고) 'Worksheets("냉방분배시스템").Range("공급범위길이1").Offset(3, i_count_c_d - 1) + L_max = 2 * (L + b / 2 + h_G * n_G + 10) '(3.2.8-32) + R = TOSG(Dr분배.배관의압력손실) ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(7, i_count_c_d - 1) 0.3 + z = TOSG(Dr분배.개별저항비율) '("냉방분배시스템").Range("급수온도1").Offset(8, i_count_c_d - 1) 0.4 + Delta_P_WUE = TOSG(Dr분배.생산기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(0, i_count_c_d - 1) + Delta_P_WUV = TOSG(Dr분배.사용기기압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(1, i_count_c_d - 1) + Delta_P_RV = TOSG(Dr분배.제어밸브압력손실) ' Worksheets("냉방분배시스템").Range("생산기기압력손실1").Offset(2, i_count_c_d - 1) + + Delta_p_z = R * L_max * (1 + z) + Delta_P_WUE + Delta_P_RV + Delta_P_WUV '(3.2.8-31) R(7-Tab.11), Delta_P_WUE, Delta_P_RV, Delta_P_WUV (7-Tab.12) + + P_d_hydr = 1000 * Delta_p_z * V_dot_z / 3600 '(3.2.8-28) + + 'f_e = f_dash_e * (1 + (nu_cl ^ 2 / (16 * P_d_hydr)) ^ 0.4) '기존건물 관련 + 'f_e = (1.25 + (200 / P_d_hydr) ^ 0.5) * f_Adap * b '(3.2.8-38) '기존건물 관련 + P_Pump = TOSG(Dr분배.펌프동력) 'Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) + 'P_Pump = Worksheets("냉방분배시스템").Range("급수온도1").Offset(9, i_count_c_d - 1) << 이거오류인듯 펌프는 8번인덱스여야한다.9번줄에는 아무것도 없다. + f_e = P_Pump / P_d_hydr '원래는 P_hydr '(3.2.8-37) + + If Dr분배.펌프운전제어유무 = "제어" Then ' Worksheets("냉방분배시스템").Range("급수온도1").Offset(-1, i_count_c_d - 1) = "제어" Then + c_p1 = 0.85 + c_p2 = 0.15 + ElseIf Dr분배.펌프운전제어유무 = "대수제어" Then + c_p1 = 0.75 + c_p2 = 0.25 + Else + c_p1 = 0.25 + c_p2 = 0.75 + End If + + 'beta_d_l = beta_dash_ + (1 - beta_dash_d_l) * V_dot_z_min / V_dot_z '(3.2.8-35) + If Q_z_outg_l <> 0 Then + beta_d_l = Q_z_outg_l / (Q_dot_z * t_h_max) '(3.2.8-34) t_d_l 을 t_h_max으로 사용 + + e_d_l = f_e * (c_p1 + c_p2 / beta_d_l) '(3.2.8-36) + + W_d_hydr_l = P_d_hydr / 1000 * t_h_max * beta_d_l * f_Abgl '(3.2.8-27) t_d_l 을 t_h_max으로 사용 + + Q_z_aux_d_l = W_d_hydr_l * e_d_l '(3.2.8-26) + 'Q_z_aux_d_a = sigma(Q_z_zux_d_l) '(3.2.8-25) + + Q_c_aux = Q_c_aux + Q_z_aux_d_l + End If + + 'End If + + Next + + End If '2 + + Next '1 + + + + '//계산결과 시트의 각 월에해당되는 곳에 데이터를 기록한다. + + Result.E소요량(i_count_month).냉방 = Q_c_f + Result.E소요량(i_count_month).냉방보조 = Q_c_aux + + use_Elec = use_Elec + Q_c_aux + + Result.일차E소요량(i_count_month).냉방등유 = use_Oil + Result.일차E소요량(i_count_month).냉방LNG = use_LNG + Result.일차E소요량(i_count_month).냉방LPG = use_LPG + Result.일차E소요량(i_count_month).냉방지역난방열 = use_DH + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Result.일차E소요량(i_count_month).냉방지역냉방열 = use_DC + '--------------------------------------------------------------------------------------------------2010.02.22 수정 + Result.일차E소요량(i_count_month).냉방전력 = use_Elec + + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/Heating/CHeating.vb b/ArinWarev1/DataSet/Calculator/Heating/CHeating.vb new file mode 100644 index 0000000..21f78f1 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Heating/CHeating.vb @@ -0,0 +1,1821 @@ +Public Class CHeating + Public Overridable Sub Calc_WaterheatingSystem(ByVal i_count_month As Integer, ByVal d_mth As Integer, ByVal theta_e As Decimal) + + Dim Q_w_ce As Decimal, Q_w_b As Decimal, theta_NA_Grenz As Decimal, theta_WA_Grenz As Decimal, Q_w_d_i As Decimal, t_h As Decimal + Dim L_G As Decimal, B_G As Decimal, n_G As Decimal, h_G As Decimal, V_s As Decimal, f_verbindung As Decimal, q_B_S As Decimal, Q_dot_N As Decimal, theta_g_m As Decimal + Dim theta_i As Integer, t_Nutz_d As Integer, d_Nutz_a As Integer + Dim eta_k_100 As Decimal, Q_w_g_100 As Decimal, Q_w_outg_i As Decimal, q_B_theta As Decimal, Q_B_w As Decimal, Q_w_g As Decimal, d_h_rB As Decimal + Dim theta_e_min As Decimal, f_L_WA As Decimal + Dim Q_w_ce_aux As Decimal, Q_w_d_aux As Decimal, Q_w_g_aux As Decimal, P_Pump_w As Decimal, c_p1 As Decimal, c_p2 As Decimal, t_P As Decimal, P_aux_100 As Decimal + Dim Q_w_s_aux As Decimal, d_Nutz_mth As Integer, Q_w_s As Decimal, Q_w_d As Decimal, L_i As Decimal, Q_w_outg As Decimal + Dim f_Hs_Hi As Decimal, t_w_100 As Decimal, q_B_70 As Decimal, Q_w_f As Decimal, Q_w_aux As Decimal, Q_w_g_i As Decimal + Dim use_Oil As Decimal, use_LNG As Decimal, use_LPG As Decimal, use_Elec As Decimal, use_DH As Decimal + 'Dim i_count_renewable As Integer + Dim Q_h_outg_i As Decimal + Dim Q_W_sol_out_m As Decimal, Q_H_sol_out_m As Decimal, W_sol_aux_m As Decimal, W_sol_aux As Decimal + Dim system_type As Integer + + Dim Q_dot_HP_waterheating As Decimal, COP_HP_7 As Decimal, COP_HP_10 As Decimal, L_HP_waterheating As Decimal + Dim COP_HP_total As Decimal + + Dim D_DS As Decimal, B_DS As Decimal, theta_prim_DS As Decimal, theta_DS As Decimal, Psi_DS As Decimal, H_DS As Decimal + + + '==================================2010.2.21 수정 + Dim d_op_mth As Integer + Dim d_op_max_mth As Integer + Dim i_count_profile As Integer + d_op_max_mth = 0 + '==================================2010.2.21 수정 + + Dim Q_w_CHP As Decimal, Q_w_f_CHP As Decimal '==============2011.07.19 추가 + Dim Q_wp_outg As Decimal, Q_w_f_hp As Decimal, Q_w_g_hp_aux As Decimal '==================================2013.01.13 추가 + + + + + + Q_w_ce = 0 '급탕에서는 공급손실이 없음 + theta_NA_Grenz = 10 + theta_WA_Grenz = 10 + theta_e_min = -11.3 + f_verbindung = 1.2 '동일공간의 경우임, 타공간의 경우 (3.2.7-36) 참조 + theta_i = 22 '2011.04.01 수정 기존 13에서 주변온도를 22도로 수정(급탕에 대한 설정조건 완화) + t_Nutz_d = 11 '2011.04.01 수정 기존 24에서 운영시간를 11로 수정(급탕에 대한 설정조건 완화) + Q_w_g_100 = 0 + d_Nutz_a = 365 + Q_w_g = 0 + Q_w_g_aux = 0 + Q_w_d_aux = 0 + Q_w_s_aux = 0 + Q_w_ce_aux = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + Q_w_outg = 0 + Q_h_outg_i = 0 + W_sol_aux = 0 + system_type = 3 + '====================================2011.07.21 추가 + Q_w_CHP = 0 + Q_w_f_CHP = 0 + '====================================2011.07.21 추가 + + '======================2013.01.13 추가 + Q_w_f_hp = 0 + Q_wp_outg = 0 + Q_w_g_hp_aux = 0 + '======================2013.01.13 추가 + + '====================================2010.2.21 수정 + 'd_Nutz_mth = d_mth ' 연중가동으로 계산 추후 검토 + '====================================2010.2.21 수정 + + Dim Mon As String = "M" & Format(i_count_month, "00") + + '태양광 시스템 + Dim Calc_태양 As New CRenewable : Calc_태양.Calc_PhotovoltaicSystem_EN(i_count_month, d_mth) + + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0'", "code") + '=====================2010.2.21 수정 + d_op_max_mth = 0 + '=====================2010.2.21 수정 + + If DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "' and code <> '0'").GetUpperBound(0) <> -1 Then '//급탕생산기기로 지정되어있는가 '//존에서 이 난방기기가 사용되었는가? ' Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + Q_w_b = 0 + Q_w_s = 0 + Q_w_d = 0 + Q_w_outg_i = 0 + Q_w_g_i = 0 + W_sol_aux_m = 0 + t_h = 0 + d_op_max_mth = 0 + Q_w_ce_aux = 0 + Q_w_d_aux = 0 + Q_w_s_aux = 0 + Q_w_g_aux = 0 + 'W_sol_aux_m = 0 + + If Dr난방.열생산기기방식.Trim = "전기보일러" Then + Q_w_b = 0 + End If + ' Dim Dr존 As DS.tbl_zoneRow '//여기존 할당부분은엑셀하고 다시 비교해야할듯 하다 이존은 아래쪽에 프로시져 넘길떄 사용한다. + + '//현재난방기기를 급탕생산기기로 사용하는 존을 가져와서 누적시킴 + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "' and code <> '0'", "code") + 'MsgBox(Mon & "/" & Dr존.code) + + Dim Drow결과() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr존.code & "'"), DSR.월별에너지분석Row()) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & Dr존.code & "'"), DSR.최대냉난방부하Row()) + Q_w_b = Q_w_b + TOSG(Drow결과(0).급탕요구량) ' Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) '//급탕에너지요구량 + + '===================================================================================2010.2.21 수정 + Dim Dr프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "' and code <> '0'", "code"), DS.tbl_profileRow()) + If Dr프로필.GetUpperBound(0) = -1 Then + Log.AppendLine(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + 'MsgBox(Dr존.설명 & "존의 프로필코드(" & Dr존.프로필 & ") 가 존재하지않습니다") + Else + d_op_mth = CInt(TOSG(Dr프로필(0)("day" & Format(i_count_month, "00")))) ' Worksheets("설정조건").Range("월간사용일수1").Offset(i_count_month, i_count_profile) + End If + + If t_h < Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth Then + t_h = Result.최대부하.Item(Dr존.code).일일난방최대가동시간 * d_op_mth + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + Next + + '====================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '====================================2010.2.21 수정 + + If Dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + If Dr난방.배관길이 <> "" AndAlso Dr난방.배관길이 <> "0" Then '//입력치 + L_i = TOSG(Dr난방.배관길이) * 0.255 + Else + L_G = TOSG(Dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(Dr난방.건물넓이) 'Dr난방.건물넓이 + n_G = TOSG(Dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(Dr난방.층고) 'Worksheets("난방기기").Range("급탕분배건물길이1").Offset(3, i_count_boiler - 1) + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("배관망유형='급탕' and 생산기기구분='" & Dr난방.code & "'", "code") + L_i += TOSG(Dr난방분배.배관구간길이) * TOSG(Dr난방분배.열관류율) + Next + 'For i_count_pipe = 1 To Range("배관구간").Columns.Count + ' If Worksheets("난방분배시스템").Range("분배생산기기1").Offset(2, i_count_pipe - 1) = "급탕" Then + ' If Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) = Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + ' L_i = L_i + Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) * Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + ' End If + ' End If + 'Next + '=================================================2010. 02. 11 수정 + + If Dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + + Else + + theta_g_m = 40 '2013.01.12 추가 개별식의 경우 비순환시스템으로 적용 + + End If + + + Select Case Dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(Dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = TOSG((55 - theta_i) / 45 * d_Nutz_mth * q_B_S) '(3.2.9-29) : 전기가열식 저탕조 + + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(Dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = TOSG((55 - theta_i) / 50 * d_Nutz_mth * q_B_S) '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(Dr난방.축열제척) 'Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + ' q_B_S = 'CSng(0.8 + 2 * V_s ^ 0.77) '(3.2.9-18) 여기맞아요? 예 0. + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '===================================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + + + Q_w_outg = Q_w_outg + Q_w_outg_i + + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(급탕) 시스템 + 'If Dr난방.설명.ToUpper.IndexOf("B-1") <> -1 Then + ' MsgBox(Dr난방.code) + 'End If + Dim CRenew As New CRenewable + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템 <> "0" Then 'Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code <> '0' and code='" & Dr난방.연결된시스템 & "'")(0), DS.tbl_newRow) + ' If dr신재생.기기종류.Trim.IndexOf("태") <> -1 Then + Select Case dr신재생.기기종류.Trim + Case "태양열" '//태양열 + If dr신재생.태양열종류 = "급탕" Then + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, dr신재생.code, i_count_month, d_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m + End If + '=======================================================================2011.007.19 추가 + Case "열병합" '//열병합 + Select Case dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(dr신재생, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_Oil = use_Oil + Q_w_f_CHP + Q_w_f = Q_w_f + Q_w_f_CHP '============================2013.01.13 수정 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LNG = use_LNG + Q_w_f_CHP + Q_w_f = Q_w_f + Q_w_f_CHP '============================2013.01.13 수정 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(dr신재생, i_count_month, Q_w_outg_i, t_h, Q_w_CHP, Q_w_f_CHP) + Q_w_outg = Q_w_outg - Q_w_CHP + Q_w_outg_i = Q_w_outg_i - Q_w_CHP + use_LPG = use_LPG + Q_w_f_CHP + Q_w_f = Q_w_f + Q_w_f_CHP '============================2013.01.13 수정 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, dr신재생.가동연료) + End Select + '=======================================================================2011.007.19 추가 + + Case "지열" '//지열 + Select Case dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_Elec = use_Elec + Q_w_f_hp + Q_w_g_hp_aux + Q_w_f = Q_w_f + Q_w_f_hp + Q_w_g_hp_aux '============================2010.04.17 추가 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LNG = use_LNG + Q_w_f_hp + use_Elec = use_Elec + Q_w_g_hp_aux + Q_w_f = Q_w_f + Q_w_f_hp + Q_w_g_hp_aux '============================2010.04.17 추가 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, 3, dr신재생, Q_w_outg_i, i_count_month, d_op_max_mth, t_h, theta_g_m, theta_i, Q_wp_outg, Q_w_f_hp, Q_w_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_w_outg = Q_w_outg - Q_wp_outg + Q_w_outg_i = Q_w_outg_i - Q_wp_outg + use_LPG = use_LPG + Q_w_f_hp + use_Elec = use_Elec + Q_w_g_hp_aux + Q_w_f = Q_w_f + Q_w_f_hp + Q_w_g_hp_aux '============================2010.04.17 추가 + End Select + + + + End Select + 'End If + End If + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + If Dr난방.열생산기기방식 = "히트펌프" Then + + Q_dot_HP_waterheating = TOSG(Dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(Dr난방.히트난방정격7) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(Dr난방.히트난방정격10) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) + L_HP_waterheating = TOSG(Dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 17 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 17 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 17 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 17 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_waterheating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.002)) + Else + If Q_dot_HP_waterheating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_waterheating * 0.0014)) + End If + End If + + Q_w_outg = Q_w_outg - Q_w_outg_i '===================================================2013.01.16 추가 + + + If Q_w_outg_i / (Q_dot_HP_waterheating * t_h) > 1 Or Dr난방.히트펌프시스템종류 = "실내외분리시스템" Then + Q_w_outg_i = Q_w_outg_i / COP_HP_total + Else + Q_w_outg_i = Q_w_outg_i / (COP_HP_total * (Q_w_outg_i / (Q_dot_HP_waterheating * t_h) * 0.5 + 0.5)) + End If + + Q_w_outg = Q_w_outg + Q_w_outg_i '===================================================2013.01.16 추가 + + End If + + '=========================================================================================================================2013.01.13 히트펌프 위치 수정 + + + + + + + + + + + + + Q_dot_N = TOSG(IIf(Dr난방.보일러정격출력 = "", 0, Dr난방.보일러정격출력)) 'Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + eta_k_100 = TOSG(IIf(Dr난방.정격보일러효율 = "", 0, TOSG(Dr난방.정격보일러효율))) / 100 ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + Q_w_g_100 = 0 + Else + Q_w_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_w_outg_i / d_Nutz_mth '(3.2.9-58) + End If + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Select Case Dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "기름보일러" '기름보일러" + q_B_70 = TOSG((8.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온가스보일러" '저온가스보일러" + q_B_70 = TOSG((4.5 * Q_dot_N ^ (-0.4)) / 100) + + Case "저온기름보일러" '저온기름보일러" + q_B_70 = TOSG((4.25 * Q_dot_N ^ (-0.4)) / 100) + + Case "콘덴싱보일러" '콘덴싱보일러" + q_B_70 = TOSG((4 * Q_dot_N ^ (-0.4)) / 100) + Case Else + MsgBox("난방.보일러방식을 알수없습니다", MsgBoxStyle.Critical, "값=" & Dr난방.보일러방식) + End Select + + q_B_theta = q_B_70 * (theta_g_m - theta_i) / (70 - 20) '(3.2.9-60) + Q_B_w = q_B_theta * Q_dot_N / eta_k_100 * (t_Nutz_d - t_w_100) * f_Hs_Hi '(3.2.9-59) + + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + If d_mth = 0 Then + d_h_rB = 0 + Else + d_h_rB = d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24)) '(3.2.7-21) + End If + + + ':d_h_rB > d_Nutz_mth 일 경우 + If d_h_rB > d_Nutz_mth Then + d_Nutz_mth = CInt(d_h_rB) + End If + + Q_w_g = Q_w_g + Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB) '(3.2.9-57) + Q_w_g_i = Q_w_g_100 * d_Nutz_mth + Q_B_w * (d_Nutz_mth - d_h_rB) + Else + + If Dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + If Dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case Dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If Dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case Dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(Dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_w_g = Q_w_g + H_DS * (theta_DS - theta_i) + use_DH = use_DH + H_DS * (theta_DS - theta_i) + + End If + + End If + + ': 급탕 전기 보조에너지 시작 + + Q_w_ce_aux = 0 + + P_Pump_w = TOSG(Dr난방.펌프동력급탕) ' Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case Dr난방.펌프제어.Trim 'Worksheets("난방기기").Range("급탕펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.94 + Case "제어" '제어" + c_p1 = 0.5 + c_p2 = 0.63 + Case "(없음)" + c_p1 = 0 + c_p2 = 0 + Case Else + MsgBox("[난방기가: " & Dr난방.code & "] 알수없는 펌프제어방식(" & Dr난방.펌프제어.Trim & ")", MsgBoxStyle.Critical, Dr난방.펌프제어) + + + End Select + + Q_w_d_aux = Q_w_d_aux + P_Pump_w / 1000 * d_Nutz_mth * t_Nutz_d * (c_p1 + c_p2) '(3.2.9-15) + + Select Case Dr난방.축열탱크방식.Trim ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "가스가열식" '가스가열식" + 'Q_w_s_aux = Q_w_s_aux + 0 + + Case "간접가열식" '간접가열식" + + '=================================================================================2010.10.19 추가 + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "보일러" + t_P = TOSG(Q_w_outg_i * 1.1 / Q_dot_N) '(3.2.9-28) + Case "지역난방" + t_P = TOSG(Q_w_outg_i * 1.1 / TOSG(Dr난방.열교환기정격출력)) + Case "전기보일러" + t_P = 1 + Case "히트펌프" + t_P = 1 + End Select + '=================================================================================2010.10.19 추가 + Q_w_s_aux = TOSG(Q_w_s_aux + 0.001 * P_Pump_w * t_P) '(3.2.9-27) + + End Select + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case Dr난방.보일러방식.Trim 'Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-77) + + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-78) + + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) '(3.2.9-79) + + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-80) + + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) '(3.2.9-81) + + End Select + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + End If + + Q_w_g_aux = Q_w_g_aux + P_aux_100 * t_w_100 * d_Nutz_mth '+ P_aux_SB * (24 - t_w_100) * (d_Nutz_mth - d_h_rB) '(3.2.9-7) + + End If + + + + If Dr난방.열생산기기방식 = "보일러" Then ' Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case Dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + Q_w_outg_i + Q_w_g_i + + Case "천연가스" '천연가스" + use_LNG = use_LNG + Q_w_outg_i + Q_w_g_i + + Case "액화가스" '액화가스" + use_LPG = use_LPG + Q_w_outg_i + Q_w_g_i + + End Select + Else + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + Case "지역난방" '지역난방" + use_DH = use_DH + Q_w_outg_i + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + Q_w_outg_i + (Q_w_outg_i * 0.09) '2011.03.08 개별전기보일러 생산손실을 내부 생산식저장으로 설정 + + '====================================================================================2010.03.14 추가 + Case "히트펌프" + + Select Case Dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + Q_w_outg_i + Q_w_g_i + Case "천연가스" + use_LNG = use_LNG + Q_w_outg_i + Q_w_g_i + Case "액화가스" + use_LPG = use_LPG + Q_w_outg_i + Q_w_g_i + End Select + '====================================================================================2010.03.14 추가 + + End Select + + End If + + use_Elec = use_Elec + Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux_m + Q_w_aux = Q_w_aux + Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux '급탕보조에너지소요량 (3.2.9-7) 2011.03.23 추가 + End If + + Next + + + Q_w_f = Q_w_f + Q_w_outg + Q_w_g ' - Q_w_reg '(3.2.9-5) 급탕에너지소요량 + 'Q_w_aux = Q_w_ce_aux + Q_w_d_aux + Q_w_s_aux + Q_w_g_aux + W_sol_aux '급탕보조에너지소요량 (3.2.9-7) + + Result.E소요량(i_count_month).급탕 = Q_w_f + Result.E소요량(i_count_month).급탕보조 = Q_w_aux + + '//열원별에너지소요량 - 급탕에너지소요량 + Result.일차E소요량(i_count_month).급탕등유 = use_Oil + + Result.일차E소요량(i_count_month).급탕LNG = use_LNG + Result.일차E소요량(i_count_month).급탕LPG = use_LPG + Result.일차E소요량(i_count_month).급탕지역 = use_DH + Result.일차E소요량(i_count_month).급탕전력 = use_Elec + End Sub + + Public Overridable Sub Calc_HeatingSystem(ByVal i_count_month As Integer, ByVal theta_e As Decimal) + + '//i_ce As Integer 제거함 사용안됨 + Dim i As Integer, i_count_beta As Integer, i_count_zone As Integer, d_Nutz_mth As Integer + Dim Q_h_f As Decimal, Q_h_outg As Decimal, Q_h_g As Decimal, Q_h_reg As Decimal, Q_dot_N As Decimal + Dim Q_h_b As Decimal, Q_h_b_i As Decimal, Q_h_ce As Decimal, Q_h_ce_i As Decimal, Q_dot_h_max As Decimal, Q_h_d As Decimal, Q_h_s As Decimal + Dim f_hydr As Decimal, f_int As Decimal, f_Radiant As Decimal, L_G As Decimal, B_G As Decimal, n_G As Decimal, h_G As Decimal, L_i As Decimal, U_i As Decimal, f_verbindung As Decimal + Dim beta_k_pl As Decimal, beta_k_100 As Decimal, n As Decimal, d_Nutz_a As Integer, t_h_op_d As Integer, theta_i As Decimal, V_s As Decimal, n_beta As Integer + Dim theta_NA_Grenz As Decimal, theta_WA_Grenz As Decimal, theta_i_h_soll As Decimal, theta_VA As Decimal, theta_RA As Decimal, theta_e_min As Decimal + Dim e As Decimal, f As Decimal, q_B_theta As Decimal, q_B_70 As Decimal, Q_V_g_100 As Decimal, Q_V_g_pl As Decimal, Q_h_g_v_i As Decimal + Dim Q_h_ce_aux As Decimal, Q_h_d_aux As Decimal, Q_h_d_aux_i As Decimal, beta_h_s As Decimal, Q_h_s_aux As Decimal, Q_h_g_aux As Decimal, P_h_g_aux As Decimal, P_aux_100 As Decimal, P_aux_pl As Decimal, P_aux_SB As Decimal + Dim D_DS As Decimal, Psi_DS As Decimal, H_DS As Decimal, theta_prim_DA As Decimal + Dim Q_w_b As Decimal, Q_w_d As Decimal, Q_w_d_i As Decimal, theta_g_m As Decimal, q_B_S As Decimal, Q_w_s As Decimal, Q_w_outg_i As Decimal, Q_w_outg As Decimal + Dim eta_L As Decimal, eta_B As Decimal, eta_C As Decimal, eta_h_ce As Decimal, beta_h_d As Decimal, beta_h As Decimal + Dim theta_VL_m_beta_h_d As Decimal, theta_RL_m_beta_h_d As Decimal, theta_HK_m_beta_h_d As Decimal, eta_k_100 As Decimal, eta_k_pl As Decimal + Dim f_L_WA As Decimal, d_h_rB As Decimal, f_L_NA As Decimal, t_h_rL_T As Decimal, t_h_rL As Decimal, t_Nutz_d As Decimal, t_w_100 As Decimal + Dim Q_w_ce As Decimal, Q_dot_d_in As Decimal, Q_dot_B_h As Decimal, Q_h_g_i As Decimal, Q_h_outg_i As Decimal + Dim theta_HK_m_beta_h_g As Decimal, f_Hs_Hi As Decimal, theta_prim_DS As Decimal, B_DS As Decimal, theta_DS As Decimal + Dim P_Pump As Decimal, c_p1 As Decimal, c_p2 As Decimal, f_P_A As Decimal, t_P As Decimal + Dim P_C As Decimal, P_V As Decimal, P_P As Decimal, n_V As Decimal, n_P As Decimal, Q_V_P As Decimal, Q_c As Decimal, Q_h_aux As Decimal + Dim t_h_max As Integer, t_h As Integer + Dim use_Oil As Decimal, use_LNG As Decimal, use_LPG As Decimal, use_Elec As Decimal, use_DH As Decimal + Dim i_count_renewable As Integer + Dim Q_h_CHP As Decimal, Q_h_f_CHP As Decimal + Dim i_HeatCool As Integer, Q_hp_outg As Decimal, Q_h_f_hp As Decimal, Q_h_g_hp_aux As Decimal + Dim Q_W_sol_out_m As Decimal, Q_H_sol_out_m As Decimal, W_sol_aux_m As Decimal, W_sol_aux As Decimal + Dim system_type As Integer + Dim COP_HP_7 As Decimal, COP_HP_10 As Decimal, COP_HP_total As Decimal, Q_dot_HP_heating As Decimal, L_HP_heating As Decimal '=======================2010.03.14 추가 + + '==================================2010.2.21 수정 + Dim d_op_mth As Integer + Dim d_op_max_mth As Integer + 'Dim i_count_profile As Integer + d_op_max_mth = 0 + '==================================2010.2.21 수정 + + + Dim priod_value As Single = 0 + Dim age As Single '//준공연도에 의한 경년변화값 + Dim age_heating As Single + For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + priod_value = CSng(DRpriod.priod) + Next + If priod_value > 20 Then priod_value = 20 + age = (1 - 0.01) ^ priod_value + age_heating = (1 - 0.005) ^ priod_value + + + + + theta_NA_Grenz = 10 + theta_WA_Grenz = 10 + beta_k_pl = 0.3 + beta_k_100 = 1 + f_verbindung = 1.2 '동일공간의 경우임, 타공간의 경우 (3.2.7-36) 참조 + f_hydr = 1 '리버스리턴 계수로 지금은 1로 적용, 추후 검토 + f_int = 1 ' 간헐(0.97-0.98), 지속 1 우선 1로 적용, 추후 검토 + f_verbindung = 1.2 + theta_i_h_soll = 20 + theta_i = 13 ' 비난방공간으로 가정 + n = 1.33 '라디에이터 1.33, 바닥난방 1.1, 우선 라디에이터 적용 + theta_e_min = -11.3 + d_Nutz_a = 365 '연간이용일수 우선 연중가동으로 적용 + Q_h_outg = 0 + 'd_Nutz_mth = d_mth ' 연중가동으로 계산 추후 검토 '================2010.2.21 수정 + Q_h_g = 0 + Q_h_ce_aux = 0 + Q_h_d_aux = 0 + Q_h_s_aux = 0 + Q_h_g_aux = 0 + use_Oil = 0 + use_LNG = 0 + use_LPG = 0 + use_Elec = 0 + use_DH = 0 + Q_h_outg = 0 + Q_w_outg = 0 + Q_h_CHP = 0 + Q_h_f_CHP = 0 + i_HeatCool = 1 + Q_hp_outg = 0 + Q_h_f_hp = 0 + Q_h_g_hp_aux = 0 + W_sol_aux = 0 + system_type = 1 + Q_h_f = 0 '===============================2010.04.17 추가 + t_Nutz_d = 24 '==========================2010.04.24 추가 + + Dim Mon As String = "M" & Format(i_count_month, "00") + For Each Dr난방 As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code<>'0'", "code") + + '//이 난방기기가 존전체내역에서 사용이되엇나? + If DSET.tbl_zone.Select("(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') ").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(4, i_count_boiler - 1) = "예" Then + '"(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') " + Q_h_b = 0 + Q_h_ce = 0 + Q_dot_h_max = 0 + t_h_max = 0 + t_h = 0 '원래 식은 t_h = t_h_op + t_h_we 월간 난방 시간 + t_h_op_d = 0 + Q_h_d = 0 + Q_h_s = 0 + n_beta = 0 ' 순차가동시 full 부하 대수 + Q_h_g_v_i = 0 + '==================================2010.2.21 수정 + d_op_max_mth = 0 + d_Nutz_mth = 0 + '==================================2010.2.21 수정 + + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("(공조난방생산기기 = '" & Dr난방.code & "' and 냉난방공조 <> '기능없음' and (외기부하처리여부 = '예' or 냉난방공조 = '냉난방' or 냉난방공조 = '난방') ) or (열생산난방생산기기='" & Dr난방.code & "' and 냉난방방식 <> '냉방' and 냉난방방식 <> '기능없음') and code <> '0'") ' For i_count_zone = 1 To DSET.tbl_zone.Rows.Count + + '//지금 사용하는 존이 공조에의한것인지 아닌지를 판단 + Dim 판단1 As Boolean = False + Dim 판단2 As Boolean = False + If DR존.열생산난방생산기기 = Dr난방.code Then 판단1 = True + If DR존.공조난방생산기기 = Dr난방.code Then 판단2 = True + + '//다시 생각을... + + 'If Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) <> "" And Worksheets("입력존").Range("입력난방생산기기1").Offset(0, i_count_zone - 1) = Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + ' If DR존.열생산난방생산기기 = Dr난방.code Then ' Worksheets("난방기기").Range("난방생산기기1").Offset(0, i_count_boiler - 1) Then + '=========================================================================================================================================================2010.2.21 수정 + '1105 소스백업 If DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방" Then ' Worksheets("입력존").Range("공조존2").Offset(0, i_count_zone - 1) <> "냉난방" Then + If 판단1 And (DR존.냉난방방식 = "냉난방" OrElse DR존.냉난방방식 = "난방") Then + Dim Dr월에너지 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("Zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then + Q_h_b_i = TOSG(Dr월에너지.난방요구량열) + Else + Q_h_b_i = TOSG(Dr월에너지.난방요구량열 + Dr월에너지.난방요구량공조) ' Sheets("" & i_count_month & "").Cells(7, 7 + i_count_zone) + End If + '=========================================================================================================================================================2010.2.21 수정 + Q_h_b = Q_h_b + Q_h_b_i + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + + '===================================================================================2010.2.21 수정 + Dim DR프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + + + If t_h > t_h_max Then + t_h_max = t_h + End If + + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then + t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + End If + 'i_ce = 0 + + + + '//아래 if 문이 모두 공급기기 데이터를 가지고 게산을 하고잇네요 이 부분을 전부 실행못하게 해야합니다. + If DR존.냉난방열공급시스템 = "0" Then + '//0일떄 특정 변수를 초기화(=0) 하려면 이곳에 입력하세요. + Else + + Dim Dr공급 As DS.tbl_kongkubRow = CType(DSET.tbl_kongkub.Select("code='" & DR존.냉난방열공급시스템 & "' and code <> '0'")(0), DS.tbl_kongkubRow) + + If (DR존.천장고 = "" OrElse TOSG(DR존.천장고) < 4) Then ' Worksheets("입력존").Range("천장고1").Offset(0, i_count_zone - 1) < 4 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + eta_L = (0.93 + 0.95) / 2 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + eta_L = 1 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.78 + Case "on/off제어" + eta_C = 0.88 + Case "PI제어" 'PI제어" + eta_C = 0.95 + End Select + Select Case Dr공급.바닥난방열건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥열시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "바닥난방(전기)" '바닥난방(전기)" + eta_L = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.91 + Case "on/off제어" + eta_C = 0.93 '2011.05.03 추가, 우선 on/off 제어와 PI제어를 같게 적용, 추후검토 + Case "PI제어" 'PI제어" + eta_C = 0.93 + End Select + Select Case Dr공급.바닥난방전기건축부위.Trim ' Worksheets("난방공급시스템").Range("바닥전기시스템1").Offset(0, i_ce - 1) + Case "습식" '습식" + eta_B = (0.93 + 0.95) / 2 + Case "반건식" '반건식" + eta_B = (0.95 + 0.95) / 2 + Case "건식" '건식" + eta_B = (0.98 + 0.95) / 2 + End Select + Case "전기난방" '전기난방" + eta_L = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + eta_B = 2 ' eta_h_ce 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Select Case Dr공급.전기난방제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" + eta_C = -1.1235955 '2011.05.03 추가, 우선 on/off 제어와 비제어를 같게 적용, 추후검토 + Case "on/off제어" + eta_C = -1.1235955 ' eta_h_ce 0.89 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + Case "PI제어" 'PI제어" + eta_C = -1.07527 ' eta_h_ce 0.93 값을 맞추기 위해서 임의로 설정한 값(전기난방은 eta_h_ce 값이 바로 정해지기때문) + End Select + End Select + f_Radiant = 1 + Else + If TOSG(DR존.천장고) >= 4 And TOSG(DR존.천장고) < 10 Then + + Select Case Dr공급.열공급시스템.Trim ' Dr공급.열공급시스템 + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.9 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim 'Dr공급.노출형제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방열제어.Trim ' Dr공급.바닥난방열제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.98 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.935 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim ' Dr공급.바닥난방전기제어 + Case "비제어" '비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" 'PI제어" + eta_C = 0.97 + End Select + End Select + Else + + + Select Case Dr공급.열공급시스템.Trim + Case "노출형방열기(열)" '노출형방열기(열)" + f_Radiant = 1 + eta_L = 0.72 ' 우선 15m 기준 설정 + eta_B = 1 + Select Case Dr공급.노출형제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + Case "바닥난방(열)" '바닥난방(열)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방열제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "바닥난방(전기)" '바닥난방(전기)" + f_Radiant = 0.85 + eta_L = 0.92 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + eta_B = 0.95 + Case "전기난방" '전기난방" + f_Radiant = 1 + eta_L = 0.78 + eta_B = 1 + Select Case Dr공급.바닥난방전기제어.Trim + Case "비제어" + eta_C = 0.8 + Case "on/off제어" + eta_C = 0.93 + Case "PI제어" + eta_C = 0.97 + End Select + End Select + + End If + + End If + + eta_h_ce = 1 / (4 - (eta_L + eta_C + eta_B)) '(3.27-28) + + Q_h_ce_i = (f_Radiant * f_int * f_hydr / eta_h_ce - 1) * Q_h_b_i '(3.2.7-27) + Q_h_ce = Q_h_ce + Q_h_ce_i + + End If + End If '//판단1 //난방생산기기 완료 + + If DR존.냉난방공조 = "냉난방" OrElse DR존.냉난방공조 = "난방" OrElse ((DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예") Then ' 공조기 사용에 따른 난방에너지 + '=========================================================================================================================================================2010.2.21 수정 + + If 판단2 Then + 'MsgBox("열생산기기는 있고 공조생산기기는 공백상태의 검토 필요") + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + Q_dot_h_max = TOSG(Q_dot_h_max + TOSG(Drow최대(0).최대난방기기부하)) ' Worksheets("0").Range("최대난방부하1").Offset(0, i_count_zone - 1) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + If t_h > t_h_max Then + t_h_max = t_h + End If + If t_h_op_d < TOSG(Drow최대(0).난방최대가동시간) Then + t_h_op_d = CInt(TOSG(Drow최대(0).난방최대가동시간)) ' Sheets("0").Range("최대난방부하1").Offset(2, i_count_zone - 1) + End If + + Dim 월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + Q_h_b_i = TOSG(월에너지분석.난방요구량공조) + Else + Q_h_b_i = TOSG(월에너지분석.공조요구량난방) ' Sheets("" & i_count_month & "").Cells(19, 7 + i_count_zone) + End If + + Q_h_b = Q_h_b + Q_h_b_i + 'Q_h_ce_i = 0 '공조기는 0으로 설정 '==============================================================2010.03.20 수정 공조기는 0으로 설정한 것을 수정 + If (DR존.냉난방공조 = "환기" OrElse DR존.냉난방공조 = "냉방") And DR존.외기부하처리여부 = "예" Then '// 2010.11.19 추가 + + Else + If TOSG(DR존.천장고p) >= 4 Then + If TOSG(DR존.천장고p) >= 20 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.71 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 15 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.78 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 12 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.84 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 10 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.87 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 8 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.91 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + If TOSG(DR존.천장고p) >= 6 Then + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.96 + 0.97 + 1))) - 1) * Q_h_b_i) + Else + Q_h_ce_i = TOSG((1 / (1 / (4 - (0.99 + 0.97 + 1))) - 1) * Q_h_b_i) + End If + End If + End If + End If + End If + End If + End If + + '===============================================================================================2010.03.20 수정 + + Q_h_ce = Q_h_ce + Q_h_ce_i + End If + + + + + End If + '=========================================================================================================================================================2010.2.21 수정 + + + End If + '//공조 난방기기 완료 ㅋㅋ 끝 + ' End If + + Next + + '==================================2010.2.21 수정 + d_Nutz_mth = d_op_max_mth + '==================================2010.2.21 수정 + 'beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + + 'theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + 'theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + 'theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + 'theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + 'theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + + 'f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + 'd_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + + 'f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + 't_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + 't_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + + + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + If Dr난방.열생산기기방식 = "히트펌프" Then + If Dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(Dr난방.히트난방용량) * TOSG(Dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(Dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + + + beta_h_d = (Q_h_b + Q_h_ce) / (Q_dot_h_max * t_h_max) ' t_h 가 t_h_max 일 것으로 추정 추후 검토 + + If beta_h_d > 1 Then beta_h_d = 1 + + theta_VA = TOSG(Dr난방.급수온도) ' Worksheets("난방기기").Range("난방기기급수온도1").Offset(0, i_count_boiler - 1) + theta_RA = TOSG(Dr난방.환수온도) ' Worksheets("난방기기").Range("난방기기환수온도1").Offset(0, i_count_boiler - 1) + + theta_VL_m_beta_h_d = TOSG((theta_VA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.13) + theta_RL_m_beta_h_d = TOSG((theta_RA - theta_i_h_soll) * beta_h_d ^ (1 / n) + theta_i_h_soll) '(3.2.7.14) + + + theta_HK_m_beta_h_d = TOSG(0.5 * (theta_VL_m_beta_h_d + theta_RL_m_beta_h_d)) + + + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + d_h_rB = TOSG(d_op_max_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_max_mth * 24))) '(3.2.7-21) '================== d_op_max_mth 2010.2.21 수정'CSng(d_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_mth * 24))) '(3.2.7-21) + + f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + t_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + t_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + '===================================================================2010.11.04 위치수정 및 추가 '2011.03.16 다시 수정 + + + + '=================================================2010. 02. 11 수정 + For Each Dr난방분배 As DS.tbl_nbunbaeRow In DSET.tbl_nbunbae.Select("생산기기구분='" & Dr난방.code & "' and code <> '0'", "code") + 'If Dr난방.code = Dr난방분배.생산기기구분 Then ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(0, i_count_pipe - 1) Then + + Select Case Dr난방분배.표준치적용.Trim ' Worksheets("난방분배시스템").Range("분배생산기기1").Offset(1, i_count_pipe - 1) + Case "상세입력" '상세입력" + L_i = TOSG(Dr난방분배.배관구간길이) '= Worksheets("난방분배시스템").Range("배관구간방식1").Offset(1, i_count_pipe - 1) + U_i = TOSG(Dr난방분배.열관류율) ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(2, i_count_pipe - 1) + Select Case Dr난방분배.배관설치장소.Trim ' Worksheets("난방분배시스템").Range("배관구간방식1").Offset(3, i_count_pipe - 1) + Case "표준난방존" '표준난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 + Case "표준비난방존" '표준비난방존" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - 13) * L_i * t_h_rL) / 1000 + Case "외부" '외부" + Q_h_d = (Q_h_d + U_i * (theta_HK_m_beta_h_d - theta_e) * L_i * t_h_rL) / 1000 + End Select + Case "표준치조건" '표준치조건" + L_G = TOSG(Dr난방분배.건물길이x) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(0, i_count_pipe - 1) + B_G = TOSG(Dr난방분배.건물길이y) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(1, i_count_pipe - 1) + n_G = TOSG(Dr난방분배.층수) 'Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(2, i_count_pipe - 1) + h_G = TOSG(Dr난방분배.층고) ' Worksheets("난방분배시스템").Range("난방분배건물길이1").Offset(3, i_count_pipe - 1) + If Dr난방.배관망유형 = "이중배관" Then ' then Worksheets("난방기기").Range("난방기기배관망1").Offset(0, i_count_boiler - 1) = "이중배관" Then + If Dr난방분배.지관장소 = "외부" Then ' then외부" Then + L_i = TOSG((2 * L_G + 0.01625 * L_G * B_G * B_G) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '외부배관난방적용 + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G) * 0.255 + (0.55 * L_G * B_G * n_G) * 0.255) '내부배관난방적용 + End If + Else + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + End If + Q_h_d = (Q_h_d + (theta_HK_m_beta_h_d - theta_i_h_soll) * L_i * t_h_rL) / 1000 '(3.2.7-36) 'theta_i를 theta_i_h_soll 로 수정 추후 검토 ' U_i는 L_i에 포함 + Case Else + MsgBox("표준치적용을 알수없습니다", MsgBoxStyle.Critical, Dr난방분배.표준치적용) + End Select + 'End If + Next + + '=================================================2010. 02. 11 수정 + If Dr난방.축열탱크방식 <> "축열탱크없음" Then ' Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) <> "축열탱크없음" Then + V_s = TOSG(Dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.4 + 0.14 * V_s ^ 0.45) '(3.2.7-43) + Q_h_s = f_verbindung * (theta_VA - theta_i) / 45 * d_op_max_mth * q_B_S '(3.2.7-41) theta_h_s 는 theta_VA 로 설정'================== d_op_max_mth 2010.2.21 수정 + End If + + '===================================================================================================================2010.2.21 수정 + Q_h_outg_i = Q_h_b + Q_h_ce + Q_h_d + Q_h_s '(3.2.7-1) + + If Dr난방.열생산기기방식 = "전기보일러" Then + Q_h_outg_i = Q_h_outg_i / (TOSG(Dr난방.정격보일러효율) * age_heating / 100) + End If + + + + + Q_h_outg = Q_h_outg + Q_h_outg_i '(3.2.7-1) + '===================================================================================================================2010.2.21 수정 + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + '//아래는 급탕생산기기로 지정되어잇는가? + If DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "'").GetUpperBound(0) <> -1 Then 'If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + Q_w_b = 0 + For Each Dr입력존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0' and 열생산급탕생산기기='" & Dr난방.code & "'", "code") + Dim Drow최대() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Dr입력존.code & "'"), DSR.최대냉난방부하Row()) + Dim Dr월에너지분석 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & Dr입력존.code & "'")(0), DSR.월별에너지분석Row) + + Q_w_b = TOSG(Q_w_b + TOSG(Dr월에너지분석.급탕요구량)) 'Sheets("" & i_count_month & "").Cells(15, 7 + i_count_zone) + '===================================================================================2010.2.21 수정 + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr입력존.프로필 & "'")(0), DS.tbl_profileRow) + + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(Dr프로필("day" & Format(i_count_month, "00")))) + End If + + If t_h < TOSG(Drow최대(0).난방최대가동시간) * d_op_mth Then + t_h = CInt(TOSG(Drow최대(0).난방최대가동시간) * d_op_mth) + End If + If d_op_max_mth < d_op_mth Then + d_op_max_mth = d_op_mth + End If + '===================================================================================2010.2.21 수정 + Next + End If + End If + + + ' 여기에 신재생에너지를 산출하고 Q_h_outg 와 Q_h_outg_i 에서 신재생에너지를 차감해야 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '신재생 및 열병합 시스템 + Dim CRenew As New CRenewable + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템.Trim <> "" AndAlso Dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & Dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + '//식은 맞는듯한게 값이 이상하게 들었네요... 뭘해도 되도록 수정해버리죠 ㅋㅋ + + + Select Case Dr신재생.기기종류.Trim ' Dr난방.연결된시스템.Trim + Case "지열" '//지열 + Select Case Dr신재생.가동연료.Trim + Case "전기" '전기" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_Elec = use_Elec + Q_h_f_hp + Q_h_g_hp_aux + Q_h_f = Q_h_f + Q_h_f_hp + Q_h_g_hp_aux '============================2010.04.17 추가 + Case "천연가스" '천연가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LNG = use_LNG + Q_h_f_hp + use_Elec = use_Elec + Q_h_g_hp_aux + Q_h_f = Q_h_f + Q_h_f_hp + Q_h_g_hp_aux '============================2010.04.17 추가 + '//요기맞죠 ^^? + Case "액화가스" '액화가스" + CRenew.Calc_HeatpumpSystem(system_type, i_HeatCool, Dr신재생, Q_h_outg_i, i_count_month, d_op_max_mth, t_h, theta_VA, theta_i, Q_hp_outg, Q_h_f_hp, Q_h_g_hp_aux) '=============2010.04.01 수정 Q_h_outg 를 Q_h_outg_i 로 수정 + Q_h_outg = Q_h_outg - Q_hp_outg + Q_h_outg_i = Q_h_outg_i - Q_hp_outg + use_LPG = use_LPG + Q_h_f_hp + use_Elec = use_Elec + Q_h_g_hp_aux + Q_h_f = Q_h_f + Q_h_f_hp + Q_h_g_hp_aux '============================2010.04.17 추가 + End Select + Case "열병합" '//열병합 + Select Case Dr신재생.가동연료.Trim + Case "난방유" '난방유" + CRenew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_Oil = use_Oil + Q_h_f_CHP + Q_h_f = Q_h_f + Q_h_f_CHP '============================2010.04.17 + Case "천연가스" '천연가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LNG = use_LNG + Q_h_f_CHP + Q_h_f = Q_h_f + Q_h_f_CHP '============================2010.04.17 + Case "액화가스" '액화가스" + CRenew.Calc_CogenerationSystemEN(Dr신재생, i_count_month, Q_h_outg_i, t_h, Q_h_CHP, Q_h_f_CHP) + Q_h_outg = Q_h_outg - Q_h_CHP + Q_h_outg_i = Q_h_outg_i - Q_h_CHP + use_LPG = use_LPG + Q_h_f_CHP + Q_h_f = Q_h_f + Q_h_f_CHP '============================2010.04.17 + Case Else + MsgBox("신재생에너지의 가동연료를 확인할 수 없습니다", MsgBoxStyle.Critical, Dr신재생.가동연료) + End Select + End Select + End If + + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '===========================================================================================2013.01.13 이동 + If Dr난방.열생산기기방식 = "히트펌프" Then + + Q_dot_HP_heating = TOSG(Dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + COP_HP_7 = TOSG(Dr난방.히트난방정격7) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(2, i_count_boiler - 1) + COP_HP_10 = TOSG(Dr난방.히트난방정격10) * age ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(3, i_count_boiler - 1) + L_HP_heating = TOSG(Dr난방.히트배관길이) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(4, i_count_boiler - 1) + If theta_e > 15 Then + COP_HP_total = (COP_HP_7 - COP_HP_10) / 17 * 15 + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 17 + Else + COP_HP_total = (COP_HP_7 - COP_HP_10) / 17 * theta_e + COP_HP_7 - 7 * (COP_HP_7 - COP_HP_10) / 17 + End If + + If theta_e < 7 Then + + If theta_e >= 0 Then + COP_HP_total = TOSG(COP_HP_total * ((1 - 0.86) / 7 * theta_e + 0.86)) + Else + COP_HP_total = TOSG(COP_HP_total * ((0.98 - 0.86) / 7 * (-theta_e) + 0.86)) + End If + + End If + + If Q_dot_HP_heating <= 20 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.002)) + Else + If Q_dot_HP_heating <= 100 Then + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0009)) + Else + COP_HP_total = TOSG(COP_HP_total * (1 - L_HP_heating * 0.0014)) + End If + End If + + + + Q_h_outg = Q_h_outg - Q_h_outg_i '===================================================2013.01.16 추가 + '======================================================================================================================================================2010.04.23 추가 + + + '======================================================================================================================================================2012.07.08 추가 + + If Dr난방.운전방식.Trim = "동시가동" Or Dr난방.운전방식.Trim = "순차가동" Then + Q_dot_HP_heating = Q_dot_HP_heating * TOSG(Dr난방.보일러대수) + End If + + + + + If Q_h_outg_i / (Q_dot_HP_heating * t_h_max) >= 1 Or Dr난방.히트펌프시스템종류 = "실내외분리시스템" Then '====2010.04.26 수정 + Q_h_outg_i = Q_h_outg_i / COP_HP_total + Else + If Dr난방.운전방식.Trim = "순차가동" Then + For i_count_beta = 1 To CInt(TOSG(Dr난방.보일러대수)) + If Q_h_outg_i <= (Q_dot_HP_heating * t_h_max / TOSG(Dr난방.보일러대수) * i_count_beta) Then + Q_h_outg_i = ((Q_h_outg_i / COP_HP_total) * (i_count_beta - 1) + (Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max / TOSG(Dr난방.보일러대수)) * 0.5 + 0.5)))) / i_count_beta + Exit For + End If + Next + + Else + Q_h_outg_i = Q_h_outg_i / (COP_HP_total * (Q_h_outg_i / (Q_dot_HP_heating * t_h_max) * 0.5 + 0.5)) '====2010.04.26 수정 + End If + + End If + '======================================================================================================================================================2010.04.23 추가 + Q_h_outg = Q_h_outg + Q_h_outg_i '===================================================2013.01.16 추가 + + + End If + + '===========================================================================================2013.01.13 이동 + + + + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + If DSET.tbl_zone.Select("열생산급탕생산기기='" & Dr난방.code & "' and code <> '0'").GetUpperBound(0) <> -1 Then ' If Worksheets("난방기기").Range("난방생산기기1").Offset(5, i_count_boiler - 1) = "예" Then + + If Dr난방.분배시스템방식 = "중앙식" Then ' Dr난방.분배시스템방식 = "중앙식" Then + + L_G = TOSG(Dr난방.건물길이) ' Dr난방.건물길이 + B_G = TOSG(Dr난방.건물넓이) ' Dr난방.건물넓이 + n_G = TOSG(Dr난방.열공급층수) 'Dr난방.열공급층수 + h_G = TOSG(Dr난방.층고) ' Dr난방.층고 + L_i = TOSG((2 * L_G + 0.0325 * L_G * B_G + 6) * 0.2 + (0.025 * L_G * B_G * h_G * n_G + 2 * (L_G + B_G) * n_G) * 0.255 + (0.1 * L_G * B_G * n_G) * 0.255) '단일배관난방적용 + + If Dr난방.순환유무 = "무" Then ' Worksheets("난방기기").Range("급탕분배방식1").Offset(1, i_count_boiler - 1) = "무" Then + ':중앙비순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * ((23 * 0.2 ^ (-0.2) - theta_i) * d_Nutz_mth * 24)) '(3.2.9-11) 중앙비순환시스템 L_i 에 U_i 포함 theta_w_m_비순환 는 23*0.2^(-0.2) + theta_g_m = 40 + Else + ':중앙순환시스템 + Q_w_d_i = TOSG(1 / 1000 * L_i * d_Nutz_mth * ((50 - theta_i) * t_Nutz_d + 0.5 * (23 * 0.2 ^ (-0.2) - theta_i) * (24 - t_Nutz_d))) '(3.2.9-11) 중앙순환시스템 L_i 에 U_i 포함 theta_w_m_순환 는 50도 + theta_g_m = 50 + End If + + Q_w_d = Q_w_d + Q_w_d_i '(3.2.9-12) + End If + + + Select Case Dr난방.축열탱크방식.Trim 'Worksheets("난방기기").Range("난방기기축열탱크1").Offset(0, i_count_boiler - 1) + Case "전기가열식" '전기가열식" + + ':저탕조용량(모를경우) + 'f_N = 1 / (t_Nutz_d * 1) '(3.2.9-24) t_Nutz_T 는 t_Nutz_d 로 적용, eta_Sp는 1로 적용 추후 검토 + ':심야전기가열 + 'V_s = 1.42 * Q_w_b_d * f_N * 860 / ((theta_w_m - theta_k) * eta_s) '(3.2.9-33) : 심야전기가열 + ':주간전기가열 + 'V_s = 0.67 * Q_w_b_d * f_N * 860 / ((Q_w_m - Q_k) * eta_s) '(3.2.9-34) : 주간전기가열 + V_s = TOSG(Dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + q_B_S = TOSG(0.29 + 0.019 * V_s ^ 0.8) '(3.2.9-30) :1994 이후 + Q_w_s = (55 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-29) : 전기가열식 저탕조 + + Case "가스가열식" '가스가열식" + + ':가스가열식 저탕조 + V_s = TOSG(Dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + ':1994 이후 + q_B_S = TOSG(2 + 0.033 * V_s ^ 1.1) '(3.2.9-38) + Q_w_s = (55 - theta_i) / 50 * d_Nutz_mth * q_B_S '(3.2.9-37) : 가스가열식 저탕조 + + Case "간접가열식" '간접가열식" + ':간접 가열식 저탕조 + ':태양열 복합 저탕조(UA_sb_s_a를 모를 경우) + 'q_B_S = (0.4 + 0.2 * (V_s_aux + V_s_sol) ^ 0.4) * V_s_aux / (V_s_aux + V_s_sol) '(3.2.9-26) + 'f_N = 1 / (t_Nutz_T * n_Sp) '(3.2.9-24) + ':저탕조용량(모를 경우) + 'V_s = (Q_w_b_d * f_N * 860) / ((theta_w_m - theta_k) * eta_s) '(3.2.9-23) + V_s = TOSG(Dr난방.축열제척) ' Worksheets("난방기기").Range("난방기기축열체적1").Offset(0, i_count_boiler - 1) + If V_s < 1000 Then + ':1000이하 + q_B_S = 0.8 + 0.02 * V_s ^ 0.77 '(3.2.9-18) '============================2010.04.24 수정 + Else + ':1000이상 + q_B_S = TOSG(0.39 * V_s ^ 0.35 + 0.5) '(3.2.9-19) + End If + Q_w_s = f_verbindung * (50 - theta_i) / 45 * d_Nutz_mth * q_B_S '(3.2.9-16) + + End Select + + Q_w_outg_i = Q_w_b + Q_w_ce + Q_w_d + Q_w_s '(3.2.9-4) + Q_w_outg = Q_w_outg + Q_w_outg_i + + Else + Q_w_outg_i = 0 + End If + + + ' 신재생에너지 시스템 + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + '태양열(난방+급탕) 시스템 + If Dr난방.신재생연결여부 = "시스템연결" AndAlso Dr난방.연결된시스템 <> "0" Then ' Worksheets("난방기기").Range("신재생난방연결1").Offset(0, i_count_boiler - 1) = "시스템연결" Then + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & Dr난방.연결된시스템 & "' and code <> '0'")(0), DS.tbl_newRow) + + Select Case Dr신재생.기기종류.Trim + Case "태양열" '//태양열일때 + If Dr신재생.태양열종류 = "난방+급탕" Then '난방+급탕" Then + + 'Dim Dr존 As DS.tbl_zoneRow = CType(DSET.tbl_zone.Select("code<>'0'", "code")(i_count_zone - 1), DS.tbl_zoneRow) + Calc.Renewable.Calc_ThermalSolarSystem_EN(system_type, Dr신재생.code, i_count_month, d_op_max_mth, Q_h_outg_i, Q_w_outg_i, Q_W_sol_out_m, Q_H_sol_out_m, W_sol_aux_m) + Q_h_outg = Q_h_outg - Q_H_sol_out_m + Q_h_outg_i = Q_h_outg_i - Q_H_sol_out_m + Q_w_outg = Q_w_outg - Q_W_sol_out_m + Q_w_outg_i = Q_w_outg_i - Q_W_sol_out_m + W_sol_aux = W_sol_aux + W_sol_aux_m + End If + End Select + End If + + '---------------------------------------------------------------------------------------------------------------------------------- + '---------------------------------------------------------------------------------------------------------------------------------- + + Q_dot_N = TOSG(Dr난방.보일러정격출력) ' Worksheets("난방기기").Range("난방기기정격출력1").Offset(0, i_count_boiler - 1) + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg_i / (Q_dot_N * d_Nutz_mth) '(3.2.9-61) + Q_dot_d_in = Q_h_outg_i / (d_h_rB * (t_h_rL_T - t_w_100)) '(3.2.7-69) 난방 또는 난방 및 급탕 + ' 우선 미적용 Q_dot_d_in = sigma_Q_h_outg / (t_Betrieb_K - t_W_100) * d_Nutz_mth '(3.2.7-70) 난방, 급탕 및 공조 + End If + + + Select Case Dr난방.운전방식.Trim ' Worksheets("난방기기").Range("난방기기운전방식1").Offset(0, i_count_boiler - 1) + Case "단독가동" '단독가동" + beta_h = Q_dot_d_in / Q_dot_N '(3.2.7-64) : 단일보일러 시설 + Case "동시가동" ' 동시가동" + beta_h = TOSG(Q_dot_d_in / (Q_dot_N * TOSG(Dr난방.보일러대수))) '(3.2.7-64) : 다수보일러 동시가동 + Case "순차가동" '순차가동" + For i_count_beta = 1 To CInt(TOSG(Dr난방.보일러대수)) + If Q_dot_d_in <= (Q_dot_N * i_count_beta) Then + beta_h = (Q_dot_d_in - Q_dot_N * (i_count_beta - 1)) / Q_dot_N * i_count_beta '다수보일러 대수제어 + n_beta = i_count_beta - 1 + Exit For + End If + Next + End Select + + + '------------------------------------------------------------------------------------ + ' 보일러 가동 손실의 경우 국내 데이타 미비로 정격효율을 부분부하효율로 적용 추후 검토 필요 + + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-83) 일반보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 100 '(3.2.7-84) 일반보일러 + 'eta_k_100 = (a + b * Ln(Q_dot_N)) / 100 '(3.2.7-85) 콘덴싱보일러 + 'eta_k_pl = (c + d * Ln(Q_dot_N)) / 105 '(3.2.7-86) 콘덴싱보일러 + + + 'q_B_70 = (E * (Q_dot_N ^ F)) / 100 '(3.2.7-64) + 'q_B_theta = q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) '(3.2.7-72) + 'Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) 정지 대기모드 + + + + 'beta_h_g = (Q_h_b + Q_h_ce + Q_h_d + Q_h_s) / (Q_dot_h_max * t_h) '(3.2.7-10) + 'theta_VL_m_beta_h_g = (theta_VA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.13) + 'theta_RL_m_beta_h_g = (theta_RA - theta_i_h_soll) * beta_h_g ^ (1 / n) + theta_i_h_soll '(3.2.7.-14) + + 'eta_k_pl_Betrieb = eta_k_pl + H * (theta_g_test_pl - theta_HK_m_beta_h_g) '(3.2.7-76) + 'eta_k_100_Betrieb = eta_k_100 + G * (theta_g_test100 - theta_HK_m_beta_h_g) '(3.2.7-75) + 'Q_V_g_100 = (f_Hs_Hi - eta_k_100_Betrieb) / eta_k_100_Betrieb * Q_dot_N '(3.2.7-74) + 'Q_V_g_pl = (f_Hs_Hi - eta_k_pl_Betrieb) / eta_k_pl_Betrieb * beta_k_pl * Q_dot_N '(3.2.7-73) + + '-- ------- ----- --- --- --- -- + + eta_k_100 = TOSG(TOSG(Dr난방.정격보일러효율) * age_heating / 100) ' Worksheets("난방기기").Range("난방기기정격효율1").Offset(0, i_count_boiler - 1) / 100 + eta_k_pl = eta_k_100 + f = -0.4 + + If Dr난방.열생산기기방식 = "보일러" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case Dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + e = 8.5 + f = -0.4 + Case "기름보일러" '기름보일러" + e = 8.5 + f = -0.4 + Case "저온가스보일러" '저온가스보일러" + e = 4.5 + f = -0.4 + Case "저온기름보일러" '저온기름보일러" + e = 4.25 + Case "콘덴싱보일러" '콘덴싱보일러" + e = 4 + End Select + + q_B_70 = TOSG((e * (Q_dot_N ^ f)) / 100) + + Else + q_B_70 = 1 + End If + + q_B_theta = q_B_70 '원래는 =q_B_70 * (theta_HK_m_beta_h_g - theta_i) / (70 - 20) 이지만 q_B_theta 와 q_B_70 이 같은 것으로 적용 추후검토 + + + + 'Select Case Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + 'Case "난방유" + 'f_Hs_Hi = 1.06 + 'Case "천연가스" + 'f_Hs_Hi = 1.11 + 'Case "액화가스" + 'f_Hs_Hi = 1.09 + 'Case "석탄" + 'f_Hs_Hi = 1.04 + 'Case "갈탄" + 'f_Hs_Hi = 1.07 + 'Case "나무" + 'f_Hs_Hi = 1.08 + 'End Select + + f_Hs_Hi = 1 ' 국내는 총발열량을 기준으로 입력함으로 우선 1로 설정, 추후 검토 + + Q_dot_B_h = q_B_theta * (Q_dot_N / eta_k_100) * f_Hs_Hi '(3.2.7-71) + + Q_V_g_100 = (f_Hs_Hi - eta_k_100) / eta_k_100 * Q_dot_N + Q_V_g_pl = (f_Hs_Hi - eta_k_pl) / eta_k_pl * beta_k_pl * Q_dot_N + + '------------------------------------------------------------------------------------------------------ + + + + + + If beta_h > beta_k_pl Then + Q_h_g_v_i = ((beta_h - beta_k_pl) / (1 - beta_k_pl) * (Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) + Q_h_g_v_i = Q_h_g_v_i + ((Q_V_g_100 - Q_V_g_pl) + Q_V_g_pl) * (t_h_rL_T - t_w_100) * n_beta + Else + '======================================================================================== 2010.2.21 수정 + If beta_h = 0 Then + Q_h_g_v_i = 0 + Else + Q_h_g_v_i = ((beta_h / beta_k_pl) * (Q_V_g_pl - Q_dot_B_h) + Q_dot_B_h) * (t_h_rL_T - t_w_100) + End If + '======================================================================================== 2010.2.21 수정 + End If + + Q_h_g = Q_h_g + Q_h_g_v_i * d_h_rB '(3.2.7-66) + Q_h_g_i = Q_h_g_v_i * d_h_rB + + Else + + If Dr난방.열생산기기방식 = "지역난방" Then ' Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "지역난방" Then + If Dr난방.지역난방방식 = "중온수" Then ' Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "중온수" Then + D_DS = 0.6 + theta_prim_DS = 105 + 'MsgBox("난방기기 단열등급에 등급2/3 등급3/4 등급 4/5 추가해야함") + Select Case Dr난방.단열등급.Trim ' Dr난방.단열등급 + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.9 + Case "등급2/3" '등급2/3" + B_DS = 4.4 + Case "등급3/4" '등급3/4" + B_DS = 4 + Case "등급4/5" '등급4/5" + B_DS = 3.5 + End Select + End If + 'MsgBox("난방기기 지역난방방식에 고온수 0002 추가해야함") --추가는 했으나 엑셀에서는 중온수고정이다 그래서 하위 루틴은 실행되면안된다 + If Dr난방.지역난방방식 = "고온수" Then 'Worksheets("난방기기").Range("지역난방온수방식1").Offset(0, i_count_boiler - 1) = "고온수" Then + ' MsgBox("난방기기의 지역난방방식은 중온수 고정입니다.", MsgBoxStyle.Information, "확인") + D_DS = 0.4 + theta_prim_DS = 150 + Select Case Dr난방.단열등급.Trim + Case "기본단열" '기본단열" '원래는 등급1/2 이지만 국내에서는 법적단열로 사용 + B_DS = 4.3 + Case "등급2/3" '등급2/3" + B_DS = 3.9 + Case "등급3/4" '등급3/4" + B_DS = 3.5 + Case "등급4/5" '등급4/5" + B_DS = 3.1 + End Select + End If + + theta_DS = D_DS * theta_prim_DS + (1 - D_DS) * 55 ' theta_sek_DS는 55도로 설정 (3.2.7-112) + Psi_DS = TOSG(Dr난방.열교환기정격출력) ' .Worksheets("난방기기").Range("난방기기정격출력1").Offset(1, i_count_boiler - 1) + H_DS = TOSG(B_DS * Psi_DS ^ (1 / 3)) + Q_h_g = Q_h_g + H_DS * (theta_DS - theta_i) + use_DH = use_DH + H_DS * (theta_DS - theta_i) + + End If + + + End If + + + ' 전기보조에너지 Q_h_d_aux 산출 관련 + + P_Pump = TOSG(Dr난방.펌프동력) ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(1, i_count_boiler - 1) + Select Case Dr난방.펌프제어유형.Trim ' Worksheets("난방기기").Range("난방펌프제어유형1").Offset(0, i_count_boiler - 1) + Case "비제어" '비제어" + c_p1 = 0.25 + c_p2 = 0.75 + Case "정압" '정압" + c_p1 = 0.75 + c_p2 = 0.25 + Case "변압" '변압" + c_p1 = 0.9 + c_p2 = 0.1 + End Select + + If beta_h_d = 0 Then + Q_h_d_aux_i = 0 + Else + Q_h_d_aux_i = P_Pump / 1000 * beta_h_d * t_h * (c_p1 + c_p2 / beta_h_d) '(3.2.7-39) + End If + Select Case Dr난방.펌프교정계수.Trim ' Worksheets("난방기기").Range("난방펌프교정계수1").Offset(0, i_count_boiler - 1) + Case "정상가동" '정상가동" + f_P_A = 1 + Case "감소가동" '감소가동" + f_P_A = 0.6 + Case "가동정지" '" + f_P_A = 0 + End Select + + Q_h_d_aux = TOSG(Q_h_d_aux + Q_h_d_aux_i * (1.03 * t_h_rL + f_P_A * (t_h - t_h_rL)) / t_h) '(3.2.7-40) + + + + If Dr난방.축열탱크방식 = "축열탱크없음" Then + P_Pump = 0 ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + Else + P_Pump = TOSG(Dr난방.펌프정격전력) ' Dr난방.Worksheets("난방기기").Range("축열펌프정격전력1").Offset(0, i_count_boiler - 1) + '=================================================================2010.11.04 위치 수정 + If Dr난방.열생산기기방식 = "히트펌프" Then + If Dr난방.운전방식.Trim = "동시가동" Then + Q_dot_h_max = TOSG(Dr난방.히트난방용량) * TOSG(Dr난방.보일러대수) + Else + Q_dot_h_max = TOSG(Dr난방.히트난방용량) ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(1, i_count_boiler - 1) + End If + + End If + beta_h_s = (Q_h_b + Q_h_ce + Q_h_d) / (Q_dot_h_max * t_h) '(3.2.7-9) + If beta_h_s > 1 Then beta_h_s = 1 + t_P = beta_h_s * 24 * d_op_max_mth '(3.2.7-44) + Q_h_s_aux = Q_h_s_aux + P_Pump * t_P / 1000 '(3.2.7-44) + '=================================================================2010.11.04 위치 수정 + + End If + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + + P_aux_SB = 0.02 + + Select Case Dr난방.보일러방식.Trim ' Worksheets("난방기기").Range("보일러방식1").Offset(0, i_count_boiler - 1) + Case "가스보일러" '가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "기름보일러" '기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "저온가스보일러" '저온가스보일러" + P_aux_100 = TOSG((0.148 * Q_dot_N + 40) / 1000) + P_aux_pl = TOSG((0.148 * Q_dot_N + 40) / 1000) + Case "저온기름보일러" '저온기름보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + Case "콘덴싱보일러" '콘덴싱보일러" + P_aux_100 = TOSG(0.045 * Q_dot_N ^ 0.48) + P_aux_pl = TOSG(0.015 * Q_dot_N ^ 0.48) + + End Select + + If beta_h > beta_k_pl Then + P_h_g_aux = (beta_h - beta_k_pl) / (1 - beta_k_pl) * (P_aux_100 - P_aux_pl) + P_aux_pl '(3.2.7-82) + Else + P_h_g_aux = (beta_h / beta_k_pl) * (P_aux_pl - P_aux_SB) + P_aux_SB '(3.2.7-81) + End If + + If d_Nutz_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + t_w_100 = 0 + Else + t_w_100 = Q_w_outg / (Q_dot_N * d_Nutz_mth) + End If + + Q_h_g_aux = Q_h_g_aux + P_h_g_aux * (t_h_rL - t_w_100 * d_op_max_mth * d_Nutz_a / 365) + P_aux_SB * (24 * d_op_max_mth - t_h_rL) '(3.2.7-80) + + + End If + + + If Dr난방.열생산기기방식 = "보일러" Then 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) = "보일러" Then + Select Case Dr난방.사용연료.Trim ' Worksheets("난방기기").Range("난방기기사용연료1").Offset(0, i_count_boiler - 1) + Case "난방유" '난방유" + use_Oil = use_Oil + Q_h_outg_i + Q_h_g_i + + Case "천연가스" '천연가스" + use_LNG = use_LNG + Q_h_outg_i + Q_h_g_i + + Case "액화가스" '액화가스" + use_LPG = use_LPG + Q_h_outg_i + Q_h_g_i + + End Select + Else + Select Case Dr난방.열생산기기방식.Trim 'Worksheets("난방기기").Range("열생산기기방식1").Offset(0, i_count_boiler - 1) + '====================================================================2010.2.21 수정 + Case "지역난방" '지역난방" + use_DH = use_DH + Q_h_outg_i + + Case "전기보일러" '전기보일러" + use_Elec = use_Elec + Q_h_outg_i + (Q_h_outg_i * 0.09) '2011.03.08 전기보일러 생산손실을 내부 생산식 저장으로 설정 + '====================================================================2010.2.21 수정 + '====================================================================2010.03.14 추가 + Case "히트펌프" + Select Case Dr난방.히트연료 ' Worksheets("난방기기").Range("히트펌프사용연료1").Offset(0, i_count_boiler - 1) + Case "전기" + use_Elec = use_Elec + Q_h_outg_i + + Case "천연가스" + use_LNG = use_LNG + Q_h_outg_i + + Case "액화가스" + use_LPG = use_LPG + Q_h_outg_i + + End Select + '====================================================================2010.03.14 추가 + End Select + + End If + + End If + + Next + + '//에너지소요량 - 에너지소요량분석 - 난방에너지소요량 + Q_h_f = Q_h_f + Q_h_outg + Q_h_g '- Q_h_reg '(3.2.7-4)신재생에너지는 추후 추가 '===================2010.04.17 수정 + + 'DSETR.TReqUse.Rows(CEnum.ResultRow.난방에너지소요량)(Mon) = Q_h_f 'Sheets("계산결과").Cells(39, 7 + i_count_month) = Q_h_f + Result.E소요량(i_count_month).난방 = Q_h_f + + ': 난방 전기 보조에너지 연결 + For Each dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("냉난방열공급시스템<>'0' and code<>'0'", "code") + 'If dr존.열생산난방생산기기 <> "0" Or dr존.냉난방열공급시스템 <> "0" Then 'dr존.냉난방열공급시스템 <> "" Then + + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & dr존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(Dr프로필("day" & Format(i_count_month, "00"))) + End If + + For Each Dr공급 As DS.tbl_kongkubRow In DSET.tbl_kongkub.Select("code='" & dr존.냉난방열공급시스템 & "' and code <> '0'", "code") + '===================================================================================2010.2.21 수정 + t_h = CInt(TOSG(Result.최대부하.Item(dr존.code).일일난방최대가동시간) * d_op_mth) + f_L_WA = 1 - (theta_WA_Grenz - theta_e) / (theta_WA_Grenz - theta_e_min) '(3.2.7-22) + If d_op_mth = 0 Then '//201.11.20 추가(학교프로파일 적용시 문제점 해결) + d_h_rB = 0 + Else + d_h_rB = TOSG(d_op_mth * ((365 - f_L_WA * (365 - d_Nutz_a)) / 365) * (t_h / (d_op_mth * 24))) '(3.2.7-21) + End If + t_h_op_d = CInt(TOSG(Result.최대부하.Item(dr존.code).일일난방최대가동시간)) + f_L_NA = 1 - (theta_NA_Grenz - theta_e) / (theta_NA_Grenz - theta_e_min) '(3.2.7-20) + t_h_rL_T = 24 - f_L_NA * (24 - t_h_op_d) '(3.2.7-19) + t_h_rL = t_h_rL_T * d_h_rB '(3.2.7-23) + + P_C = TOSG(Dr공급.제어기의정격전력) ' Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(0, i_count_ce - 1) + P_V = TOSG(Dr공급.팬송풍기정격전력) 'Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(1, i_count_ce - 1) + P_P = TOSG(Dr공급.펌프정격전력) 'Worksheets("난방공급시스템").Range("난방공급제어전력1").Offset(2, i_count_ce - 1) + n_V = TOSG(Dr공급.팬송풍기수) ' Worksheets("난방공급시스템").Range("난방공급팬1").Offset(0, i_count_ce - 1) + n_P = TOSG(Dr공급.추가펌프수) 'Worksheets("난방공급시스템").Range("난방공급팬1").Offset(1, i_count_ce - 1) + Q_V_P = ((P_V * n_V + P_P * n_P) * t_h_rL) / 1000 '(3.2.7-34) + Q_c = P_C * d_op_mth * 24 / 1000 '(3.2.7-33) + Q_h_ce_aux = Q_h_ce_aux + (Q_c + Q_V_P) * TOSG(dr존.냉난방열공급시스템수) * TOSG(dr존.입력존의수) ' Worksheets("입력존").Range("입력난방공급기기1").Offset(1, i_count_zone - 1) '(3.2.7-32) '////2012.07.08 입력존의 수 추가 + Next + + 'End If + Next + + + Q_h_aux = Q_h_ce_aux + Q_h_d_aux + Q_h_s_aux + Q_h_g_aux + W_sol_aux '(3.2.7-5) 난방보조에너지소요량 + 'DSETR.TReqUse.Rows(CEnum.ResultRow.난방보조에너지소요량)(Mon) = Q_h_aux 'Sheets("계산결과").Cells(41, 7 + i_count_month) = Q_h_aux + Result.E소요량(i_count_month).난방보조 = Q_h_aux + use_Elec = use_Elec + Q_h_ce_aux + Q_h_d_aux + Q_h_s_aux + Q_h_g_aux + W_sol_aux + + '//연간 Co2 배출량 - 난방에너지소요량 + Result.일차E소요량(i_count_month).난방등유 = use_Oil + Result.일차E소요량(i_count_month).난방LNG = use_LNG + Result.일차E소요량(i_count_month).난방LPG = use_LPG + Result.일차E소요량(i_count_month).난방지역 = use_DH + Result.일차E소요량(i_count_month).난방전력 = use_Elec + + End Sub + +End Class + + diff --git a/ArinWarev1/DataSet/Calculator/Renewable/CRenewable.vb b/ArinWarev1/DataSet/Calculator/Renewable/CRenewable.vb new file mode 100644 index 0000000..d060ca0 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Renewable/CRenewable.vb @@ -0,0 +1,593 @@ +Public Class CRenewable + Public Sub New() + 'ByVal dr존 As DS.tbl_zoneRow, + End Sub + ' Public Overridable Sub Calc_ThermalSolarSystem_EN(ByVal i_system_ts As Integer, ByVal i_count_ts As Integer, ByVal i_ts_month As Integer, ByVal i_ts_d_mth As Integer, ByVal Q_H_sol_us_m as decimal, ByVal Q_W_sol_us_m as decimal, ByRef Q_W_sol_out_m as decimal, ByRef Q_H_sol_out_m as decimal, ByRef W_sol_aux_m as decimal) + + Public Overridable Sub Calc_ThermalSolarSystem_EN(ByVal i_system_ts As Integer, ByVal DR_code As String, ByVal i_ts_month As Integer, ByVal i_ts_d_mth As Integer, ByVal Q_H_sol_us_m As Decimal, ByVal Q_W_sol_us_m As Decimal, ByRef Q_W_sol_out_m As Decimal, ByRef Q_H_sol_out_m As Decimal, ByRef W_sol_aux_m As Decimal) + + Dim theta_ref As Decimal, theta_w As Decimal, theta_cw As Decimal, U_loop_p As Decimal, U_loop As Decimal, Delta_T As Decimal + Dim A_ As Decimal, a As Decimal, b As Decimal, c As Decimal, d As Decimal, e As Decimal, f As Decimal, eta_loop As Decimal, IAM As Decimal, eta_0 As Decimal + Dim a_1 As Decimal, a_2 As Decimal, P_H As Decimal, P_W As Decimal, V_ref As Decimal, V_sol As Decimal, t_m As Decimal, I_m As Decimal, P_aux_nom As Decimal + 'Dim i_ts_location As Integer, i_count_ts_location As Integer + ' Dim i_count_month As Integer + Dim i_direction As Integer + Dim t_aux_m As Decimal, l_tot As Decimal, f_st As Decimal, U_st As Decimal + Dim theta_setpoint As Decimal, theta_a_avg As Decimal, theta_e_avg As Decimal + Dim Q_sol_ls_rbl_m As Decimal, Q_sol_aux_rbl_m As Decimal, Q_sol_st_ls_rbl_m As Decimal, Q_bu_dis_ls_rbl_m As Decimal, Q_bu_dis_ls_m As Decimal, Q_sol_ls_m As Decimal + Dim Q_W_bu_dis_ls_m As Decimal, Q_H_bu_dis_ls_m As Decimal, Q_W_sol_st_ls_m As Decimal, Q_H_sol_st_ls_m As Decimal + Dim A_H As Decimal, A_W As Decimal, X As Decimal, Y As Decimal + + 'Dim Dr기상데이터 As DS.tbl_weatherRow + 'For i_count_ts_location = 1 To DSET.tbl_weather.Rows.Count ' Range("건물위치").Columns.Count + ' Dr기상데이터 = DSET.tbl_weather(i_count_ts_location - 1) + ' If dr존.지역 = Dr기상데이터.건물위치 Then '//이상하다 1버번쨰 존의 지역값만 계속쓴다 -_-;; 지역은 즉 존에할당된게아니고 1개만 존재하는듯하다 + ' i_ts_location = i_count_ts_location '//기상데이터에서 현재지정된 존.지역의 기상데이터의 지역의 열번호(엑셀에서만)를 기억한다 (나중에 이번호로 데이터 참조하려고) + ' Exit For + ' End If + ' '//지역찾을떄그냥 DR지역을 사용하도록한다. + ' 'If Worksheets("입력존").Range("지역1").Offset(0, 0) = Worksheets("기상데이타").Range("건물위치1").Offset(0, i_count_ts_location - 1) Then + ' ' i_ts_location = i_count_ts_location + ' ' Exit For + ' 'End If + 'Next + + l_tot = 0 + + Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Select("code='" & DR_code & "' and code <> '0'", "code")(0), DS.tbl_newRow) '//신재생의 태양열시스템 + + Select Case Dr신재생.집열판방위.Trim ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(3, i_count_ts - 1) + Case "동" '동" + i_direction = 12 + + Case "남동" '남동" + i_direction = 10 + + Case "남" '남" + i_direction = 9 + + Case "남서" '남서" + i_direction = 11 + + Case "서" '서" + i_direction = 13 + + Case "수평" '수평" '//월별평균일사 수평면을 사용 나머지것들은 45도짜리를 사용한다. 45도짜리 코드값을 해당코드+1000이다. 해당코드+1000으로 미리 셋팅햇다(변경불가) + i_direction = 0 + Case Else + MsgBox("신재생에너지-태양열의 집열판 방위값이 올바르지않습니다", MsgBoxStyle.Critical, "확인") + End Select + + '//집열판방위에따른 월별평균일사의 총합을 가져온다 + '//weather_ilsa 의 p코드에는 지역코드값이 들어가고 코드값은 집열판방위+1000 의값이 해당 각도의 방향에대한 데이터가된다. + + + '///만약값이 서울 방향이 남 이엇을경우에는 해당 일사데이터를 찾는게 목적이에요. 여기서 서울의 코드값은 찾을수잇어요 + '//그담이 방향 남에 맞는 일사데이터를 찾아야하는데.. 일사데이터 코드로는 못찾으니깐. 이름으로 찾아요. + '// + Dim 일사이름 As String = Dr신재생.집열판방위 & "(45)" '//이렇게되면 남(45) 라는 최종이름이 되겟죠? + Dim Drow평균일사() As DS.weather_ilsaRow = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & _ + "' and 설명='" & 일사이름 & "'"), DS.weather_ilsaRow()) + '//그렇게해서 서울의 코드에 해당하는 pcode 와 이름이 남(45)로 되어잇는 일사데이터테이블에서 데이터를 검색하게되겟죠? + '//즉 데이터가 나오면 해당 데이터가 맞는거에요 ..이건 데이터베이스 이름을 남(45) 식으로 모두 고쳐주세요 + + If Drow평균일사.GetUpperBound(0) = -1 Then + MsgBox("지역코드=" + Calc.Pub.기상데이터.code + vbCrLf + "집열판방위코드=" + Dr신재생.집열판방위 + _ + vbCrLf + "예상일사코드=" + 일사이름 + _ + vbCrLf + "에 해당하는 평균일사데이터가 없습니다. 1개의 행이 반환되어야 합니다", MsgBoxStyle.Critical, "계산실패") + I_m = 0 + ' Return + Else + l_tot += TOSG(Drow평균일사(0).m01) + TOSG(Drow평균일사(0).m02) + TOSG(Drow평균일사(0).m03) + TOSG(Drow평균일사(0).m04) + _ + TOSG(Drow평균일사(0).m05) + TOSG(Drow평균일사(0).m06) + TOSG(Drow평균일사(0).m07) + TOSG(Drow평균일사(0).m08) + _ + TOSG(Drow평균일사(0).m09) + TOSG(Drow평균일사(0).m10) + TOSG(Drow평균일사(0).m11) + TOSG(Drow평균일사(0).m12) + I_m = TOSG(Drow평균일사(0)("m" & i_ts_month.ToString("00"))) '//이줄로 위의 케이스문을 대체햇다 오류나면 케이스문으로 일단 사용할예정 + + End If + + + t_aux_m = I_m / l_tot * 2000 + + + '//월별외기평균온도(i_ts_month << 파라미터) + theta_e_avg = TOSG(Calc.Pub.기상데이터("m" & i_ts_month.ToString("00"))) + 'theta_e_avg = Worksheets("기상데이타").Range("최소외기온도1").Offset(2 + i_ts_month, i_ts_location - 1) '//월별외기평균온도 tbl_weather에 존재 + + Select Case Dr신재생.축열탱크설치장소.Trim ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + theta_a_avg = 20 + Case "비난방공간" '비난방공간" + theta_a_avg = theta_e_avg + (20 - theta_e_avg) / 2 + Case "외부공간" '외부공간" + theta_a_avg = theta_e_avg + End Select + + theta_w = 40 + theta_cw = 15 + a_2 = 0 + eta_loop = 0.8 + eta_0 = 0.6 + t_m = i_ts_d_mth * 24 + a = 1.029 + b = -0.065 + c = -0.245 + d = 0.0018 + e = 0.0215 + f = 0 + + + Select Case Dr신재생.집열기유형.Trim 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(1, i_count_ts - 1) + Case "평판형" '평판형" + a_1 = 6 + IAM = 0.94 + Case "진공관형" '진공관형" + a_1 = 3 + IAM = 1 + End Select + + If Dr신재생.태양열시스템의성능 = "성능치" Then ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(5, i_count_ts - 1) = "성능치" Then + eta_0 = TOSG(Dr신재생.무손실효율계수) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(6, i_count_ts - 1) + a_1 = TOSG(Dr신재생.열손실계수1차) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(7, i_count_ts - 1) + a_2 = TOSG(Dr신재생.열손실계수2차) 'Worksheets("신재생기기").Range("태양열시스템종류1").Offset(8, i_count_ts - 1) + End If + + Select Case Dr신재생.태양열종류.Trim ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(0, i_count_ts - 1) + Case "급탕" '급탕" + A_ = TOSG(Dr신재생.집열판면적) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(2, i_count_ts - 1) + U_loop_p = TOSG(5 + 0.5 * A_) '(B.3) + U_loop = a_1 + a_2 * 40 + U_loop_p / A_ '(13) + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_ * 75 + V_sol = TOSG(Dr신재생.축열탱크체적급탕) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(0, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_W_sol_us_m <> 0 Then + X = A_ * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_W_sol_us_m * 1000) '(12) + Y = A_ * IAM * eta_0 * eta_loop * I_m * t_m / (Q_W_sol_us_m * 1000) '(15) + Q_W_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_W_sol_us_m '(11) + Else + Q_W_sol_out_m = 0 + End If + If Q_W_sol_out_m < 0 Then Q_W_sol_out_m = 0 + If Q_W_sol_out_m > Q_W_sol_us_m Then Q_W_sol_out_m = Q_W_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 60 + If Q_W_sol_us_m <> 0 Then + Q_W_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_W_sol_out_m / Q_W_sol_us_m) * t_m / 1000 '(17) + Q_bu_dis_ls_m = TOSG(0.02 * Q_W_sol_us_m * (Q_W_sol_out_m / Q_W_sol_us_m)) + Else + Q_W_sol_st_ls_m = 0 + Q_bu_dis_ls_m = 0 + End If + + If i_system_ts = 1 Then '=====================================================2010.04.02 추가 + + '난방 부분 + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_H * 75 + V_sol = TOSG(Dr신재생.축열탱크체적난방) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(1, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_H_sol_us_m <> 0 Then + X = A_H * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_H_sol_us_m * 1000) '(12) + Y = A_H * IAM * eta_0 * eta_loop * I_m * t_m / (Q_H_sol_us_m * 1000) '(15) + Q_H_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_H_sol_us_m '(11) + Else + Q_H_sol_out_m = 0 + End If + If Q_H_sol_out_m < 0 Then Q_H_sol_out_m = 0 + If Q_H_sol_out_m > Q_H_sol_us_m Then Q_H_sol_out_m = Q_H_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 40 + If Q_H_sol_us_m <> 0 Then + Q_H_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_H_sol_out_m / Q_H_sol_us_m) * t_m / 1000 '(17) + Q_H_bu_dis_ls_m = TOSG(0.02 * Q_H_sol_us_m * (Q_H_sol_out_m / Q_H_sol_us_m)) + Else + Q_H_sol_st_ls_m = 0 + Q_H_bu_dis_ls_m = 0 + End If + Q_sol_ls_m = Q_H_sol_st_ls_m + Q_H_bu_dis_ls_m + Q_W_sol_st_ls_m + Q_W_bu_dis_ls_m + + End If '=====================================================2010.04.02 추가 + + ' Q_sol_ls_m = Q_W_sol_st_ls_m + Q_bu_dis_ls_m + + ' 보조에너지 + P_aux_nom = TOSG(Dr신재생.솔라펌프의정격출력) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(4, i_count_ts - 1) + W_sol_aux_m = P_aux_nom * t_aux_m / 1000 + + Q_sol_aux_rbl_m = TOSG(W_sol_aux_m * 0.5) + + Select Case Dr신재생.축열탱크설치장소.Trim 'Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + Q_sol_st_ls_rbl_m = Q_W_sol_st_ls_m + Q_bu_dis_ls_rbl_m = Q_bu_dis_ls_m + Case "비난방공간" '비난방공간" + Q_sol_st_ls_rbl_m = TOSG(Q_W_sol_st_ls_m * 0.5) + Q_bu_dis_ls_rbl_m = TOSG(Q_bu_dis_ls_m * 0.5) + Case "외부공간" '외부공간" + Q_sol_st_ls_rbl_m = 0 + Q_bu_dis_ls_rbl_m = 0 + End Select + + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + Q_sol_st_ls_rbl_m + Q_bu_dis_ls_rbl_m '(20) + + + + Case "난방+급탕" '난방+급탕" + P_H = Q_H_sol_us_m / (Q_H_sol_us_m + Q_W_sol_us_m) '(9) + P_W = Q_W_sol_us_m / (Q_H_sol_us_m + Q_W_sol_us_m) '(10) + A_ = TOSG(Dr신재생.집열판면적) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(2, i_count_ts - 1) + A_H = P_H * A_ + A_W = P_W * A_ + + '급탕 부분 + U_loop_p = 5 + 0.5 * A_W '(B.3) '===========================2010.04.24 추가 + If A_W <> 0 Then + U_loop = a_1 + a_2 * 40 + U_loop_p / A_W '(13) '===============2010.04.24 추가 + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_W * 75 + V_sol = TOSG(Dr신재생.축열탱크체적급탕) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(0, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + End If + If Q_W_sol_us_m <> 0 Then + X = A_W * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_W_sol_us_m * 1000) '(12) + Y = A_W * IAM * eta_0 * eta_loop * I_m * t_m / (Q_W_sol_us_m * 1000) '(15) + Q_W_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_W_sol_us_m '(11) + Else + Q_W_sol_out_m = 0 + End If + If Q_W_sol_out_m < 0 Then Q_W_sol_out_m = 0 + If Q_W_sol_out_m > Q_W_sol_us_m Then Q_W_sol_out_m = Q_W_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 60 + If Q_W_sol_us_m <> 0 Then + Q_W_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_W_sol_out_m / Q_W_sol_us_m) * t_m / 1000 '(17) + Q_W_bu_dis_ls_m = TOSG(0.02 * Q_W_sol_us_m * (Q_W_sol_out_m / Q_W_sol_us_m)) + Else + Q_W_sol_st_ls_m = 0 + Q_W_bu_dis_ls_m = 0 + End If + + + '난방 부분 + U_loop_p = 5 + 0.5 * A_H '(B.3) '===========================2010.04.24 추가 + U_loop = a_1 + a_2 * 40 + U_loop_p / A_H '(13) '===============2010.04.24 추가 + + theta_ref = TOSG(11.6 + 1.18 * theta_w + 3.86 * theta_cw - 1.32 * theta_e_avg) '(B.8) 급탕시스템인 경우 theta_w는 40도, theta_cw 시수온도는15도 가정 + Delta_T = theta_ref - theta_e_avg '(14) + V_ref = A_H * 75 + V_sol = TOSG(Dr신재생.축열탱크체적난방) ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(1, i_count_ts - 1) + f_st = TOSG((V_ref / V_sol) ^ 0.25) '(B.5) + If Q_H_sol_us_m <> 0 Then + X = A_H * U_loop * eta_loop * Delta_T * f_st * t_m / (Q_H_sol_us_m * 1000) '(12) + Y = A_H * IAM * eta_0 * eta_loop * I_m * t_m / (Q_H_sol_us_m * 1000) '(15) + Q_H_sol_out_m = (a * Y + b * X + c * Y * Y + d * X * X + e * Y * Y * Y + f * X * X * X) * Q_H_sol_us_m '(11) + Else + Q_H_sol_out_m = 0 + End If + If Q_H_sol_out_m < 0 Then Q_H_sol_out_m = 0 + If Q_H_sol_out_m > Q_H_sol_us_m Then Q_H_sol_out_m = Q_H_sol_us_m + + '태양열시스템 열손실 + U_st = TOSG(0.16 * V_sol ^ 0.5) '(B.9) + theta_setpoint = 40 + If Q_H_sol_us_m <> 0 Then + Q_H_sol_st_ls_m = U_st * (theta_setpoint - theta_a_avg) * (Q_H_sol_out_m / Q_H_sol_us_m) * t_m / 1000 '(17) + Q_H_bu_dis_ls_m = TOSG(0.02 * Q_H_sol_us_m * (Q_H_sol_out_m / Q_H_sol_us_m)) + Else + Q_H_sol_st_ls_m = 0 + Q_H_bu_dis_ls_m = 0 + End If + Q_sol_ls_m = Q_H_sol_st_ls_m + Q_H_bu_dis_ls_m + Q_W_sol_st_ls_m + Q_W_bu_dis_ls_m + + + + ' 보조에너지 + P_aux_nom = TOSG(Dr신재생.솔라펌프의정격출력) ' Worksheets("신재생기기").Range("태양열시스템종류1").Offset(4, i_count_ts - 1) + W_sol_aux_m = P_aux_nom * t_aux_m / 1000 + + Q_sol_aux_rbl_m = TOSG(W_sol_aux_m * 0.5) + + Select Case Dr신재생.축열탱크설치장소.Trim ' Worksheets("신재생기기").Range("태양열축열탱크1").Offset(2, i_count_ts - 1) + Case "난방공간" '난방공간" + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + Q_sol_ls_m + Case "비난방공간" '비난방공간" + Q_sol_ls_rbl_m = TOSG(Q_sol_aux_rbl_m + Q_sol_ls_m * 0.5) + Case "외부공간" '외부공간" + Q_sol_ls_rbl_m = Q_sol_aux_rbl_m + End Select + + End Select + + + ''보조에너지 + ''f_sol_m = Q_sol_out_m / Q_sol_us_m '(21) + ''W_bu_aux_m = W_bu_nom_m * (1 - f_sol_m) '(22) + + ''P_aux_nom = 50 + 5 * A_ '(B.4) + + '//열에너지생산량-태양열 + Result.생산E(i_ts_month).태양열생산량 += Q_W_sol_out_m + Q_H_sol_out_m + 'DSETR.TReqUse.Rows(CEnum.ResultRow.생산_열생산량_태양열)(CStr("M" & Format(i_ts_month, "00"))) = CSng(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_열생산량_태양열)(CStr("M" & Format(i_ts_month, "00")))) + Q_W_sol_out_m + Q_H_sol_out_m 'Sheets("계산결과").Cells(97, 7 + i_ts_month) = Q_W_sol_out_m + Q_H_sol_out_m + 'Dim TDR As DSR.TReqUseRow = CType(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_단위면적당생산량_태양열), DSR.TReqUseRow) + Select Case i_system_ts '//이것도 프로시져 파라미터이다. + Case 1 '//난방?급탕 혼합형태? + If Q_W_sol_out_m <> 0 Then + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_m / Result.사용면적.W) + Else + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_m / Result.사용면적.H) + End If + Case 2 '//냉방? + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_H_sol_out_m / Result.사용면적.C) + Case 3 '//급탕 + Result.생산E(i_ts_month).면적당생산량태양열 += (Q_W_sol_out_m / Result.사용면적.W) + Case Else + MsgBox("단위면적당생산량 누적시 i_syste_ts 가 알수없음", MsgBoxStyle.Critical, "확인") + End Select + + End Sub + + Public Overridable Sub Calc_PhotovoltaicSystem_EN(ByVal i_count_pv_month As Integer, ByVal i_pv_d_mth As Integer) + + Dim E_el_pv_out As Decimal, P_pk As Decimal, f_perf As Decimal, E_sol As Decimal, E_sol_hor As Decimal, f_tlt As Decimal + Dim a As Decimal, K_pk As Decimal + 'Dim i_count_pv As Integer, i_count_pv_location As Integer, i_pv_location As Integer + + E_el_pv_out = 0 + + 'If DSET.tbl_new.Rows.Count > 0 Then ' Worksheets("신재생기기").Range("신재생생산기기1").Offset(0, 0) <> "" Then '//신재생기기 처음칸에 뭐가 잇다? 즉 데이터가잇느냐 + For Each Dr신재생 As DS.tbl_newRow In DSET.tbl_new.Select("code <> '0'", "code") + If Dr신재생.기기종류 = "태양광" Then + + a = TOSG(Dr신재생.태양광모듈면적) ' Worksheets("신재생기기").Range("태양광모듈1").Offset(0, i_count_pv - 1) + + Select Case Dr신재생.태양광모듈적용타입.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(4, i_count_pv - 1) + Case "밀착형" '밀착형" + f_perf = 0.7 + Case "후면통풍형" '후면통풍형" + f_perf = 0.75 + Case "기계환기형" '기계환기형" + f_perf = 0.8 + End Select + + + 'If a <> 0 Then '//태양광모듈면적이있을경우에만 작동하도록한다. + + + Dim Dr일사 As DS.weather_ilsaRow + Select Case Dr신재생.태양광모듈기울기.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(1, i_count_pv - 1) + Case "수평" '수평" + '//수평면에해당하는 월별평균일사 값을 가져온다.수평면 0001은 고정값이된다. + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='0001'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + + Case "45도" '45도" + Select Case Dr신재생.태양광모듈방위.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(2, i_count_pv - 1) + Case "남" '"남" + '//45도 남에대한건 기본 수평면하고 +9를 하면 나온다 나머지도 순서이므로 +1을 게속해주면된다. + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 9, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남동" '"남동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 10, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남서" '"남서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 11, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "동" '"동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 12, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "서" '"서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 13, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + End Select + + Case "수직" '수직" + Select Case Dr신재생.태양광모듈방위.Trim 'Worksheets("신재생기기").Range("태양광모듈1").Offset(2, i_count_pv - 1) + Case "남" '"남" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 1, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남동" '"남동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 2, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "남서" '"남서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 3, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "동" '"동" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 4, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + Case "서" '"서" + Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 5, "0000") & "'")(0), DS.weather_ilsaRow) + E_sol = TOSG(Dr일사("M" & Format(i_count_pv_month, "00"))) * i_pv_d_mth * 24 / 1000 + End Select + End Select + + 'E_sol = E_sol_hor * f_tlt 수평면일사에 계수를 곱하지 않고 직접 기상데이타 적용 + + Select Case Dr신재생.태양광모듈종류.Trim ' Worksheets("신재생기기").Range("태양광모듈1").Offset(3, i_count_pv - 1) + Case "단결정" '단결정" + K_pk = 0.12 + Case "다결정" '다결정" + K_pk = 0.1 + Case "비정질박막형" '비정질박막형" + K_pk = 0.04 + Case "기타박막형" '기타박막형" + K_pk = 0.035 + Case "CIS박막형" 'CIS박막형" + K_pk = 0.105 + Case "CdTe박막형" 'CdTe박막형" + K_pk = 0.095 + Case "성능치 입력" + Try + K_pk = TOSG(Dr신재생.태양광모듈효율) + Catch ex As Exception + MsgBox("태양광모듈효율을 알 수 없습니다.", MsgBoxStyle.Critical, "값=" & Dr신재생.태양광모듈효율) + K_pk = 0 + End Try + + Case Else + MsgBox("알수없는 태양광모듈종류입니다.", MsgBoxStyle.Critical, "값=" & Dr신재생.태양광모듈종류) + + End Select + + P_pk = K_pk * a + E_el_pv_out = E_el_pv_out + E_sol * P_pk * f_perf + 'End If + End If + Next + + + 'If Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = "" Then + ' Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = E_el_pv_out + 'Else + ' Sheets("계산결과").Cells(104, 7 + i_count_pv_month) = Sheets("계산결과").Cells(104, 7 + i_count_pv_month) + E_el_pv_out + 'End If + + Result.생산E(i_count_pv_month).태양광전력생산량 += E_el_pv_out + + 'DSETR.TReqUse.Rows(CEnum.ResultRow.생산_전기_태양광)("M" & Format(i_count_pv_month, "00")) = CSng(DSETR.TReqUse.Rows(CEnum.ResultRow.생산_전기_태양광)("M" & Format(i_count_pv_month, "00"))) + E_el_pv_out ' Sheets("계산결과").Cells(95, 7 + i_count_pv_month) + End Sub + + Public Overridable Sub Calc_HeatpumpSystem(ByVal i_system_hp As Integer, ByVal i_HeatCool As Integer, ByVal Dr신재생 As DS.tbl_newRow, ByVal Q_hp_outg As Decimal, ByVal i_hp_month As Integer, ByVal d_h_mth As Integer, ByVal t_hp As Integer, ByVal theta_VA As Decimal, ByVal theta_i As Decimal, ByRef Q_h_outg As Decimal, ByRef Q_h_f_hp As Decimal, ByRef Q_h_g_aux As Decimal) + + Dim f_Verwindung As Decimal, V As Decimal, q_B_S As Decimal, Phi_g As Decimal + Dim Q_h_g As Decimal, Q_h_g_s As Decimal, Q_h_g_WP As Decimal + Dim P_rd_mot As Decimal + 'Dim Q_h_f_hp as decimal 'DIN 에서는 Q_h_f로 표기 + 'Dim Delta_p_prim as decimal, Delta_p_sek as decimal + Dim Phi_prim_aux As Decimal, Phi_sek_aux As Decimal, t_ON_aux As Decimal + Dim theta_h_s As Decimal + Dim COP As Decimal + + Q_h_g_s = 0 + Q_h_g_WP = 0 '전기히트펌프인 경우 0 가스히트펌프는 ? + P_rd_mot = 0 + Q_h_f_hp = 0 + + 'eta_aux = 0.3 + 'Delta_p_prim = 40 'kPa 1차측 + 'Delta_p_sek = 10 'kPa 2차측 + + 'MsgBox(i_count_hp) + + 'i_count_hp = 0 '//신재생 줄번호는 무조건 0이된다. 20100127 '//연습용데이터 문제있음 + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + + Phi_g = TOSG(Dr신재생.지열히트펌프용량) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(0, i_count_hp - 1) + + If Dr신재생.가동연료 <> "전기" And i_HeatCool = 1 And Dr신재생.열교환기설치여부 = "예" Then ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(5, i_count_hp - 1) = "예" Then + P_rd_mot = 0.4 + End If + + If Q_hp_outg < (Phi_g * t_hp) * (1 + P_rd_mot) Then + Q_h_outg = Q_hp_outg + Else + Q_h_outg = Phi_g * t_hp * (1 + P_rd_mot) + End If + + If i_HeatCool = 1 Or i_HeatCool = 3 Then '난방 1 , 냉방 2, 급탕 3 + '난방, 급탕 + If Dr신재생.팽창탱크설치여부 = "예" Then ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(6, i_count_hp - 1) = "예" Then + f_Verwindung = 1.2 + V = TOSG(Dr신재생.팽창탱크체적) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(7, i_count_hp - 1) + q_B_S = TOSG(0.4 + 0.14 * V ^ 0.45) '(51) + theta_h_s = theta_VA '급수온도로 적용 + Q_h_g_s = f_Verwindung * (theta_h_s - theta_i) / 45 * d_h_mth * q_B_S '(49) 외부완충(팽창탱크 유무) + + End If + + Q_h_g = Q_h_g_s + Q_h_g_WP + COP = TOSG(Dr신재생.열성능비난방) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) + + Else + '냉방 + + COP = TOSG(Dr신재생.열성능비냉방) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(2, i_count_hp - 1) + + End If + + + If Dr신재생.가동연료 = "전기" Then ' Worksheets("신재생기기").Range("신재생및열병합기기종류1").Offset(1, i_count_hp - 1) = "전기" Then + Q_h_f_hp = (Q_h_outg + Q_h_g) / COP + ' Q_h_in = Q_h_outg + Q_h_g - Q_h_f_hp '월간 전기히트펌프(재생에너지유입량) + Else + Q_h_f_hp = Q_h_outg / COP + ' If i_HeatCool = 1 And Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(5, i_count_hp - 1) = "예" Then + ' P_rd_mot = 0.4 + ' End If + ' Q_h_in = Q_h_outg + Q_h_g - Q_h_f_hp * (1 + P_rd_mot) '월간 가스히트펌프(재생에너지유입량) + End If + + 'Q_h_f = Q_h_outg + Q_h_g - k_rd_g * Q_h_g_aux - Q_h_in '월간(A.1) 전기히트펌프(난방요구량 충당) + 'Q_h_f = (Q_h_outg + Q_h_g - k_rd_g * Q_h_g_aux - Q_h_in) / (1 + P_rd_mot) '월간(A.2) 가스히트펌프(난방요구량 충당) + + + '보조에너지 + + + 'Phi_prim_aux = Delta_p_prim * V_dot / (eta_aux * 3600) '(89) 사용자 입력항목이므로 확인 요망 + 'Phi_sek_aux = Delta_p_sek * V_dot / (eta_aux * 3600) '(89) 사용자 입력항목이므로 확인 요망 + + t_ON_aux = Q_h_outg / (Phi_g) '(81) + Phi_prim_aux = TOSG(Dr신재생.펌프용량1차) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(3, i_count_hp - 1) + Phi_sek_aux = TOSG(Dr신재생.펌프용량2차) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(4, i_count_hp - 1) + + Q_h_g_aux = TOSG((Phi_prim_aux + Phi_sek_aux) * 0.001 * t_ON_aux) '(88) + + '//열에너지생산량 (지열) + Result.생산E(i_hp_month).지열생산량 += Q_h_f_hp + 'DSETR.TReqUse.Rows(79)("M" & Format(i_hp_month, "00")) = CSng(DSETR.TReqUse.Rows(79)("M" & Format(i_hp_month, "00"))) + Q_h_f_hp 'DrT생산.열생산량지열 += Q_h_f_hp + + '100 : Total >> DrT생산.단위면적당생산량지열 + Select Case i_system_hp + Case 1 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.H) + 'DSETR.TReqUse.Rows(100)("M00") = CSng(DSETR.TReqUse.Rows(100)("M00")) + Q_h_f_hp / CSng(DSETR.TReqUse.Rows(10)("M00")) ' DrT요구량.난방사용면적 ' Sheets("계산결과").Cells(15, 7) + Case 2 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.C) + 'DSETR.TReqUse.Rows(100)("M00") = CSng(DSETR.TReqUse.Rows(100)("M00")) + Q_h_f_hp / CSng(DSETR.TReqUse.Rows(15)("M00")) 'DrT요구량.냉방사용면적 '("계산결과").Cells(20, 7) + Case 3 + Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.W) + End Select + + End Sub + + Public Overridable Sub Calc_CogenerationSystemEN(ByVal Dr신재생 As DS.tbl_newRow, ByVal i_chp_month As Integer, ByVal Q_h_outg As Decimal, ByVal t_chp As Integer, ByRef Q_chp_gen_out As Decimal, ByRef E_chp_gen_in As Decimal) + 'EN15316-4-4_2007 5.6.2에서 시작 + 'Dim Wmsg As New System.Text.StringBuilder + 'Wmsg.AppendLine("Calc_CogenerationSystemEN 이 함수의경우") + 'Wmsg.AppendLine("i_count_chp 에따라서 열을 할당해야한다.... 지만..아직 이 파라미터값을 모르게삳") + 'Wmsg.AppendLine("사용하는곳의 참조확인을해서 저곳이 신재생기기 코드값이 바로오는건지 다른값인지 확인해봐야겠다") + 'MsgBox(Wmsg.ToString) + + Dim Q_dot_T_chp As Decimal + Dim eta_T_chp_an As Decimal, eta_el_chp_an As Decimal + Dim E_el_chp_out As Decimal + + ' Dim Dr신재생 As DS.tbl_newRow = CType(DSET.tbl_new.Rows(0), DS.tbl_newRow) + + Q_dot_T_chp = TOSG(Dr신재생.열생산능력) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(0, i_count_chp - 1) + eta_T_chp_an = TOSG(Dr신재생.열생산효율) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(1, i_count_chp - 1) + eta_el_chp_an = TOSG(Dr신재생.발전효율) ' Worksheets("신재생기기").Range("열병합열생산능력1").Offset(2, i_count_chp - 1) + + If Q_h_outg > (Q_dot_T_chp * t_chp) Then + Q_chp_gen_out = Q_dot_T_chp * t_chp + Else + Q_chp_gen_out = Q_h_outg + End If + + E_chp_gen_in = Q_chp_gen_out / (eta_T_chp_an / 100) + E_el_chp_out = E_chp_gen_in * eta_el_chp_an / 100 + + '//전기생산량 열병합 + Result.생산E(i_chp_month).열병합전력생산량 += E_el_chp_out + 'DSETR.TReqUse.Rows(77)("M" & Format(i_chp_month, "00")) = CSng(DSETR.TReqUse.Rows(77)("M" & Format(i_chp_month, "00"))) + E_el_chp_out ' Sheets("계산결과").Cells(96, 7 + i_chp_month) = E_el_chp_out + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/C1차소요량.vb b/ArinWarev1/DataSet/Calculator/Result/C1차소요량.vb new file mode 100644 index 0000000..f297147 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C1차소요량.vb @@ -0,0 +1,780 @@ +Public Class C1차소요량 + Public Mon As String + Private ErrMsg As String = "1차에너지소요량 계산되지 않았습니다" + Private MIdx As Integer + + '//M00 일떄의 합계식이 추가되지않았따 + '//해당부분은 주로 합계식에서 사용된다. + + Public Sub Calc_Summary() + + If MIdx <> 0 Then + MsgBox("Calc 계산식은 0번만 가능합니다") + Return + End If + + Dim i1, i2, i3, i4, i5, i6 As Decimal + + i1 = 0 : i2 = 0 : i3 = 0 : i4 = 0 : i5 = 0 + For i As Integer = 1 To 12 + i1 += Result.일차E소요량(i).난방등유 + i2 += Result.일차E소요량(i).난방LNG + i3 += Result.일차E소요량(i).난방LPG + i4 += Result.일차E소요량(i).난방지역 + i5 += Result.일차E소요량(i).난방전력 + Next + Me.난방등유 = i1 + Me.난방LNG = i2 + Me.난방LPG = i3 + Me.난방지역 = i4 + Me.난방전력 = i5 + + i1 = 0 : i2 = 0 : i3 = 0 : i4 = 0 : i5 = 0 : i6 = 0 + For i As Integer = 1 To 12 + i1 += Result.일차E소요량(i).냉방등유 + i2 += Result.일차E소요량(i).냉방LNG + i3 += Result.일차E소요량(i).냉방LPG + i4 += Result.일차E소요량(i).냉방지역난방열 + i5 += Result.일차E소요량(i).냉방지역냉방열 + i6 += Result.일차E소요량(i).냉방전력 + Next + Me.냉방등유 = i1 + Me.냉방LNG = i2 + Me.냉방LPG = i3 + Me.냉방지역난방열 = i4 + Me.냉방지역냉방열 = i5 + Me.냉방전력 = i6 + + i1 = 0 : i2 = 0 : i3 = 0 : i4 = 0 : i5 = 0 + For i As Integer = 1 To 12 + i1 += Result.일차E소요량(i).급탕등유 + i2 += Result.일차E소요량(i).급탕LNG + i3 += Result.일차E소요량(i).급탕LPG + i4 += Result.일차E소요량(i).급탕지역 + i5 += Result.일차E소요량(i).급탕전력 + Next + Me.급탕등유 = i1 + Me.급탕LNG = i2 + Me.급탕LPG = i3 + Me.급탕지역 = i4 + Me.급탕전력 = i5 + + End Sub + + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0) + DSETR = pdsetr + Result = presult + MIdx = pmIdx + Mon = "M" & Format(pmIdx, "00") + End Sub + + ReadOnly Property 소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.일차E소요량(i).소요량 + Next + Return R + Else + Return Me.난방소요량 + Me.냉방소요량 + Me.급탕소요량 + Me.조명소요량 + Me.환기소요량 - (Result.생산E(MIdx).태양광전력생산량 * Result.E변환계수.전력) - (Result.생산E(MIdx).열병합전력생산량 * Result.E변환계수.전력) + End If + End Get + End Property + + ReadOnly Property 단위면적() As Decimal + Get + If MIdx <> 0 Then + Return 0 + Else + Return Me.난방면적 + Me.냉방면적 + Me.급탕면적 + Me.조명면적 + Me.환기면적 + End If + + End Get + End Property + +#Region "난방" + ReadOnly Property 난방소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.난방등유 * Result.E변환계수.등유 + Me.난방LNG * Result.E변환계수.LNG + _ + Me.난방LPG * Result.E변환계수.LPG + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.난방전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + Else + Return Me.난방등유 * Result.E변환계수.등유 + Me.난방LNG * Result.E변환계수.LNG + _ + Me.난방LPG * Result.E변환계수.LPG + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + End If + End Get + End Property + + ReadOnly Property 난방소요량2() As Decimal '//140112(?) + Get + + Dim 건물용도 As Integer = CInt(DSET1.tbl_Desc.Rows(0)("isjugo")) + + If MIdx = 0 Then + + If 건물용도 < 10 Then + + Dim R As Decimal = Me.난방등유 * Result.E변환계수.지역난방 + Me.난방LNG * Result.E변환계수.지역난방 + _ + Me.난방LPG * Result.E변환계수.지역난방 + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.난방전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + + Else + Dim R As Decimal = Me.난방등유 * Result.E변환계수.등유 + Me.난방LNG * Result.E변환계수.LNG + _ + Me.난방LPG * Result.E변환계수.LPG + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.난방전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + End If + + + Else + + + If 건물용도 < 10 Then + Return Me.난방등유 * Result.E변환계수.지역난방 + Me.난방LNG * Result.E변환계수.지역난방 + _ + Me.난방LPG * Result.E변환계수.지역난방 + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + Else + Return Me.난방등유 * Result.E변환계수.등유 + Me.난방LNG * Result.E변환계수.LNG + _ + Me.난방LPG * Result.E변환계수.LPG + Me.난방지역 * Result.E변환계수.지역난방 + _ + Me.난방전력 * Result.E변환계수.전력 + End If + + + + End If + End Get + End Property + + Property 난방등유() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("난방등유")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("난방등유") = value + End If + End Set + End Property + Property 난방LNG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("난방LNG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("난방LNG") = value + End If + End Set + End Property + Property 난방LPG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("난방LPG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("난방LPG") = value + End If + End Set + End Property + 'Property 난방펠렛() As Decimal + ' Get + ' Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + ' If DR.GetUpperBound(0) = -1 Then + ' MsgBox(ErrMsg,MsgBoxStyle.Information,"C1차소요량") + ' Return 0 + ' Else + ' Return TOSG(DR(0)("난방펠렛")) + ' End If + ' End Get + ' Set(ByVal value As Decimal) + ' Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + ' If DR.GetUpperBound(0) = -1 Then + ' MsgBox(ErrMsg,MsgBoxStyle.Information,"C1차소요량") + ' Else + ' DR(0)("난방펠렛") = value + ' End If + ' End Set + 'End Property + Property 난방지역() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("난방지역")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("난방지역") = value + End If + End Set + End Property + Property 난방전력() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("난방전력")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("난방전력") = value + End If + End Set + End Property + + ReadOnly Property 난방면적() As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방소요량 / Result.사용면적.H + End If + End Get + End Property + + ReadOnly Property 난방면적2() As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방소요량2 / Result.사용면적.H + End If + End Get + End Property + +#End Region + +#Region "냉방" + ReadOnly Property 냉방소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.냉방등유 * Result.E변환계수.등유 + Me.냉방LNG * Result.E변환계수.LNG + _ + Me.냉방LPG * Result.E변환계수.LPG + Me.냉방지역난방열 * Result.E변환계수.지역난방 + _ + Me.냉방지역냉방열 * Result.E변환계수.지역냉방 + Me.냉방전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.냉방전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + Else + Return Me.냉방등유 * Result.E변환계수.등유 + Me.냉방LNG * Result.E변환계수.LNG + _ + Me.냉방LPG * Result.E변환계수.LPG + Me.냉방지역난방열 * Result.E변환계수.지역난방 + _ + Me.냉방지역냉방열 * Result.E변환계수.지역냉방 + Me.냉방전력 * Result.E변환계수.전력 + End If + End Get + End Property + Property 냉방등유() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방등유")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방등유") = value + End If + End Set + End Property + Property 냉방LNG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방LNG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방LNG") = value + End If + End Set + End Property + Property 냉방펠렛() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방펠렛")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방펠렛") = value + End If + End Set + End Property + Property 냉방LPG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방LPG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방LPG") = value + End If + End Set + End Property + Property 냉방지역난방열() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방지역")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방지역") = value + End If + End Set + End Property + Property 냉방지역냉방열() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방지역2")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방지역2") = value + End If + End Set + End Property + Property 냉방전력() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("냉방전력")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("냉방전력") = value + End If + End Set + End Property + ReadOnly Property 냉방면적() As Decimal + Get + If Result.사용면적.C = 0 Then + Return 0 + Else + Return Me.냉방소요량 / Result.사용면적.C + End If + End Get + End Property +#End Region + +#Region "급탕" + ReadOnly Property 급탕소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.급탕등유 * Result.E변환계수.등유 + Me.급탕LNG * Result.E변환계수.LNG + _ + Me.급탕LPG * Result.E변환계수.LPG + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\급탕소요량1.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("태양광전력생산량 열병합전력생산량 난방전력 냉방전력 급탕전력 조명전력 환기전력 전력변환계수") + ' End If + ' b.AppendLine(Result.생산E(0).태양광전력생산량.ToString() + vbTab + Result.생산E(0).열병합전력생산량.ToString() + vbTab + _ + ' 난방전력.ToString() + vbTab + 냉방전력.ToString() + vbTab + 급탕전력.ToString() + vbTab + 조명전력.ToString() + vbTab + _ + ' 환기전력.ToString() + vbTab + Result.E변환계수.전력.ToString()) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.급탕전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + Else + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\급탕소요량2.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("MIDX 급탕등유 급탕LNG 급탕LPG 급탕지역 급탕전력") + ' End If + ' b.AppendLine(MIdx.ToString() + vbTab + 급탕등유.ToString() + vbTab + 급탕LNG.ToString() + vbTab + 급탕LPG.ToString() + vbTab + 급탕지역.ToString() + vbTab + 급탕전력.ToString()) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + + Return Me.급탕등유 * Result.E변환계수.등유 + Me.급탕LNG * Result.E변환계수.LNG + _ + Me.급탕LPG * Result.E변환계수.LPG + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + End If + End Get + End Property + + ReadOnly Property 급탕소요량2() As Decimal + Get + Dim 건물용도 As Integer = CInt(DSET1.tbl_Desc.Rows(0)("isjugo")) + + If MIdx = 0 Then + If 건물용도 < 10 Then + Dim R As Decimal = Me.급탕등유 * Result.E변환계수.지역난방 + Me.급탕LNG * Result.E변환계수.지역난방 + _ + Me.급탕LPG * Result.E변환계수.지역난방 + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.급탕전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + Else + Dim R As Decimal = Me.급탕등유 * Result.E변환계수.등유 + Me.급탕LNG * Result.E변환계수.LNG + _ + Me.급탕LPG * Result.E변환계수.LPG + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.급탕전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + End If + + Else + + If 건물용도 < 10 Then + Return Me.급탕등유 * Result.E변환계수.지역난방 + Me.급탕LNG * Result.E변환계수.지역난방 + _ + Me.급탕LPG * Result.E변환계수.지역난방 + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + Else + Return Me.급탕등유 * Result.E변환계수.등유 + Me.급탕LNG * Result.E변환계수.LNG + _ + Me.급탕LPG * Result.E변환계수.LPG + Me.급탕지역 * Result.E변환계수.지역난방 + _ + Me.급탕전력 * Result.E변환계수.전력 + End If + + End If + End Get + End Property + + + + + + Property 급탕등유() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕등유")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕등유") = value + End If + End Set + End Property + Property 급탕LNG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕LNG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕LNG") = value + End If + End Set + End Property + Property 급탕펠렛() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕펠렛")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕펠렛") = value + End If + End Set + End Property + Property 급탕LPG() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕LPG")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕LPG") = value + End If + End Set + End Property + Property 급탕지역() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕지역")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕지역") = value + End If + End Set + End Property + Property 급탕전력() As Decimal + Get + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Return 0 + Else + Return TOSG(DR(0)("급탕전력")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량1Row = CType(DSETR.에너지소요량1.Select("mon='" & Mon & "'"), DSR.에너지소요량1Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "C1차소요량") + Else + DR(0)("급탕전력") = value + End If + End Set + End Property + ReadOnly Property 급탕면적() As Decimal + Get + If Result.사용면적.W = 0 Then + Return 0 + Else + Return Me.급탕소요량 / Result.사용면적.W + End If + End Get + End Property + ReadOnly Property 급탕면적2() As Decimal + Get + If Result.사용면적.W = 0 Then + Return 0 + Else + Return Me.급탕소요량2 / Result.사용면적.W + End If + End Get + End Property +#End Region + +#Region "조명부분(읽기전용)" + ReadOnly Property 조명소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = 조명전력 * Result.E변환계수.전력 + + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.조명전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + + Else + Return 조명전력 * Result.E변환계수.전력 + End If + End Get + End Property + ReadOnly Property 조명전력() As Decimal + Get + If MIdx = 0 Then '//합계필드라면 12월의 합계를 반환한다. + Dim i1 As Decimal = 0 + For i As Integer = 1 To 12 + i1 += Result.일차E소요량(i).조명전력 + Next + Return i1 + Else + Return Result.E소요량(Me.MIdx).조명S + End If + End Get + End Property + ReadOnly Property 조명면적() As Decimal + Get + If Result.사용면적.L = 0 Then + Return 0 + Else + Return Me.조명소요량 / Result.사용면적.L + End If + End Get + End Property + +#End Region + +#Region "환기부분(읽기전용)" + ReadOnly Property 환기소요량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = 환기전력 * Result.E변환계수.전력 + Try + Return R - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / _ + (Me.난방전력 + Me.냉방전력 + Me.급탕전력 + Me.조명전력 + Me.환기전력) * Me.환기전력 * Result.E변환계수.전력 + Catch ex As Exception + + End Try + Else + Return 환기전력 * Result.E변환계수.전력 + End If + End Get + End Property + ReadOnly Property 환기전력() As Decimal + Get + If MIdx = 0 Then '//합계필드라면 12월의 합계를 반환한다. + Dim i1 As Decimal = 0 + For i As Integer = 1 To 12 + i1 += Result.일차E소요량(i).환기전력 + Next + Return i1 + Else + Return Result.E소요량(Me.MIdx).환기S + End If + End Get + End Property + ReadOnly Property 환기면적() As Decimal + Get + If Result.사용면적.V = 0 Then + Return 0 + Else + Return Me.환기소요량 / Result.사용면적.V + End If + End Get + End Property +#End Region + + +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/CCo2발생량.vb b/ArinWarev1/DataSet/Calculator/Result/CCo2발생량.vb new file mode 100644 index 0000000..b5f10d8 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/CCo2발생량.vb @@ -0,0 +1,452 @@ +Public Class CCo2발생량 + Public Mon As String + Private ErrMsg As String = "에너지소요량 계산되지 않았습니다" + Private MIdx As Integer + Private Result As CResult + Public Sub New(ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0) + Result = presult + MIdx = pmIdx + Mon = "M" & Format(MIdx, "00") + End Sub + ReadOnly Property 발생량() As Decimal + Get + If MIdx = 0 Then '//최종합계는 저람량을 제하지않는다? + Return Me.난방발생량 + Me.냉방발생량 + Me.급탕발생량 + Me.조명발생량 + Me.환기발생량 + Else + Return Me.난방발생량 + Me.냉방발생량 + Me.급탕발생량 + Me.조명발생량 + Me.환기발생량 - Me.저감량태양광 - Me.저감량열병합 + End If + End Get + End Property + ReadOnly Property 단위면적() As Decimal + Get '//월구분없음 실제로는 최종합 M00 에만 값이 있다. + Return Me.난방면적 + Me.냉방면적 + Me.급탕면적 + Me.조명면적 + Me.환기면적 + End Get + End Property + +#Region "난방" + ReadOnly Property 난방발생량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.난방등유 + Me.난방LNG + Me.난방LPG + Me.난방지역 + Me.난방전력 + Try + Return R - (Me.저감량열병합 + Me.저감량태양광) / (Me.난방전력 + Me.냉방전력 + Me.조명전력 + Me.환기전력 + Me.급탕전력) * Me.난방전력 + Catch ex As Exception + + End Try + + Else + Return Me.난방등유 + Me.난방LNG + Me.난방LPG + Me.난방지역 + Me.난방전력 + End If + End Get + End Property + ReadOnly Property 난방등유() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).난방등유 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).난방등유 * Result.Co2배출계수.등유 + End If + End Get + End Property + ReadOnly Property 난방LNG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).난방LNG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).난방LNG * Result.Co2배출계수.LNG + End If + End Get + End Property + ReadOnly Property 난방LPG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).난방LPG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).난방LPG * Result.Co2배출계수.LPG + End If + End Get + End Property + ReadOnly Property 난방지역() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).난방지역 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).난방지역 * Result.Co2배출계수.지역난방 + End If + End Get + End Property + ReadOnly Property 난방전력() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).난방전력 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).난방전력 * Result.Co2배출계수.전력 + End If + End Get + End Property + 'ReadOnly Property 난방펠렛() As Decimal + ' Get + ' If Me.MIdx = 0 Then + ' Dim Res As Decimal = 0 + ' For i As Short = 1 To 12 + ' Res += Result.Co2발생량(i).난방펠렛 + ' Next + ' Return Res + ' Else + ' Return Result.일차E소요량(MIdx).난방펠렛 * Result.Co2배출계수.펠렛 + ' End If + ' End Get + 'End Property + ReadOnly Property 난방면적() As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방발생량 / Result.사용면적.H + End If + End Get + End Property +#End Region + + ReadOnly Property 냉방발생량() As Decimal + Get + Dim R As Decimal = Me.냉방등유 + Me.냉방LNG + Me.냉방LPG + Me.냉방지역난방열 + Me.냉방지역냉방열 + Me.냉방전력 + If MIdx = 0 Then + Try + Return R - (Me.저감량열병합 + Me.저감량태양광) / (Me.난방전력 + Me.냉방전력 + Me.조명전력 + Me.환기전력 + Me.급탕전력) * Me.냉방전력 + Catch ex As Exception + + End Try + + Else + Return R + End If + End Get + End Property + ReadOnly Property 냉방등유() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방등유 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방등유 * Result.Co2배출계수.등유 + End If + End Get + End Property + ReadOnly Property 냉방LNG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방LNG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방LNG * Result.Co2배출계수.LNG + End If + End Get + End Property + 'ReadOnly Property 냉방펠렛() As Decimal + ' Get + ' If Me.MIdx = 0 Then + ' Dim Res As Decimal = 0 + ' For i As Short = 1 To 12 + ' Res += Result.Co2발생량(i).냉방펠렛 + ' Next + ' Return Res + ' Else + ' Return Result.일차E소요량(MIdx).냉방펠렛 * Result.Co2배출계수.펠렛 + ' End If + ' End Get + 'End Property + ReadOnly Property 냉방LPG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방LPG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방LPG * Result.Co2배출계수.LPG + End If + End Get + End Property + ReadOnly Property 냉방지역난방열() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방지역난방열 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방지역난방열 * Result.Co2배출계수.지역난방 + End If + End Get + End Property + ReadOnly Property 냉방지역냉방열() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방지역냉방열 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방지역냉방열 * Result.Co2배출계수.지역냉방 + End If + End Get + End Property + ReadOnly Property 냉방전력() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).냉방전력 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).냉방전력 * Result.Co2배출계수.전력 + End If + End Get + End Property + ReadOnly Property 냉방면적() As Decimal + Get + If Result.사용면적.C = 0 Then + Return 0 + Else + Return Me.냉방발생량 / Result.사용면적.C + End If + End Get + End Property + + ReadOnly Property 급탕발생량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.급탕등유 + Me.급탕LNG + Me.급탕LPG + Me.급탕지역 + Me.급탕전력 + Try + Return R - (Me.저감량열병합 + Me.저감량태양광) / (Me.난방전력 + Me.냉방전력 + Me.조명전력 + Me.환기전력 + Me.급탕전력) * Me.급탕전력 + Catch ex As Exception + + End Try + + Else + Return Me.급탕등유 + Me.급탕LNG + Me.급탕LPG + Me.급탕지역 + Me.급탕전력 + End If + End Get + End Property + ReadOnly Property 급탕등유() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).급탕등유 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).급탕등유 * Result.Co2배출계수.등유 + End If + End Get + End Property + 'ReadOnly Property 급탕펠렛() As Decimal + ' Get + ' If Me.MIdx = 0 Then + ' Dim Res As Decimal = 0 + ' For i As Short = 1 To 12 + ' Res += Result.Co2발생량(i).급탕펠렛 + ' Next + ' Return Res + ' Else + ' Return Result.일차E소요량(MIdx).급탕펠렛 * Result.Co2배출계수.펠렛 + ' End If + ' End Get + 'End Property + ReadOnly Property 급탕LNG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).급탕LNG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).급탕LNG * Result.Co2배출계수.LNG + End If + End Get + End Property + ReadOnly Property 급탕LPG() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).급탕LPG + Next + Return Res + Else + Return Result.일차E소요량(MIdx).급탕LPG * Result.Co2배출계수.LPG + End If + End Get + End Property + ReadOnly Property 급탕지역() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).급탕지역 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).급탕지역 * Result.Co2배출계수.지역난방 + End If + End Get + End Property + ReadOnly Property 급탕전력() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).급탕전력 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).급탕전력 * Result.Co2배출계수.전력 + End If + End Get + End Property + ReadOnly Property 급탕면적() As Decimal + Get + If Result.사용면적.W = 0 Then + Return 0 + Else + Return Me.급탕발생량 / Result.사용면적.W + End If + End Get + End Property + + ReadOnly Property 조명발생량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.조명전력 + Try + Return R - (Me.저감량열병합 + Me.저감량태양광) / (Me.난방전력 + Me.냉방전력 + Me.조명전력 + Me.환기전력 + Me.급탕전력) * Me.조명전력 + Catch ex As Exception + + End Try + + Else + Return Me.조명전력 + End If + End Get + End Property + ReadOnly Property 조명전력() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).조명전력 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).조명전력 * Result.Co2배출계수.전력 + End If + End Get + End Property + ReadOnly Property 조명면적() As Decimal + Get + If Result.사용면적.L = 0 Then + Return 0 + Else + Return Me.조명발생량 / Result.사용면적.L + End If + End Get + End Property + + ReadOnly Property 환기발생량() As Decimal + Get + If MIdx = 0 Then + Dim R As Decimal = Me.환기전력 + Try + Return R - (Me.저감량열병합 + Me.저감량태양광) / (Me.난방전력 + Me.냉방전력 + Me.조명전력 + Me.환기전력 + Me.급탕전력) * Me.환기전력 + Catch ex As Exception + + End Try + + Else + Return Me.환기전력 + End If + End Get + End Property + ReadOnly Property 환기전력() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).환기전력 + Next + Return Res + Else + Return Result.일차E소요량(MIdx).환기전력 * Result.Co2배출계수.전력 + End If + End Get + End Property + ReadOnly Property 환기면적() As Decimal + Get + If Result.사용면적.V = 0 Then + Return 0 + Else + Return Me.환기발생량 / Result.사용면적.V + End If + End Get + End Property + + ReadOnly Property 저감량태양광() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).저감량태양광 + Next + Return Res + Else + Return Result.생산E(MIdx).태양광전력생산량 * Result.Co2배출계수.전력 + End If + End Get + End Property + ReadOnly Property 저감량열병합() As Decimal + Get + If Me.MIdx = 0 Then + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.Co2발생량(i).저감량열병합 + Next + Return Res + Else + Return Result.생산E(MIdx).열병합전력생산량 * Result.Co2배출계수.전력 + End If + End Get + End Property +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/CResult.vb b/ArinWarev1/DataSet/Calculator/Result/CResult.vb new file mode 100644 index 0000000..3ee2a5a --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/CResult.vb @@ -0,0 +1,48 @@ +Public Class CResult + + + Public Zones As CZones + + Public E요구량(12) As C에너지요구량 + Public E소요량(12) As C에너지소요량 + Public 일차E소요량(12) As C1차소요량 + Public 생산E(12) As C생산에너지 + Public Co2발생량(12) As CCo2발생량 + Public E분석(12) As C에너지분석 '//여기는 유일하게 0번 인덱스를 쓸수없다 + + Public Co2배출계수 As CCo2배출계수 + Public E변환계수 As C1차에너지변환계수 + + Public 사용면적 As C사용면적 + Public 최대부하 As C최대냉난방부하 + + Private DSETR As DSR + Private DSET As DS + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR) + DSET = pds + DSETR = pdsetr + + '//공용 + Co2배출계수 = New CCo2배출계수 + E변환계수 = New C1차에너지변환계수 + + '//단일 + 사용면적 = New C사용면적(DSET, DSETR, Me) + 최대부하 = New C최대냉난방부하(DSETR) + + '//서브추가항목 + Zones = New CZones(DSET, DSETR, Me) + + '//월별로 들어가는 배열항목 + For i As Integer = 0 To 12 + Me.E요구량(i) = New C에너지요구량(Me, i) + Me.E소요량(i) = New C에너지소요량(DSETR, Me, i) + Me.일차E소요량(i) = New C1차소요량(DSETR, Me, i) + Me.생산E(i) = New C생산에너지(DSETR, Me, i) + Me.Co2발생량(i) = New CCo2발생량(Me, i) + Me.E분석(i) = New C에너지분석(DSETR, Me, i) + Next + + End Sub + +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/CZones.vb b/ArinWarev1/DataSet/Calculator/Result/CZones.vb new file mode 100644 index 0000000..cf0b91b --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/CZones.vb @@ -0,0 +1,71 @@ + +''' +''' 각존의 데이터를 참조한다 +''' +Public Class CZones + Dim ErrMsg As String = "최대냉난방부하가 계산되지 않았습니다" + Public Items() As Citem + + Private DSET As DS + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult) '//존은초기화값을 가지고 생성한다. + DSET = pds + DSETR = pdsetr + Result = presult + ReDim Items(Me.CountR) '//결과내의 존을 초기화한다. + Dim idx As Integer = 0 + For Each It As DSR.최대냉난방부하Row In DSETR.최대냉난방부하.Select("zone<>'00'") + Items(idx) = New Citem(DSET, DSETR, Result, idx, It.Zone) + idx += 1 + Next + '//해당존의 코드값을 가지고 결과가 게산되어있따. + End Sub + Public Function Count() As Integer + Return DSET.tbl_zone.Rows.Count '//현재 시스템의 존 카운터를 반환 + End Function + Public Function CountR() As Integer + Return DSETR.최대냉난방부하.Select("zone<>'00'").GetUpperBound(0) + 1 '//계산결과내의 존의 갯수를 반환 + End Function + + Public Class Citem + Public Index As Integer + Public Code As String + Public 최대냉난방부하 As C최대냉난방부하.Citem + Public 월에너지분석(11) As C에너지분석 '//이존의 12달의 내역을 참조한다. + Private DSETR As DSR + Private DSET As DS + Private Result As CResult + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult, ByVal pidx As Integer, ByVal pcode As String) + DSET = pds + DSETR = pdsetr + Result = presult + Me.Index = pidx + Me.Code = pcode + 최대냉난방부하 = New C최대냉난방부하.Citem(DSETR, pcode) + + Dim Idx As Integer = 0 + For Each DR As C에너지분석 In Me.월에너지분석 + DR = New C에너지분석(DSETR, Result, Idx, pcode) + Idx += 1 + Next + End Sub + Public Function Name() As String + Dim dR() As DataRow = DSET.tbl_zone.Select("code='" & Me.Code & "'") + If dR.GetUpperBound(0) = -1 Then + Return "존재하지않는 Zone 입니다" + Else + Return dR(0)("설명").ToString + End If + End Function + Public Function Row() As DS.tbl_zoneRow + Dim dR() As DS.tbl_zoneRow = CType(DSET.tbl_zone.Select("code='" & Me.Code & "'"), DS.tbl_zoneRow()) + If dR.GetUpperBound(0) = -1 Then + Return Nothing + Else + Return dR(0) + End If + End Function + End Class +End Class + diff --git a/ArinWarev1/DataSet/Calculator/Result/C범용.vb b/ArinWarev1/DataSet/Calculator/Result/C범용.vb new file mode 100644 index 0000000..4cca80e --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C범용.vb @@ -0,0 +1,75 @@ +Public Class CCo2배출계수 + Public Sub New() + + End Sub + ReadOnly Property 등유() As Decimal + Get + Return 0.259 + End Get + End Property + ReadOnly Property LNG() As Decimal + Get + Return 0.202 + End Get + End Property + ReadOnly Property LPG() As Decimal + Get + Return 0.227 + End Get + End Property + 'ReadOnly Property 펠렛() As Decimal + ' Get + ' Return 0.0 '//나중에 지정하세요. + ' End Get + 'End Property + ReadOnly Property 지역난방() As Decimal + Get + Return 0.164 + End Get + End Property + ReadOnly Property 지역냉방() As Decimal + Get + Return 0.14 + End Get + End Property + ReadOnly Property 전력() As Decimal + Get + Return 0.4691 + End Get + End Property +End Class +Public Class C1차에너지변환계수 + Public Sub New() + + End Sub + ReadOnly Property 등유() As Decimal + Get + Return 1.1 + End Get + End Property + ReadOnly Property LNG() As Decimal + Get + Return 1.1 + End Get + End Property + ReadOnly Property LPG() As Decimal + Get + Return 1.1 + End Get + End Property + ReadOnly Property 지역난방() As Decimal + Get + Return 0.728 + End Get + End Property + ReadOnly Property 지역냉방() As Decimal + Get + Return 0.937 + End Get + End Property + ReadOnly Property 전력() As Decimal + Get + Return 2.75 + End Get + End Property +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/C사용면적.vb b/ArinWarev1/DataSet/Calculator/Result/C사용면적.vb new file mode 100644 index 0000000..bc4fbd0 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C사용면적.vb @@ -0,0 +1,412 @@ +''' +''' 전체존의 사용면적을 계산및 확인(냉,난,조,급,환) +''' +''' 전체존의 사용면적을 계산및 확인(냉,난,조,급,환) +Public Class C사용면적 + + ''' + ''' 난방 + ''' + ''' 난방 + Property H() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("H")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("H") = value + End If + End Set + End Property + ''' + ''' 냉방 + ''' + ''' 냉방 + Property C() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("C")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("C") = value + End If + End Set + End Property + ''' + ''' 조명 + ''' + ''' 조명 + Property L() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("L")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("L") = value + End If + End Set + End Property + ''' + ''' 급탕 + ''' + ''' 급탕 + Property W() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("W")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("W") = value + End If + End Set + End Property + ''' + ''' 환기 + ''' + ''' 환기 + Property V() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("V")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("V") = value + End If + End Set + End Property + + + ''' + ''' 난방_WF + ''' + ''' 난방 + Property H_WF() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("H_WF")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("H_WF") = value + End If + End Set + End Property + ''' + ''' 냉방_WF + ''' + ''' 냉방 + Property C_WF() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("C_WF")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("C_WF") = value + End If + End Set + End Property + ''' + ''' 조명_WF + ''' + ''' 조명 + Property L_WF() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("L_WF")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("L_WF") = value + End If + End Set + End Property + ''' + ''' 급탕_WF + ''' + ''' 급탕 + Property W_WF() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("W_WF")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("W_WF") = value + End If + End Set + End Property + ''' + ''' 환기_WF + ''' + ''' 환기 + Property V_WF() As Decimal + Get + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Return 0 + Else + Return TOSG(DSETR.사용면적(0)("V_WF")) + End If + End Get + Set(ByVal value As Decimal) + If DSETR.사용면적.Rows.Count = 0 Then + LogSB.AppendLine("사용면적이 계산되지않았습니다" & vbCrLf & "값을 가져올 수 없습니다") + Else + DSETR.사용면적(0)("V_WF") = value + End If + End Set + End Property + + Public Overridable Sub Calc() + + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + pLog.Add(">> C사용면적.Calc") + pLog.Add(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>") + + Dim A_H As Decimal = 0 + Dim A_C As Decimal = 0 + Dim A_L As Decimal = 0 + Dim A_W As Decimal = 0 + Dim A_V As Decimal = 0 + '//용도별 면적가중치(wf) 추가 '2012.07.01 + Dim A_H_wf As Decimal = 0 + Dim A_C_wf As Decimal = 0 + Dim A_L_wf As Decimal = 0 + Dim A_W_wf As Decimal = 0 + Dim A_V_wf As Decimal = 0 + Dim day_year As Decimal + '//'2012.07.01 + + If DSETR.사용면적.Rows.Count = 0 Then '//데결과가 없으면 신규줄을 기록한다. + Dim Dr As DSR.사용면적Row = DSETR.사용면적.New사용면적Row + Dr.H = 0 : Dr.C = 0 : Dr.L = 0 : Dr.W = 0 : Dr.V = 0 + DSETR.사용면적.Add사용면적Row(Dr) + DSETR.AcceptChanges() + End If + + '//건물용도 + Dim 건물용도 As Integer = CInt(DSET.tbl_Desc.Rows(0)("isjugo")) + + '//A_H,C,W,L,V 의 누적값을 계산(사용면적) '//모든존을 대상으로 + + For Each Dr존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") + + Dim Dr프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & Dr존.프로필 & "'")(0), DS.tbl_profileRow) + + Dim offset As Integer = 1 + If Dr프로필.code = "0016" Then + If Dr존.조명부하산출방법 = "입력치" Then + If Dr존.조명에너지부하율입력치 > 10 Then + offset = ((Dr존.조명에너지부하율입력치 - 10) * 0.4 + 10) / Dr존.조명에너지부하율입력치 + End If + ElseIf Dr존.조명부하산출방법 = "계산치" Then + If Dr존.조명에너지부하율계산치 > 10 Then + offset = ((Dr존.조명에너지부하율계산치 - 10) * 0.4 + 10) / Dr존.조명에너지부하율계산치 + End If + End If + End If + + pLog.Add(String.Format(">> Zone({0})Row Offset={1}", Dr존.code, offset)) + + '//냉난방(HC) 이거나 난방(H)일경우 난방면적 누적 + If Dr존.냉난방방식.IndexOf("난") <> -1 OrElse Dr존.냉난방공조.IndexOf("난") <> -1 Then + A_H += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) + If 건물용도 < 10 Then '//주거일경우에 + + '//연 + + A_H_wf = A_H + + Else + day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) + 'A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3)) + + A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + + 'If Dr프로필.code <> "0010" Then + ' A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + 'Else + ' A_H_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.503 / 0.314), 3) '//전산실 용도에 따른 난방 가중치 적용 + 'End If + + End If + + pLog.Add(String.Format(">> Zone({0})Row A_H_wf={1}", Dr존.code, A_H_wf)) + End If + + + + '//냉난방(hC) 이거나 냉방(C)일경우 냉방면적 누적 + If Dr존.냉난방방식.IndexOf("냉") <> -1 OrElse Dr존.냉난방공조.IndexOf("냉") <> -1 Then + A_C += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) + + If 건물용도 < 10 Then + A_C_wf = A_C + Else + day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) + 'A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3)) + + A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + + 'If Dr프로필.code <> "0010" Then + ' A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + 'Else + ' A_C_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)) / (0.196 / 0.314), 3) '//전산실 용도에 따른 냉방 가중치 적용 + 'End If + + End If + + pLog.Add(String.Format(">> Zone({0})Row A_C={1},A_C_wf={2}", Dr존.code, A_C, A_C_wf)) + End If + + + + '//급탕요구량이 있다면 급탕면적 누적 + If TOSG(Dr프로필.일일급탕요구량) > 0 Then + + A_W += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) + + + If 건물용도 < 10 Then + A_W_wf = A_W + Else + day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) + 'A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일급탕요구량) * Math.Round(day_year / (30 * 250), 3)) 160211 소수점오류인한 수정 + A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일급탕요구량) * (day_year / (30 * 250)), 3) + End If + + pLog.Add(String.Format(">> Zone({0})Row A_W={1},A_W_wf={2}", Dr존.code, A_W, A_W_wf)) + + End If + + '//조명의 에너지부하율값이 있으면 조명면적 누적 + If Dr존.조명에너지부하율계산치 <> "0" OrElse Dr존.조명에너지부하율입력치 <> "0" Then + A_L += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) + + If 건물용도 < 10 Then + '//가스를쓰는 난방 급탕은 계가 발생 + A_L_wf = A_L + Else + day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) + 'A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일사용시간) * Math.Round(day_year / (9 * 250), 3) * offset) + A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일사용시간) * (day_year / (9 * 250)), 3) * offset + End If + + pLog.Add(String.Format(">> Zone({0})Row A_L={1},A_L_wf={2}", Dr존.code, A_L, A_L_wf)) + End If + + '//냉난방공조를 사용하고있다면 환기면적 누적(ZZ:기능없음) + If (Dr존.냉난방공조 <> "기능없음") Then + A_V += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) + + If 건물용도 < 10 Then + A_V_wf = A_V + Else + day_year = TOSG(Dr프로필.day01) + TOSG(Dr프로필.day02) + TOSG(Dr프로필.day03) + TOSG(Dr프로필.day04) + TOSG(Dr프로필.day05) + TOSG(Dr프로필.day06) + TOSG(Dr프로필.day07) + TOSG(Dr프로필.day08) + TOSG(Dr프로필.day09) + TOSG(Dr프로필.day10) + TOSG(Dr프로필.day11) + TOSG(Dr프로필.day12) + 'A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * (TOSG(Dr프로필.일일운전시간) * Math.Round(day_year / (11 * 250), 3)) + A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) + End If + + pLog.Add(String.Format(">> Zone({0})Row A_V={1},A_V_wf={2}", Dr존.code, A_V, A_V_wf)) + + End If + + Next + + '//저장소에 보관한다. + '//가중치 없는 사용면적 + Result.사용면적.H = A_H + Result.사용면적.C = A_C + Result.사용면적.L = A_L + Result.사용면적.W = A_W + Result.사용면적.V = A_V + + pLog.Add("C사용면적.CALC 결과 : 가중치없음") + pLog.Add(String.Format("H={0},C={1},L={2},W={3},V={4}", A_H, A_C, A_L, A_W, A_V)) + + + '// 가중치 있는 사용면적 '2013.07.01 + Result.사용면적.H_WF = A_H_wf + Result.사용면적.C_WF = A_C_wf + Result.사용면적.L_WF = A_L_wf + Result.사용면적.W_WF = A_W_wf + Result.사용면적.V_WF = A_V_wf + + pLog.Add("C사용면적.CALC 결과 : 가중치적용") + pLog.Add(String.Format("H_wf={0},C_wf={1},L_wf={2},W_wf={3},V_wf={4}", A_H_wf, A_C_wf, A_L_wf, A_W_wf, A_V_wf)) + End Sub + + Private DSETR As DSR + Private Result As CResult + Private DSET As DS + Public Sub New(ByRef pds As DS, ByRef pdsetr As DSR, ByRef presult As CResult) + + If Not pLog Is Nothing Then + pLog.Add("New C사용면적", True) + End If + + DSET = pds + DSETR = pdsetr + Result = presult + End Sub +End Class \ No newline at end of file diff --git a/ArinWarev1/DataSet/Calculator/Result/C생산에너지.vb b/ArinWarev1/DataSet/Calculator/Result/C생산에너지.vb new file mode 100644 index 0000000..6ff7190 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C생산에너지.vb @@ -0,0 +1,272 @@ +'// 0월합계에대한 처리는 하였음 +'// 완료일자 : 2010-03-08 + +Public Class C생산에너지 + Public Mon As String + Private MIdx As Integer + Private ErrMsg As String = "에너지소요량 계산되지 않았습니다" + + 'Public Sub Calc_Summary() + ' '// + ' If MIdx <> 0 Then + ' MsgBox("계산식은 0번 합계배열만 가능합니다") + ' Return + ' End If + + ' Dim I1 as decimal = 0 + ' Dim I2 as decimal = 0 + ' Dim I3 as decimal = 0 + ' Dim I4 as decimal = 0 + ' Dim I5 as decimal = 0 + ' Dim I6 as decimal = 0 + ' For i As Integer = 1 To 12 + ' '//12월을 다더해서 0번열에 기록한다. + ' I1 += Result.생산E(i).태양광전력생산량 + ' I2 += Result.생산E(i).열병합전력생산량 + ' I3 += Result.생산E(i).태양열생산량 + ' I4 += Result.생산E(i).지열생산량 + ' I5 += Result.생산E(i).면적당생산량태양열 + ' I6 += Result.생산E(i).면적당생산량지열 + ' Next + ' Me.태양광전력생산량 = I1 + ' Me.열병합전력생산량 = I2 + ' Me.태양열생산량 = I3 + ' Me.지열생산량 = I4 + ' Me.면적당생산량태양열 = I5 + ' Me.면적당생산량지열 = I6 + 'End Sub + + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0) + DSETR = pdsetr + Result = presult + MIdx = pmIdx + Mon = "M" & Format(MIdx, "00") + End Sub + Property 태양광전력생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).태양광전력생산량 + Next + Return Res + Else + Return TOSG(DR(0)("전력태양광")) + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + ' MsgBox("태양광기록(" & Mon & ")") + DR(0)("전력태양광") = value + End If + End Set + End Property + Property 열병합전력생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).열병합전력생산량 + Next + Return Res + Else + Return TOSG(DR(0)("전력열병합")) + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("전력열병합") = value + End If + End Set + End Property + Property 신재생열병합전력생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).신재생열병합전력생산량 + Next + Return Res + Else + Return TOSG(DR(0)("신재생열병합전력생산량")) + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("신재생열병합전력생산량") = value + End If + End Set + End Property + + Property 신재생면적당열생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).신재생면적당열생산량 + Next + Return Res + Else + Return TOSG(DR(0)("신재생면적당열생산량")) + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("신재생면적당열생산량") = value + End If + End Set + End Property + + + Property 태양열생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).태양열생산량 + Next + Return Res + Else + Return TOSG(DR(0)("생산량태양열")) + End If + + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("생산량태양열") = value + End If + End Set + End Property + Property 지열생산량() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).지열생산량 + Next + Return Res + Else + Return TOSG(DR(0)("생산량지열")) + + End If + + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("생산량지열") = value + End If + End Set + End Property + Property 면적당생산량태양열() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).면적당생산량태양열 + Next + Return Res + Else + Return TOSG(DR(0)("면적당생산량태양열")) + + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("면적당생산량태양열") = value + End If + End Set + End Property + Property 면적당생산량지열() As Decimal + Get + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + 'MsgBox(ErrMsg) + Return 0 + Else + If MIdx = 0 Then '//0월이면 모든월의 합계를 반환한다. + Dim Res As Decimal = 0 + For i As Short = 1 To 12 + Res += Result.생산E(i).면적당생산량지열 + Next + Return Res + Else + Return TOSG(DR(0)("면적당생산량지열")) + End If + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.생산에너지Row = CType(DSETR.생산에너지.Select("mon='" & Mon & "'"), DSR.생산에너지Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("면적당생산량지열") = value + End If + End Set + End Property +End Class + diff --git a/ArinWarev1/DataSet/Calculator/Result/C에너지분석.vb b/ArinWarev1/DataSet/Calculator/Result/C에너지분석.vb new file mode 100644 index 0000000..c185283 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C에너지분석.vb @@ -0,0 +1,355 @@ +Public Class C에너지분석 + Public ZZone As String + Public Mon As String + Private ErrMsg As String = "월에너지분석이 계산되지 않았습니다" + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult, ByVal mIdx As Integer, Optional ByVal pZone As String = "00") + DSETR = pdsetr + Result = presult + Me.ZZone = pZone + Mon = "M" & Format(mIdx, "00") + End Sub + ReadOnly Property 에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "에너지요구량") + Return 0 + Else + Return 난방에너지요구량열(CStr(IIf(Zone <> "00", Zone, ZZone))) + _ + 난방에너지요구량공조환기(CStr(IIf(Zone <> "00", Zone, ZZone))) + _ + 냉방에너지요구량열(CStr(IIf(Zone <> "00", Zone, ZZone))) + _ + 냉방에너지요구량공조환기(CStr(IIf(Zone <> "00", Zone, ZZone))) + _ + 조명에너지요구량(CStr(IIf(Zone <> "00", Zone, ZZone))) + _ + 급탕에너지요구량(CStr(IIf(Zone <> "00", Zone, ZZone))) + End If + End Get + End Property + ReadOnly Property 면적당에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Return Me.난방단위면적당요구량 + Me.냉방단위면적당요구량 + Me.조명단위면적당요구량 + Me.급탕단위면적당요구량 + End Get + End Property + ReadOnly Property 난방에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Return Me.난방에너지요구량열(IIf(Zone <> "00", Zone, ZZone).ToString) + Me.난방에너지요구량공조환기(IIf(Zone <> "00", Zone, ZZone).ToString) + End Get + End Property + + ReadOnly Property 난방단위면적당요구량(Optional ByVal Zone As String = "00") As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방에너지요구량 / Result.사용면적.H + End If + ' Return Me.난방에너지요구량열(Zone) + Me.난방에너지요구량공조환기(Zone) + End Get + End Property + + + Property 난방에너지요구량열(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "난방에너지요구량열") + Return 0 + Else + Return TOSG(DR(0)("난방요구량열")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "난방에너지요구량열") + Else + DR(0)("난방요구량열") = value + End If + End Set + End Property + Property 난방에너지요구량공조환기(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "난방에너지요구량공조환기") + Return 0 + Else + Return TOSG(DR(0)("난방요구량공조")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "난방에너지요구량공조환기") + Else + DR(0)("난방요구량공조") = value + End If + End Set + End Property + + ReadOnly Property 냉방에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Return Me.냉방에너지요구량열(CStr(IIf(Zone <> "00", Zone, ZZone))) + Me.냉방에너지요구량공조환기(CStr(IIf(Zone <> "00", Zone, ZZone))) + End Get + End Property + + ReadOnly Property 냉방단위면적당요구량(Optional ByVal Zone As String = "00") As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.냉방에너지요구량 / Result.사용면적.C + End If + ' Return Me.난방에너지요구량열(Zone) + Me.난방에너지요구량공조환기(Zone) + End Get + End Property + + + Property 냉방에너지요구량열(Optional ByVal Zone As String = "00") As Decimal + Get + + + + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "냉방에너지요구량열") + Return 0 + Else + Return TOSG(DR(0)("냉방요구량열")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "냉방에너지요구량열") + Else + DR(0)("냉방요구량열") = value + End If + End Set + End Property + Property 냉방에너지요구량공조환기(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "냉방에너지요구량공조환기") + Return 0 + Else + Return TOSG(DR(0)("냉방요구량공조")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "냉방에너지요구량공조환기") + Else + DR(0)("냉방요구량공조") = value + End If + End Set + End Property + + Property 조명에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "조명에너지요구량") + Return 0 + Else + Return TOSG(DR(0)("조명요구량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "조명에너지요구량") + Else + DR(0)("조명요구량") = value + End If + End Set + End Property + ReadOnly Property 조명단위면적당요구량(Optional ByVal Zone As String = "00") As Decimal + Get + If Result.사용면적.L = 0 Then + Return 0 + Else + Return Me.조명에너지요구량 / Result.사용면적.L + End If + ' Return Me.난방에너지요구량열(Zone) + Me.난방에너지요구량공조환기(Zone) + End Get + End Property + + Property 급탕에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "급탕요구량") + Return 0 + Else + Return TOSG(DR(0)("급탕요구량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "급탕요구량") + Else + DR(0)("급탕요구량") = value + End If + End Set + End Property + ReadOnly Property 급탕단위면적당요구량(Optional ByVal Zone As String = "00") As Decimal + Get + If Result.사용면적.W = 0 Then + Return 0 + Else + Return Me.급탕에너지요구량 / Result.사용면적.W + End If + ' Return Me.난방에너지요구량열(Zone) + Me.난방에너지요구량공조환기(Zone) + End Get + End Property + Property 공조풍량(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "공조풍량") + Return 0 + Else + Return TOSG(DR(0)("공조풍량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "공조풍량") + Else + DR(0)("공조풍량") = value + End If + End Set + End Property + Property 공조에너지요구량난방(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "공조에너지요구량난방") + Return 0 + Else + Return TOSG(DR(0)("공조요구량난방")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg, MsgBoxStyle.Information, "공조에너지요구량난방") + Else + DR(0)("공조요구량난방") = value + End If + End Set + End Property + Property 공조에너지요구량냉방(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("공조요구량냉방")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("공조요구량냉방") = value + End If + End Set + End Property + Property 공조에너지요구량가습(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("공조요구량가습")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("공조요구량가습") = value + End If + End Set + End Property + Property 환기에너지요구량(Optional ByVal Zone As String = "00") As Decimal + Get + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone = "00", ZZone, Zone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("환기요구량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & IIf(Zone <> "00", Zone, ZZone).ToString & "'"), DSR.월별에너지분석Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("환기요구량") = value + End If + End Set + End Property + Public Sub Calc() + '//Zone 이 00일떄만 계산된다 + + '//여기데이터는 12개가 미리존재한다 그러므로 현재 속한 월말 계산하면된다 + '//현재 월 존에해당하는 데이터가없다면 생성해준다. + Dim Drow As DSR.월별에너지분석Row + If DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='00'").GetUpperBound(0) = -1 Then + Drow = DSETR.월별에너지분석.New월별에너지분석Row + Drow.존 = "00" + Drow.월 = Mon + DSETR.월별에너지분석.Add월별에너지분석Row(Drow) '//기본줄을 추가함 + DSETR.AcceptChanges() + End If + + Dim a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 As Decimal + a2 = 0 : a3 = 0 : a4 = 0 : a5 = 0 : a6 = 0 + a7 = 0 : a8 = 0 : a9 = 0 : a10 = 0 : a11 = 0 : a12 = 0 + For Each Dr As DSR.월별에너지분석Row In DSETR.월별에너지분석.Select("월='" & Mon & "' and 존 <> '00'", "존") + '//존별로 에너지요구량 최상단 합데이터를 갱신한다. + 'Dr.에너지요구량 = Dr.난방요구량열 + Dr.난방요구량공조 + Dr.냉방요구량열 + Dr.냉방요구량공조 + Dr.조명요구량 + Dr.급탕요구량 + 'a1 = a1 + Dr.에너지요구량 + a2 = a2 + Dr.난방요구량열 + a3 = a3 + Dr.난방요구량공조 + a4 = a4 + Dr.냉방요구량열 + a5 = a5 + Dr.냉방요구량공조 + a6 = a6 + Dr.조명요구량 + a7 = a7 + Dr.급탕요구량 + a8 = a8 + Dr.공조풍량 + a9 = a9 + Dr.공조요구량난방 + a10 = a10 + Dr.공조요구량냉방 + a11 = a11 + Dr.공조요구량가습 + a12 = a12 + Dr.환기요구량 + Next + + 'Me.에너지요구량 = a2 + a3 + a4 + a5 + a6 + a7 ㅇ건 Readonlye 로 계산한다. + + Me.난방에너지요구량열 = a2 + Me.난방에너지요구량공조환기 = a3 + Me.냉방에너지요구량열 = a4 + Me.냉방에너지요구량공조환기 = a5 + Me.조명에너지요구량 = a6 + Me.급탕에너지요구량 = a7 + Me.공조풍량 = a8 + Me.공조에너지요구량난방 = a9 + Me.공조에너지요구량냉방 = a10 + Me.공조에너지요구량가습 = a11 + Me.환기에너지요구량 = a12 + ' Next + + End Sub +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/C에너지소요량.vb b/ArinWarev1/DataSet/Calculator/Result/C에너지소요량.vb new file mode 100644 index 0000000..5aaaa11 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C에너지소요량.vb @@ -0,0 +1,401 @@ +Public Class C에너지소요량 + + + Dim Midx As Integer + Public Mon As String + Private ErrMsg As String = "에너지소요량 계산되지 않았습니다" + Private DSETR As DSR + Private Result As CResult + Public Sub New(ByRef pdsetr As DSR, ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0) + DSETR = pdsetr + Result = presult + Mon = "M" & Format(pmIdx, "00") + Me.Midx = pmIdx + End Sub + + Public Sub Calc_Summary() + If Midx <> 0 Then + MsgBox("계산식은 0번 합계필드만 가능합니다.", MsgBoxStyle.Critical, "확인") + Return + End If + Dim I10 As Decimal = 0 + Dim I20 As Decimal = 0 + Dim I30 As Decimal = 0 + Dim I40 As Decimal = 0 + Dim I50 As Decimal = 0 + Dim I60 As Decimal = 0 + + Dim IH As Decimal = 0 + Dim IC As Decimal = 0 + Dim IL As Decimal = 0 + Dim IW As Decimal = 0 + Dim IV As Decimal = 0 + + Dim I4 As Decimal = 0 '//난방 + Dim I5 As Decimal = 0 '//냉방 + Dim I6 As Decimal = 0 '//조명 + Dim I7 As Decimal = 0 '//급탕 + Dim I8 As Decimal = 0 '//환기 + + For i As Integer = 1 To 12 + '//12월을 다더해서 0번열에 기록한다. + I10 += Result.E소요량(i).난방 + I20 += Result.E소요량(i).난방보조 + I30 += Result.E소요량(i).냉방 + I40 += Result.E소요량(i).냉방보조 + I50 += Result.E소요량(i).급탕 + I60 += Result.E소요량(i).급탕보조 + + IH += Result.E소요량(i).난방S + IC += Result.E소요량(i).냉방S + IL += Result.E소요량(i).조명S + IW += Result.E소요량(i).급탕S + IV += Result.E소요량(i).환기S + + I4 += Result.일차E소요량(i).난방전력 + I5 += Result.일차E소요량(i).냉방전력 + I6 += Result.일차E소요량(i).조명전력 + I7 += Result.일차E소요량(i).급탕전력 + I8 += Result.일차E소요량(i).환기전력 + Next + + Me.난방 = I10 + Me.난방보조 = I20 + Me.냉방 = I30 + Me.냉방보조 = I40 + Me.급탕 = I50 + Me.급탕보조 = I60 + + If (I4 + I5 + I6 + I7 + I8 <> 0) Then + Me.난방S = IH - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I4 + Me.냉방S = IC - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I5 + Me.조명S = IL - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I6 + Me.급탕S = IW - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I7 + Me.환기S = IV - (Result.생산E(0).태양광전력생산량 + Result.생산E(0).열병합전력생산량) / (I4 + I5 + I6 + I7 + I8) * I8 + End If + + End Sub + + + ReadOnly Property 소요량() As Decimal + Get + Return 난방S + 냉방S + 조명S + 환기S + 급탕S + End Get + End Property + + ReadOnly Property 면적소요량() As Decimal + Get + Return 난방면적 + 냉방면적 + 조명면적 + 급탕면적 + 환기면적 + End Get + + End Property + Property 난방S() As Decimal + Get + If Midx = 0 Then + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("난방")) + End If + Else + Return 난방 + 난방보조 + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("난방") = value + End If + End Set + End Property + + Property 난방() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("난방에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("난방에너지소요량") = value + End If + End Set + End Property + Property 난방보조() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("난방보조에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("난방보조에너지소요량") = value + End If + End Set + End Property + ReadOnly Property 난방면적() As Decimal + Get + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방S / Result.사용면적.H + End If + End Get + End Property + Property 냉방S() As Decimal + Get + If Midx = 0 Then + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("냉방")) + End If + Else + Return 냉방 + 냉방보조 + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("냉방") = value + End If + End Set + End Property + Property 냉방() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("냉방에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("냉방에너지소요량") = value + End If + End Set + End Property + Property 냉방보조() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("냉방보조에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("냉방보조에너지소요량") = value + End If + End Set + End Property + ReadOnly Property 냉방면적() As Decimal + Get + If Result.사용면적.C = 0 Then + Return 0 + Else + Return Me.냉방S / Result.사용면적.C + End If + End Get + End Property + Property 조명S() As Decimal + Get + If Midx = 0 Then + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("조명")) + End If + Else + Return Result.E분석(Midx).조명에너지요구량 + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("조명") = value + End If + End Set + End Property + ReadOnly Property 조명면적() As Decimal + Get + If Result.사용면적.L = 0 Then + Return 0 + Else + Return Me.조명S / Result.사용면적.L + End If + End Get + End Property + + Property 급탕S() As Decimal + Get + If Midx = 0 Then + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("급탕")) + End If + Else + Return 급탕 + 급탕보조 + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("급탕") = value + End If + End Set + End Property + Property 급탕() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\급탕에너지소요량.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("Mon 급탕에너지소요량") + ' End If + ' b.AppendLine(Mon + vbTab + DR(0)("급탕에너지소요량").ToString) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + + Return TOSG(DR(0)("급탕에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("급탕에너지소요량") = value + End If + End Set + End Property + Property 급탕보조() As Decimal + Get + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + +#If DEBUG Then + 'Dim f As String = "c:\temp\1\급탕보조에너지소요량.txt" + 'Dim b As New System.Text.StringBuilder + 'If System.IO.File.Exists(f) = False Then + ' b.AppendLine("Mon 급탕보조에너지소요량") + 'End If + 'b.AppendLine(Mon + vbTab + DR(0)("급탕보조에너지소요량").ToString) + 'My.Computer.FileSystem.WriteAllText(f, b.ToString, True) +#End If + + Return TOSG(DR(0)("급탕보조에너지소요량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("급탕보조에너지소요량") = value + End If + End Set + End Property + ReadOnly Property 급탕면적() As Decimal + Get + If Result.사용면적.W = 0 Then + Return 0 + Else + + '#If DEBUG Then + ' Dim f As String = "c:\temp\1\급탕면적.txt" + ' Dim b As New System.Text.StringBuilder + ' If System.IO.File.Exists(f) = False Then + ' b.AppendLine("급탕S 사용면적") + ' End If + ' b.AppendLine(급탕S.ToString() + vbTab + Result.사용면적.W.ToString) + ' My.Computer.FileSystem.WriteAllText(f, b.ToString, True) + '#End If + + Return 급탕S / Result.사용면적.W + End If + End Get + End Property + Property 환기S() As Decimal + Get + If Midx = 0 Then + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("환기")) + End If + Else + Return Result.E분석(Midx).환기에너지요구량 + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.에너지소요량Row = CType(DSETR.에너지소요량.Select("mon='" & Mon & "'"), DSR.에너지소요량Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("환기") = value + End If + End Set + End Property + ReadOnly Property 환기면적() As Decimal + Get + If Result.사용면적.V = 0 Then + Return 0 + Else + Return 환기S / Result.사용면적.V + End If + End Get + End Property +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/C에너지요구량.vb b/ArinWarev1/DataSet/Calculator/Result/C에너지요구량.vb new file mode 100644 index 0000000..c0b3d03 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C에너지요구량.vb @@ -0,0 +1,224 @@ +Public Class C에너지요구량 + + Dim Midx As Integer + Public Mon As String + Private ErrMsg As String = "에너지요구량 계산되지 않았습니다" + Private Result As CResult + Public Sub New(ByRef presult As CResult, Optional ByVal pmIdx As Integer = 0) + Result = presult + Mon = "M" & Format(pmIdx, "00") + Me.Midx = pmIdx + End Sub + + ReadOnly Property 요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).요구량 + Next + Return R + Else + Return 난방요구량 + 냉방요구량 + 조명요구량 + 급탕요구량 + End If + End Get + End Property + ReadOnly Property 면적당요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).면적당요구량 + Next + Return R + Else + Return 난방면적 + 냉방면적 + 조명면적 + 급탕면적 + End If + End Get + End Property + +#Region "난방요구량" + ReadOnly Property 난방요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).난방요구량 + Next + Return R + Else + Return Me.난방열 + Me.난방공조 + End If + End Get + End Property + ReadOnly Property 난방열() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E분석(i).난방에너지요구량열 + Next + Return R + Else + Return Result.E분석(Midx).난방에너지요구량열 + End If + End Get + End Property + ReadOnly Property 난방공조() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E분석(i).난방에너지요구량공조환기 + Next + Return R + Else + Return Result.E분석(Midx).난방에너지요구량공조환기 + End If + End Get + End Property + ReadOnly Property 난방면적() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).난방면적 + Next + Return R + Else + If Result.사용면적.H = 0 Then + Return 0 + Else + Return Me.난방요구량 / Result.사용면적.H + End If + End If + End Get + End Property +#End Region + +#Region "냉방요구량" + ReadOnly Property 냉방요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).냉방요구량 + Next + Return R + Else + Return Me.냉방열 + Me.냉방공조 + End If + End Get + End Property + ReadOnly Property 냉방열() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E분석(i).냉방에너지요구량열 + Next + Return R + Else + Return Result.E분석(Midx).냉방에너지요구량열 + End If + End Get + End Property + ReadOnly Property 냉방공조() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E분석(i).냉방에너지요구량공조환기 + Next + Return R + Else + Return Result.E분석(Midx).냉방에너지요구량공조환기 + End If + End Get + End Property + ReadOnly Property 냉방면적() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).냉방면적 + Next + Return R + Else + If Result.사용면적.C = 0 Then + Return 0 + Else + Return Me.냉방요구량 / Result.사용면적.C + End If + End If + End Get + End Property +#End Region + +#Region "조명요구량" + ReadOnly Property 조명요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).조명요구량 + Next + Return R + Else + Return Result.E분석(Midx).조명에너지요구량 + End If + End Get + End Property + ReadOnly Property 조명면적() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).조명면적 + Next + Return R + Else + If Result.사용면적.L = 0 Then + Return 0 + Else + Return Me.조명요구량 / Result.사용면적.L + End If + End If + End Get + End Property +#End Region + +#Region "급탕요구량" + ReadOnly Property 급탕요구량() As Decimal + Get + If Midx = 0 Then '//누적데이터 + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).급탕요구량 + Next + Return R + Else + Return Result.E분석(Midx).급탕에너지요구량 + End If + End Get + End Property + ReadOnly Property 급탕면적() As Decimal + Get '//월별 에너지분석에서 난방요구량 + If Midx = 0 Then + Dim R As Decimal = 0 + For i As Integer = 1 To 12 + R += Result.E요구량(i).급탕면적 + Next + Return R + Else + If Result.사용면적.W = 0 Then + Return 0 + Else + Return Me.급탕요구량 / Result.사용면적.W + End If + End If + End Get + End Property +#End Region + +End Class diff --git a/ArinWarev1/DataSet/Calculator/Result/C최대냉난방부하.vb b/ArinWarev1/DataSet/Calculator/Result/C최대냉난방부하.vb new file mode 100644 index 0000000..8a39f91 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Result/C최대냉난방부하.vb @@ -0,0 +1,264 @@ + +Public Class C최대냉난방부하 + Private DSETR As DSR + Public Sub New(ByRef pdsetr As DSR) '//존은초기화값을 가지고 생성한다. + DSETR = pdsetr + End Sub + Public Function Item(Optional ByVal ZoneCode As String = "00") As Citem + Return New Citem(DSETR, ZoneCode) + End Function + + Public Sub Calc_Summary() + '//Zone 이 00일떄만 계산된다 + + Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 As Decimal + a1 = 0 : a2 = 0 : a3 = 0 : a4 = 0 : a5 = 0 : a6 = 0 + a7 = 0 : a8 = 0 : a9 = 0 : a10 = 0 + Dim Exist As Boolean = False + + For Each Dr As DSR.최대냉난방부하Row In DSETR.최대냉난방부하.Select("Zone <> '00'", "Zone") + If Exist = False Then Exist = True + ' Dr.최대냉난방부하 = Dr.최대난방기기부하 + Dr.최대냉방기기부하 + a1 += Dr.최대난방기기부하 + a2 += Dr.최대난방실내부하 + 'a3 += Dr.난방최대가동시간 + a4 += Dr.최대가열성능 + a5 += Dr.최대냉방기기부하 + a6 += Dr.최대냉방실내부하 + 'a7 += Dr.냉방최대가동시간 + a8 += Dr.최대냉각성능 + a9 += Dr.최대가습성능 + a10 += Dr.공조풍량 + Next + + If Exist = False Then + MsgBox("각존별 계산이 되어있지않아서 값을 계산할 수 없습니다", MsgBoxStyle.Critical, "확인") + Return + End If + + Me.Item("00").최대난방기기부하 = a1 + Me.Item("00").최대난방실내부하 = a2 + Me.Item("00").일일난방최대가동시간 = a3 + Me.Item("00").최대가열성능 = a4 + Me.Item("00").최대냉방기기부하 = a5 + Me.Item("00").최대냉방실내부하 = a6 + Me.Item("00").일일냉방최대가동시간 = a7 + Me.Item("00").최대냉각성능 = a8 + Me.Item("00").최대가습성능 = a9 + Me.Item("00").공조풍량 = a10 + + End Sub + + Public Class Citem + Private Zone As String + Dim ErrMsg As String = "최대냉난방부하가 계산되지 않았습니다" + Private DSETR As DSR + Public Sub New(ByRef pdsetr As DSR, Optional ByVal pZone As String = "00") '//존은초기화값을 가지고 생성한다. + DSETR = pdsetr + Zone = pZone + End Sub + ReadOnly Property 최대냉난방부하() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(Me.최대난방기기부하 + Me.최대냉방기기부하) + End If + End Get + End Property + Property 최대난방기기부하() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대난방기기부하")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대난방기기부하") = value + End If + End Set + End Property + Property 최대난방실내부하() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대난방실내부하")) + End If + + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대난방실내부하") = value + End If + End Set + End Property + Property 일일난방최대가동시간() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("난방최대가동시간")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("난방최대가동시간") = value + End If + End Set + End Property + Property 최대가열성능() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대가열성능")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대가열성능") = value + End If + End Set + End Property + Property 최대냉방기기부하() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대냉방기기부하")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대냉방기기부하") = value + End If + End Set + End Property + Property 최대냉방실내부하() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대냉방실내부하")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대냉방실내부하") = value + End If + End Set + End Property + Property 일일냉방최대가동시간() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("냉방최대가동시간")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("냉방최대가동시간") = value + End If + End Set + End Property + Property 최대냉각성능() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대냉각성능")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대냉각성능") = value + End If + End Set + End Property + Property 최대가습성능() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("최대가습성능")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("최대가습성능") = value + End If + End Set + End Property + Property 공조풍량() As Decimal + Get + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Return 0 + Else + Return TOSG(DR(0)("공조풍량")) + End If + End Get + Set(ByVal value As Decimal) + Dim DR() As DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & Zone & "'"), DSR.최대냉난방부하Row()) + If DR.GetUpperBound(0) = -1 Then + MsgBox(ErrMsg) + Else + DR(0)("공조풍량") = value + End If + End Set + End Property + End Class + +End Class diff --git a/ArinWarev1/DataSet/Calculator/Summary/CSummary.vb b/ArinWarev1/DataSet/Calculator/Summary/CSummary.vb new file mode 100644 index 0000000..945d517 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Summary/CSummary.vb @@ -0,0 +1,899 @@ +Public Class CSummary + + Public Sub New() + + End Sub + + ''' + ''' 모든 집계데이터를 갱신합니다. + ''' + ''' + Public Sub All() + + ''TMon() + '/// + + Work_msg("최종데이터 집계중...") + Frm_Work.ProgressBar1.Maximum = 12 + Frm_Work.ProgressBar1.Minimum = 0 + Frm_Work.ProgressBar1.Value = 0 + Frm_Work.ProgressBar1.Visible = False + Frm_Work.TopMost = True + Frm_Work.Show() + + + For Each Dr As C에너지분석 In Result.E분석 '//12달치의 각존들의 데이터를 가지고 합계내역을 추린다. '//LoadOfZone 에서 계산완료한다. + Dr.Calc() + Next + Result.최대부하.Calc_Summary() '//최대냉난방부하(합계-zone='00') 계산 + 'Result.생산E(0).Calc_Summary() '//합계필드(M00)에데이터를 누적합니다. + Result.일차E소요량(0).Calc_Summary() '//1차소요량의 합계데이터를 계산 + Result.E소요량(0).Calc_Summary() '//1차소요량의 합계데이터를 계산 + + 'TReqUse_M01M12() '//이것들은 현재 사용하지 않고있다. + 'TReqUse_M00() '//현재 사용하지않고있따. + + Me.Make_ResultSheet() '//최종결과를 보여주는 시트를 작성한다. + DSETR.AcceptChanges() '//변경된모든내용을 적용함 + End Sub + +#Region "미사용개체" + + ''' + ''' 1월부터 10월까지 집계데이터를 계산한다. + ''' + ''' + Public Sub TReqUse_M01M12() + Dim MOn As String + For i As Short = 1 To 12 + 'MOn = "M" & Format(i, "00") + 'Dim DR() As DSR.TReqUseRow = CType(DSETR.TReqUse.Select("", "code"), DSR.TReqUseRow()) + + + ''//////////////////////////////////// + '' 연간 Co2 배출량 + ''//////////////////////////////////// + + ''조명/환기에너지소요량 + 'DR(56 - 1)(MOn) = CType(DSETR.월별에너지분석.Select("월='" & MOn & "' and 존='00'")(0), DSR.월별에너지분석Row).조명요구량 + 'DR(57 - 1)(MOn) = CType(DSETR.월별에너지분석.Select("월='" & MOn & "' and 존='00'")(0), DSR.월별에너지분석Row).환기요구량 + + ''//SUMProduct 계산 + 'Dim Acc1 as decimal = 0 + 'Dim Acc2 as decimal = 0 + 'For j As Short = 41 To 57 + ' Acc1 += Ru(j, MOn) * Ru(j, "sign") + 'Next + 'For j As Short = 58 To 59 + ' Acc2 += Ru(j, MOn) * Ru(j, "sign") + 'Next + 'Ru(ResultRow.CO2_연간배출량, MOn) = Acc1 - Acc2 '//최상단 합계(연가Co2배출량 + + ''//Excel 67번줄데이터가 필요하므로 먼저계산한다..해당데이터는 마지막(64번줄에 할당함) + ''//(I95+I96)/(I76+I82+I88+I90+I92)*$C$76 + 'Ru(64, MOn) = (Ru(58, MOn) + Ru(59, MOn)) / (Ru(45, MOn) + Ru(50, MOn) + Ru(55, MOn) + Ru(56, MOn) + Ru(57, MOn)) * Ru(45, "sign") + + ''//난방에너지소요량(계수(sign)* Sumproduct) + 'Dim ACc_Nan as decimal = 0 + 'For j As Short = 41 To 45 + ' ACc_Nan += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + 'Dim ACc_Naeng as decimal = 0 + 'For j As Short = 46 To 50 + ' ACc_Naeng += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + 'Dim ACc_KUb as decimal = 0 + 'For j As Short = 51 To 55 + ' ACc_KUb += CSng(DR(j - 1)(MOn)) * CSng(DR(j - 1)("sign")) + 'Next + + + ''//67>64 + ''IF(csng(ru(7,"00"))=0,0,(ACc_Nan-ru(45,mon)*ru(64,mon))/$H$15)+IF($H$20=0,0,(SUMPRODUCT($C$78:$C$82,I78:I82)-I82*I67)/$H$20)+IF($H$26=0,0,(SUMPRODUCT($C$84:$C$88,I84:I88)-I88*I67)/$H$26)+IF($H$23=0,0,($C$90*I90-I90*I67)/$H$23)+IF($H$27=0,0,($C$92*I92-I92*I67)/$H$27) + ''IF(csng(ru(7))=0,0,(ACc_Nan-ru(45,mon)*ru(64,mon))/ru(7))+IF(ru(12)=0,0,(acc_naeng-ru(50,mon)*ru(64,mon))/ru(12))+IF(ru(18)=0,0,(acc_kub-ru(55,mon)*ru(64,mon))/ru(18))+IF(ru(15)=0,0,(ru(56,"sign")*ru(56,mon)-ru(56,mon)*ru(64,mon))/ru(15))+IF(ru(19)=0,0,(ru(57,"sign")*ru(57,mon)-ru(57,mon)*ru(64,mon))/ru(19)) + + ''//단위면적당Co2배출량) + 'If Ru(ResultRow.요구량_난방_사용면적) = 0 Then + ' Ru(ResultRow.CO2_단위면적당배출량, MOn) = 0 + 'Else + ' '(ACc_Nan-ru(45,mon)*ru(64,mon))/ru(7))+IF(ru(12)=0,0,(acc_naeng-ru(50,mon)*ru(64,mon))/ru(12))+IF(ru(18)=0,0,(acc_kub-ru(55,mon)*ru(64,mon))/ru(18))+IF(ru(15)=0,0,(ru(56,"sign")*ru(56,mon)-ru(56,mon)*ru(64,mon))/ru(15))+IF(ru(19)=0,0,(ru(57,"sign")*ru(57,mon)-ru(57,mon)*ru(64,mon))/ru(19) + ' Ru(ResultRow.CO2_단위면적당배출량, MOn) = (ACc_Nan - Ru(45, MOn) * Ru(64, MOn)) / Ru(7) + CSng(IIf(Ru(12) = 0, 0, (ACc_Naeng - Ru(50, MOn) * Ru(64, MOn)) / Ru(12))) + CSng(IIf(Ru(18) = 0, 0, (ACc_KUb - Ru(55, MOn) * Ru(64, MOn)) / Ru(18))) + CSng(IIf(Ru(15) = 0, 0, (Ru(56, "sign") * Ru(56, MOn) - Ru(56, MOn) * Ru(64, MOn)) / Ru(15))) + CSng(IIf(Ru(19) = 0, 0, (Ru(57, "sign") * Ru(57, MOn) - Ru(57, MOn) * Ru(64, MOn)) / Ru(19))) + 'End If + Next + End Sub + + ''' + ''' 에너지요구량및소요량 테이블의 M00(합계)를 누적(M01~M12)로 채웁니다. 그렇지않은건 이후에 합계프로시져별도로 생성함 + ''' + ''' + Public Sub TReqUse_M00() + ''//LT(LineType 이 SL Sum Line 인경우가져와서 m00 = m01~m12 한다 + 'Dim DR() As DSR.TReqUseRow = CType(DSETR.TReqUse.Select("", "code"), DSR.TReqUseRow()) + 'For Each Drs As DSR.TReqUseRow In DSETR.TReqUse.Select("lt='SL'") + ' Drs.M00 = Drs.M01 + Drs.M02 + Drs.M03 + Drs.M04 + Drs.M05 + Drs.M06 + Drs.M07 + Drs.M08 + Drs.M09 + Drs.M10 + Drs.M11 + Drs.M12 + 'Next + + ''//커스텀 합계필드 계산 + + ''자주사용되는 SUM(1~12)를 미리 계산해둔다 + 'Dim L45, L50, L55, L56, L57, L22, L27, L31, L33, L37 as decimal : Dim Drow As DSR.TReqUseRow + 'Drow = CType(DSETR.TReqUse.Rows(45 - 1), DSR.TReqUseRow) + 'L45 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(50 - 1), DSR.TReqUseRow) + 'L50 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(55 - 1), DSR.TReqUseRow) + 'L55 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(56 - 1), DSR.TReqUseRow) + 'L56 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(57 - 1), DSR.TReqUseRow) + 'L57 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(22 - 1), DSR.TReqUseRow) + 'L22 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(27 - 1), DSR.TReqUseRow) + 'L27 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(31 - 1), DSR.TReqUseRow) + 'L31 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(33 - 1), DSR.TReqUseRow) + 'L33 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + 'Drow = CType(DSETR.TReqUse.Rows(37 - 1), DSR.TReqUseRow) + 'L37 = Drow.M01 + Drow.M02 + Drow.M03 + Drow.M04 + Drow.M05 + Drow.M06 + Drow.M07 + Drow.M08 + Drow.M09 + Drow.M10 + Drow.M11 + Drow.M12 + + ''//실제 데이터 집계 + 'Drow = CType(DSETR.TReqUse.Rows(45 - 1), DSR.TReqUseRow) + 'Drow.M00 = L45 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L45 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + + + 'Drow = CType(DSETR.TReqUse.Rows(50 - 1), DSR.TReqUseRow) + 'Drow.M00 = L50 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 ' + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L50 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + + 'Drow = CType(DSETR.TReqUse.Rows(55 - 1), DSR.TReqUseRow) + 'Drow.M00 = L55 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L55 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + + 'Drow = CType(DSETR.TReqUse.Rows(56 - 1), DSR.TReqUseRow) + 'Drow.M00 = L56 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L56 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + + 'Drow = CType(DSETR.TReqUse.Rows(57 - 1), DSR.TReqUseRow) + 'Drow.M00 = L57 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L57 + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then Drow.M00 = L57 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L57 + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(22 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L22 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + 'Drow.COLG = L22 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L45 + '' End If + + 'Drow = CType(DSETR.TReqUse.Rows(27 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L27 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + 'Drow.COLG = L27 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L50 + '' End If + + 'Drow = CType(DSETR.TReqUse.Rows(31 - 1), DSR.TReqUseRow) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L31 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + 'Drow.COLG = L31 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L56 + '' End If + + + 'Drow = CType(DSETR.TReqUse.Rows(33 - 1), DSR.TReqUseRow) + ''If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L33 - (DR(58 - 1).M00 + DR(59 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + 'Drow.COLG = L33 - (DR(58 - 1).M00) / (L45 + L50 + L55 + L56 + L57) * L55 + '' End If + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(20 - 1), DSR.TReqUseRow) + 'Drow.M00 = DR(22 - 1).M00 + DR(27 - 1).M00 + DR(31 - 1).M00 + DR(33 - 1).M00 + DR(37 - 1).M00 + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(26 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(7 - 1).M00 = 0, 0, DR(22 - 1).M00 / DR(7 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(30 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(12 - 1).M00 = 0, 0, DR(27 - 1).M00 / DR(12 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(32 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(15 - 1).M00 = 0, 0, DR(31 - 1).M00 / DR(15 - 1).M00)) + + 'Drow = CType(DSETR.TReqUse.Rows(36 - 1), DSR.TReqUseRow) + 'Drow.M00 = CSng(IIf(DR(18 - 1).M00 = 0, 0, DR(33 - 1).M00 / DR(18 - 1).M00)) + + + ''=SUM(I58:T58)-(H95+H96)/(SUM(I76:T76)+SUM(I82:T82)+SUM(I88:T88)+SUM(I90:T90)+SUM(I92:T92))*SUM(I92:T92) + ''=L37-(ru(58)+ru(59))/(L45+L50+L55+L56+L57)*L57 + 'Drow = CType(DSETR.TReqUse.Rows(37 - 1), DSR.TReqUseRow) '//환기에너지소요량(X) + '' If (L45 + L50 + L55 + L56 + L57) <> 0 Then + 'Drow.M00 = L37 - (Ru(58) + Ru(59)) / (L45 + L50 + L55 + L56 + L57) * L57 + 'Drow.COLG = L37 - (Ru(58)) / (L45 + L50 + L55 + L56 + L57) * L57 + '' End If + + + 'Drow = CType(DSETR.TReqUse.Rows(38 - 1), DSR.TReqUseRow) '//환기에너지 단위면적당 소요량 + 'Drow.M00 = CSng(IIf(Ru(19) = 0, 0, Ru(37) / Ru(19))) + + ''// + 'Drow = CType(DSETR.TReqUse.Rows(21 - 1), DSR.TReqUseRow) + 'Drow.M00 = DR(26 - 1).M00 + DR(30 - 1).M00 + DR(32 - 1).M00 + DR(36 - 1).M00 + DR(38 - 1).M00 + + End Sub + + +#End Region + + Public Sub Make_ResultSheet() + '//에너지요구량 + DSETR.TReqUse.Clear() + DSETR.TReqUse.AcceptChanges() + + Dim Array As New ArrayList + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).요구량) + Next + Set_ReqUseRow("100", "에너지요구량", "[kWh]", "Qb", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).면적당요구량) + Next + Set_ReqUseRow("100", "단위면적당 에너지 요구량", "[kWh/m²]", "Σ(Qb / Ab)", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방요구량) + Next + Set_ReqUseRow("110", "난방에너지 요구량", "[kWh]", "QH,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방열) + Next + Set_ReqUseRow("110", "난방에너지 요구량(열)", "[kWh]", "Qh,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방공조) + Next + Set_ReqUseRow("110", "난방에너지 요구량(공조,환기)", "[kWh]", "Qh*,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).난방면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QH,b / AH", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(난방)", "[m²]", "AH", "=", Result.사용면적.H, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방요구량) + Next + Set_ReqUseRow("110", "냉방에너지 요구량", "[kWh]", "QC,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방열) + Next + Set_ReqUseRow("110", "냉방에너지 요구량(열)", "[kWh]", "Qc,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방공조) + Next + Set_ReqUseRow("110", "냉방에너지 요구량(공조,환기)", "[kWh]", "Qc*,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).냉방면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QC,b / AC", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(냉방)", "[m²]", "AC", "=", Result.사용면적.C, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).조명요구량) + Next + Set_ReqUseRow("110", "조명에너지 요구량", "[kWh]", "QL,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).조명면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QL,b / AL", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(조명)", "[m²]", "AL", "=", Result.사용면적.L, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).급탕요구량) + Next + Set_ReqUseRow("110", "급탕에너지 요구량", "[kWh]", "QW,b", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E요구량(i).급탕면적) + Next + Set_ReqUseRow("110", "단위면적당 요구량", "[kWh/m²]", "QW,b / AW", "=", Array, "N1") + Set_ReqUseRow("110", "사용면적(급탕)", "[m²]", "AW", "=", Result.사용면적.W, "N1") + Set_ReqUseRow("110", "사용면적(환기)", "[m²]", "AV", "=", Result.사용면적.V, "N1") + + '//에너지소요량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).소요량) + Next + Set_ReqUseRow("200", "에너지소요량", "[kWh]", "Qf", "", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).면적소요량) + Next + Set_ReqUseRow("200", "단위면적당 에너지 소요량", "[kWh/m²]", "Σ(Qf / Ab)", "", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방S) + Next + Set_ReqUseRow("210", "난방에너지 소요량", "[kWh]", "QH,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방) + Next + Set_ReqUseRow("210", "난방에너지 소요량", "[kWh]", "Qh,f", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방보조) + Next + Set_ReqUseRow("210", "난방보조에너지 소요량", "[kWh]", "Qh,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).난방면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QH,f / AH", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방S) + Next + Set_ReqUseRow("210", "냉방에너지 소요량", "[kWh]", "QC,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방) + Next + Set_ReqUseRow("210", "냉방에너지 소요량", "[kWh]", "Qc,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방보조) + Next + Set_ReqUseRow("210", "냉방보조에너지 소요량", "[kWh]", "Qc,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).냉방면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QC,f / AC", "=", Array, "N1") + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).조명S) + Next + Set_ReqUseRow("210", "조명에너지 소요량", "[kWh]", "QL,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).조명면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QL,f / AL", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕S) + Next + Set_ReqUseRow("210", "급탕에너지 소요량", "[kWh]", "QW,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕) + Next + Set_ReqUseRow("210", "급탕에너지 소요량", "[kWh]", "Qw,f", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕보조) + Next + Set_ReqUseRow("210", "급탕보조에너지 소요량", "[kWh]", "Qw,aux", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).급탕면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QW,f / AW", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).환기S) + Next + Set_ReqUseRow("210", "환기에너지 소요량", "[kWh]", "QV,aux", "=", Array) '//36 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.E소요량(i).환기면적) + Next + Set_ReqUseRow("210", "단위면적당 소요량", "[kWh/m²]", "QV.aux / AV", "=", Array, "N1") + + '//1차에너지 소요량(10-02 추가) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).소요량) + Next + Set_ReqUseRow("300", "1차에너지 소요량", "[kWh]", "", "", Array) '//38 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).단위면적) + Next + Set_ReqUseRow("300", "단위면적당 1차에너지 소요량", "[kWh/m²]", "", "", Array, "N1") '//39 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방소요량) + Next + Set_ReqUseRow("310", "난방 1차에너지 소요량", "", "", "", Array) '//40 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방지역) + Next + Set_ReqUseRow("310", "지역난방열 소요량", "[kWh]", "0.614", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//45 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).난방펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).난방면적) + Next + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//46 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방소요량) + Next + Set_ReqUseRow("310", "냉방 1차에너지 소요량", "", "", "", Array) '//47 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) '//48 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) '//50 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방지역난방열) + Next + Set_ReqUseRow("310", "지역난방열 소요량", "[kWh]", "0.614", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방지역냉방열) + Next + Set_ReqUseRow("310", "지역냉방열 소요량", "[kWh]", Pub.Result.E변환계수.지역냉방.ToString("N3"), "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//52 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).냉방펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).냉방면적) + Next + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//53 + + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕소요량) + Next + Set_ReqUseRow("310", "급탕 1차에너지 소요량", "", "", "", Array) '//54 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕등유) + Next + Set_ReqUseRow("310", "난방유(등유) 소요량", "[kWh]", "1.1", "=", Array) '//55 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕LNG) + Next + Set_ReqUseRow("310", "천연가스(LNG) 소요량", "[kWh]", "1.1", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕LPG) + Next + Set_ReqUseRow("310", "액화가스(LPG) 소요량", "[kWh]", "1.1", "=", Array) '//57 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕지역) + Next + Set_ReqUseRow("310", "지역난방열 소요량", "[kWh]", "0.614", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//59 + + 'Array.Clear() '//--펠렛 100727 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.일차E소요량(i).급탕펠렛) + 'Next + 'Set_ReqUseRow("310", "펠렛보일러 소요량", "[kWh]", "1.1", "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).급탕면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//60 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명소요량) + Next + Set_ReqUseRow("310", "조명 1차에너지 소요량", "", "", "", Array) '//61 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//62 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).조명면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//63 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기소요량) + Next + Set_ReqUseRow("310", "환기 1차에너지 소요량", "", "", "", Array) '//64 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기전력) + Next + Set_ReqUseRow("310", "전력 소요량", "[kWh]", "2.75", "=", Array) '//65 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.일차E소요량(i).환기면적) + Next + + Set_ReqUseRow("310", "단위면적당 1차에너지 소요량", "[kWh/m2]", "", "=", Array, "N1") '//66 + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).태양광전력생산량) + Next + Set_ReqUseRow("310", "전기에너지 생산량(태양광)", "[kWh]", CStr(Result.E변환계수.전력), "=", Array) '//67 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).열병합전력생산량) + Next + Set_ReqUseRow("310", "전기에너지 생산량(열병합)", "[kWh]", CStr(Result.E변환계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).태양열생산량) + Next + Set_ReqUseRow("310", "열에너지 생산량(태양열)", "[kWh]", "", "=", Array) '//69 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).지열생산량) + Next + Set_ReqUseRow("310", "열에너지 생산량(지열)", "[kWh]", "", "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).면적당생산량태양열) + Next + + Set_ReqUseRow("310", "단위면적당 생산량(태양열)", "[kWh]", "", "=", Array, "N1") '//71 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.생산E(i).면적당생산량지열) + Next + + Set_ReqUseRow("310", "단위면적당 생산량(지열)", "[kWh]", "", "=", Array, "N1") '//72 + + + '//CO2배출량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).발생량) + Next + Set_ReqUseRow("400", "연간 CO2 배출량", "[kg CO2]", "", "", Array) '//73 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).단위면적) + Next + + Set_ReqUseRow("400", "단위면적당 CO2 배출량", "[kg CO2/m²]", "", "", Array, "N1") '//74 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방발생량) + Next + Set_ReqUseRow("410", "난방 CO2 발생량", "", "", "", Array) '//75 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방지역) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역냉방), "=", Array) + + 'Array.Clear() '//펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).난방펠렛) + 'Next + 'Set_ReqUseRow("410", "펠렛 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).난방면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방발생량) + Next + Set_ReqUseRow("410", "냉방 CO2 발생량", "", "", "", Array) '//82 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방지역난방열) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방지역냉방열) + Next + Set_ReqUseRow("410", "지역냉방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역냉방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + 'Array.Clear() '//낸ㅇ방펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).냉방펠렛) + 'Next + 'Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).냉방면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕발생량) + Next + Set_ReqUseRow("410", "급탕 CO2 발생량", "", "", "", Array) '//89 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕등유) + Next + Set_ReqUseRow("410", "난방유(등유) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.등유), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕LNG) + Next + Set_ReqUseRow("410", "천연가스(LNG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LNG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕LPG) + Next + Set_ReqUseRow("410", "액화가스(LPG) CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.LPG), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕지역) + Next + Set_ReqUseRow("410", "지역난방열 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.지역난방), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + 'Array.Clear() '//급탕펠렛 + 'For i As Integer = 0 To 12 + ' Array.Add(Result.Co2발생량(i).급탕펠렛) + 'Next + 'Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.펠렛), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).급탕면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명발생량) + Next + Set_ReqUseRow("410", "조명 CO2 발생량", "", "", "", Array) '//96 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).조명면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기발생량) + Next + Set_ReqUseRow("410", "환기 CO2 발생량", "", "", "", Array) '//99 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기전력) + Next + Set_ReqUseRow("410", "전력 CO2 발생량", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).환기면적) + Next + + Set_ReqUseRow("410", "단위면적당 CO2 발생량", "[kg CO2]", "", "=", Array, "N1") + + '//CO2저감량 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).저감량태양광) + Next + Set_ReqUseRow("410", "전력 CO2 저감량(태양광)", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) '//102 + Array.Clear() + For i As Integer = 0 To 12 + Array.Add(Result.Co2발생량(i).저감량열병합) + Next + Set_ReqUseRow("410", "전력 CO2 저감량(열병합)", "[kg CO2]", CStr(Result.Co2배출계수.전력), "=", Array) '//103 + DSETR.AcceptChanges() + + End Sub + + Private Sub Set_ReqUseRow(ByVal GRP As String, ByVal desc As String, ByVal unit As String, ByVal sign As String, ByVal eq As String, ByVal Value As ArrayList, Optional ByVal F As String = "N0") + Dim DR As DSR.TReqUseRow : DR = DSETR.TReqUse.NewTReqUseRow + + DR.Code = Format(DSETR.TReqUse.Rows.Count + 1, "000") + DR.GRP = GRP '//그룹 출력할떄 그룹으로 뽑는다. + DR.Desc = desc '//설명 + DR.UNIT = unit '//단위 + DR.SIGN = sign '//기호 + DR.EQ = eq '//등호 = + DR.M00 = TOSG(Value.Item(0)) + DR.M01 = TOSG(Value.Item(1)) + DR.M02 = TOSG(Value.Item(2)) + DR.M03 = TOSG(Value.Item(3)) + DR.M04 = TOSG(Value.Item(4)) + DR.M05 = TOSG(Value.Item(5)) + DR.M06 = TOSG(Value.Item(6)) + DR.M07 = TOSG(Value.Item(7)) + DR.M08 = TOSG(Value.Item(8)) + DR.M09 = TOSG(Value.Item(9)) + DR.M10 = TOSG(Value.Item(10)) + DR.M11 = TOSG(Value.Item(11)) + DR.M12 = TOSG(Value.Item(12)) + DR.F = F + DSETR.TReqUse.AddTReqUseRow(DR) + End Sub + Private Sub Set_ReqUseRow(ByVal GRP As String, ByVal desc As String, ByVal unit As String, ByVal sign As String, ByVal eq As String, ByVal Value As Decimal, Optional ByVal F As String = "N0") + Dim DR As DSR.TReqUseRow : DR = DSETR.TReqUse.NewTReqUseRow + + DR.Code = Format(DSETR.TReqUse.Rows.Count + 1, "000") + DR.GRP = GRP '//그룹 출력할떄 그룹으로 뽑는다. + DR.Desc = desc '//설명 + DR.UNIT = unit '//단위 + DR.SIGN = sign '//기호 + DR.EQ = eq '//등호 = + DR.M00 = Value + DR.F = F + 'DR.M01 = CSng(Value.Item(1)) + 'DR.M02 = CSng(Value.Item(2)) + 'DR.M03 = CSng(Value.Item(3)) + 'DR.M04 = CSng(Value.Item(4)) + 'DR.M05 = CSng(Value.Item(5)) + 'DR.M06 = CSng(Value.Item(6)) + 'DR.M07 = CSng(Value.Item(7)) + 'DR.M08 = CSng(Value.Item(8)) + 'DR.M09 = CSng(Value.Item(9)) + 'DR.M10 = CSng(Value.Item(10)) + 'DR.M11 = CSng(Value.Item(11)) + 'DR.M12 = CSng(Value.Item(12)) + DSETR.TReqUse.AddTReqUseRow(DR) + End Sub + +End Class diff --git a/ArinWarev1/DataSet/Calculator/Zone/CZone.vb b/ArinWarev1/DataSet/Calculator/Zone/CZone.vb new file mode 100644 index 0000000..01f2886 --- /dev/null +++ b/ArinWarev1/DataSet/Calculator/Zone/CZone.vb @@ -0,0 +1,822 @@ +Public Class CZone + + Public Event PBarSet(ByVal min As Integer, ByVal max As Integer) '//프로그레시브바 초기화 + Public Event Message(ByVal Msg As String) '//메세지표시 + Public Event PBarVal(ByVal Value As Integer) '//프로그레시브 값설정 + + ''' + ''' (main)에너지요구량 계산 + ''' + ''' 에너지소요량을 추가로 계산하려면 True 를 입력 + ''' 로그가 입력될 스트링빌더 + ''' + Public Overridable Function Calc_LoadOfZones() As Boolean + Dim Title As String = "에너지요구량을 계산합니다" + RaiseEvent Message(Title & vbCrLf & "잠시만 기다려주세요") + RaiseEvent PBarSet(0, 100) + + RaiseEvent Message(Title & vbCrLf & "데이터저장소를 확보하는중.") + 'i_count_OpWe As Integer, d_we_month As Integer, Q_h_b_we as decimal, ==================================2010.2.21 삭제 + + Dim t_24 As Integer, f_wind As Integer, t_NA As Integer, t_h_op_d As Integer, i_count_Is As Integer + Dim Delta_theta_er As Decimal, Delta_theta_i_NA As Decimal, Delta_theta_i_WE As Decimal, theta_i As Decimal, theta_i_h As Decimal, theta_i_c As Decimal, F_f As Decimal, F__F As Decimal, F_W As Decimal, F_S As Decimal, F_V As Decimal, h_r As Decimal, c_p_arhoa As Decimal, e_wind As Decimal, n_50 As Decimal, n_ue As Decimal, n_mech As Decimal, n_inf As Decimal, A_B As Decimal, A_u As Decimal, h_u As Decimal, V As Decimal, V_ue As Decimal + Dim H_V_inf As Decimal, H_V_mech As Decimal, H_V_ue As Decimal, H_V_z As Decimal, theta_z As Decimal, theta_u As Decimal, H_T_D As Decimal, H_T_iu As Decimal, H_T_iz As Decimal, H_T_s As Decimal, Delta_U_WB As Decimal, H_V_mech_theta As Decimal, theta_i_h_soll As Decimal, theta_i_c_soll As Decimal, theta_V_mech As Decimal ', theta_e_min as decimal, theta_e_max as decimal + Dim C_wirk As Decimal, tau As Decimal, a As Decimal, a_tb As Decimal, A_beheizt As Decimal, f_we As Decimal, f_NA As Decimal, f_tb As Decimal, Q_h_max As Decimal, theta_i_NA As Decimal, eta_V_mech As Decimal, theta_V_mech_RLT As Decimal + Dim Q_V_inf_sink As Decimal, Q_V_mech_sink As Decimal, Q_V_z_sink As Decimal, Q_V_sink As Decimal, Q_T_e_sink As Decimal, Q_T_u_sink As Decimal, Q_T_z_sink As Decimal, Q_T_s_sink As Decimal, Q_T_sink As Decimal, Q_S_sink As Decimal, R_se As Decimal, Q_source As Decimal, Q_sink As Decimal, Q_I_source As Decimal + Dim Q_V_inf_source As Decimal, Q_V_mech_source As Decimal, Q_V_z_source As Decimal, Q_V_source As Decimal, Q_T_e_source As Decimal, Q_T_u_source As Decimal, Q_T_z_source As Decimal, Q_T_s_source As Decimal, Q_T_source As Decimal, Q_S_source As Decimal + Dim Q_I_source_p As Decimal, Q_I_source_fac As Decimal, Q_I_L As Decimal, Q_l_b As Decimal, Q_w_b As Decimal, gamma As Decimal, eta As Decimal, Q_h_b As Decimal, Q_h_b_op As Decimal, g_TI As Decimal + Dim V_mech As Decimal + 'Dim d_op_month As Integer, theta_e_month as decimal + 'Dim A_H as decimal, A_C as decimal, A_L as decimal, A_W as decimal, A_V as decimal + Dim Q_vh_b_op As Decimal + Dim g_blinds As Decimal, tau_e_B As Decimal, rho_e_B As Decimal, U_blinds As Decimal, tau_e_B_corr As Decimal, rho_e_B_corr As Decimal 'EN 13363-1 적용 + Dim g As Decimal, alpa As Decimal + 'Dim i_sub_wall As Integer + Dim V_mech_outdoor As Decimal + + '//2010.02.04추가 + Dim i_count_AHU As Integer + Dim Phi As Decimal + '//2010.02.21추가 + Dim d_op_mth As Integer + Dim d_full_mth As Integer + '//2011.04.04 추가 + Dim Q_V_win_sink As Decimal, Q_V_win_source As Decimal, H_V_win As Decimal, n_win As Decimal + Dim zone_count As Decimal '//2012.07.08 추가 + + + Dim priod_value As Single = 0 + Dim age As Single '//준공연도에 의한 경년변화값 + For Each DRpriod As DS.tbl_DescRow In DSET.tbl_Desc.Select("cname<>'0'", "cname") + priod_value = CSng(DRpriod.priod) + Next + If priod_value = 0 Then + age = 1 + Else + age = 1 / (1 - priod_value * 0.0012) + End If + + + + RaiseEvent Message(Title & vbCrLf & "저장소 기본값을 설정하는중.") + t_24 = 24 + F_f = 0.5 '구조체와 하늘과의 형태계수 + F__F = 0.7 '창 프레임 감소계수 __필요 + F_W = 0.9 '수직입사가 아닌경우에 대한 감소계수 + F_S = 1 '주변환경에 의한 그늘짐 + F_V = 1 '0.9 '우선 먼지팩터는 없는 것으로 가정 + h_r = 5 * 0.9 '= 5*e(모를경우 e=0.9) + Delta_theta_er = 10 + Delta_theta_i_NA = 4 '(용도별조건) + 'theta_i = 21 + 'theta_i_h = 21 + theta_i_h_soll = 20 + theta_i_c = 24 + theta_i_c_soll = 26 + theta_V_mech_RLT = 27 + 'theta_e_min = -11.3 + 'theta_e_max = 31.5 + c_p_arhoa = 0.34 '//먼지모름 + 'n_50 = 1.5 + n_ue = 0.6 + e_wind = 0.07 + f_wind = 15 + R_se = 0.043 '외기에 직접 열전달저항 확인요망 + g_TI = 0.35 '(2-113) + alpa = 0.4 '우선 0.4으로 설정 표면흡수율 도표 2-6 참조 + n_mech = 1 '임시 + A_u = 1 + h_u = 1 '임시 + + RaiseEvent Message(Title & vbCrLf & "결과저장소 초기화") + + Work_msg("요구량계산중...") + Frm_Work.ProgressBar1.Maximum = 26 + Frm_Work.ProgressBar1.Minimum = 0 + Frm_Work.ProgressBar1.Value = 0 + Frm_Work.TopMost = True + Frm_Work.Show() + + '///////////////////////////////////////////////////// + For i_count_HeatCool As Integer = 1 To 2 '(1) 루프회전 난방/냉방 구분해서 회전한다. 둘의 산식이 거의 비슷하므로 루프를 이용해서 계산 + + For i_count_month As Short = 0 To 12 '(2) --월전체의 루프? + + Work_msg("요구량계산중..." & CStr(IIf(i_count_HeatCool = 1, "난방", "냉방")) & "(" & i_count_month & "/12)") : Work_plus() + Dim Mon As String = "M" & Format(i_count_month, "00") '//저장소의 필드명이 M00 식으로되어있다. + + If i_count_month = 0 Then '//난방이라면? '//최소외기온도 난방기(theta_e_min) + Calc.Pub.theta_e(i_count_month) = TOSG(IIf(i_count_HeatCool = 1, Calc.Pub.theta_e_min, Calc.Pub.theta_e_max)) + End If + + '//존 루프 + For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code<>'0'", "code") ' DSET.tbl_zone.Rows.Count '(3) + '//방식이나 공조는 ZZ는 사용안함이다 V=환기 외기부하처리여부의경우 0001 은 예이다. + zone_count = TOSG(DR존.입력존의수) + If DR존.냉난방방식 <> "기능없음" Or (DR존.냉난방공조 <> "기능없음" And (DR존.냉난방공조 <> "환기" Or DR존.외기부하처리여부 = "예")) Then + Q_vh_b_op = 0 + + '//i_count_OpWe 1은 평일 2는 주말이다ㅡㅡ/ + '======================================2010.2.21 삭제 + 'For i_count_OpWe = 1 To 2 + '======================================2010.2.21 삭제 + Q_V_inf_sink = 0 + Q_V_inf_source = 0 + Q_V_mech_sink = 0 + Q_V_mech_source = 0 + Q_V_z_sink = 0 + Q_V_z_source = 0 + Q_V_win_sink = 0 '//2011.04.04 추가 + Q_V_win_source = 0 '//2011.04.04 추가 + + Q_T_e_sink = 0 + Q_T_e_source = 0 + Q_T_u_sink = 0 + Q_T_u_source = 0 + Q_T_z_sink = 0 + Q_T_z_source = 0 + Q_T_s_sink = 0 + Q_T_s_source = 0 + + A_B = TOSG(DR존.면적) * zone_count ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + V = TOSG(DR존.순실체적) * zone_count ' Worksheets("입력존").Range("체적1").Offset(0, i_count_zone - 1) + V_ue = A_u * h_u + 'Log.AppendLine(" >> V_ue = A_u * h_u = // au와 hu 는 선언부에서 1값으로 고정되어있음 v_ue는 항상 1") + + '//존의 프로필설정에대한 실제 프로필의 데이터를 가져옴 + Dim DR프로필() As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'"), DS.tbl_profileRow()) + If DR프로필.GetUpperBound(0) = -1 Then + MsgBox("존=" & DR존.code & " 의 프로필=" & DR존.프로필 & " 의 데이터가 존재하지않습니다", MsgBoxStyle.Critical, "확인") + Else + 'Log.AppendLine(" >> 존의 프로필코드(" & DR존.프로필 & ") 에 해당하는 프로필정보를 가져옵니다") + t_h_op_d = TOIT(DR프로필(0).운전시간난방) ' Worksheets("설정조건").Range("사용시작시간1").Offset(5, i_count_profile) + '===================================================================================2010.2.21 추가 + If i_count_month = 0 Then + d_op_mth = 0 + Else + d_op_mth = CInt(TOSG(DR프로필(0)("day" & Format(i_count_month, "00")))) + End If + '===================================================================================2010.2.21 추가 + theta_i_h_soll = TOSG(DR프로필(0).난방설정온도) ' Worksheets("설정조건").Range("난방설정온도1").Offset(0, i_count_profile) + theta_i_c_soll = TOSG(DR프로필(0).냉방설정온도) ' Worksheets("설정조건").Range("냉방설정온도1").Offset(0, i_count_profile) + Delta_theta_i_NA = TOSG(DR프로필(0).야간최저허용온도) ' Worksheets("설정조건").Range("야간최저허용온도1").Offset(0, i_count_profile) + Delta_theta_i_WE = TOSG(DR프로필(0).주말최저허용온도) ' Worksheets("설정조건").Range("주말최저허용온도1").Offset(0, i_count_profile) + ' If i_count_OpWe = 1 Then=============================================================2010.2.21 삭제 + 'Log.AppendLine(" >> i_count_OpWe = 1 >> Q_I_source_p/Q_I_source_fac/V_mech 계산됨") + Q_I_source_p = TOSG(DR프로필(0).사람) * A_B ' Worksheets("설정조건").Range("사람1").Offset(0, i_count_profile) * A_B '(2-118) + Q_I_source_fac = TOSG(DR프로필(0).작업보조기기) * A_B ' Worksheets("설정조건").Range("작업보조기기1").Offset(0, i_count_profile) * A_B '(2-119) + V_mech = TOSG(DR프로필(0).최소도입외기량) * A_B ' Worksheets("설정조건").Range("최소도입외기량1").Offset(0, i_count_profile) * A_B + ' Else '=============================================================2010.2.21 삭제 + ' Log.AppendLine(" >> i_count_OpWe <> 1 >> Q_I_source_p/Q_I_source_fac 는 0입니다") + ' Q_I_source_p = 0 '주말 사람없음 + ' Q_I_source_fac = 0 '주말 기기발열 없음 + 'End If + 'Q_I_L = 0 'mu_L*Q_I_L_elektr (2-123)추후 추가 + End If + + V_mech_outdoor = 1 '외기처리 관련 (ZZ=사용안함 Y=예) + If DR존.냉난방방식 <> "기능없음" And DR존.냉난방공조 <> "기능없음" And DR존.외기부하처리여부 = "예" Then + If i_count_HeatCool = 1 Then '//난방이라면 + If DR존.냉난방공조 <> "난방" AndAlso DR존.냉난방공조 <> "냉난방" Then '난방/냉난방 이 아니면! + If theta_i_h_soll > Calc.Pub.theta_e(i_count_month) Then '//난방설정온도 > 외기온도(난방기) + Q_vh_b_op = V_mech * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) * t_h_op_d * c_p_arhoa * d_op_mth '===============d_op(i_count_month) 2010.2.21 수정 + V_mech_outdoor = 0 ' 외기처리된 상태인 경우 + 'Log.AppendLine(" >> 외기처리됨") + End If + End If + Else + If DR존.냉난방공조 <> "냉방" AndAlso DR존.냉난방공조 <> "냉난방" Then '냉방/냉난방이 아닐경우 + If theta_i_c_soll < Calc.Pub.theta_e(i_count_month) Then + Q_vh_b_op = V_mech * (Calc.Pub.theta_e(i_count_month) - theta_i_c_soll) * t_h_op_d * c_p_arhoa * d_op_mth '===============d_op(i_count_month) 2010.2.21 수정 + V_mech_outdoor = 0 ' 외기처리된 상태인 경우 + 'Log.AppendLine(" >> 외기처리됨") + End If + End If + End If + End If + + + + n_50 = TOSG(DR존.침기율) '//tosg 는 빈값일경우 0을 반환 + n_inf = n_50 * e_wind '(2-59) 환기기기 없는 경우 + 'n_inf = n_50 * e_wind * (1 + f_V_mech * t_V_mech / 24) '(2-60) 급기 및 배기에 대한 환기회수 필요 + '///////////////////////////////////////////////////////////////////////////////////////////////////////2011.04.04 추가 + 'If n_nutz < 1.2 Then + ' Delta_n_win = n_nutz - (n_nutz - 0.2) * n_inf - 0.1 + 'Else + ' Delta_n_win = n_nutz - n_inf - 0.1 + 'End If + 'If Delta_n_win < 0 Then + ' Delta_n_win = 0 + 'End If + 'n_win = 0.1 + Delta_n_win * t_h_op_d / 24 + n_win = 0.1 ' 최소외기 도입량은 환기기기 유무와 상관없이 적용되는 것으로 평가하기 때문에 자연환기 기본값만 적용 + '///////////////////////////////////////////////////////////////////////////////////////////////////////2011.04.04 추가 + + + H_T_D = 0 + H_T_iu = 0 + H_T_iz = 0 + + + Dim Drow프로필 As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If DR존.조명부하산출방법 = "계산치" Then + Q_I_L = TOSG(DR존.조명에너지부하율계산치) * TOSG(Drow프로필.일일사용시간) * A_B + Else + Q_I_L = TOSG(DR존.조명에너지부하율입력치) * TOSG(Drow프로필.일일사용시간) * A_B + End If + 'Q_I_L = TOSG(IIf(DR존.조명부하산출방법 = "계산치", TOSG(DR존.조명에너지부하율계산치), TOSG(DR존.조명에너지부하율입력치))) * TOSG(Drow프로필.일일사용시간) * A_B + Q_w_b = TOSG(Drow프로필.일일급탕요구량) * A_B * d_op_mth + '===================================2010.2.21 삭제 + 'If DR존.조명부하산출방법 = "CALC" Then '//OpWe의 2번은 주말인거 같다. + ' '//부하율계산치?입력치구분 + ' Q_w_b = TOSG(DR존.급탕요구량) * A_B * Calc.Pub.d_op_mth(i_count_month) + 'Else + ' Q_I_L = 0 '주말 소등으로 설정 + ' Q_w_b = 0 '주말은 급탕사용안함 + 'End If + '===================================2010.2.21 삭제 + + 'Log.AppendLine(" >> 현재존을 사용하는 각 입력면(" & DSET.tbl_myoun.Select("존분류='" & DR존.code & "'").GetUpperBound(0) & ")으로부터 데이터를 누적") + For Each Dr입력면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("존분류='" & DR존.code & "'") + If Dr입력면.code <> "0" Then + If DR존.열교가산치 = "내단열" Then + Delta_U_WB = 0.15 '내단열(=0001) Worksheets("입력존").Range("열교1").Offset(0, i_count_zone - 1) = "내단열" Then + Else + Delta_U_WB = 0.1 '내단열(=0001) Worksheets("입력존").Range("열교1").Offset(0, i_count_zone - 1) = "내단열" Then + End If + Select Case Dr입력면.건축부위방식.Trim ' Case Worksheets("입력면").Range("입력부위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "외벽" '"외벽" + 'Dr입력면.열관류율 >> Calc.Get_열관류율(Dr입력면) + H_T_D = H_T_D + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) * zone_count + Delta_U_WB * TOSG(Dr입력면.건축부위면적) * zone_count ' Worksheets("입력면").Range("부위면적" & i_sub_wall & "").Offset(0, i_count_wall) '(2-44) Delta_U_WB는 외단열 0.1, 내단열 0.15 + Case "외부창", "내부창" '=================2010.03.20 수정 + If Dr입력면.블라인드유무 = "유" Then ' '0001(=유) Range("에너지투과율" & i_sub_wall & "").Offset(3, i_count_wall) = "유" Then + If Calc.Get_열관류율(Dr입력면) = 0 Then + MsgBox("블라인드 사용이지만 열관류율 수치가 입력되지 않았습니다", MsgBoxStyle.Critical, "확인") + Else + Select Case Dr입력면.블라인드위치.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(4, i_count_wall) + Case "내부" '"내부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 30)) + Case "중간" '중간" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 3)) + Case "외부" ' '외부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(Dr입력면) * age) + 1 / 5 + 1 / 10)) + End Select + End If + + Else + U_blinds = Calc.Get_열관류율(Dr입력면) * age 'Worksheets("입력면").Range("열관류율" & i_sub_wall & "").Offset(0, i_count_wall) + End If + + '=========================================================================================================2010.03.20 수정 + If Dr입력면.건축부위방식.Trim = "외부창" Then + H_T_D = H_T_D + U_blinds * TOSG(Dr입력면.건축부위면적) * zone_count + Delta_U_WB * TOSG(Dr입력면.건축부위면적) * zone_count '(2-44) Delta_U_WB는 외단열 0.1, 내단열 0.15 + Else + H_T_iu = H_T_iu + U_blinds * TOSG(Dr입력면.건축부위면적) * zone_count + End If + '=========================================================================================================2010.03.20 수정 + Case "내벽" ' "내벽" + H_T_iu = H_T_iu + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) * zone_count '(2-48) + Case "간벽" '"간벽" + H_T_iz = H_T_iz + Calc.Get_열관류율(Dr입력면) * age * TOSG(Dr입력면.건축부위면적) * zone_count '(2-52) + Case Else + MsgBox("입력면 건축부위방식이 없습니다", MsgBoxStyle.Critical, "확인") + Return False + End Select + End If + Next + + + If H_T_D = 0 Then + H_V_inf = 0 + Else + H_V_inf = n_inf * V * c_p_arhoa '(2-58) c_p_arhoa는 0.34 V는 존의 체적 + End If + H_V_win = n_win * V * c_p_arhoa '//2011.04.04 추가 + H_V_mech = V_mech * c_p_arhoa 'n_mech * V * c_p_arhoa '(2-83) + H_V_ue = n_ue * V_ue * c_p_arhoa '(2-94) + 'H_V_z = n_z_d * c_p_arhoa '(2-99) + + If DR존.열저장능력 = "" Then + MsgBox(DR존.설명 & "의 열저장능력이 입력되어 있지않습니다", MsgBoxStyle.Critical, "확인") + C_wirk = 0 + Else + C_wirk = TOSG(DR존.열저장능력) * A_B ' .Worksheets("입력존").Range("열저장능력1").Offset(0, i_count_zone - 1) * A_B + End If + + If i_count_HeatCool = 1 Then + H_V_mech_theta = 0 'H_V_mech * (theta_i_h_soll - theta_V_mech) / 6 '(2-130) 우선 고려안함 + Else + H_V_mech_theta = 0 'H_V_mech * (theta_i_c_soll - theta_V_mech) / 6 '(2-130) + End If + tau = C_wirk / ((H_T_D + H_T_iu + H_T_iz) + (H_V_inf + H_V_mech + H_V_ue + H_V_win) + H_V_mech_theta) '(2-22, 129) 추후 H_V_z 추가 '//2011.04.04 H_V_win 추가 + If tau < 48 Then tau = 48 + + a = 1 + tau / 16 '(2-25) + + a_tb = 1 ' =A_beheizt / A_B 'A_beheizt는 난방면적, A_B는 전용면적 + + t_NA = 24 - t_h_op_d + f_tb = TOSG(0.8 * (1 - Math.Exp(-Q_h_max / (A_B * 35))) * a_tb ^ 2) '(2-34) + + '================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '================================================2010.2.21 삭제 + Select Case DR존.야간운전방식.Trim '공통1002 Worksheets("입력존").Range("야간가동1").Offset(0, i_count_zone - 1) + Case "정상가동" '정상가동" + f_NA = 0 + Case "감소가동" '감소가동" + f_NA = TOSG(0.13 * t_NA * Math.Exp(-tau / 250) / 24) '(2-28) 감소가동 + Case "가동정지" '가동정지" + f_NA = TOSG(0.26 * t_NA * Math.Exp(-tau / 250) / 24) '(2-29) 가동정지 + End Select + theta_i_h = theta_i_h_soll - f_NA * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) + If theta_i_h < theta_i_h_soll - Delta_theta_i_NA * t_NA / 24 Then theta_i_h = theta_i_h_soll - Delta_theta_i_NA * t_NA / 24 '(2-27) 야간감소 + '================================================2010.2.21 삭제 + 'Else + '================================================2010.2.21 삭제 + Select Case DR존.주말운전방식.Trim ' Worksheets("입력존").Range("주말가동1").Offset(0, i_count_zone - 1) + Case "정상가동" '정상가동" + f_we = 0 + Case "감소가동" '감소가동" + f_we = TOSG(0.2 * (1 - 0.4 * tau / 250)) '(2-31) 난방감소 + Case "가동정지" '가동정지" + f_we = TOSG(0.3 * (1 - 0.2 * tau / 250)) '(2-32) 난방정지식 + End Select + theta_i_h = theta_i_h_soll - f_we * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month)) + If theta_i_h < theta_i_h_soll - Delta_theta_i_WE Then theta_i_h = theta_i_h_soll - Delta_theta_i_WE '(2-30) 주말감소식 변형 + '================================================2010.2.21 삭제 + 'End If + '================================================2010.2.21 삭제 + + If i_count_HeatCool = 1 Then + theta_i = theta_i_h + theta_z = theta_i_h + theta_u = TOSG(theta_i_h_soll - 0.7 * (theta_i_h_soll - Calc.Pub.theta_e(i_count_month))) + Else + theta_i = theta_i_c_soll '24'에너지 사용량 계산할때 24 사용 + theta_z = theta_i_c_soll + theta_u = TOSG(theta_i_c_soll - 0.7 * (theta_i_c_soll - Calc.Pub.theta_e(i_count_month))) + End If + + 'theta_i_h = theta_i_h_soll - f_tb * (theta_i_h_soll - theta_e(i_count_month)) '(2-33) 공간적제한 + 'theta_i_h = theta_i_NA - f_tb * (theta_i_NA - theta_e(i_count_month)) '(2-35) 공간적 시간적 제한 + + 'theta_V_mech = theta_e(i_count_month) '(2-90) 공조처리 없는 경우 + 'theta_V_mech = theta_e(i_count_month) + eta_V_mech * (theta_i - theta_e(i_count_month)) '(2-91) 비제어적 열교환 eta_V_mech은 사용자입력 + theta_V_mech_RLT = TOSG(IIf(i_count_HeatCool = 1, 27, 16)) + + theta_V_mech = Calc.Pub.theta_e(i_count_month) 'theta_V_mech_RLT '(2-92) 공조처리된 급기온도(도표 3-3, 3-4, 7-5) 난방 27, 냉방 16으로 설정 + + + '=======================================================================2010.02.04 추가부분 시작 + If DR존.냉난방공조처리시스템 <> "0" And DR존.냉난방공조 = "환기" Then '//냉난방공조처리시스템이 선택되어있고 공조가 환기라면 + '//공조처리스템과 일치하는 공조기기(tbl_kongjo) 를 찾아서 계산한다. + Dim DR() As DS.tbl_kongjoRow = CType(DSET.tbl_kongjo.Select("code='" & DR존.냉난방공조처리시스템 & "' and code <> '0'"), DS.tbl_kongjoRow()) + If DR.GetUpperBound(0) = 0 Then + Select Case DR(0).열교환기유형.Trim + Case "현열교환", "전열교환" '//현열교환,전열교환 + Phi = TOSG(DR(0).열회수율) ' Worksheets("공조처리시스템").Range("열교환기1").Offset(1, i_count_AHU - 1) + Case Else + Phi = 0 + End Select + theta_V_mech = Calc.Pub.theta_e(i_count_month) + Phi * (theta_i - Calc.Pub.theta_e(i_count_month)) + Else + MsgBox(DR존.설명 & "존의 냉난방공조처리스템(" & DR존.냉난방공조처리시스템 & ") 의값이 일치하지않습니다", MsgBoxStyle.Critical, "확인") + End If + End If + '=======================================================================2010.02.04 추가부분 끝 + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_V_inf_sink = H_V_inf * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-56) + Q_V_win_sink = H_V_win * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '//2011.04.04 추가 + Else + Q_V_inf_source = H_V_inf * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2- + Q_V_win_source = H_V_win * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '//2011.04.04 추가 + End If + '================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '================================================2010.2.21 삭제 + If theta_i > theta_V_mech Then + Q_V_mech_sink = H_V_mech * V_mech_outdoor * (theta_i - theta_V_mech) * t_h_op_d '(2-81) + Else + Q_V_mech_source = H_V_mech * V_mech_outdoor * (theta_V_mech - theta_i) * t_h_op_d '(2- + End If + '================================================2010.2.21 삭제 + 'Else + 'If theta_i > theta_V_mech Then + ' Q_V_mech_sink = 0 + 'Else + ' Q_V_mech_source = 0 + 'End If + 'End If + '================================================2010.2.21 삭제 + + If theta_i > theta_z Then + Q_V_z_sink = H_V_z * (theta_i - theta_z) * t_24 '(2-97) + Else + Q_V_z_source = H_V_z * (theta_z - theta_i) * t_24 '(2- + End If + + Q_V_sink = Q_V_inf_sink + Q_V_mech_sink + Q_V_z_sink + Q_V_win_sink '(2-13) '//2011.04.04 추가 + Q_V_source = Q_V_inf_source + Q_V_mech_source + Q_V_z_source + Q_V_win_source '(2- '//2011.04.04 추가 + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_T_e_sink = H_T_D * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-42) + Else + Q_T_e_source = H_T_D * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2- + End If + + If theta_i > theta_u Then + Q_T_u_sink = H_T_iu * (theta_i - theta_u) * t_24 '(2-46) + Else + Q_T_u_source = H_T_iu * (theta_u - theta_i) * t_24 '(2- + End If + + If theta_i > theta_z Then + Q_T_z_sink = H_T_iz * (theta_i - theta_z) * t_24 '(2-50) + Else + Q_T_z_source = H_T_iz * (theta_z - theta_i) * t_24 '(2- + End If + + If theta_i > Calc.Pub.theta_e(i_count_month) Then + Q_T_s_sink = H_T_s * (theta_i - Calc.Pub.theta_e(i_count_month)) * t_24 '(2-53) 추후수정 + Else + Q_T_s_source = H_T_s * (Calc.Pub.theta_e(i_count_month) - theta_i) * t_24 '(2-53) 추후수정 + End If + + Q_T_sink = Q_T_e_sink + Q_T_u_sink + Q_T_z_sink + Q_T_s_sink '(2-12) + Q_T_source = Q_T_e_source + Q_T_u_source + Q_T_z_source + Q_T_s_source '(2-12) + + Q_S_sink = 0 + Q_S_source = 0 + + For Each DRF입력면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("존분류='" & DR존.code & "' and code <> '0'") '//해당존을 사용하는 모든 입력면을 가져옴 + Select Case DRF입력면.방위.Trim ' Worksheets("입력면").Range("방위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "수평" '"수평" + i_count_Is = 0 + Case "남" '"남" + i_count_Is = 1 + Case "남동" '"남동" + i_count_Is = 2 + Case "남서" '"남서" + i_count_Is = 3 + Case "동" '"동" + i_count_Is = 4 + Case "서" '"서" + i_count_Is = 5 + Case "북동" '"북동" + i_count_Is = 6 + Case "북서" '"북서" + i_count_Is = 7 + Case "북" '"북" + i_count_Is = 8 + '==========================================================2010.03.20 추가 + Case Else + i_count_Is = -1 + '==========================================================2010.03.20 추가 + End Select + + If i_count_Is <> -1 Then '=====================================2010.03.20 추가 + + + Select Case DRF입력면.건축부위방식.Trim ' Range("입력부위" & i_sub_wall & "").Offset(0, i_count_wall) + Case "외벽" '외벽 + If alpa * Calc.Pub.I_s(i_count_Is, i_count_month) < F_f * h_r * Delta_theta_er Then + Q_S_sink = Q_S_sink + R_se * Calc.Get_열관류율(DRF입력면) * age * TOSG(DRF입력면.건축부위면적) * zone_count * (F_f * h_r * Delta_theta_er - alpa * Calc.Pub.I_s(i_count_Is, i_count_month)) * t_24 '(2-111) + Else + 'Log.AppendLine("외벽 if else = " & Q_S_source) + Q_S_source = Q_S_source + R_se * Calc.Get_열관류율(DRF입력면) * age * TOSG(DRF입력면.건축부위면적) * zone_count * (alpa * Calc.Pub.I_s(i_count_Is, i_count_month) - F_f * h_r * Delta_theta_er) * t_24 '(2- + 'Log.AppendLine(">>" & Q_S_source) + End If + + Case "외부창", "내부창" '=====================================2010.03.20 수정 + If TOSG(DRF입력면.수평차양각) < 67.5 Then 'Range("에너지투과율" & i_sub_wall & "").Offset(1, i_count_wall) < 67.5 Then + + If DRF입력면.블라인드유무 = "유" Then ' Range("에너지투과율" & i_sub_wall & "").Offset(3, i_count_wall) = "유" Then + Select Case DRF입력면.블라인드빛종류.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(6, i_count_wall) + Case "불투과(t=0.0)" '불투과(t=0.0)" + tau_e_B = 0 + Select Case DRF입력면.블라인드색상.Trim ' Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" '흰색" + rho_e_B = 0.7 + Case "밝은색" '밝은색" + rho_e_B = 0.5 + Case "어두운색" '어두운색" + rho_e_B = 0.3 + Case "검은색" '검은색" + rho_e_B = 0.1 + Case Else + MsgBox("불투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + Case "약투과(t=0.2)" '약투과(t=0.2)" + tau_e_B = 0.2 + Select Case DRF입력면.블라인드색상.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" + rho_e_B = 0.6 + Case "밝은색" + rho_e_B = 0.4 + Case "어두운색" + rho_e_B = 0.2 + Case "검은색" + rho_e_B = 0.1 + Case Else + MsgBox("약투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + Case "반투과(t=0.4)" '반투과(t=0.4)" + tau_e_B = 0.4 + Select Case DRF입력면.블라인드색상.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(7, i_count_wall) + Case "흰색" + rho_e_B = 0.4 + Case "밝은색" + rho_e_B = 0.3 + Case "어두운색" + rho_e_B = 0.2 + Case "검은색" + rho_e_B = 0.1 + Case Else + MsgBox("반투과 블라인드색상이 없습니다", MsgBoxStyle.Critical, "확인") + End Select + End Select + + If DRF입력면.블라인드각도 = "45도" Then ' Range("에너지투과율" & i_sub_wall & "").Offset(5, i_count_wall) = "45도" Then + tau_e_B_corr = TOSG(0.65 * tau_e_B + 0.15 * rho_e_B) + rho_e_B_corr = TOSG(rho_e_B * (0.75 + 0.7 * tau_e_B)) + tau_e_B = tau_e_B_corr + rho_e_B = rho_e_B_corr + End If + + g = TOSG(DRF입력면.투과율) ' Range("에너지투과율" & i_sub_wall & "").Offset(0, i_count_wall) + If DRF입력면.블라인드위치.Trim <> "" AndAlso Calc.Get_열관류율(DRF입력면) = 0 Then + MsgBox(DRF입력면.설명 & "의 열관류율이 0입니다", MsgBoxStyle.Critical, "확인") + Else + Select Case DRF입력면.블라인드위치.Trim 'Range("에너지투과율" & i_sub_wall & "").Offset(4, i_count_wall) + Case "내부" '내부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 30)) + g_blinds = g * (1 - g * rho_e_B - (1 - tau_e_B - rho_e_B) * U_blinds / 30) + Case "중간" '중간" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 3)) + g_blinds = g * tau_e_B + g * ((1 - tau_e_B - rho_e_B) + (1 - g) * rho_e_B) * U_blinds / 3 + Case "외부" '외부" + U_blinds = TOSG(1 / (1 / (Calc.Get_열관류율(DRF입력면) * age) + 1 / 5 + 1 / 10)) + g_blinds = tau_e_B * g + (1 - tau_e_B - rho_e_B) * U_blinds / 10 + tau_e_B * (1 - g) * g / 5 + Case Else + MsgBox("블라인드위치가 없습니다", MsgBoxStyle.Critical, "확인") + End Select + End If + '===========================================================================2010.02.27 추가 + If i_count_month = 0 Then + If i_count_HeatCool = 1 Then + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, 1 - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, 1 - 1) * g_blinds + Else + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, 7 - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, 7 - 1) * g_blinds + End If + Else + g_blinds = (1 - Calc.Pub.F_sh_gl(i_count_Is - 1, i_count_month - 1)) * g + Calc.Pub.F_sh_gl(i_count_Is - 1, i_count_month - 1) * g_blinds + End If + '===========================================================================2010.02.27 추가 + + Else + g_blinds = TOSG(DRF입력면.투과율) ' Range("에너지투과율" & i_sub_wall & "").Offset(0, i_count_wall) + + End If + Q_S_source = TOSG(Q_S_source + F__F * TOSG(DRF입력면.건축부위면적) * zone_count * F_S * F_W * F_V * g_blinds * Math.Cos(1.33 * TOSG(DRF입력면.수평차양각) * 3.141592 / 180) * (1 - TOSG(DRF입력면.수직차양각) / 300) * Calc.Pub.I_s(i_count_Is, i_count_month) * t_24) '(2-113) + End If + End Select + End If '==========================================================2010.03.20 추가 + Next + + Q_I_source = Q_I_source_p + Q_I_source_fac + Q_I_L '(2-20) + Q_source = Q_S_source + Q_T_source + Q_V_source + Q_I_source '(2-16) + If i_count_month = 0 AndAlso i_count_HeatCool = 1 Then Q_source = 0 ' 난방 최대부하 계산 + Q_sink = Q_T_sink + Q_V_sink + Q_S_sink '(2-11) Q_I_sink는 현재 고려안함 + + If Q_sink = 0 Then + eta = 0 + Else + gamma = Q_source / Q_sink '(2-21) + 'If gamma > 1.1 And a > 100 Then + If gamma ^ a > 1000000 Then + eta = 1 / gamma + Else + If gamma = 1 Then + eta = a / (a + 1) '(2-24) + Else + eta = TOSG((1 - gamma ^ a) / (1 - gamma ^ (a + 1))) '(2-23) + End If + End If + + If 1 - (eta * gamma) < 0.01 Then eta = 1 / gamma '(2-137) + If (1 - eta) * gamma < 0.01 Then eta = 1 '(2-138) + 'If V_mech >= Q_C_max / (c_p_arhoa * (theta_i - theta_mech)) Then eta = 1 '(2-139) 추후 고민 + End If + + If i_count_HeatCool = 1 Then + Q_h_b = Q_sink - eta * Q_source '(2-1) + Else + Q_h_b = (1 - eta) * Q_source '(2-7) + End If + + + If Q_h_b < 0.001 Then Q_h_b = 0 '1W 미만 제거 + + '========================================================2010.2.21 수정 And i_count_OpWe = 1 삭제 + If i_count_month = 0 Then + If t_h_op_d <> 0 Then + Q_h_b_op = Q_h_b / t_h_op_d + Else + Q_h_b_op = Q_h_b + End If + Else + '=================================================2010.2.21 삭제 + 'If i_count_OpWe = 1 Then + '=================================================2010.2.21 삭제 + Q_h_b_op = Q_h_b * d_op_mth + ' MsgBox(i_count_month & " " & Q_h_b & " " & d_op(i_count_month) & " " & Q_h_b_op) + '=================================================2010.2.21 삭제 + 'Else + 'Q_h_b_we = Q_h_b * Calc.Pub.d_we(i_count_month) + '=================================================2010.2.21 삭제 + Dim DRProf As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + If DR존.조명부하산출방법 = "계산치" Then 'Worksheets("조명").Range("조명부하산출방법1").Offset(0, i_count_zone - 1) = "계산치" Then + Q_l_b = TOSG(DR존.조명에너지부하율계산치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth + Else + Q_l_b = TOSG(DR존.조명에너지부하율입력치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth + End If + Q_w_b = TOSG(DRProf.일일급탕요구량) * A_B * d_op_mth 'Worksheets("입력존").Range("일일급탕요구량1").Offset(0, i_count_zone - 1) * A_B * d_op(i_count_month) + '=================================================2010.2.21 삭제 + 'End If + '=================================================2010.2.21 삭제 + End If + 'Q_h_b_mth = d_op(i_count_month) * (Q_sink_op - eta_op * Q_source_op) + d_we(i_count_month) * (Q_sink_we - eta_we * Q_source_we) '(2-6) + '======================================2010.2.21 삭제 + 'Next + '======================================2010.2.21 삭제 + Else + A_B = TOSG(DR존.면적) * zone_count ' Worksheets("입력존").Range("전용면적1").Offset(0, i_count_zone - 1) + + Q_vh_b_op = 0 + Q_h_b_op = 0 + 'Q_h_b_we = 0 + + '//조명부하산출방법이 계산치(0001)일경우 계산치로 그렇지않을경우 입력치로 계산함 + Dim DRProf As DS.tbl_profileRow = CType(DSET.tbl_profile.Select("code='" & DR존.프로필 & "' and code <> '0'")(0), DS.tbl_profileRow) + + If DR존.조명부하산출방법 = "계산치" Then + Q_l_b = TOSG(DR존.조명에너지부하율계산치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth + Else + Q_l_b = TOSG(DR존.조명에너지부하율입력치) * TOSG(DRProf.일일사용시간) * A_B * d_op_mth + End If + + Q_w_b = TOSG(DRProf.일일급탕요구량) * A_B * d_op_mth '===============d_op(i_count_month) 2010.2.21 수정 + End If + + Dim Dr최대부하 As New C최대냉난방부하.Citem(DR존.code) ' DSR.최대냉난방부하Row = CType(DSETR.최대냉난방부하.Select("zone='" & DR존.code & "'")(0), DSR.최대냉난방부하Row) + + If i_count_HeatCool = 1 Then + If i_count_month = 0 Then '//0번시트는최대 냉난방부하 시트이다. + Dr최대부하.최대난방기기부하 = TOSG((Q_h_b_op) / 1000) ''=================== Q_h_b_we 2010.2.21 삭제 + 'Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(0, i_count_zone - 1) = (Q_h_b_op + Q_h_b_we) / 1000 + If DR존.야간운전방식 = "가동정지" Then ' Worksheets("입력존").Range("야간가동1").Offset(0, i_count_zone - 1) = "가동정지" Then + Dr최대부하.일일난방최대가동시간 = t_h_op_d + 'Dr최대냉난방부하.난방최대가동시간 = t_h_op_d ' Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(2, i_count_zone - 1) = t_h_op_d + Else + Dr최대부하.일일난방최대가동시간 = 24 + 'Dr최대냉난방부하.난방최대가동시간 = 24 ' Worksheets("" & i_count_month & "").Range("최대난방부하1").Offset(2, i_count_zone - 1) = 24 + End If + Else + Dim Dr월에너지요구량 As New C에너지분석(i_count_month, DR존.code) + + 'Dim Dr월에너지요구량 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + 'Dr월에너지요구량 = DSETR.에너지분석및요구량.Rows(i_count_month - 1) '//각 월별 시트에 값을 셋트(에너지분석및요구량 테이블에 들어있다) + If DR존.냉난방방식 = "냉난방" Or DR존.냉난방방식 = "난방" Then '//냉난방,난방 + Dr월에너지요구량.난방에너지요구량열 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG(Q_vh_b_op / 1000) + ' If i_count_month = 1 Then MsgBox("1") + 'Log.AppendLine("공조값설정=" & CSng(Q_vh_b_op / 1000)) + ElseIf DR존.냉난방공조 = "냉난방" Or DR존.냉난방공조 = "난방" Then '//냉난방,난방 + Dr월에너지요구량.난방에너지요구량열 = 0 + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + + '//오류확인용 존1만 확인한다. + 'If DR존.code = "0001" Then MsgBox(DR존.냉난방방식 & vbCrLf & DR존.냉난방공조 & vbCrLf & CSng((Q_h_b_op + Q_h_b_we) / 1000), MsgBoxStyle.Information, DR존.code) + + Else + If (DR존.냉난방공조 = "냉방" Or DR존.냉난방공조 = "환기") And DR존.외기부하처리여부 = "예" Then '냉방/환기/"예" Then + Dr월에너지요구량.난방에너지요구량열 = 0 + ' If i_count_month = 1 Then MsgBox("3") + Dr월에너지요구량.난방에너지요구량공조환기 = TOSG(Q_vh_b_op / 1000) + Else + ' If i_count_month = 1 Then MsgBox("4") + Dr월에너지요구량.난방에너지요구량열 = 0 + Dr월에너지요구량.난방에너지요구량공조환기 = 0 + End If + End If + + Dr월에너지요구량.조명에너지요구량 = Q_l_b / 1000 + + ' Log.AppendLine("i_count_HeatCool=" & i_count_HeatCool & "i_count_month=" & i_count_month & ",급탕에너지요구량=" & CSng(Q_w_b / 1000)) + Dr월에너지요구량.급탕에너지요구량 = Q_w_b / 1000 + ' MsgBox("난방요구량" & Dr월에너지요구량.난방요구량공조, MsgBoxStyle.Information, i_count_month & "CZONE") + End If + + Else + If i_count_month = 0 Then + Dr최대부하.최대냉방기기부하 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + 'Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(0, i_count_zone - 1) = (Q_h_b_op + Q_h_b_we) / 1000 + If DR존.야간운전방식 = "가동정지" Then '//가동정지 + Dr최대부하.일일냉방최대가동시간 = t_h_op_d ' Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(2, i_count_zone - 1) = t_h_op_d + Else + Dr최대부하.일일냉방최대가동시간 = 24 'Worksheets("" & i_count_month & "").Range("최대냉방부하1").Offset(2, i_count_zone - 1) = 24 + End If + + Else + Dim Dr월에너지요구량 As DSR.월별에너지분석Row = CType(DSETR.월별에너지분석.Select("월='" & Mon & "' and 존='" & DR존.code & "'")(0), DSR.월별에너지분석Row) + If DR존.냉난방방식 = "냉난방" Or DR존.냉난방방식 = "냉방" Then '//냉난방/냉방 + Dr월에너지요구량.냉방요구량열 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Dr월에너지요구량.냉방요구량공조 = TOSG(Q_vh_b_op / 1000) + Else + If DR존.냉난방공조 = "냉난방" Or DR존.냉난방공조 = "냉방" Then '//냉난방/냉방 + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = TOSG((Q_h_b_op) / 1000) '=================== Q_h_b_we 2010.2.21 삭제 + Else + If (DR존.냉난방공조 = "난방" Or DR존.냉난방공조 = "환기") And DR존.냉난방공조 = "예" Then '//난방/환기/예 + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = TOSG(Q_vh_b_op / 1000) + Else + Dr월에너지요구량.냉방요구량열 = 0 + Dr월에너지요구량.냉방요구량공조 = 0 + End If + + End If + End If + + 'MsgBox("냉방요구량" & Dr월에너지요구량.냉방요구량공조, MsgBoxStyle.Information, i_count_month & "CZONE") + End If + End If + Next '(3) + + Dim CAir As New CAirHandling + If i_count_month = 0 Then + CAir.Calc_Max_Power(i_count_HeatCool) '//AIR HANDLING 모듈 에 존재함..역시 내용이 크다 ㅠ_ㅠ + End If + + Next '(2) + Next '(1) + + Work_msg("에너지분석데이터 집계중...") + Frm_Work.ProgressBar1.Maximum = 13 + Frm_Work.ProgressBar1.Minimum = 0 + Frm_Work.ProgressBar1.Value = 0 + Frm_Work.TopMost = True + Frm_Work.Show() + '//요구량 계산이 완료되었으므로 Summary 계산한다. (이것이 없어서 소요량이 오류났음) + For Each Dr As C에너지분석 In Result.E분석 '//12달치의 각존들의 데이터를 가지고 합계내역을 추린다. + Work_plus() + Dr.Calc() + Next + DSETR.AcceptChanges() + Return True + End Function + + + ''' + ''' (main2)소요량 계산 + ''' + ''' + Public Function Calc_Useage() As Boolean + 'Dim d_op_month As Integer + Dim theta_e_month As Decimal + Dim d_full_mth As Integer + + Work_msg("소요량계산중...") + Frm_Work.ProgressBar1.Maximum = 12 + Frm_Work.ProgressBar1.Minimum = 0 + Frm_Work.ProgressBar1.Value = 0 + Frm_Work.TopMost = True + Frm_Work.Show() + + For i_count_month As Short = 1 To 12 '//월별로 난/냉방 소요량을 계산 + Work_msg("소요량계산중..." & "(" & i_count_month & "/12)") : Work_plus() + '===============================================2010.2.21 수정 + 'd_op_month = d_op(i_count_month) + d_full_mth = CInt(Calc.Pub.d_full(i_count_month)) + '===============================================2010.2.21 수정 + theta_e_month = Calc.Pub.theta_e(i_count_month) + + '///난방 + Calc.Heating.Calc_WaterheatingSystem(i_count_month, d_full_mth, theta_e_month) '//급탕소요량 '========2010.2.21 수정 + Calc.AirHandling.Calc_AirHandling(i_count_month, d_full_mth) '//환기? '========2010.2.21 수정 + If Result.E분석(i_count_month).난방에너지요구량 <> 0 Then Calc.Heating.Calc_HeatingSystem(i_count_month, theta_e_month) '//난방소요량 + + '///냉방 + If Result.E분석(i_count_month).냉방에너지요구량 <> 0 Then Calc.Cooling.Calc_CoolingSystem(i_count_month, theta_e_month) + Next + DSETR.AcceptChanges() + Return True + End Function + + + +End Class + diff --git a/ArinWarev1/ECO2_2020.vbproj b/ArinWarev1/ECO2_2020.vbproj new file mode 100644 index 0000000..c03adc8 --- /dev/null +++ b/ArinWarev1/ECO2_2020.vbproj @@ -0,0 +1,826 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D5C51BDE-68E5-42BC-B648-DB9CCF044703} + WinExe + Eco2Ar.My.MyApplication + Eco2Ar + Eco2Ar + WindowsForms + LocalIntranet + false + false + false + + + 283B51AD9210178E1628176E6D96B5102FED9775 + ArinWareT4_1_TemporaryKey.pfx + false + true + Off + + + + + 3.5 + My Project\app.manifest + 002.ico + v4.0 + + ftp://tindevil.com/www/mynetapp/t4/ + true + Web + true + Foreground + 7 + Days + false + false + true + http://tindevil.com/mynetapp/t4/ + http://tindevil.com + Energy%28Test Version%29 + Arinware + true + index.htm + 33 + 1.0.0.%2a + false + true + + + true + full + true + true + ..\..\..\..\..\eco2\debug_2016\ + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42353,42354,42355 + x86 + + + + + Full + false + true + true + c:\eco2\debug_2016\ + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42353,42354,42355 + true + x86 + + + MDI=true + + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + False + ..\Interop.Excel.dll + + + False + ..\Interop.VBIDE.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + DS.xsd + + + DS.xsd + + + True + True + DS2.xsd + + + Frm_import.vb + + + Form + + + fSelectWeatherGroup.vb + + + Form + + + fSelectArea.vb + + + Form + + + frm_monuse.vb + + + Form + + + Frm_Export.vb + + + Form + + + Frm_Upload.vb + + + Form + + + Report_설계개선.vb + + + Form + + + Frm_History.vb + + + Form + + + + YkCtl.vb + + + UserControl + + + Frm_DisplayGubun.vb + + + Form + + + Frm_Filter.vb + + + Form + + + Frm_Work.vb + + + Form + + + Report_Total.vb + + + Form + + + Frm_v20091231_ResultMon.vb + + + Form + + + Frm_v20091231_ResultMax.vb + + + Form + + + Frm_v20091231_buha.vb + + + Form + + + Frm_RepResult_Admin.vb + + + Form + + + Report_그래프.vb + + + Form + + + Frm_Desc.vb + + + Form + + + Report_Graph_auth.vb + + + Form + + + Frm_nBunbae.vb + + + Form + + + Frm_Warning.vb + + + Form + + + Frm_Calc.vb + + + Form + + + Frm_YK.vb + + + Form + + + Report_pyonga.vb + + + Form + + + + True + True + DSR.xsd + + + DSR.xsd + + + + + + + + + + Frm_Intro.vb + + + Form + + + CForm.vb + + + Form + + + + Form + + + MdiMain.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + Frm_v20091231_profile.vb + + + Form + + + Frm_Zone.vb + + + Form + + + Frm_kongjo.vb + + + Form + + + Frm_kongkub.vb + + + Form + + + Frm_Nanbang.vb + + + Form + + + Frm_NaengBang.vb + + + Form + + + Frm_Bunbae.vb + + + Form + + + Frm_New.vb + + + Form + + + Frm_v20091231_Myoun.vb + + + Form + + + Frm_Common.vb + + + Form + + + Frm_v20091231_Weather.vb + + + Form + + + Frm_About.vb + + + Form + + + ArinDv.vb + + + Component + + + MyCmb.vb + + + Component + + + MyTb.vb + + + Component + + + Frm_FileInfo.vb + + + Form + + + + + Frm_DisplayGubun.vb + + + Frm_Filter.vb + + + Frm_import.vb + + + Frm_Work.vb + Designer + + + fSelectWeatherGroup.vb + + + fSelectArea.vb + + + frm_monuse.vb + Designer + + + Frm_Export.vb + + + Frm_Upload.vb + + + + Designer + Report_Total.vb + + + Frm_v20091231_ResultMon.vb + Designer + + + Frm_v20091231_ResultMax.vb + Designer + + + Frm_v20091231_buha.vb + Designer + + + Frm_RepResult_Admin.vb + Designer + + + Report_그래프.vb + Designer + + + + Frm_Desc.vb + Designer + + + + Designer + Frm_Intro.vb + + + Report_Graph_auth.vb + Designer + + + + Frm_nBunbae.vb + Designer + + + Frm_Warning.vb + Designer + + + Frm_Calc.vb + Designer + + + Frm_YK.vb + Designer + + + Report_pyonga.vb + Designer + + + Report_설계개선.vb + Designer + + + + Frm_History.vb + + + CForm.vb + + + + Designer + MdiMain.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + Frm_v20091231_profile.vb + Designer + + + Frm_Zone.vb + Designer + + + Frm_kongjo.vb + Designer + + + Frm_kongkub.vb + Designer + + + Frm_Nanbang.vb + Designer + + + Frm_NaengBang.vb + Designer + + + Frm_Bunbae.vb + Designer + + + Frm_New.vb + Designer + + + Frm_v20091231_Myoun.vb + Designer + + + Frm_Common.vb + Designer + + + Frm_v20091231_Weather.vb + Designer + + + Designer + Frm_About.vb + + + Frm_FileInfo.vb + Designer + + + + + + DS.xsd + + + Designer + MSDataSetGenerator + DS.Designer.vb + + + DS.xsd + + + DS2.xsd + + + Designer + MSDataSetGenerator + DS2.Designer.vb + + + DS2.xsd + + + PreserveNewest + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + DSR.xsd + + + Designer + MSDataSetGenerator + DSR.Designer.vb + + + DSR.xsd + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0%28x86%29 + true + + + False + .NET Framework 3.0%28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + PreserveNewest + + + + PreserveNewest + + + PreserveNewest + + + + + + + + False + + + + + Include + True + Assembly + + + False + + + + + Include + True + Assembly + + + + + {8B6E4D7F-B484-471A-A419-2FE3451D26A3} + ArinLogin + + + {e9e16a98-8f8d-4848-a27e-4571c184fb1a} + ArinLog + + + {F0FB4304-F995-446A-99B7-0896A5E07A72} + ArinNet + + + {2AF28E8C-84F1-4D56-9592-3B0EBDE8DF14} + CEnergy + + + + + + \ No newline at end of file diff --git a/ArinWarev1/Forms_Input/Frm_v20091231_Weather.Designer.vb b/ArinWarev1/Forms_Input/Frm_v20091231_Weather.Designer.vb index d84a5d5..c42de3c 100644 --- a/ArinWarev1/Forms_Input/Frm_v20091231_Weather.Designer.vb +++ b/ArinWarev1/Forms_Input/Frm_v20091231_Weather.Designer.vb @@ -322,6 +322,7 @@ Partial Class Frm_V20091231_Weather Me.dv = New CEnergy.arindv() Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.건물위치DataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn() + Me.TabPage4 = New System.Windows.Forms.TabPage() Label39 = New System.Windows.Forms.Label() Label247 = New System.Windows.Forms.Label() Label248 = New System.Windows.Forms.Label() @@ -1430,6 +1431,7 @@ Partial Class Frm_V20091231_Weather Me.TabControl3.Controls.Add(Me.TabPage10) Me.TabControl3.Controls.Add(Me.TabPage2) Me.TabControl3.Controls.Add(Me.TabPage3) + Me.TabControl3.Controls.Add(Me.TabPage4) Me.TabControl3.Dock = System.Windows.Forms.DockStyle.Fill Me.TabControl3.Location = New System.Drawing.Point(193, 0) Me.TabControl3.Name = "TabControl3" @@ -1496,7 +1498,7 @@ Partial Class Frm_V20091231_Weather Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 102.0!)) Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 102.0!)) Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 96.0!)) - Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 147.0!)) + Me.TableLayoutPanel7.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 148.0!)) Me.TableLayoutPanel7.Controls.Add(Me.tb_w12, 3, 5) Me.TableLayoutPanel7.Controls.Add(Label64, 2, 5) Me.TableLayoutPanel7.Controls.Add(Label77, 2, 4) @@ -1530,7 +1532,7 @@ Partial Class Frm_V20091231_Weather Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) Me.TableLayoutPanel7.RowStyles.Add(New System.Windows.Forms.RowStyle()) - Me.TableLayoutPanel7.Size = New System.Drawing.Size(452, 169) + Me.TableLayoutPanel7.Size = New System.Drawing.Size(453, 169) Me.TableLayoutPanel7.TabIndex = 122 ' 'tb_w12 @@ -3856,6 +3858,15 @@ Partial Class Frm_V20091231_Weather Me.건물위치DataGridViewTextBoxColumn.Name = "건물위치DataGridViewTextBoxColumn" Me.건물위치DataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable ' + 'TabPage4 + ' + Me.TabPage4.Location = New System.Drawing.Point(4, 22) + Me.TabPage4.Name = "TabPage4" + Me.TabPage4.Size = New System.Drawing.Size(935, 507) + Me.TabPage4.TabIndex = 7 + Me.TabPage4.Text = "풍속" + Me.TabPage4.UseVisualStyleBackColor = True + ' 'Frm_V20091231_Weather ' Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 12.0!) @@ -4156,4 +4167,5 @@ Partial Class Frm_V20091231_Weather Friend WithEvents Label13 As Label Friend WithEvents ToolStripButton13 As ToolStripButton Friend WithEvents ToolStripButton8 As ToolStripButton + Friend WithEvents TabPage4 As System.Windows.Forms.TabPage End Class diff --git a/ArinWarev1/Forms_Input/Frm_v20091231_Weather.resx b/ArinWarev1/Forms_Input/Frm_v20091231_Weather.resx index 70a5ad8..9e21749 100644 --- a/ArinWarev1/Forms_Input/Frm_v20091231_Weather.resx +++ b/ArinWarev1/Forms_Input/Frm_v20091231_Weather.resx @@ -412,48 +412,18 @@ TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - 1397, 17 - - - True - - - True - - - True - - - 17, 56 - - - 131, 56 - 91, 17 17, 17 - - 17, 17 - True 155, 17 - - True - - - 155, 17 - - - 655, 17 - 655, 17 @@ -532,15 +502,6 @@ 252, 17 - - True - - - 252, 17 - - - 811, 17 - 811, 17 @@ -619,15 +580,6 @@ 360, 17 - - True - - - 360, 17 - - - 967, 17 - 967, 17 @@ -706,15 +658,6 @@ 473, 17 - - True - - - 473, 17 - - - 1241, 17 - 1241, 17 @@ -787,15 +730,30 @@ P0ilegWKIwMchCbSyQAAAABJRU5ErkJggg== + + 1397, 17 + + + True + + + True + + + True + + + 17, 56 + + + 131, 56 + 1123, 17 True - - True - 83 diff --git a/ArinWarev1/My Project/AssemblyInfo.vb b/ArinWarev1/My Project/AssemblyInfo.vb index 0ce5c90..7bb4ef8 100644 --- a/ArinWarev1/My Project/AssemblyInfo.vb +++ b/ArinWarev1/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' 지정되도록 할 수 있습니다. ' - - + + diff --git a/SetupIS/SetupIS.isl b/SetupIS/SetupIS.isl index 4660fab..e8e70a4 100644 --- a/SetupIS/SetupIS.isl +++ b/SetupIS/SetupIS.isl @@ -2481,7 +2481,7 @@ CustomExpress<ISProjectDataFolder>Default2103302Intel10330100010240MediaLocationhttp://758053 DVD-10Express<ISProjectDataFolder>Default3103302Intel103308.75120480MediaLocationhttp://758053 DVD-18Express<ISProjectDataFolder>Default3103302Intel1033015.83120480MediaLocationhttp://758053 - DVD-5ExpressC:\eco2\Setup_2020_200825_Weather66_r7Default3104201Intel104204.38120480MediaLocationhttp://758053 + DVD-5ExpressC:\eco2\Setup_ECO2_2020_20170122_9Default3104201Intel104204.38120480MediaLocationhttp://758053 DVD-9Express<ISProjectDataFolder>Default3103302Intel103307.95120480MediaLocationhttp://758053 SingleImageExpressC:\eco2\Setup_2016_191020_guest_patchPackageName1104201Intel104200000MediaLocationhttp://1087013 WebDeploymentExpress<ISProjectDataFolder>PackageName4103321Intel103300000MediaLocationhttp://1249413