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 Delta_theta_AUL, V_dot_A_AHU As Decimal
'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 계산됨")
Dim v사람 As Decimal = TOSG(DR프로필(0).사람)
Dim v작업보조기기 As Decimal = TOSG(DR프로필(0).작업보조기기)
'If DR프로필(0).설명.StartsWith("00") OrElse DR프로필(0).설명.StartsWith("27") Then
' If A_B = 0 Then
' MsgBox("존=" & DR존.code & " 의 프로필=" & DR존.프로필 & " 의 면적데이터(A_B)가 존재하지않습니다", MsgBoxStyle.Critical, "확인")
' Else
' Dim 프로필면적 As Char = Pub.면적별범위값(TOSG(DR존.면적))
' If 프로필면적 = "A"c Then
' v사람 = 1528.8 / A_B
' ElseIf 프로필면적 = "B"c Then
' v사람 = 1999.2 / A_B
' ElseIf 프로필면적 = "C"c Then
' v사람 = 2822.4 / A_B
' ElseIf 프로필면적 = "D"c Then
' v사람 = 3292.8 / A_B
' ElseIf 프로필면적 = "E"c Then
' v사람 = 3763.2 / A_B
' ElseIf 프로필면적 = "F"c Then
' v사람 = 4116.0 / A_B
' Else
' v사람 = 5762.4 / A_B
' End If
' If 프로필면적 = "A"c Then
' v작업보조기기 = 3741.9 / A_B
' ElseIf 프로필면적 = "B"c Then
' v작업보조기기 = 4893.2 / A_B
' ElseIf 프로필면적 = "C"c Then
' v작업보조기기 = 6908.1 / A_B
' ElseIf 프로필면적 = "D"c Then
' v작업보조기기 = 8059.5 / A_B
' ElseIf 프로필면적 = "E"c Then
' v작업보조기기 = 9210.8 / A_B
' ElseIf 프로필면적 = "F"c Then
' v작업보조기기 = 10074.3 / A_B
' Else
' v작업보조기기 = 14104.1 / A_B
' End If
' End If
'End If
Q_I_source_p = v사람 * A_B ' Worksheets("설정조건").Range("사람1").Offset(0, i_count_profile) * A_B '(2-118)
Q_I_source_fac = (v작업보조기기 * 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
''/// 공기식 태양열 적용여부 확인
'Delta_theta_AUL = 0
'V_dot_A_AHU = 0
'If DR존.냉난방공조처리시스템 <> "0" Then
' Dim Dr공조() As DS.tbl_kongjoRow = DSET.tbl_kongjo.Select("code='" & DR존.냉난방공조처리시스템 & "' and code <> '0'", "code")
' If Dr공조.Length = 1 AndAlso i_count_month > 0 Then
' If Dr공조(0).공기식태양열적용 = "예" Then
' V_dot_A_AHU = Get_V_dot_A_AHU(DSET.tbl_profile, DSET.tbl_zone, Dr공조(0).code)
' '해당 존에 연결된 공조기에 연결된 입력존*입력존수*최소외기도입량 의 합계 산출(V_dot_A_AHU)
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' Delta_theta_AUL = SolarAirHeatingSystem(DSET, i_count_month, d_op_mth, Dr공조(0), V_dot_A_AHU, Calc.Pub.theta_e(i_count_month), Delta_theta_AUL)
' End If
' End If
'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) + Delta_theta_AUL) Then '//난방설정온도 > 외기온도(난방기)
' Q_vh_b_op = V_mech * (theta_i_h_soll - (Calc.Pub.theta_e(i_count_month) + Delta_theta_AUL)) * 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
'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
'If DR존.냉난방공조처리시스템 <> "0" Then
' Dim Dr공조 As DS.tbl_kongjoRow = DSET.tbl_kongjo.Select("code='" & DR존.냉난방공조처리시스템 & "' and code <> '0'", "code")(0)
' If DR공조.공기식태양열적용 = "예" Then
' V_dot_A_AHU = Get_V_dot_A_AHU(DSET.tbl_profile, DSET.tbl_zone, Dr공조.code)
' '해당 존에 연결된 공조기에 연결된 입력존*입력존수*최소외기도입량 의 합계 산출(V_dot_A_AHU)
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' '/////////////
' Delta_theta_AUL = SolarAirHeatingSystem(DSET, i_count_month, d_op_mth, Dr공조, V_dot_A_AHU, Calc.Pub.theta_e(i_count_month), Delta_theta_AUL)
' If theta_i_h_soll > (Calc.Pub.theta_e(i_count_month) + Delta_theta_AUL) Then '//난방설정온도 > 외기온도(난방기)
' Q_vh_b_op = V_mech * (theta_i_h_soll - (Calc.Pub.theta_e(i_count_month) + Delta_theta_AUL)) * 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
' Else
' End If
'Else
' '//ㄱ
'End If
''For Each Dr공조 As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code='" & DR존.냉난방공조처리시스템 & "' and code <> '0'", "code")
''Next
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
Dim 프로필급탕요구량 As Decimal = TOSG(Drow프로필.일일급탕요구량)
'If Drow프로필.설명.StartsWith("00") OrElse Drow프로필.설명.StartsWith("27") Then
' Dim 면적별범위 As Char = Pub.면적별범위값(TOSG(DR존.면적))
' 프로필급탕요구량 = Pub.프로필급탕요구량(면적별범위) / A_B
'End If
Q_w_b = 프로필급탕요구량 * 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())
'/// 공기식 태양열 적용여부 확인
Delta_theta_AUL = 0
V_dot_A_AHU = 0
If i_count_month > 0 Then
If DR(0).공기식태양열적용 = "예" Then
V_dot_A_AHU = Get_V_dot_A_AHU(DSET.tbl_profile, DSET.tbl_zone, DR(0).code)
'해당 존에 연결된 공조기에 연결된 입력존*입력존수*최소외기도입량 의 합계 산출(V_dot_A_AHU)
'/////////////
'/////////////
'/////////////
'/////////////
'/////////////
'/////////////
'/////////////
Delta_theta_AUL = SolarAirHeatingSystem(DSET, i_count_month, d_op_mth, DR(0), V_dot_A_AHU, Calc.Pub.theta_e(i_count_month), Delta_theta_AUL)
End If
End If
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)
theta_V_mech = Calc.Pub.theta_e(i_count_month) + Phi * (theta_i - Calc.Pub.theta_e(i_count_month) + Delta_theta_AUL)
Case Else
Phi = 0
theta_V_mech = Calc.Pub.theta_e(i_count_month) + Delta_theta_AUL
End Select
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
프로필급탕요구량 = TOSG(DRProf.일일급탕요구량)
'If DRProf.설명.StartsWith("00") OrElse DRProf.설명.StartsWith("27") Then
' Dim 면적별범위 As Char = Pub.면적별범위값(TOSG(DR존.면적))
' 프로필급탕요구량 = Pub.프로필급탕요구량(면적별범위) / A_B
'End If
Q_w_b = 프로필급탕요구량 * 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
Dim 프로필급탕요구량 As Decimal = TOSG(DRProf.일일급탕요구량)
'If DRProf.설명.StartsWith("00") OrElse DRProf.설명.StartsWith("27") Then
' Dim 면적별범위 As Char = Pub.면적별범위값(TOSG(DR존.면적))
' 프로필급탕요구량 = Pub.프로필급탕요구량(면적별범위) / A_B
'End If
Q_w_b = 프로필급탕요구량 * 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존.프로필 = "0000" Then '주거부문일 경우 냉방 가동시간 3.8시간
Q_h_b_op = TOSG(Q_h_b_op) * 3.8 / 24
Q_vh_b_op = TOSG(Q_vh_b_op) * 3.8 / 24
End If
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))
Dim importrows() As DS.tbl_importdataRow = DSET1.tbl_importdata.Select("mon='M" + i_count_month.ToString("00") + "'")
If importrows.Length = 1 Then
Result.생산E(i_count_month).연료전지전력생산량_offsite += importrows(0).외부전기도입량
End If
'///난방
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, theta_e_month) '//환기? '========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