initial commit

This commit is contained in:
raytrace
2018-12-09 20:18:51 +09:00
commit 9aef53ee89
477 changed files with 2867797 additions and 0 deletions

View File

@@ -0,0 +1,438 @@
Public Class CalculatorOD
Dim T As String = "계산"
Public WithEvents Zone As CZoneOD '//존에클래스할당
Public WithEvents AirHandling As CAirHandlingOD '//존에클래스할당
Public WithEvents Cooling As CCoolingOD '//존에클래스할당
Public WithEvents Heating As CHeatingOD '//존에클래스할당
Public WithEvents Renewable As CRenewableOD '//존에클래스할당
Public WithEvents Summary As CSummaryOD
Public WithEvents Pub As CSharedOD
Public IsError As Boolean = False
Enum ECalc
All = 0
REq = 1
Use = 2
End Enum
Public Sub New(ByVal Version As String)
Me.IsError = False
Me.Zone = New CZoneOD '//존
Me.AirHandling = New CAirHandlingOD '//공기
Me.Cooling = New CCoolingOD
Me.Heating = New CHeatingOD
Me.Renewable = New CRenewableOD '//신재상
Me.Summary = New CSummaryOD '//계산결과 집계
Me.Pub = New CSharedOD '//공용변수
Me.IsError = Me.Pub.IsError '//공용변수값에 오류확인
'Select Case Version
' Case "2009123100", StartVersion, "2017041400"
' Case Else
' MsgBox("LG계산식에 지원되지않는 버젼(" & StartVersion & "/" & Version & ")입니다", MsgBoxStyle.Critical, "확인")
' Me.IsError = True
'End Select
End Sub
Public Function Start(ByVal CalcType As ECalc, ByRef log As System.Text.StringBuilder) As Boolean
'//계산을 시작 p_CalcUse : 는 소요량 계산도 할건지으 ㅣ플래그 나중에 분리해야겠따.
Setup_Zone9()
'Dim ST As Date = Now
If Me.IsError Then
MsgBox("계산준비중 오류발생", MsgBoxStyle.Critical, "확인")
Return False
End If
log = New System.Text.StringBuilder("")
Dim Cnt As Integer = FixData()
'log.AppendLine(">>데이터보정(" & Cnt.ToString & ")개의 데이터가 보정되었습니다")
'log.AppendLine(">>유효성검사시작")
If Validation() = False Then Return False '//유효성 체크를 수행한다.
'///////////////////////////////////////////////////////////////////////////
' 2017. 12. 19
'///////////////////////////////////////////////////////////////////////////
'//모드난방기기는 헤더적용
For Each dr As DS.tbl_nanbangkikiRow In DSET1.tbl_nanbangkiki.Rows
dr.헤더적용 = True
dr.개별기기적용 = False
Next
DSET1.tbl_nanbangkiki.AcceptChanges()
If CalcType <> ECalc.Use Then
'log.AppendLine(">>계산영역초기화")
Clear_ResultArea() '//과거의 계산영역을 클리어시킨다.
'log.AppendLine(">>각존의 사용면적 계산")
Result1o.사용면적.Calc() '//A_H,C,W,L,V 의 누적값을 계산(사용면적) : 개별프로시져로 할당
'log.AppendLine(">>주계산시작")
End If
Dim Retval As Boolean
Select Case CalcType
Case ECalc.All
Retval = CalcO.Zone.Calc_LoadOfZones
If Retval Then Retval = CalcO.Zone.Calc_Useage
Return Retval
Case ECalc.REq
Return CalcO.Zone.Calc_LoadOfZones
Case ECalc.Use
Return CalcO.Zone.Calc_Useage
End Select
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 DSET1.tbl_myoun.Select("code <> '0'")
If DR면.건축부위방식 = "내벽" Or DR면.건축부위방식 = "간벽" Then
If DR면.방위 <> Null AndAlso DR면.방위 <> "일사없음" Then
RetCnt += 1
DR면.방위 = Null
End If
End If
Next
For Each DR존 As DS.tbl_zoneRow In DSET1.tbl_zone.Select("code <> '0'")
If DR존.조명방식.ToString = "0" OrElse DR존.조명방식.ToString = "" Then
RetCnt += 1
Log.AppendLine("Zone " & DR존.설명.ToString & "] 의 조명방식이 없음으로 설정됩니다.")
DR존.조명방식 = "(없음)"
End If
If DR존.인공광원.ToString = "0" OrElse DR존.인공광원.ToString = "" Then
RetCnt += 1
Log.AppendLine("Zone " & DR존.설명.ToString & "] 의 인공광원이 없음으로 설정됩니다.")
DR존.인공광원 = "(없음)"
End If
If DR존.외기부하처리여부.ToString = "0" OrElse DR존.외기부하처리여부.ToString = "" Then
RetCnt += 1
Log.AppendLine("Zone " & DR존.설명.ToString & "] 의 외기부하처리여부가 아니오로 설정됩니다.")
DR존.외기부하처리여부 = "아니오"
End If
'If DR존.조명방식.ToString.Trim = "" Then DR존.조명방식 = "(없음)"
'If DR존.인공광원.ToString.Trim = "" Then DR존.인공광원 = "(없음)"
Next
DSET1.AcceptChanges() '//변경내용 적용
Return RetCnt
End Function
Public Function Validation() As Boolean
'//존이 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, DSET1.tbl_zone, "(없음)") '//데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리
Set_Null(ColumnC, DSET1.tbl_zone, "(없음)") '//공용코드값이 아에없는 데이터를 기본값 셋팅해주는구문이구요 없는데이터는 넓값처리
'Set_CheckCommon(ColumnC, DSET1.tbl_zone, CGubun) '//이거는 // 공용코드오류난 데이터 검색하는부분이에요
Set_Null(Columnst, DSET1.tbl_zone, "0")
Title = "신재생에너지"
Columns = New String() {"기기종류", "가동연료", "태양열종류", "집열기유형",
"집열판방위", "태양열시스템의성능", "축열탱크설치장소",
"태양광모듈기울기", "태양광모듈방위",
"태양광모듈종류", "태양광모듈적용타입",
"열교환기설치여부", "팽창탱크설치여부"}
Set_Null(Columns, DSET1.tbl_new, "(없음)")
'Set_Null(Columnst, DSET1.tbl_bunbae, "0")
Title = "난방분배시스템"
Columns = New String() {"생산기기구분", "표준치적용", "배관망유형",
"배관구간방식", "배관설치장소",
"배관설치장소", "지관장소"}
Set_Null(Columns, DSET1.tbl_nbunbae, "(없음)")
'Set_Null(Columnst, DSET1.tbl_bunbae, "0")
Title = "난방기기"
Columns = New String() {"연결된시스템",
"열생산기기방식", "사용연료", "난방급탕구분"}
Columnst = New String() {"배관길이", "펌프동력", "보일러정격출력", "보일러대수", "정격보일러효율"}
Set_Null(Columns, DSET1.tbl_nanbangkiki, "(없음)")
Set_Null(Columnst, DSET1.tbl_nanbangkiki, "0")
Title = "냉방기기"
Columns = New String() {"냉동기방식", "냉동기종류",
"냉동기용량", "열성능비",
"사용연료"}
Columnst = New String() {"연결된시스템", "냉수펌프동력", "냉각수펌프동력"}
Set_Null(Columns, DSET1.tbl_nangbangkiki, "(없음)")
Set_Null(Columnst, DSET1.tbl_nangbangkiki, "0")
Title = "입력면"
Columns = New String() {"건축부위방식", "블라인드유무",
"블라인드위치", "방위", "블라인드빛종류",
"블라인드색상", "블라인드각도"}
Columnst = New String() {"존분류", "대차대조존"}
Set_Null(Columns, DSET1.tbl_myoun, "(없음)")
Set_Null(Columnst, DSET1.tbl_myoun, "0")
'Title = "난방공급시스템"
'Columns = New String() {"열공급시스템", "노출형제어", "바닥난방열제어", _
' "바닥난방열건축부위", "바닥난방전기제어", "바닥난방전기건축부위", "전기난방제어"}
'Columnst = New String() {"열공급생산기기"}
'Set_Null(Columns, DSET1.tbl_kongkub, "(없음)")
'Set_Null(Columnst, DSET1.tbl_kongkub, "0")
Title = "공조처리"
Columns = New String() {"공조방식"}
Set_Null(Columns, DSET1.tbl_kongjo, "(없음)")
'Set_Null(Columnst, DSET1.tbl_bunbae, "0")
'Title = "냉방분배시스템"
''Columns = New String() {"냉매방식", "펌프운전제어유무"}
'Columnst = New String() {"냉동기"}
''Set_Null(Columns, DSET1.tbl_bunbae, "(없음)")
'Set_Null(Columnst, DSET1.tbl_bunbae, "0")
'DSET1.tbl_kongjo.AcceptChanges()
DSET1.AcceptChanges()
'//그값이 존에잇어요?cnrkehlsrp?추가된게?공조기기요
For Each Dr As DS.tbl_zoneRow In DSET1.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
'//부위명 업데이트 171021
For Each drm As DS.tbl_myounRow In DSET1.tbl_myoun.Select("code<>'0'")
If drm.열관류율2 <> "" Then
Dim ykcode As String = drm.열관류율2
Dim dr() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & ykcode & "'")
If dr.GetUpperBound(0) <> -1 Then
Select Case dr(0).면형태
Case "외벽(직접)", "0"
drm.면형태 = "외벽(직접)"
Case "지붕(직접)", "0001"
drm.면형태 = "지붕(직접)"
Case "바닥(직접)", "0002"
drm.면형태 = "바닥(직접)"
Case "외벽(간접)", "0003"
drm.면형태 = "외벽(간접)"
Case "지붕(간접)", "0004"
drm.면형태 = "지붕(간접)"
Case "바닥(간접)", "0005"
drm.면형태 = "바닥(간접)"
Case "간벽", "0006"
drm.면형태 = "간벽"
Case "창(직접)", "창(간접)", "문(직접)", "문(간접)", "세대현관문(직접)", "세대현관문(간접)", "0007", "0008", "0010", "0011", "0012", "0013"
If dr(0).면형태 = "0007" Then
drm.면형태 = "창(직접)"
ElseIf dr(0).면형태 = "0008" Then
drm.면형태 = "창(간접)"
ElseIf dr(0).면형태 = "0010" Then
drm.면형태 = "문(직접)"
ElseIf dr(0).면형태 = "0011" Then
drm.면형태 = "문(간접)"
ElseIf dr(0).면형태 = "0012" Then
drm.면형태 = "세대현관문(직접)"
ElseIf dr(0).면형태 = "0013" Then
drm.면형태 = "세대현관문(간접)"
End If
Case "지중벽", "0009"
drm.면형태 = "지중벽"
Case Else
drm.면형태 = "--"
End Select
End If
Else
drm.면형태 = ""
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) Is DBNull.Value OrElse 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_common_odRow = DSET1.tbl_common_od.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()
DSETR1.Clear() : DSETR1.AcceptChanges() '//기존데이터 클리어
'//0번시트의 결과값을 저장할 장소를 생성한다. Zone=00 은 합계필드이다(이것이 일률적이지않아서 00으로 할당을 따로 해서 나중에 합산작업을 할 예정)
'//00번 존을포함하여 현재 존의 갯수+1개를 생성한다.
'//최대냉난방/E분석
Dim ZoneCode As String
For Each Dr존 As DS.tbl_zoneRow In DSET1.tbl_zone.Select("", "code")
If Dr존.code = "0" Then
ZoneCode = "00"
Else
ZoneCode = Dr존.code
End If
Dim Res1 As DSR.최대냉난방부하Row = DSETR1.최대냉난방부하.New최대냉난방부하Row
Res1.Zone = ZoneCode : DSETR1.최대냉난방부하.Add최대냉난방부하Row(Res1)
For ii As Integer = 1 To 12
Dim DrE분석 As DSR.월별에너지분석Row = DSETR1.월별에너지분석.New월별에너지분석Row
DrE분석. = "M" & Format(ii, "00") '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함
DrE분석. = ZoneCode
DSETR1.월별에너지분석.Add월별에너지분석Row(DrE분석)
'MsgBox("M" & Format(ii, "00"), MsgBoxStyle.Information, ZoneCo'de)
Next
Next
' MsgBox(DSETR1.월별에너지분석.Select("월='M01'").GetUpperBound(0))
'//월별로 움직이는데이터
Dim Mon As String
Dim Dr As DataRow
For ii As Integer = 0 To 12
Mon = "M" & Format(ii, "00")
Dr = DSETR1.생산에너지.NewRow
Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함
DSETR1.생산에너지.Rows.Add(Dr)
Dr = DSETR1.에너지소요량.NewRow
Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함
DSETR1.에너지소요량.Rows.Add(Dr)
Dr = DSETR1.에너지소요량1.NewRow
Dr("mon") = Mon '//정렬을위해서 00숫자형태로 기록한다. 앞으로 모든 월데이터는 그렇게 기록함
DSETR1.에너지소요량1.Rows.Add(Dr)
Next
'//전부다시 구성해야함
DSETR1.AcceptChanges()
End Sub
'''열관류율값ㅇㄹ 반환
Public Function Get_열관류율(ByVal Dr As DS.tbl_myounRow) As Decimal
Return TOSG(T, Dr.열관류율)
'Dim 열관류율2 As String = Dr.열관류율2
'If 열관류율2 = "" OrElse 열관류율2 = "0" Then '//코드가없으므로 입력값그대로 사용
' Return TOSG(T,Dr.열관류율)
'Else '//코드값이잇으므로 값을 찾는다.
' Try
' Dim Drow As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" & 열관류율2 & "'")(0)
' Return TOSG(T,Drow.열관류율) '//코드내에 저장된 값을 보낸다
' Catch ex As Exception
' MsgBox("열관류율코드값(" & 열관류율2 & ") 값오류" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
' Return 0
' End Try
'End If
End Function
End Class