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_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_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_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_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 E_el_pv_out_offsite As Decimal = 0 'Dim i_count_pv As Integer, i_count_pv_location As Integer, i_pv_location As Integer E_el_pv_out = 0 E_el_pv_out_offsite = 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 If Dr신재생.대지외설치여부 Then E_el_pv_out_offsite = E_el_pv_out_offsite + E_sol * P_pk * f_perf Else E_el_pv_out += E_sol * P_pk * f_perf End If '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 Result.생산E(i_count_pv_month).태양광전력생산량_offsite += E_el_pv_out_offsite 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_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_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_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_HydroHeatpumpSystem(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(">>HydroCalc_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, COP_L, COP_H, COP_b 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 Dim water_temp As Single = 0.0F ' i_hp_month If Dr신재생.수열_수열원 = "하천수" Then Dim Dr수온 As DS.weather_riverRow = CType(DSET.weather_river.Select("pcode='" & Calc.Pub.기상데이터.code + "'")(0), DS.weather_riverRow) water_temp = TOSG(Dr수온("M" + i_hp_month.ToString("00"))) Else Dim Dr수온 As DS.weather_waterRow = CType(DSET.weather_water.Rows(0), DS.weather_waterRow) water_temp = TOSG(Dr수온("M" + i_hp_month.ToString("00"))) End If '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_L = TOSG(Dr신재생.수열_열성능비_난방5도) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) COP_H = TOSG(Dr신재생.수열_열성능비_난방15도) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) COP_b = COP_L - ((COP_H - COP_L) / 10 * 5) COP = (COP_H - COP_L) / 10 * (water_temp - 5) + COP_b '// 최저 최고 수열온도는 평균온도 대비 +- 5도로 변동되며, 지열과 형평성을 맞추기 위하여 보수적으로 5도 낮춤 Else '냉방 COP_L = TOSG(Dr신재생.수열_열성능비_냉방25도) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) COP_H = TOSG(Dr신재생.수열_열성능비_냉방35도) ' Worksheets("신재생기기").Range("지열히트펌프용량1").Offset(1, i_count_hp - 1) COP_b = COP_L - ((COP_H - COP_L) / 10 * 25) COP = (COP_H - COP_L) / 10 * (water_temp + 5) + COP_b '// 최저 최고 수열온도는 평균온도 대비 +- 5도로 변동되며, 지열과 형평성을 맞추기 위하여 보수적으로 5도 높임 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_HydroHeatpumpSystem 결과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_HydroHeatpumpSystem 결과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_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_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_outg_net / Result.사용면적.W) '//20170120 추가 '//Result.생산E(i_hp_month).면적당생산량지열 += (Q_h_f_hp / Result.사용면적.W) '20170120 지열생산량을 수정 End Select pLog.Add(String.Format(">>Calc_HydroHeatpumpSystem 결과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).신재생열병합열생산량 += (Q_chp_gen_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_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_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_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 Public Overridable Sub Calc_WindPowerGenerationSystem(ByVal i_count_wp_month As Integer, ByVal i_wp_d_mth As Integer) pLog.Add(String.Format(">>Calc_WindPowerGenerationSystem 진입 : i_count_wp_month={0}, i_wp_d_mth={1}", _ i_count_wp_month, i_wp_d_mth)) Dim f_v_WK, P_WEA_WK, P_Wind_WK, t_WK, A, A_Rotor, v_1, v_2, h_1, h_2 As Decimal Dim alpha, Q_f_prod_WEA, rho As Decimal Dim k As Integer Dim Q_f_prod_out, Q_f_prod_out_offsite As Decimal k = 2 alpha = 0.14 '표준조건 Q_f_prod_WEA = 0 Q_f_prod_out = 0 Q_f_prod_out_offsite = 0 rho = 1.225 h_1 = 10 For Each Dr신재생 As DS.tbl_newRow In DSET.tbl_new.Select("code <> '0'", "code") If Dr신재생.기기종류 = "풍력" Then Dim Drow풍속 As DS.weather_windRow = CType(DSET.weather_wind.Select("pcode='" & Calc.Pub.기상데이터.code & "'")(0), DS.weather_windRow) A_Rotor = TOSG(Dr신재생.풍력로우터회전면적) h_2 = TOSG(Dr신재생.풍력허브높이) v_1 = TOSG(Drow풍속("M" + i_count_wp_month.ToString("00"))) ' 값을 정의하기 위해서 해당 지역 월 평균 풍속 데이터 필요 v_2 = v_1 * Math.Pow((h_2 / h_1), alpha) A = 2 * v_2 / Math.Sqrt(Math.PI) For v_WK As Integer = 4 To 16 f_v_WK = k / A * Math.Pow((v_WK - 0.5) / A, k - 1) * Math.Exp(-Math.Pow(((v_WK - 0.5) / A), k)) t_WK = 24 * i_wp_d_mth * f_v_WK P_Wind_WK = 1 / 2 * rho * A_Rotor * Math.Pow(v_WK, 3) P_WEA_WK = 0.2 * P_Wind_WK Q_f_prod_WEA += (P_WEA_WK * t_WK) / 1000 Next If Dr신재생.대지외설치여부_풍력 Then Q_f_prod_out_offsite += Q_f_prod_WEA Else Q_f_prod_out += Q_f_prod_WEA End If End If Next Result.생산E(i_count_wp_month).풍력전력생산량 += Q_f_prod_out Result.생산E(i_count_wp_month).풍력전력생산량_offsite += Q_f_prod_out_offsite pLog.Add(String.Format(">>Calc_WindPowerGenerationSystem 진입 : Q_f+prod_out={0}, 풍력전력생산량={1}", _ Q_f_prod_out, Result.생산E(i_count_wp_month).풍력전력생산량)) End Sub End Class