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
|
|
|