720 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			VB.net
		
	
	
	
	
	
			
		
		
	
	
			720 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			VB.net
		
	
	
	
	
	
| 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
 | |
| 
 | |
| 
 | |
|     ''' <summary>
 | |
|     ''' 계산결과 영역을 초기화시킵니다.
 | |
|     ''' </summary>
 | |
|     ''' <remarks></remarks>
 | |
|     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
 | |
| 
 | 
