''' ''' 전체존의 사용면적을 계산및 확인(냉,난,조,급,환) ''' ''' 전체존의 사용면적을 계산및 확인(냉,난,조,급,환) 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)) Dim 면적별범위값 As Char = Pub.면적별범위값(Dr존.면적) '//냉난방(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" OrElse Dr프로필.code <> "0025" OrElse Dr프로필.code <> "0026" Then If Dr프로필.code <> "0027" 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존.입력존의수) / 1.66 '주거용 오피스텔 적용 End If 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" OrElse Dr프로필.code <> "0025" OrElse Dr프로필.code <> "0026" Then If Dr프로필.code <> "0027" 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존.입력존의수) / 1.66 '주거용 오피스텔 적용 End If 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 '//급탕요구량이 있다면 급탕면적 누적 Dim 프로필급탕요구량 As Decimal = TOSG(Dr프로필.일일급탕요구량) If Dr프로필.설명.StartsWith("00") OrElse Dr프로필.설명.StartsWith("27") Then Dim 면적별범위 As Char = Pub.면적별범위값(TOSG(Dr존.면적)) 프로필급탕요구량 = Pub.프로필급탕요구량(면적별범위) / TOSG(Dr존.면적) End If If 프로필급탕요구량 > 0 Then A_W += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) If 건물용도 < 10 Then '//주거용 A_W_wf = A_W 'Select Case 면적별범위값 ' Case "A"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 0.458 ' Case "B"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 0.618 ' Case "C"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 0.729 ' Case "D"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1 ' Case "E"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.258 ' Case "F"c ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.475 ' Case Else ' A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.643 'End Select 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 소수점오류인한 수정 If Dr프로필.code <> "0027" Then A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(프로필급탕요구량 * (day_year / (30 * 250)), 3) Else '//주거용 오피스텔 Select Case 면적별범위값 Case "A"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 0.804 Case "B"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.025 Case "C"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.21 Case "D"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.66 Case "E"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 2.088 Case "F"c A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 2.448 Case Else A_W_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 2.727 End Select End If 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) If Dr프로필.code <> "0027" Then A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일사용시간) * (day_year / (9 * 250)), 3) * offset Else A_L_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.66 '주거용 오피스텔 적용 End If 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)) If Dr프로필.code <> "0027" Then A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) * Math.Round(TOSG(Dr프로필.일일운전시간) * (day_year / (11 * 250)), 3) Else A_V_wf += TOSG(Dr존.면적) * TOSG(Dr존.입력존의수) / 1.66 '주거용 오피스텔 적용 End If 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