872 lines
38 KiB
VB.net
872 lines
38 KiB
VB.net
Module Pub
|
|
|
|
Structure s_Project
|
|
Dim FileName As String
|
|
Dim MakeTime As String
|
|
Dim Desc As String
|
|
Dim Opened As Boolean
|
|
Dim UIVersion As String
|
|
Dim LGVersino As String
|
|
Dim Name As String
|
|
Dim MaxUI As String
|
|
Dim MaxLG As String
|
|
Dim SFType As String '//저장파일 형태
|
|
Dim EditTime As String
|
|
Dim Admin As Boolean '//현재프로그램이 관리자 모드인가?
|
|
Dim Password As String '//해당프로젝트가 엄호로 보호되어있는가?
|
|
Dim IsError As Boolean '//로드시 에러가 발생하였는가?
|
|
Dim CUrIP As String
|
|
Dim CUrMac As String
|
|
Dim LoginTime As String '//로그인시간
|
|
Dim UserId As String
|
|
Dim UserName As String
|
|
Dim UserPass As String
|
|
Dim UserIp As String
|
|
Dim UserMac As String
|
|
Dim UserAuthType As String
|
|
End Structure
|
|
|
|
Public pLog As ArinLog.ArinLog
|
|
|
|
Public Prj As New s_Project : Public StartVersion As String = "2010032000"
|
|
Public Prj_test As New s_Project
|
|
Public Myini As CEnergy.MyINI
|
|
Public PrjChanged As Boolean = False
|
|
|
|
' Public Uselov As Lov.ModLov
|
|
Public PreFile(4) As String
|
|
Public msgf As Frm_Work = Nothing '201130830
|
|
|
|
Public DSET1_TEST As New DS '//일반데이터
|
|
|
|
Public DSET1 As New DS '//일반데이터
|
|
Public DSET2 As New DS '//일반데이터(임시)
|
|
Public DSETR1 As New DSR '//결과데이터(결과)
|
|
Public DSETR2 As New DSR '//결과데이터(임시)
|
|
Public DataDir As New System.IO.DirectoryInfo(My.Application.Info.DirectoryPath)
|
|
Public TemplateDir As New System.IO.DirectoryInfo(DataDir.FullName & "\template")
|
|
|
|
Public Calc As Calculator '//계산로직이다.파일열릴떄 할당됨
|
|
Public Result1 As New CResult(DSET1, DSETR1) '//기본데이터결과
|
|
Public Result2 As New CResult(DSET2, DSETR2) '//설계개선용데이터결과
|
|
Public LogSB As System.Text.StringBuilder
|
|
|
|
Public EnDec As New ArinLogin.EnDec("tindevil.com")
|
|
|
|
Public DSHistory As New DS2
|
|
|
|
Public Function CurrentUIVersion() As String
|
|
Dim uiverstr As String = My.Application.Info.Version.Minor.ToString("0000") + _
|
|
My.Application.Info.Version.Build.ToString("0000") + _
|
|
My.Application.Info.Version.Revision.ToString("0000").Substring(0, 2)
|
|
Return uiverstr
|
|
End Function
|
|
|
|
Public Sub NOTICE(ByVal MSG As String, ByVal Src As Windows.Forms.ToolStripStatusLabel, ByVal FCOLOR As Drawing.Color)
|
|
If Not Src Is Nothing Then
|
|
Src.Text = "▶ " & MSG & Space(1) & "[" & Format(Now, "HH시mm분ss초") & "]"
|
|
Src.ForeColor = FCOLOR
|
|
End If
|
|
If FCOLOR = Drawing.Color.Red Then My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)
|
|
End Sub
|
|
|
|
Public Sub MsgboxE(msg As String, Optional SaveLog As Boolean = False)
|
|
MsgBox(msg, MsgBoxStyle.Critical, "확인")
|
|
If SaveLog Then
|
|
pLog.Add(msg, True)
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub MsgboxI(msg As String, Optional SaveLog As Boolean = False)
|
|
MsgBox(msg, MsgBoxStyle.Information, "확인")
|
|
If SaveLog Then
|
|
pLog.Add(msg, True)
|
|
End If
|
|
End Sub
|
|
|
|
''' <summary>
|
|
''' 모든입력면의 창,문의 면적비를 계산하여 반환한다(frm_myoun의 Display_info 함수에서 가져옴)
|
|
''' </summary>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public Function calc_창및문면적비(ByRef 면적비 As Decimal, ByRef 열관류율 As Decimal, Optional 방위 As String = "") As Boolean
|
|
면적비 = 0
|
|
열관류율 = 0
|
|
|
|
Dim filter As String = "code <> '0' and (건축부위방식='외벽' or 건축부위방식 ='외부창' or 건축부위방식='내벽' or 건축부위방식 ='내부창')"
|
|
If 방위 <> "" Then filter += " and 방위='" + 방위 + "'"
|
|
|
|
Dim 면데이터() As DS.tbl_myounRow = DSET1.tbl_myoun.Select(filter)
|
|
|
|
Dim WindowArea As Decimal = 0
|
|
Dim WallArea As Decimal = 0
|
|
Dim 열관류율합 As Double = 0
|
|
|
|
For Each Dr입력면 As DS.tbl_myounRow In 면데이터
|
|
Dim 존수 As Integer = 1
|
|
Dim 열관 As Single = 0
|
|
|
|
'If Dr입력면.열관류율2 = "0" Then Continue For '//열관류율이 연결되어 있어야한다
|
|
|
|
Dim Dryk() As DS.tbl_ykRow = Nothing
|
|
If Dr입력면.열관류율2 <> "0" Then
|
|
Dryk = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
|
|
If Dryk.Length < 1 Then
|
|
MsgBox("입력면(" + Dr입력면.설명 + ")의 열관류율 연결값이 열관류율표에 존재하지 않습니다(Code=" + Dr입력면.열관류율2 + ")", MsgBoxStyle.Critical, "확인")
|
|
Continue For
|
|
End If
|
|
열관 = TOSG(Dryk(0).열관류율)
|
|
Else
|
|
열관 = TOSG(Dr입력면.열관류율)
|
|
End If
|
|
|
|
'//이 입력면을 사용하는 존의 정보를 가져온다(오류가 있다면 존의갯수를 1로한다)
|
|
Dim dr존() As DS.tbl_zoneRow = DSET1.tbl_zone.Select("code='" + Dr입력면.존분류 + "'")
|
|
If dr존.Length > 0 Then
|
|
If IsNumeric(dr존(0).입력존의수) Then 존수 = CInt(dr존(0).입력존의수)
|
|
End If
|
|
|
|
|
|
Select Case Dr입력면.건축부위방식
|
|
Case "외벽"
|
|
열관류율합 += 열관 * 1 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "내벽"
|
|
열관류율합 += 열관 * 0.7 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "외부창"
|
|
열관류율합 += 열관 * 1 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "내부창"
|
|
열관류율합 += 열관 * 0.8 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
End Select
|
|
|
|
If Dryk Is Nothing Then
|
|
'//열관류 선택안된경우
|
|
Select Case Dr입력면.건축부위방식
|
|
Case "외벽"
|
|
If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
End If
|
|
Case "내벽" '
|
|
WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "외부창"
|
|
If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
End If
|
|
Case "내부창"
|
|
WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
End Select
|
|
Else
|
|
|
|
Dim 면형태이름 As String = Get_CName("1088", Dryk(0).면형태)
|
|
Select Case 면형태이름
|
|
Case "외벽(벽체)"
|
|
WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "내벽(벽체)"
|
|
WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "외부창"
|
|
If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
End If
|
|
Case "내부창"
|
|
WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
End Select
|
|
End If
|
|
|
|
'Debug.WriteLine(Dr입력면.code + ":wall=" + WallArea.ToString() + ",win=" + WindowArea.ToString())
|
|
Next
|
|
|
|
'//면적비계산
|
|
Dim r As Decimal = 0
|
|
If (WallArea + WindowArea) <> 0 Then
|
|
r = WindowArea / (WallArea + WindowArea) * 100
|
|
End If
|
|
|
|
면적비 = r
|
|
|
|
If WallArea + WindowArea = 0 Then
|
|
열관류율 = (0.0F)
|
|
Else
|
|
열관류율 = 열관류율합 / (WallArea + WindowArea)
|
|
End If
|
|
|
|
Return True
|
|
End Function
|
|
|
|
''' <summary>
|
|
''' 모든입력면의 창,문의 면적비를 계산하여 반환한다(frm_myoun의 Display_info 함수에서 가져옴)
|
|
''' </summary>
|
|
''' <returns></returns>
|
|
''' <remarks></remarks>
|
|
Public Function calc_평균열관류율(건축부위방식() As String) As Decimal
|
|
Dim filter As String = "code <> '0' and 열관류율2 <> '' and 열관류율2 <> '0'"
|
|
'If 방위 <> "" Then filter += " and 방위='" + 방위 + "'"
|
|
|
|
'//해당방식을 사용한 열관류율을 모두 찾아서
|
|
|
|
Dim 면데이터() As DS.tbl_myounRow = DSET1.tbl_myoun.Select(filter)
|
|
|
|
Dim WindowArea As Decimal = 0
|
|
Dim WallArea As Decimal = 0
|
|
Dim 열관류율합 As Double = 0
|
|
|
|
For Each Dr입력면 As DS.tbl_myounRow In 면데이터
|
|
|
|
'//이 입력면의 건축부위방식(열관류율테이블)이 일치한다면 그 값을 상요하도록 한다
|
|
Dim 열관데이터() As DS.tbl_ykRow = DSET1.tbl_yk.Select("code='" + Dr입력면.열관류율2 + "' and 면형태 <> '' and 면형태 <> '0'")
|
|
If 열관데이터.Length < 1 Then Continue For
|
|
|
|
'//열관류율데이터의 형태가 건축부위방식과 맞는지 확인한다
|
|
Dim 공용() As DS.tbl_commonRow = DSET1.tbl_common.Select("gubun = '1088' and code='" + 열관데이터(0).면형태 + "'")
|
|
If 공용.Length < 1 Then Continue For
|
|
|
|
Dim 부위찾음 As Boolean = False
|
|
For Each 찾을부위 As String In 건축부위방식
|
|
If 공용(0).name = 찾을부위 Then 부위찾음 = True
|
|
Next
|
|
|
|
If Not 부위찾음 Then Continue For
|
|
|
|
Dim 존수 As Integer = 1
|
|
Dim 열관 As Single = 0
|
|
|
|
'If Dr입력면.열관류율2 = "0" Then Continue For '//열관류율이 연결되어 있어야한다
|
|
|
|
Dim Dryk() As DS.tbl_ykRow = Nothing
|
|
If Dr입력면.열관류율2 <> "0" Then
|
|
Dryk = DSET1.tbl_yk.Select("code='" & Dr입력면.열관류율2 & "'")
|
|
If Dryk.Length < 1 Then
|
|
MsgBox("입력면(" + Dr입력면.설명 + ")의 열관류율 연결값이 열관류율표에 존재하지 않습니다(Code=" + Dr입력면.열관류율2 + ")", MsgBoxStyle.Critical, "확인")
|
|
Continue For
|
|
End If
|
|
열관 = TOSG(Dryk(0).열관류율)
|
|
Else
|
|
열관 = TOSG(Dr입력면.열관류율)
|
|
End If
|
|
|
|
'//이 입력면을 사용하는 존의 정보를 가져온다(오류가 있다면 존의갯수를 1로한다)
|
|
Dim dr존() As DS.tbl_zoneRow = DSET1.tbl_zone.Select("code='" + Dr입력면.존분류 + "'")
|
|
If dr존.Length > 0 Then
|
|
If IsNumeric(dr존(0).입력존의수) Then 존수 = CInt(dr존(0).입력존의수)
|
|
End If
|
|
|
|
|
|
Select Case Dr입력면.건축부위방식
|
|
Case "외벽"
|
|
열관류율합 += 열관 * 1 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "내벽"
|
|
열관류율합 += 열관 * 0.7 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "외부창"
|
|
열관류율합 += 열관 * 1 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
Case "내부창"
|
|
열관류율합 += 열관 * 0.8 * TOSG(Dr입력면.건축부위면적) * 존수
|
|
End Select
|
|
|
|
WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
|
|
'If Dryk Is Nothing OrElse Dryk.Length < 1 Then
|
|
' '//열관류 선택안된경우
|
|
' Select Case Dr입력면.건축부위방식
|
|
' Case "외벽"
|
|
' If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
' WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' End If
|
|
' Case "내벽" '
|
|
' WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' Case "외부창"
|
|
' If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
' WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' End If
|
|
' Case "내부창"
|
|
' WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' End Select
|
|
'Else
|
|
|
|
' Dim 면형태이름 As String = Get_CName("1088", Dryk(0).면형태)
|
|
' Select Case 면형태이름
|
|
' Case "외벽(벽체)"
|
|
' WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' 'Case "내벽(벽체)"
|
|
' ' WallArea = WallArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' 'Case "외부창"
|
|
' ' If Dr입력면.방위 <> "수평" AndAlso Dr입력면.방위 <> "일사없음" AndAlso Dr입력면.방위 <> "(없음)" Then
|
|
' ' WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' ' End If
|
|
' 'Case "내부창"
|
|
' ' WindowArea = WindowArea + TOSG(Dr입력면.건축부위면적) * 존수
|
|
' End Select
|
|
'End If
|
|
|
|
'Debug.WriteLine(Dr입력면.code + ":wall=" + WallArea.ToString() + ",win=" + WindowArea.ToString())
|
|
Next
|
|
|
|
'//면적비계산
|
|
'Dim r As Decimal = 0
|
|
'If (WallArea + WindowArea) <> 0 Then
|
|
' r = WindowArea / (WallArea + WindowArea) * 100
|
|
'End If
|
|
|
|
'면적비 = r
|
|
|
|
If WallArea + WindowArea = 0 Then
|
|
Return (0.0F)
|
|
Else
|
|
Return 열관류율합 / (WallArea + WindowArea)
|
|
End If
|
|
|
|
|
|
|
|
End Function
|
|
|
|
Public Function getColCaption(ByVal dt As DataTable) As String()
|
|
Dim Clist(dt.Columns.Count - 1) As String
|
|
For i As Integer = 1 To dt.Columns.Count
|
|
If dt.Columns(i - 1).Caption.ToString <> "" Then Clist(i - 1) = dt.Columns(i - 1).Caption.ToString
|
|
Next
|
|
Return Clist
|
|
End Function
|
|
|
|
Public Function getColName(ByVal dt As DataTable) As String()
|
|
Dim Clist(dt.Columns.Count - 1) As String
|
|
For i As Integer = 1 To dt.Columns.Count
|
|
If dt.Columns(i - 1).ColumnName.ToString <> "" Then Clist(i - 1) = dt.Columns(i - 1).ColumnName.ToString
|
|
Next
|
|
Return Clist
|
|
End Function
|
|
|
|
Public Function STB(ByVal src As String) As Byte()
|
|
Return System.Text.Encoding.Default.GetBytes(src)
|
|
End Function
|
|
Public Function STB(ByVal src As Byte()) As String
|
|
Return System.Text.Encoding.Default.GetString(src)
|
|
End Function
|
|
|
|
'''공용코드의코드반환
|
|
Public Function Get_CCode(ByVal gubun As String, ByVal name As String) As String
|
|
Dim DR() As DS.tbl_commonRow = CType(DSET1.tbl_common.Select("gubun='" & gubun & "' and name='" & name & "'"), DS.tbl_commonRow())
|
|
If DR.GetUpperBound(0) = -1 Then Return ""
|
|
Return DR(0).code
|
|
End Function
|
|
|
|
'''공용코드의이름반환
|
|
Public Function Get_CName(ByVal gubun As String, ByVal code As String) As String
|
|
Dim DR() As DS.tbl_commonRow = CType(DSET1.tbl_common.Select("gubun='" & gubun & "' and code='" & code & "'"), DS.tbl_commonRow())
|
|
If DR.GetUpperBound(0) = -1 Then Return ""
|
|
Return DR(0).name
|
|
End Function
|
|
|
|
Public Function NVL(ByVal src As Object, Optional ByVal DefVal As Object = "") As Object
|
|
Try
|
|
If src.ToString = "" Or src Is DBNull.Value Then
|
|
Return DefVal
|
|
Else
|
|
Return src
|
|
End If
|
|
Catch ex As Exception
|
|
Return DefVal
|
|
End Try
|
|
End Function
|
|
|
|
'''평가결과등급을 반환 (1~10등급까지 있으며 1등급은 +++ ,2등급은 ++ 3등급은 + 4등급부터 1로 시작함)
|
|
Public Function 평가결과등급(주거용 As Integer, 일차에너지소요량합계 As Decimal) As Integer
|
|
|
|
If 주거용 <= 10 Then
|
|
Select Case 일차에너지소요량합계
|
|
Case Is < 60
|
|
Return 1
|
|
Case Is < 90
|
|
Return 2
|
|
Case Is < 120
|
|
Return 3
|
|
Case Is < 150
|
|
Return 4
|
|
Case Is < 190
|
|
Return 5
|
|
Case Is < 230
|
|
Return 6
|
|
Case Is < 270
|
|
Return 7
|
|
Case Is < 320
|
|
Return 8
|
|
Case Is < 370
|
|
Return 9
|
|
Case Else
|
|
Return 10
|
|
End Select
|
|
Else
|
|
Select Case 일차에너지소요량합계
|
|
Case Is < 80
|
|
Return 1
|
|
Case Is < 140
|
|
Return 2
|
|
Case Is < 200
|
|
Return 3
|
|
Case Is < 260
|
|
Return 4
|
|
Case Is < 320
|
|
Return 5
|
|
Case Is < 380
|
|
Return 6
|
|
Case Is < 450
|
|
Return 7
|
|
Case Is < 520
|
|
Return 8
|
|
Case Is < 610
|
|
Return 9
|
|
Case Else
|
|
Return 10
|
|
End Select
|
|
End If
|
|
End Function
|
|
|
|
|
|
Public Sub Read_CommonCode(Optional ByVal Version As String = "")
|
|
Work_msg("공용코드 확인중")
|
|
If Version = "" Then
|
|
Dim L As New ArinLogin.ArinLOgin
|
|
Dim VersionInfo As ArinLogin.ArinLOgin.sVersionInfo = Nothing
|
|
VersionInfo = L.Get_LastVersion("C2") '//버젼을 가져오는데 eco 버젼만 가져오게 바꺼야겟죵 ^^ 구분자를 넣도록 합시닷!
|
|
Version = VersionInfo.Ver
|
|
End If
|
|
Try
|
|
Dim TaC As New DSTableAdapters.tbl_commonTableAdapter
|
|
TaC.Fill(DSET1.tbl_common)
|
|
DSET1.tbl_Desc.Rows(0)("versionc") = Version
|
|
DSET1.AcceptChanges()
|
|
|
|
TaC.Fill(DSET2.tbl_common)
|
|
'DSET2.tbl_Desc.Rows(0)("versionc") = Version
|
|
DSET2.AcceptChanges()
|
|
|
|
Catch ex As Exception
|
|
MsgBox("공용코드 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
End Try
|
|
|
|
Work_msg("")
|
|
End Sub
|
|
|
|
Public Sub Read_ProfileData(Optional ByVal Version As String = "") '//2010.12.06 추가
|
|
Work_msg("표준프로파일 확인중")
|
|
If Version = "" Then
|
|
Dim L As New ArinLogin.ArinLOgin
|
|
Dim VersionInfo As ArinLogin.ArinLOgin.sVersionInfo = Nothing
|
|
VersionInfo = L.Get_LastVersion("P2016") '//버젼을 가져오는데 eco 버젼만 가져오게 바꺼야겟죵 ^^ 구분자를 넣도록 합시닷! 160327 p2 -> P2016
|
|
Version = VersionInfo.Ver
|
|
End If
|
|
Try
|
|
Dim TaC As New DSTableAdapters.tbl_profileTableAdapter
|
|
TaC.Fill(DSET1.tbl_profile)
|
|
DSET1.tbl_Desc.Rows(0)("versionp") = Version
|
|
DSET1.AcceptChanges()
|
|
|
|
TaC.Fill(DSET2.tbl_profile) '//160327 table PROFILE2 -> PROFILE_2016
|
|
'DSET2.tbl_Desc.Rows(0)("versionp") = Version
|
|
DSET2.AcceptChanges()
|
|
Catch ex As Exception
|
|
MsgBox("표준프로파일 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
End Try
|
|
|
|
'MsgBox(Version)
|
|
|
|
|
|
Work_msg("")
|
|
End Sub
|
|
|
|
Public Sub Read_WeatherData(Optional ByVal Version As String = "")
|
|
Work_msg("기상데이터 확인중")
|
|
Dim Iserror As Boolean = False
|
|
If Version = "" Then
|
|
Dim L As New ArinLogin.ArinLOgin
|
|
Dim VersionInfo As ArinLogin.ArinLOgin.sVersionInfo = Nothing
|
|
VersionInfo = L.Get_LastVersion("W2") '//버젼을 가져오는데 eco 버젼만 가져오게 바꺼야겟죵 ^^ 구분자를 넣도록 합시닷!
|
|
Version = VersionInfo.Ver
|
|
End If
|
|
|
|
DSET1.tbl_weather.Clear()
|
|
DSET1.weather_cha.Clear()
|
|
DSET1.weather_ilsa.Clear()
|
|
DSET1.weather_temp.Clear()
|
|
DSET1.weather_supdo.Clear()
|
|
DSET1.weather_group.Clear()
|
|
DSET1.weather_water.Clear()
|
|
DSET1.weather_river.Clear()
|
|
DSET1.weather_wind.Clear()
|
|
DSET1.AcceptChanges()
|
|
|
|
DSET2.tbl_weather.Clear()
|
|
DSET2.weather_cha.Clear()
|
|
DSET2.weather_ilsa.Clear()
|
|
DSET2.weather_temp.Clear()
|
|
DSET2.weather_supdo.Clear()
|
|
DSET2.weather_group.Clear()
|
|
DSET2.weather_water.Clear()
|
|
DSET2.weather_river.Clear()
|
|
DSET2.weather_wind.Clear()
|
|
DSET2.AcceptChanges()
|
|
|
|
Try
|
|
Dim TaC As New DSTableAdapters.tbl_weatherTableAdapter
|
|
TaC.Fill(DSET1.tbl_weather)
|
|
TaC.Fill(DSET2.tbl_weather)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터0 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
Try
|
|
Dim TaC As New DSTableAdapters.weather_chaTableAdapter
|
|
TaC.Fill(DSET1.weather_cha)
|
|
TaC.Fill(DSET2.weather_cha)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터1 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
Try
|
|
Dim TaC As New DSTableAdapters.weather_ilsaTableAdapter
|
|
TaC.Fill(DSET1.weather_ilsa)
|
|
TaC.Fill(DSET2.weather_ilsa)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터2 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
Try
|
|
Dim TaC As New DSTableAdapters.weather_supdoTableAdapter
|
|
TaC.Fill(DSET1.weather_supdo)
|
|
TaC.Fill(DSET2.weather_supdo)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터3 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
Try
|
|
Dim TaC As New DSTableAdapters.weather_tempTableAdapter
|
|
TaC.Fill(DSET1.weather_temp)
|
|
TaC.Fill(DSET2.weather_temp)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터4 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
Try
|
|
Dim TaC As New DSTableAdapters.weather_groupTableAdapter
|
|
TaC.Fill(DSET1.weather_group)
|
|
TaC.Fill(DSET2.weather_group)
|
|
Catch ex As Exception
|
|
MsgBox("기상데이터(GRP) 업데이트실패" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical, "확인")
|
|
Iserror = True
|
|
End Try
|
|
If Iserror = False Then
|
|
DSET1.tbl_Desc.Rows(0)("versionw") = Version
|
|
'DSET2.tbl_Desc.Rows(0)("versionw") = Version
|
|
'MsgBox(Version)
|
|
DSET1.AcceptChanges()
|
|
DSET2.AcceptChanges()
|
|
End If
|
|
|
|
Work_msg("")
|
|
End Sub
|
|
|
|
Public Function TOIT(ByVal obj As Object) As Integer
|
|
If obj Is DBNull.Value Then
|
|
Return 0
|
|
ElseIf obj.ToString = "" Then
|
|
Return 0
|
|
Else
|
|
If IsNumeric(obj) Then
|
|
Return CInt(obj)
|
|
Else
|
|
MsgBox("[TOIT]숫자형식이 요구되지만 문자가 들어있습니다" & vbCrLf & obj.ToString, MsgBoxStyle.Critical, "확인")
|
|
Return 0
|
|
End If
|
|
|
|
End If
|
|
End Function
|
|
|
|
Public Function SolarAirHeatingSystem(DSET As DS, ByVal i_count_month As Integer, ByVal i_count_d_mth As Integer, ByVal Dr공조 As DS.tbl_kongjoRow, ByVal V_dot_A_AHU As Decimal, ByVal T_amb As Decimal, ByVal Delta_T_act As Decimal) ' ByVal d_mth As Integer,
|
|
|
|
pLog.Add(String.Format(">>SolarAirHeatingSystem 진입 : i_count_month={0}, i_count_d_mth={1}, Dr공조={2}, 외기도입량={3}, theta_e={4}, Delta_T_act={5}", i_count_month, i_count_d_mth, Dr공조.code, V_dot_A_AHU, T_amb, Delta_T_act))
|
|
|
|
Dim G_coll, G_tilt, A_coll As Decimal
|
|
Dim e_HX, h_c, v_wind, t, alpha, h_dot_r, eta As Decimal
|
|
Dim Q_dot_coll, Delta_T_avl, T_del_avl, T_del_act, T_del_max As Decimal
|
|
Dim rho As Decimal = 1.225
|
|
Dim C_p As Decimal = 1005 / 3600 '// [J/kg'C] 3600으로 나누어 Wh로 변환 [Wh/kg'C]
|
|
Dim Delta_T_offset As Decimal = 3
|
|
Dim h_sunlight As Decimal = 24
|
|
Dim sigma_s As Decimal = 0.000000056703 '스테판볼츠만 상수
|
|
T_del_max = 20
|
|
|
|
|
|
'// 사용자 입력항목 : 집열기 면적(A_coll), 단면적, 집열기 표면방사율(e)
|
|
'// Q_dot_coll 은 외기도입풍량을 집열기 면적으로 나눈 값
|
|
'// h_sunlight 는 주간 운전시간 적용
|
|
|
|
Dim Drow풍속 As DS.weather_windRow = CType(DSET.weather_wind.Select("pcode='" & Calc.Pub.기상데이터.code & "'")(0), DS.weather_windRow)
|
|
v_wind = TOSG(Drow풍속("M" + i_count_month.ToString("00")))
|
|
|
|
Dim Dr일사 As DS.weather_ilsaRow
|
|
|
|
Select Case Dr공조.집열기방위.Trim
|
|
Case "남" '"남"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 1, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "남동" '"남동"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 2, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "남서" '"남서"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 3, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "동" '"동"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 4, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "서" '"서"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 5, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "북동" '"북동"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 6, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "북서" '"북서"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 7, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
Case "북" '"북"
|
|
Dr일사 = CType(DSET.weather_ilsa.Select("pcode='" & Calc.Pub.기상데이터.code & "' and code='" & Format(1 + 8, "0000") & "'")(0), DS.weather_ilsaRow)
|
|
G_tilt = TOSG(Dr일사("M" & Format(i_count_month, "00"))) * 24
|
|
|
|
End Select
|
|
|
|
|
|
A_coll = TOSG(Dr공조.집열기면적)
|
|
alpha = TOSG(Dr공조.집열기방사율)
|
|
Q_dot_coll = V_dot_A_AHU / A_coll
|
|
G_coll = G_tilt * A_coll '// * f_op 집열기 가동계수는 G_tilt 에 포함
|
|
|
|
e_HX = 1 - 5 * Q_dot_coll
|
|
h_c = 6.0 + 4.0 * v_wind - 76 * Q_dot_coll
|
|
t = alpha * G_tilt / (rho * C_p * Q_dot_coll * e_HX + 4 * alpha * sigma_s * T_amb ^ 3 + h_c) ' e는 alpha 로 공유
|
|
h_dot_r = 4 * alpha * sigma_s * T_amb ^ 2 * (T_amb + 1.6 * t) ' e는 alpha 로 공유
|
|
eta = alpha / (1 + (h_dot_r + h_c) / (rho * C_p * Q_dot_coll * e_HX))
|
|
|
|
|
|
Delta_T_avl = (eta * G_tilt) / (Q_dot_coll * rho * C_p * h_sunlight)
|
|
T_del_avl = (T_amb + Delta_T_offset) + Delta_T_avl
|
|
T_del_act = Math.Min(T_del_max, T_del_avl)
|
|
Delta_T_act = Math.Max(T_del_act - (T_amb + Delta_T_offset), 0)
|
|
|
|
'f_util = Delta_T_act / Delta_T_avl
|
|
|
|
'Q_sol = Sigma(eta * G_coll * f_util)
|
|
|
|
Return Delta_T_act
|
|
|
|
End Function
|
|
|
|
|
|
|
|
Public Function Get_V_dot_A_AHU(tbl_profile As DS.tbl_profileDataTable, tbl_zone As DS.tbl_zoneDataTable, Dr공조Code As String) As Decimal
|
|
|
|
|
|
Dim ZoneListKongjo() As DS.tbl_zoneRow = tbl_zone.Select("code<>'0' and 냉난방공조처리시스템 = '" + Dr공조Code + "'", "code")
|
|
Dim V_dot_A_AHU As Decimal = 0
|
|
For Each DrZonbyKongjo As DS.tbl_zoneRow In ZoneListKongjo
|
|
|
|
Dim Dr프로필2 As DS.tbl_profileRow = CType(tbl_profile.Select("code='" & DrZonbyKongjo.프로필 & "'")(0), DS.tbl_profileRow)
|
|
V_dot_A_AHU += TOSG(DrZonbyKongjo.면적) * TOSG(DrZonbyKongjo.입력존의수) * TOSG(Dr프로필2.최소도입외기량)
|
|
Next
|
|
Return V_dot_A_AHU
|
|
End Function
|
|
Public Function TOSG(ByVal obj As Object) As Decimal
|
|
If obj Is DBNull.Value Then
|
|
Return 0
|
|
ElseIf obj.ToString = "" Then
|
|
Return 0
|
|
Else
|
|
If IsNumeric(obj) Then
|
|
Try
|
|
Return CDec(obj)
|
|
Catch ex As Exception
|
|
MsgBox("[TOSG]에서 '" & obj & "'")
|
|
Return 0
|
|
End Try
|
|
|
|
Else
|
|
MsgBox("[TOSG]숫자형식이 요구되지만 문자가 들어있습니다" & vbCrLf & obj.ToString, MsgBoxStyle.Critical, "확인")
|
|
Return 0
|
|
End If
|
|
End If
|
|
End Function
|
|
Public Function TOST(ByVal obj As Object) As String
|
|
If obj Is DBNull.Value Then
|
|
Return ""
|
|
Else
|
|
Return CStr(obj)
|
|
End If
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
''' 데이터를 모두 되돌립니다.
|
|
''' </summary>
|
|
''' <param name="SrcDs"></param>
|
|
''' <param name="DisplayLabel"></param>
|
|
''' <remarks></remarks>
|
|
Public Sub Data_Cancel(ByRef SrcDs As DataTable, Optional ByVal DisplayLabel As ToolStripStatusLabel = Nothing)
|
|
Dim Change As Integer
|
|
Try
|
|
Change = SrcDs.GetChanges.Rows.Count
|
|
Catch ex As Exception
|
|
Change = 0
|
|
End Try
|
|
|
|
If Change > 0 Then
|
|
If MsgBox("변경된 내용을 취소하시겠습니까?", CType(MsgBoxStyle.Critical + MsgBoxStyle.OkCancel, MsgBoxStyle), "확인") = MsgBoxResult.Ok Then
|
|
SrcDs.RejectChanges()
|
|
If Not DisplayLabel Is Nothing Then
|
|
NOTICE("변경된 내용이 취소되었습니다", DisplayLabel, Color.Red)
|
|
Else
|
|
MsgBox("변경된 내용이 취소되었습니다", MsgBoxStyle.Information, "확인")
|
|
End If
|
|
Else
|
|
If Not DisplayLabel Is Nothing Then NOTICE("취소되었습니다", DisplayLabel, Color.Blue)
|
|
End If
|
|
End If
|
|
If Not DisplayLabel Is Nothing Then
|
|
NOTICE("변경된 내용이 없습니다.", DisplayLabel, Color.Red)
|
|
Else
|
|
MsgBox("변경된 내용이 없습니다", MsgBoxStyle.Information, "확인")
|
|
End If
|
|
End Sub
|
|
|
|
Public Function EndEdit(ByRef bs As BindingSource) As Boolean
|
|
Try
|
|
bs.EndEdit()
|
|
Catch ex As System.Data.NoNullAllowedException
|
|
MsgBox("반드시입력해야할 데이터가 없습니다" & vbCrLf & ex.Message, MsgBoxStyle.Critical, "입력오류")
|
|
Return False
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message.ToString, MsgBoxStyle.Critical, "처리되지않은 오류발생")
|
|
Return False
|
|
End Try
|
|
Return True
|
|
End Function
|
|
|
|
Public Sub Check_Modify(ByRef DT As DataTable, Optional ByVal prompt As Boolean = True)
|
|
Dim Cnt As Integer
|
|
Try
|
|
Cnt = DT.GetChanges.Rows.Count
|
|
Catch ex As Exception
|
|
Cnt = 0
|
|
End Try
|
|
|
|
If Cnt < 1 Then
|
|
NOTICE("변경된 내용이 없습니다", Nothing, Color.Red)
|
|
Return
|
|
End If
|
|
If prompt Then
|
|
If MsgBox("변경된 데이터를 저장하시겠습니까?", CType(MsgBoxStyle.Information + MsgBoxStyle.OkCancel, MsgBoxStyle), "저장확인") <> MsgBoxResult.Ok Then Return
|
|
End If
|
|
Try
|
|
DT.AcceptChanges() '//Set All Green
|
|
NOTICE("저장완료", Nothing, Color.Blue)
|
|
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Exclamation)
|
|
Catch ex As Exception
|
|
MsgBox("데이터베이스 업데이트중 오류가 발생했습니다" & vbCrLf & vbCrLf & ex.ToString, MsgBoxStyle.Critical, "ERROR-")
|
|
NOTICE("저장 실패!", Nothing, Color.Red)
|
|
Finally
|
|
'view1.ActiveSheet.GetDataView(True) '//화면을 갱신한다.
|
|
End Try
|
|
End Sub
|
|
|
|
|
|
'//지정된개체내의 컨트롤의 값을 초기화한다.
|
|
Public Sub Clear_Control(ByVal Ctl As Control)
|
|
Ctl.Focus()
|
|
For Each C As Control In Ctl.Controls
|
|
MsgBox(C.GetType.ToString)
|
|
If C.Controls.Count > 1 Then
|
|
Clear_Control(C)
|
|
Else
|
|
If C.GetType.ToString.ToUpper.IndexOf("TEXTBOX") <> -1 OrElse _
|
|
C.GetType.ToString.ToUpper.IndexOf("MYTB") <> -1 OrElse _
|
|
C.GetType.ToString.ToUpper.IndexOf("NTB") <> -1 Then
|
|
If CType(C, TextBox).ReadOnly = False Then CType(C, TextBox).Text = ""
|
|
ElseIf C.GetType.ToString.ToUpper.IndexOf("COMBOBOX") <> -1 OrElse _
|
|
C.GetType.ToString.ToUpper.IndexOf("MYCMB") <> -1 Then
|
|
'MsgBox("cb")
|
|
CType(C, ComboBox).SelectedIndex = -1
|
|
End If
|
|
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Public Sub Work_msg(Optional ByVal P_m As String = "잠시만 기다려주세요", Optional ByVal pbar As Boolean = False)
|
|
If P_m = "" Then
|
|
Frm_Work.Dispose()
|
|
Else
|
|
If Frm_Work.Visible = False Then Frm_Work.Visible = True
|
|
If Frm_Work.ProgressBar1.Visible <> pbar Then Frm_Work.ProgressBar1.Visible = pbar
|
|
Frm_Work.Label1.Text = P_m
|
|
My.Application.DoEvents()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
'''화면에메세지를 표시할때사용한다.
|
|
Public Sub Work_msg_timer(Optional ByVal P_m As String = "잠시만 기다려주세요", Optional ByVal time As Short = 5)
|
|
Frm_Warning.Left = CInt(MdiMain.Left + ((MdiMain.Width - Frm_Warning.Width) / 2))
|
|
Frm_Warning.Top = CInt(MdiMain.Top + ((MdiMain.Height - Frm_Warning.Height) / 2))
|
|
Frm_Warning.Term = time
|
|
Frm_Warning.Second = time
|
|
Frm_Warning.Label1.Text = P_m
|
|
Frm_Warning.Timer1.Enabled = True
|
|
Frm_Warning.Show()
|
|
My.Application.DoEvents()
|
|
End Sub
|
|
|
|
Public Sub Work_plus()
|
|
If Frm_Work.ProgressBar1.Visible = False Then Frm_Work.ProgressBar1.Visible = True
|
|
Frm_Work.ProgressBar1.Value += 1
|
|
My.Application.DoEvents()
|
|
End Sub
|
|
|
|
Public Sub INitRow(ByVal Ctl As Control.ControlCollection)
|
|
For Each C As Control In Ctl
|
|
If C.Controls.Count > 1 Then
|
|
INitRow(C.Controls)
|
|
Else
|
|
If C.GetType.ToString.ToUpper.IndexOf("MYTB") <> -1 Then
|
|
If CType(C, MyTb).Text = "" Then CType(C, MyTb).Text = "0"
|
|
ElseIf C.GetType.ToString.ToUpper.IndexOf("MYCMB") <> -1 Then
|
|
If CType(C, MyCmb).Text = "" AndAlso CType(C, MyCmb).Items.Count > 0 Then CType(C, MyCmb).SelectedIndex = 0
|
|
End If
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Public Function DeCryptArea(ByRef data As Byte(), Optional ByVal pxorkey() As Byte = Nothing) As Byte()
|
|
Dim out(data.Length - 1) As Byte
|
|
Dim pos As Integer = 0
|
|
Dim i As Long = 0
|
|
|
|
'//처음4바이트확인해서 보낸다.
|
|
Dim XorKey() As Byte
|
|
If pxorkey Is Nothing Then '//없으면 자동검출
|
|
XorKey = New Byte() {data(0), data(1), data(2), data(3)}
|
|
Else '//있으면 그걸 사용한다.
|
|
XorKey = New Byte() {pxorkey(0), pxorkey(1), pxorkey(2), pxorkey(3)}
|
|
End If
|
|
|
|
For Each b As Byte In data
|
|
out(i) = DeCryptByte(b, pos, XorKey)
|
|
pos += 1
|
|
i += 1
|
|
If pos > 3 Then pos = 0
|
|
Next
|
|
Return out
|
|
End Function
|
|
Public Function DeCryptByte(ByVal num As Byte, ByVal column As Integer, Optional ByVal a() As Byte = Nothing) As Byte
|
|
If a Is Nothing Then a = New Byte() {&HAC, &H29, &H55, &H42}
|
|
Return (num Xor a(column))
|
|
End Function
|
|
|
|
Public Function EnCryptByte(ByVal num As Byte, ByVal column As Integer, Optional ByVal a() As Byte = Nothing) As Byte
|
|
If a Is Nothing Then a = New Byte() {&HAC, &H29, &H55, &H42}
|
|
Return (num Xor a(column))
|
|
End Function
|
|
End Module
|