initial commit
This commit is contained in:
719
ArinWarev1/Calculator/Calculator.vb
Normal file
719
ArinWarev1/Calculator/Calculator.vb
Normal file
@@ -0,0 +1,719 @@
|
||||
Public Class Calculator
|
||||
|
||||
Public WithEvents Zone As CZone '//존에클래스할당
|
||||
Public WithEvents AirHandling As CAirHandling '//존에클래스할당
|
||||
Public WithEvents Cooling As CCooling '//존에클래스할당
|
||||
Public WithEvents Heating As CHeating '//존에클래스할당
|
||||
Public WithEvents Renewable As CRenewable '//존에클래스할당
|
||||
Public WithEvents Summary As CSummary
|
||||
Public WithEvents Pub As CShared
|
||||
|
||||
Public IsError As Boolean = False
|
||||
Public IsSimulation As Boolean = False
|
||||
|
||||
Enum ECalc
|
||||
All = 0
|
||||
REq = 1
|
||||
Use = 2
|
||||
설계개선안 = 3
|
||||
End Enum
|
||||
|
||||
Private DSET As DS
|
||||
Private DSETR As DSR
|
||||
Private Result As CResult
|
||||
Public Sub New(ByVal Version As String, ByRef pds As DS, ByRef pdsetr As DSR, ByRef prresult As CResult, p_simul As Boolean)
|
||||
Me.IsError = False
|
||||
DSET = pds
|
||||
DSETR = pdsetr
|
||||
Result = prresult
|
||||
IsSimulation = p_simul '//평가계산에의해서는 시뮬레이션모드로 작동
|
||||
Select Case Version
|
||||
Case "2009123100", StartVersion
|
||||
Me.Zone = New CZone(DSET, DSETR, Result) '//존
|
||||
Me.AirHandling = New CAirHandling(DSET, DSETR, Result) '//공기
|
||||
Me.Cooling = New CCooling(DSET, DSETR, Result)
|
||||
Me.Heating = New CHeating(DSET, DSETR, Result)
|
||||
Me.Renewable = New CRenewable(DSET, Result) '//신재상
|
||||
Me.Summary = New CSummary(DSETR, Result) '//계산결과 집계
|
||||
Me.Pub = New CShared '//공용변수(여기추가됬을거에요)- 기상오류처리
|
||||
Me.IsError = Me.Pub.IsError '//공용변수값에 오류확인
|
||||
Case Else
|
||||
MsgBox("LG계산식에 지원되지않는 버젼(" & StartVersion & "/" & Version & ")입니다", MsgBoxStyle.Critical, "확인")
|
||||
Me.IsError = True
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
Private Function 설계개선안사용여부(findcode As String) As Boolean
|
||||
Dim retval As Boolean = False
|
||||
For Each dr As DS.tbl_monuseRow In DSET1.tbl_monuse.Select("code='" + findcode + "'", "월")
|
||||
If dr.도시가스 <> "0" Then
|
||||
retval = True
|
||||
Exit For
|
||||
End If
|
||||
If dr.전력 <> "0" Then
|
||||
retval = True
|
||||
Exit For
|
||||
End If
|
||||
If dr.지역난방 <> "0" Then
|
||||
retval = True
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
Return retval
|
||||
End Function
|
||||
|
||||
Private Sub 입력값계수변환(code As String)
|
||||
If 설계개선안사용여부(code) Then
|
||||
For Each dr As DS.tbl_monuseRow In DSET1.tbl_monuse.Select("code='" + code + "'", "월")
|
||||
Dim newdr As DSR.월별1차에너지사용량Row = DSETR1.월별1차에너지사용량.NewRow
|
||||
newdr.도시가스 = dr.도시가스 * Result2.E변환계수.LNG
|
||||
newdr.전력 = dr.전력 * Result2.E변환계수.전력
|
||||
newdr.지역난방 = dr.지역난방 * Result2.E변환계수.지역난방
|
||||
newdr.code = dr.code
|
||||
newdr.년 = dr.년
|
||||
newdr.월 = dr.월
|
||||
DSETR1.월별1차에너지사용량.Rows.Add(newdr)
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
|
||||
|
||||
'''130824
|
||||
Public Function 설계개선안계산() As Boolean
|
||||
Dim dr_desc As DS.tbl_DescRow = DSET.tbl_Desc.Rows(0)
|
||||
|
||||
'//년면적값확인
|
||||
Dim 년면적 As Decimal = 0
|
||||
If IsNumeric(dr_desc.buildm23) = False Then dr_desc.buildm23 = "0"
|
||||
년면적 = CDec(dr_desc.buildm23)
|
||||
If 년면적 = 0 Then
|
||||
MsgBox("년면적값이 없습니다.", MsgBoxStyle.Critical, "확인")
|
||||
Return False
|
||||
End If
|
||||
|
||||
'//월별에너지사용량에서 입력한 값
|
||||
Dim 사용자입력값에너지사용량(12) As Decimal
|
||||
|
||||
'//현재계산되어있는 1차에너지사용량
|
||||
Dim 년면적당(12) As Decimal
|
||||
Dim 년면적당원본(12) As Decimal
|
||||
|
||||
Dim ok As Boolean = True
|
||||
Dim 오차계산횟수 As Decimal = 0
|
||||
Dim 난방설정온도 As Decimal = 20
|
||||
Dim 냉방설정온도 As Decimal = 26
|
||||
Dim 실내발열 As Decimal = 0
|
||||
|
||||
Dim 전반기최저입력 As Decimal = 999999
|
||||
Dim 하반기최저입력 As Decimal = 999999
|
||||
Dim 전반기최저 As Decimal = 999999
|
||||
Dim 하반기최저 As Decimal = 999999
|
||||
|
||||
For i As Integer = 1 To 12
|
||||
사용자입력값에너지사용량(i) = 0
|
||||
년면적당(i) = 0
|
||||
Zone_Message("계산데이터와 입력데이터 집계중(" + i.ToString() + "/3)...", i, 0, 12)
|
||||
|
||||
'//사용자에의해서 입력된 값을 누적한다.
|
||||
For Each dr1 As DSR.월별1차에너지사용량Row In DSETR.월별1차에너지사용량.Select("월='" + i.ToString("00") + "'")
|
||||
사용자입력값에너지사용량(i) += TOSG(dr1.도시가스) + TOSG(dr1.전력) + TOSG(dr1.지역난방)
|
||||
Next
|
||||
|
||||
'//임시계산저장소의 값을 이용한다.
|
||||
년면적당원본(i) = (Result1.일차E소요량(i).난방소요량 / 년면적) + (Result1.일차E소요량(i).냉방소요량 / 년면적) _
|
||||
+ (Result1.일차E소요량(i).급탕소요량 / 년면적) + (Result1.일차E소요량(i).조명소요량 / 년면적) _
|
||||
+ (Result1.일차E소요량(i).환기소요량 / 년면적)
|
||||
|
||||
If i <= 6 Then
|
||||
If 사용자입력값에너지사용량(i) < 전반기최저입력 Then 전반기최저입력 = 사용자입력값에너지사용량(i)
|
||||
If 년면적당원본(i) < 전반기최저 Then 전반기최저 = 년면적당원본(i)
|
||||
Else
|
||||
If 사용자입력값에너지사용량(i) < 하반기최저입력 Then 하반기최저입력 = 사용자입력값에너지사용량(i)
|
||||
If 년면적당원본(i) < 하반기최저 Then 하반기최저 = 년면적당원본(i)
|
||||
End If
|
||||
Next
|
||||
|
||||
Dim 입력값평균 As Decimal = (하반기최저입력 + 전반기최저입력) / 2
|
||||
Dim 계산값평균 As Decimal = (하반기최저 + 전반기최저) / 2
|
||||
Dim 오차 As Decimal = 계산값평균 - 입력값평균
|
||||
Dim 오차재계산횟수 As Integer = 5
|
||||
|
||||
|
||||
While (True)
|
||||
|
||||
For i As Integer = 1 To 12
|
||||
사용자입력값에너지사용량(i) = 0
|
||||
년면적당(i) = 0
|
||||
Zone_Message("계산데이터와 입력데이터 집계중(" + i.ToString() + "/3)...", i, 0, 12)
|
||||
|
||||
'//사용자에의해서 입력된 값을 누적한다.
|
||||
For Each dr1 As DSR.월별1차에너지사용량Row In DSETR.월별1차에너지사용량.Select("월='" + i.ToString("00") + "'")
|
||||
사용자입력값에너지사용량(i) += TOSG(dr1.도시가스) + TOSG(dr1.전력) + TOSG(dr1.지역난방)
|
||||
Next
|
||||
|
||||
'//임시계산저장소의 값을 이용한다.
|
||||
년면적당(i) = (Result2.일차E소요량(i).난방소요량 / 년면적) + (Result2.일차E소요량(i).냉방소요량 / 년면적) _
|
||||
+ (Result2.일차E소요량(i).급탕소요량 / 년면적) + (Result2.일차E소요량(i).조명소요량 / 년면적) _
|
||||
+ (Result2.일차E소요량(i).환기소요량 / 년면적)
|
||||
|
||||
년면적당(i) += (-1 * 오차)
|
||||
|
||||
Next
|
||||
|
||||
'//여름피크확인(8월)
|
||||
'//겨울피크확인(1월)
|
||||
Dim 오차겨울 As Decimal = Math.Abs(년면적당(1) - 사용자입력값에너지사용량(1))
|
||||
Dim 오차여름 As Decimal = Math.Abs(년면적당(8) - 사용자입력값에너지사용량(8))
|
||||
|
||||
Dim 원본겨울 As Decimal = 년면적당원본(1)
|
||||
Dim 원본여름 As Decimal = 년면적당원본(8)
|
||||
|
||||
Dim 오차발생여름 As Boolean = False
|
||||
Dim 오차발생겨울 As Boolean = False
|
||||
|
||||
Dim 오차겨울퍼센트 As Decimal = (오차겨울 / 년면적당(1)) * 100
|
||||
Dim 오차여름퍼센트 As Decimal = (오차여름 / 년면적당(8)) * 100
|
||||
|
||||
'//오차계산에따른 반복제어
|
||||
If 오차계산횟수 > 오차재계산횟수 Then
|
||||
' MsgBox("오차계산횟수를 초과하였습니다" + vbCrLf + "개선작업이 종료됩니다.", MsgBoxStyle.Information, "확인")
|
||||
ok = False
|
||||
Exit While
|
||||
End If
|
||||
|
||||
If 오차겨울퍼센트 > 0.1 Then
|
||||
오차발생겨울 = True
|
||||
If 년면적당(1) < 사용자입력값에너지사용량(1) Then
|
||||
난방설정온도 += 0.5
|
||||
Else
|
||||
난방설정온도 -= 0.5
|
||||
End If
|
||||
End If
|
||||
|
||||
If 오차여름퍼센트 > 0.1 Then
|
||||
오차발생여름 = True
|
||||
If 년면적당(8) < 사용자입력값에너지사용량(8) Then
|
||||
냉방설정온도 -= 0.5
|
||||
Else
|
||||
냉방설정온도 += 0.5
|
||||
End If
|
||||
End If
|
||||
|
||||
'//오차가발생하지않았다면 더이상 진행하지 않는다.
|
||||
If Not 오차발생여름 AndAlso Not 오차발생겨울 Then
|
||||
ok = True
|
||||
Exit While
|
||||
End If
|
||||
|
||||
|
||||
|
||||
'//변경될 온도정보를 가지고 다시 계산합니다.
|
||||
If Me.Start("설계개선작업(" + (오차계산횟수 + 1).ToString() + "/" + 오차재계산횟수.ToString + ")" + vbCrLf + vbCrLf + _
|
||||
"(겨울/여름)오차발생율:" + 오차겨울퍼센트.ToString("#0.00") + "%/" + 오차여름퍼센트.ToString("#0.00") + "%" + vbCrLf, ECalc.All, LogSB, (-1 * 오차), 난방설정온도, 냉방설정온도) Then '//파라미터 True 라면 소요량이 추가로 게산된다.
|
||||
오차계산횟수 += 1
|
||||
Me.Summary.All()
|
||||
'오차 = 0
|
||||
'Continue While
|
||||
Else
|
||||
MsgBox("설계개선작업중 오류가 발생하였습니다." + vbCrLf + LogSB.ToString, MsgBoxStyle.Critical, "확인")
|
||||
ok = False
|
||||
Exit While
|
||||
End If
|
||||
|
||||
End While
|
||||
|
||||
|
||||
'//가상결과데이터(DSR2)를 집계해서 실제결과DSR1에 넣는다.
|
||||
DSETR1.설계계산결과.Clear()
|
||||
DSETR1.설계계산결과.AcceptChanges()
|
||||
|
||||
For i As Integer = 1 To 12
|
||||
Dim ndr As DSR.설계계산결과Row = DSETR1.설계계산결과.New설계계산결과Row
|
||||
ndr.월 = i.ToString("00")
|
||||
ndr.난방전 = (Result2.일차E소요량(i).난방소요량 / 년면적)
|
||||
ndr.냉방전 = (Result2.일차E소요량(i).냉방소요량 / 년면적)
|
||||
ndr.조명전 = (Result2.일차E소요량(i).조명소요량 / 년면적)
|
||||
ndr.급탕전 = +(Result2.일차E소요량(i).급탕소요량 / 년면적)
|
||||
ndr.환기전 = (Result2.일차E소요량(i).환기소요량 / 년면적)
|
||||
DSETR1.설계계산결과.Rows.Add(ndr)
|
||||
Next
|
||||
|
||||
|
||||
'//벽체 열관류율, 창호 열관류율, 일사투과율, 장비 효율, 조명밀도 등 적용
|
||||
'//면형태 : 벽체 - 외,내벽 :: tbl_yk 모든 열관류율을 = 0.1 *get열관류율을 마지막에 한번만 작동하도록 상수지정
|
||||
'//면형태 : 창호 - 외부창,내부창 = 1.0
|
||||
'//면형태 : 창호 - 외부창,내부창 일사투과율 = 0.3
|
||||
For Each drmn As DS.tbl_ykRow In DSET.tbl_yk.Select("code <> '0'")
|
||||
Dim 면형태코드 As String = drmn.면형태
|
||||
If 면형태코드.Trim = "" Then Continue For
|
||||
Dim 면형태 As String = Get_CName("1088", 면형태코드)
|
||||
Select Case 면형태
|
||||
Case "외벽(벽체)", "내벽(벽체)", "지중벽"
|
||||
drmn.열관류율 = "0.1"
|
||||
Case "외부창", "내부창"
|
||||
drmn.열관류율 = "1"
|
||||
drmn.일사에너지투과율 = "0.3"
|
||||
End Select
|
||||
Next : DSET.tbl_yk.AcceptChanges()
|
||||
|
||||
'//난방기기 , 정격보일러효율=0.9 , 히트난방정격7=4.5
|
||||
For Each drmn As DS.tbl_nanbangkikiRow In DSET.tbl_nanbangkiki.Select("code <> '0'")
|
||||
If CDec(drmn.정격보일러효율) < 90 Then
|
||||
drmn.정격보일러효율 = "90"
|
||||
End If
|
||||
If CDec(drmn.히트난방정격7) < 4.5 Then
|
||||
drmn.히트난방정격7 = "4.5"
|
||||
End If
|
||||
Next : DSET.tbl_nanbangkiki.AcceptChanges()
|
||||
|
||||
'//냉방기기 , 열성능비 = 5.0
|
||||
For Each drmn As DS.tbl_nangbangkikiRow In DSET.tbl_nangbangkiki.Select("code <> '0'")
|
||||
If CDec(drmn.열성능비) < 5 Then
|
||||
drmn.열성능비 = "5.0"
|
||||
End If
|
||||
Next : DSET.tbl_nangbangkiki.AcceptChanges()
|
||||
|
||||
'//조명밀도 : 조명에너지부하율입력치 : 6
|
||||
For Each drmn As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'")
|
||||
If drmn.조명부하산출방법 = "입력치" Then
|
||||
drmn.조명에너지부하율입력치 = 6
|
||||
End If
|
||||
Next : DSET.tbl_zone.AcceptChanges()
|
||||
|
||||
'//보정데이터유지하고 계산실행
|
||||
'//그래프출력시 발생한 오차를 데이터테이블에 표시
|
||||
'//변경될 온도정보를 가지고 다시 계산합니다.
|
||||
If Me.Start("설계개선작업II" + vbCrLf, ECalc.All, LogSB, (-1 * 오차), 난방설정온도, 냉방설정온도) Then '//파라미터 True 라면 소요량이 추가로 게산된다.
|
||||
Me.Summary.All()
|
||||
ok = False
|
||||
End If
|
||||
|
||||
For i As Integer = 1 To 12
|
||||
Dim ndr As DSR.설계계산결과Row = DSETR1.설계계산결과.Rows(i - 1)
|
||||
ndr.난방 = (Result2.일차E소요량(i).난방소요량 / 년면적)
|
||||
ndr.냉방 = (Result2.일차E소요량(i).냉방소요량 / 년면적)
|
||||
ndr.조명 = (Result2.일차E소요량(i).조명소요량 / 년면적)
|
||||
ndr.급탕 = +(Result2.일차E소요량(i).급탕소요량 / 년면적)
|
||||
ndr.환기 = (Result2.일차E소요량(i).환기소요량 / 년면적)
|
||||
ndr.AcceptChanges()
|
||||
Next
|
||||
|
||||
DSETR1.설계계산결과.AcceptChanges()
|
||||
|
||||
'//파라미터저장
|
||||
DSETR1.설계계산파라미터.Clear()
|
||||
Dim ndr3 As DSR.설계계산파라미터Row = DSETR1.설계계산파라미터.New설계계산파라미터Row
|
||||
ndr3.난방 = 난방설정온도.ToString
|
||||
ndr3.냉방 = 냉방설정온도.ToString
|
||||
ndr3.기저비율 = CDec(-1 * 오차).ToString()
|
||||
DSETR1.설계계산파라미터.Rows.Add(ndr3)
|
||||
DSETR1.설계계산파라미터.AcceptChanges()
|
||||
|
||||
If ok Then
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Public Function Start(showmsg As String, ByVal CalcType As ECalc, ByRef logBuffer As System.Text.StringBuilder, 기저비율 As Decimal, Optional ByVal 난방설정온도 As Decimal = 20, Optional ByVal 냉방설정온도 As Decimal = 26) As Boolean
|
||||
|
||||
pLog.Add("=====================================")
|
||||
pLog.Add("Calc Start")
|
||||
pLog.Add("=====================================", True)
|
||||
|
||||
Me.Pub = New CShared '//공용변수
|
||||
|
||||
'//계산을 시작 p_CalcUse : 는 소요량 계산도 할건지으 ㅣ플래그 나중에 분리해야겠따.
|
||||
'Dim ST As Date = Now
|
||||
|
||||
If Me.IsError Then
|
||||
MsgBox("계산준비중 오류발생", MsgBoxStyle.Critical, "확인")
|
||||
Return False
|
||||
End If
|
||||
logBuffer = New System.Text.StringBuilder("")
|
||||
Dim Cnt As Integer = FixData()
|
||||
'log.AppendLine(">>데이터보정(" & Cnt.ToString & ")개의 데이터가 보정되었습니다")
|
||||
'log.AppendLine(">>유효성검사시작")
|
||||
If validation() = False Then Return False '//유효성 체크를 수행한다.
|
||||
|
||||
If CalcType <> ECalc.Use AndAlso CalcType <> ECalc.설계개선안 Then
|
||||
'log.AppendLine(">>계산영역초기화")
|
||||
Clear_ResultArea() '//과거의 계산영역을 클리어시킨다.
|
||||
'log.AppendLine(">>각존의 사용면적 계산")
|
||||
Result.사용면적.Calc() '//A_H,C,W,L,V 의 누적값을 계산(사용면적) : 개별프로시져로 할당
|
||||
'log.AppendLine(">>주계산시작")
|
||||
End If
|
||||
|
||||
'//사용자가입력한 1차에너지사용량(=월별에너지사용량)을 변환계수를 이용해 값을 생성한다.
|
||||
DSETR1.월별1차에너지사용량.Rows.Clear() : DSETR2.월별1차에너지사용량.Rows.Clear()
|
||||
DSETR1.월별1차에너지사용량.AcceptChanges() : DSETR2.월별1차에너지사용량.AcceptChanges()
|
||||
Zone_Message("설계개선안 입력데이터 변환중(1/3)...", 1, 0, 3) : 입력값계수변환("0001")
|
||||
Zone_Message("설계개선안 입력데이터 변환중(2/3)...", 2, 0, 3) : 입력값계수변환("0002")
|
||||
Zone_Message("설계개선안 입력데이터 변환중(3/3)...", 1, 0, 3) : 입력값계수변환("0003")
|
||||
DSETR1.월별1차에너지사용량.AcceptChanges()
|
||||
DSETR2.월별1차에너지사용량.Merge(DSETR1.월별1차에너지사용량)
|
||||
DSETR2.월별1차에너지사용량.AcceptChanges()
|
||||
|
||||
Dim Retval As Boolean
|
||||
Select Case CalcType
|
||||
Case ECalc.All
|
||||
pLog.LogEnable = False
|
||||
Retval = Zone.Calc_LoadOfZones(showmsg, IsSimulation, 기저비율, 난방설정온도, 냉방설정온도)
|
||||
pLog.LogEnable = True
|
||||
If Retval Then Retval = Zone.Calc_Useage(showmsg)
|
||||
Return Retval
|
||||
Case ECalc.REq
|
||||
pLog.LogEnable = True
|
||||
Return Zone.Calc_LoadOfZones(showmsg, IsSimulation, 기저비율, 난방설정온도, 냉방설정온도)
|
||||
Case ECalc.Use
|
||||
pLog.LogEnable = True
|
||||
Return Zone.Calc_Useage(showmsg)
|
||||
Case ECalc.설계개선안
|
||||
pLog.LogEnable = True
|
||||
Return 설계개선안계산()
|
||||
End Select
|
||||
|
||||
pLog.LogEnable = True
|
||||
|
||||
End Function
|
||||
|
||||
Private Function FixData() As Integer
|
||||
Dim RetCnt As Integer = 0
|
||||
Dim Null As String = "(없음)"
|
||||
'//보정할수있는데이터를 보정합니다.
|
||||
';//입력면 - 건축부위방식이 .내벽 or 간벽일경우 방위는 (없음)이다
|
||||
For Each DR면 As DS.tbl_myounRow In DSET.tbl_myoun.Select("code <> '0'")
|
||||
If DR면.건축부위방식 = "내벽" Or DR면.건축부위방식 = "간벽" Then
|
||||
If DR면.방위 <> Null Then
|
||||
RetCnt += 1
|
||||
DR면.방위 = Null
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
For Each DR존 As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'")
|
||||
If DR존.조명방식.ToString = "0" OrElse DR존.조명방식.ToString = "" Then
|
||||
RetCnt += 1
|
||||
LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 조명방식이 없음으로 설정됩니다.")
|
||||
DR존.조명방식 = "(없음)"
|
||||
End If
|
||||
If DR존.인공광원.ToString = "0" OrElse DR존.인공광원.ToString = "" Then
|
||||
RetCnt += 1
|
||||
LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 인공광원이 없음으로 설정됩니다.")
|
||||
DR존.인공광원 = "(없음)"
|
||||
End If
|
||||
If DR존.외기부하처리여부.ToString = "0" OrElse DR존.외기부하처리여부.ToString = "" Then
|
||||
RetCnt += 1
|
||||
LogSB.AppendLine("Zone " & DR존.설명.ToString & "] 의 외기부하처리여부가 아니오로 설정됩니다.")
|
||||
DR존.외기부하처리여부 = "아니오"
|
||||
End If
|
||||
|
||||
'If DR존.조명방식.ToString.Trim = "" Then DR존.조명방식 = "(없음)"
|
||||
'If DR존.인공광원.ToString.Trim = "" Then DR존.인공광원 = "(없음)"
|
||||
Next
|
||||
|
||||
DSET.AcceptChanges() '//변경내용 적용
|
||||
Return RetCnt
|
||||
End Function
|
||||
Public Function validation() As Boolean
|
||||
pLog.Add("Calc Validation")
|
||||
'//존이 2개이상있어야한다 (없음데이터로인해서 반드시 1개는 있기때문이다.)
|
||||
'//여기보정데이터가잇네요.;
|
||||
Dim NoErr As Boolean = True
|
||||
|
||||
'//콤보박스들의 값이 지정되어잇는지 확인한다. 무조건 있어야한다
|
||||
Dim Title As String
|
||||
Dim Columns() As String '//(없음)이 들어가는 콤보필드
|
||||
Dim ColumnC() As String '//공용코드전용 필드들
|
||||
Dim CGubun() As String '//공용코드필드의 구분값이 저장됨
|
||||
Dim Columnst() As String '//0이 들어가는 콤보필드
|
||||
|
||||
'//ZONE
|
||||
Title = "Zone"
|
||||
Columns = New String() {"냉난방열공급시스템", "열저장능력", "열교가산치", _
|
||||
"주말운전방식", "야간운전방식", "외기부하처리여부", _
|
||||
"냉난방공조", "냉난방방식", _
|
||||
"조명부하산출방법", "조명방식", "인공광원"}
|
||||
ColumnC = New String() {"열저장능력", "열교가산치", _
|
||||
"주말운전방식", "야간운전방식", "외기부하처리여부"} '
|
||||
'//다를지도 모르니 나중에 함 확인하시구요
|
||||
CGubun = New String() {"1023", "1022", _
|
||||
"1002", "1002", "1054"} '//공용코드있는데는 모조리 설정하시구요 물론 길이는 바로위하고 같아야합닌다.
|
||||
'//여기에 각 공용코드의 구분값 1009 뭐 이런것들을 같게 넣어주세요 column 가 8개가있었따면 cgubun 도 8개가 잇으면됩니다.
|
||||
|
||||
Columnst = New String() {"프로필", "냉난방공조처리시스템", "열생산난방생산기기", _
|
||||
"열생산급탕생산기기", "열생산냉방생산기기", _
|
||||
"열생산가습생산기기", "냉난방공조분배시스템", _
|
||||
"냉난방분배시스템", "공조냉방생산기기", "공조난방생산기기"}
|
||||
|
||||
Set_Null(Columns, DSET.tbl_zone, "(없음)") '//데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리
|
||||
Set_Null(ColumnC, DSET.tbl_zone, "(없음)") '//공용코드값이 아에없는 데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리
|
||||
'Set_CheckCommon(ColumnC, DSET.tbl_zone, CGubun) '//이거는 // 공용코드오류난 데이터 검색하는부분이에요
|
||||
Set_Null(Columnst, DSET.tbl_zone, "0")
|
||||
|
||||
Title = "신재생에너지"
|
||||
Columns = New String() {"기기종류", "가동연료", "태양열종류", "집열기유형", _
|
||||
"집열판방위", "태양열시스템의성능", "축열탱크설치장소", _
|
||||
"태양광모듈기울기", "태양광모듈방위", _
|
||||
"태양광모듈종류", "태양광모듈적용타입", _
|
||||
"열교환기설치여부", "팽창탱크설치여부"}
|
||||
Set_Null(Columns, DSET.tbl_new, "(없음)")
|
||||
'Set_Null(Columnst, DSET.tbl_bunbae, "0")
|
||||
|
||||
Title = "난방분배시스템"
|
||||
Columns = New String() {"생산기기구분", "표준치적용", "배관망유형", _
|
||||
"배관구간방식", "배관설치장소", _
|
||||
"배관설치장소", "지관장소"}
|
||||
Set_Null(Columns, DSET.tbl_nbunbae, "(없음)")
|
||||
'Set_Null(Columnst, DSET.tbl_bunbae, "0")
|
||||
|
||||
Title = "난방기기"
|
||||
Columns = New String() {"열생산기기방식", "사용연료", "운전방식", "보일러방식", _
|
||||
"지역난방방식", "단열등급", "축열탱크방식", _
|
||||
"배관망유형", "펌프교정계수", "펌프제어유형", _
|
||||
"분배시스템방식", "순환유무", "펌프제어", _
|
||||
"히트펌프시스템종류", "신재생연결여부"}
|
||||
Columnst = New String() {"연결된시스템"}
|
||||
Set_Null(Columns, DSET.tbl_nanbangkiki, "(없음)")
|
||||
Set_Null(Columnst, DSET.tbl_nanbangkiki, "0")
|
||||
|
||||
Title = "냉방기기"
|
||||
Columns = New String() {"냉동기방식", "냉동기종류", "냉동기압축방식", _
|
||||
"압축기제어방식", "냉동기설비시스템", _
|
||||
"냉동기설비시스템", "제어방식", _
|
||||
"열생산연결방식", "사용연료", "증발식건식냉각기", _
|
||||
"증발식냉각기", "보조방음기유무", "신재생연결여부"}
|
||||
Columnst = New String() {"온수열생산기기", "연결된시스템"}
|
||||
Set_Null(Columns, DSET.tbl_nangbangkiki, "(없음)")
|
||||
Set_Null(Columnst, DSET.tbl_nangbangkiki, "0")
|
||||
|
||||
|
||||
Title = "입력면"
|
||||
Columns = New String() {"건축부위방식", "블라인드유무", _
|
||||
"블라인드위치", "방위", "블라인드빛종류", _
|
||||
"블라인드색상", "블라인드각도"}
|
||||
Columnst = New String() {"존분류", "대차대조존"}
|
||||
Set_Null(Columns, DSET.tbl_myoun, "(없음)")
|
||||
Set_Null(Columnst, DSET.tbl_myoun, "0")
|
||||
|
||||
|
||||
Title = "난방공급시스템"
|
||||
Columns = New String() {"열공급시스템", "노출형제어", "바닥난방열제어", _
|
||||
"바닥난방열건축부위", "바닥난방전기제어", "바닥난방전기건축부위", "전기난방제어"}
|
||||
Columnst = New String() {"열공급생산기기"}
|
||||
Set_Null(Columns, DSET.tbl_kongkub, "(없음)")
|
||||
Set_Null(Columnst, DSET.tbl_kongkub, "0")
|
||||
|
||||
|
||||
Title = "공조처리"
|
||||
Columns = New String() {"공조방식", "리턴공기혼합여부", "가습기유형", "외기냉방제어유무", "열교환기유형"}
|
||||
Set_Null(Columns, DSET.tbl_kongjo, "(없음)")
|
||||
'Set_Null(Columnst, DSET.tbl_bunbae, "0")
|
||||
|
||||
Title = "냉방분배시스템"
|
||||
Columns = New String() {"냉매방식", "펌프운전제어유무"}
|
||||
Columnst = New String() {"냉동기"}
|
||||
Set_Null(Columns, DSET.tbl_bunbae, "(없음)")
|
||||
Set_Null(Columnst, DSET.tbl_bunbae, "0")
|
||||
|
||||
|
||||
'//모든공조데이터 순환
|
||||
For Each DR As DS.tbl_kongjoRow In DSET.tbl_kongjo.Select("code<>'0'")
|
||||
DR.팬효율산출방식 = DR.팬효율산출방식.Trim
|
||||
'MsgBox(DR.설명 & "==현재저장된값 : " & DR.팬효율산출방식 & " 길이 = " & DR.팬효율산출방식.Length)
|
||||
If DR.팬효율산출방식.Trim = "" Then DR.팬효율산출방식 = "입력치"
|
||||
Next
|
||||
'DSET.tbl_kongjo.AcceptChanges()
|
||||
DSET.AcceptChanges()
|
||||
|
||||
|
||||
'//그값이 존에잇어요?cnrkehlsrp?추가된게?공조기기요
|
||||
For Each Dr As DS.tbl_zoneRow In DSET.tbl_zone.Select("code <> '0'") '//모든존을 검사 없음(0)은 빼고
|
||||
'If Dr.공조난방생산기기 = "0" And Dr.공조냉방생산기기 = "0" Then '//둘다 0일경우
|
||||
'//오류를 내고싶으면 여기서 return false 해버리면됩니다.'다른족건이 잇다면.. 아까처럼..
|
||||
'Return False 냉난방공조 라는 공조에 냉난방이 있으면 : :
|
||||
'End If
|
||||
If Dr.냉난방공조 = "냉난방" Then '//
|
||||
If Dr.공조난방생산기기 = "0" OrElse Dr.공조냉방생산기기 = "0" Then
|
||||
MsgBox("입력존에서 공조방식에 대응하는 공조냉난방생산기기가 지정되지 않은 것이 있습니다.")
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If Dr.냉난방공조 = "난방" OrElse (Dr.냉난방공조 = "냉방" And Dr.외기부하처리여부 = "예") Then '//
|
||||
If Dr.공조난방생산기기 = "0" Then
|
||||
MsgBox("입력존에서 공조방식에 대응하는 공조난방생산기기가 지정되지 않은 것이 있습니다.")
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If Dr.냉난방공조 = "냉방" OrElse (Dr.냉난방공조 = "난방" And Dr.외기부하처리여부 = "예") Then '//
|
||||
If Dr.공조냉방생산기기 = "0" Then
|
||||
MsgBox("입력존에서 공조방식에 대응하는 공조냉방생산기기가 지정되지 않은 것이 있습니다.")
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
If Dr.냉난방공조 = "환기" And Dr.외기부하처리여부 = "예" Then '//
|
||||
If Dr.공조난방생산기기 = "0" OrElse Dr.공조냉방생산기기 = "0" Then
|
||||
MsgBox("입력존에서 외기부하처리에 따른 공조냉난방생산기기가 지정되지 않은 것이 있습니다.")
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
|
||||
Next
|
||||
|
||||
'//여기에서 FAlse 를 반환해버리면.. 게산은 돌지않아요 게산전에 수행되는곳이구요
|
||||
'//아까 파일오픈시에도 여기를 호출합니다. 바로 윗부분이 nul l값에대한 기본값 처리구요.
|
||||
Return NoErr
|
||||
End Function
|
||||
|
||||
Private Sub Set_Null(ByVal Columns() As String, ByRef dt As DataTable, ByVal val As String)
|
||||
For Each Dr As DataRow In dt.Select("code<>'0'", "code")
|
||||
For Each Col As String In Columns
|
||||
If Dr(Col).ToString.Trim = "" Then '//값이없으면 기본값(val)으로 설정
|
||||
Dr(Col) = val
|
||||
End If
|
||||
Next
|
||||
Next
|
||||
End Sub
|
||||
|
||||
'''공용코드에값이있는지확인
|
||||
Private Sub Set_CheckCommon(ByVal Columns() As String, ByRef dt As DataTable, ByVal gubunval() As String)
|
||||
Dim index As Short = -1
|
||||
For Each Dr As DataRow In dt.Select("code<>'0'", "code")
|
||||
index = 0
|
||||
For Each Col As String In Columns
|
||||
If Dr(Col).ToString.Trim = "" Then '//값이없으면 기본값(val)으로 설정
|
||||
'Dr(Col) = val
|
||||
Else '//값이있을때
|
||||
Dim V As String = Dr(Col).ToString.Trim
|
||||
'//v의값이 공용ㅇ코드에 있는지 확인 공용코드는 name 을 저장하므로 name 으로검사를 수행
|
||||
Dim Cdr() As DS.tbl_commonRow = DSET.tbl_common.Select("gubun='" & gubunval(index) & "' and name='" & V & "'")
|
||||
If Cdr.GetUpperBound(0) = -1 Then
|
||||
MsgBox("값이있으나 공용코드에없음(여기에 경고문구좀 날려주시면되구요")
|
||||
End If
|
||||
End If
|
||||
index += 1
|
||||
Next
|
||||
Next
|
||||
End Sub
|
||||
|
||||
|
||||
''' <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
|
||||
|
||||
Reference in New Issue
Block a user