후접한 너무도 후접한..
UART 데이터 받아 원하는 변환값으로 변환후 그래프로 그려주려고 만든 파일..
저장은 엑셀파일로....
Private Sub Command1_Click()
On Error Resume Next '에러를 무시하고 지나가라. 포트를 두번 열었을때 발생하는 에러 방지
'On Error GoTo errText
Form2.MSComm.PortOpen = True
MsgBox "포트를 열었습니다."
'Text1.Text = "포트를 열었습니다."
'Picture1.Scale (0, 3000)-(300, 0)
'Picture1.DrawWidth = 1 '선 굵기
'Picture1.Line -(10, 3000), RGB(180, 0, 0)
'Picture1.Line -(20, 2000), RGB(180, 0, 0)
'Picture1.Line -(30, 1000), RGB(180, 0, 0)
'Picture1.Line -(40, 800), RGB(180, 0, 0)
'개체명.Line ☞ 지정한 개체에 선이나 사각형을 그린다.(Line(x1,y1)-(x2,y2),[선색],B)
' (Picture1.Line (1500,500) - (5000,2000) ☞ 대각선이 그려집니다.)
' (Picture1.Line (1500,1000) - (5000,2000), , B ☞ 직사각형이 그려집니다.(B를 사용하면 사각형))
' 개체명.Circle ☞ 지정한 개체에 원이나 타원을 그린다.(Circle(x,y),반지름,[색,시작,끝,옵션]
' (Picture1.Circle (1500,1800), 900, , , , 0.7 ☞ 타원을 그립니다.(0.7은 가로,세로 비율값을 설정))
' (Picture1.Circle (1500,18000), 900 ☞ 원을 그립니다.)
'픽쳐박스.Line (x1, y1)-(x2, y2)[, DrawColor] 으로 그리면됩니다.
'Y축은 보통은 위가 0이고, 밑으로 내려갈수록 +로 됩니다.
'그걸 바꾸고 싶으면 픽쳐박스.Scale 함수를 먼저 사용하시고 Line 함수를 사용하면 됩니다.
'그리지 않고 시작 위치만 바꾸로 싶은 경우에는 CurrentX, CurrentY를 사용하시면 되고요.
'이전위치에서 어느 한위치로만 그릴경우에는 Line -(x,y) 함수를 사용하세요..
'Exit Sub '
'errText: MsgBox "포트를 두번 열었습니다."
End Sub
Private Sub Command2_Click()
On Error Resume Next '에러를 무시하고 지나가라. 포트를 두번 닫았을때 발생하는 에러 방지
Form2.MSComm.PortOpen = False
MsgBox "포트를 닫았습니다."
'Text1.Text = "포트를 닫았습니다."
End Sub
Private Sub Command3_Click()
CommonDialog1.Filter = "CSV(*.csv) | *.csv"
CommonDialog1.InitDir = App.Path '기본적으로 저장할 위치를 지정
CommonDialog1.DefaultExt = "*.csv" '사용자가 파일명만 입력해도
'확장자를 덧붙인다
CommonDialog1.ShowSave
If CommonDialog1.FileName <> "" Then
'//파일저장
ResultTxtSave CommonDialog1.FileName
End If
End Sub
Public Sub ResultTxtSave(strFileName As String)
Dim FN_out As Integer '//파일저장 관련 파일오픈용
'Dim strFileName As String
Dim strtemp As String '//저장할 데이터 저장용 변수
Dim strtemp2 As String '//저장할 데이터 저장용 변수
'Dim tNO As String '//번호
'Dim DayNow As String '//날짜
'Dim tID_NO As String '//ID_NO
'Dim I_Cnt As Long
'Dim SelData As String
'Dim TestDate As String
'Dim RawData_All As String
On Error Resume Next
'//파일저장관련 처리
FN_out = FreeFile
Open strFileName For Output As #FN_out '//파일 오픈
strtemp = Text1.Text
'strtemp2 = Text2.Text
Print #FN_out, strtemp
'Print #FN_out, strtemp2
Close #FN_out
End Sub
Private Sub Form_Load()
'// 처음 폼이 실행되면 실행되는 창 Load
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Timer1_Timer()
Dim Cnt_A As Long
Dim C_I As Long
Dim Temp_Data As Variant
Dim T_A() As Long
Dim T_B() As Long
Dim T_Trans_Value As Long
Timer1.Enabled = False
Value_Data = Split(Value_Data, vbCrLf)
Cnt_A = UBound(Value_Data) '배열 갯수를 체크하기 위한 함수
'Debug.Print Cnt_A
ReDim T_A(0 To Cnt_A - 1) As Long
ReDim T_B(0 To Cnt_A - 1) As Long
For C_I = 0 To Cnt_A - 1
Temp_Data = Split(Value_Data(C_I), ",")
T_A(C_I) = Temp_Data(0)
T_B(C_I) = Temp_Data(1)
Next 'for문의 끝을 알려주는 구문
'Picture1.Scale (0, 4096)-(250, 0)
'Picture1.Print Spc(10); Tab(10); "TEST"
'Picture1.Print Spc(1); Tab(1); T_B(Cnt_A - 1) + 100
' Tab(1) 가로상 위치 화면에 비례하여 움직이기 때문에 화면 폼을 작게 하면 같은 값이라도 하면밖으로 도출될 수 있음.
'Picture1.AutoRedraw = True '다른 창 화면 보고 왔을 때도 지워지지 않게 하도록
Picture1.Picture = Nothing '화면 지우는 명령어
Picture1.AutoRedraw = False
Picture1.AutoRedraw = True
'Picture1.Print 보드(100, 200)
'Picture1.CurrentX = 10 '마지막 값 위치 설정
'Picture1.CurrentY = T_B(0) + 20 '마지막 값 위치 설정
'Picture1.Print T_B(0) '마지막 값 표시
'Picture1.Print Spc(1); Tab(1); T_B(0) '초기 시작값 표시
'Picture1.Scale (0, T_B(Cnt_A - 1) + 100)-(T_A(Cnt_A - 1) + 20, 0)
Picture1.Scale (0, T_B(0) + 100)-(T_A(Cnt_A - 1) + 20, 0)
Picture1.DrawWidth = 2 '선 굵기
Picture1.Line (T_A(0), T_B(0))-(T_A(0), T_B(0)), RGB(180, 0, 0)
Text1.Text = Text1.Text & "No" & "," & "ADC =" & "," & "Ohm =" & vbCrLf '&를 해줘야 덮어 써지지 않고 옆에 써지게 됨., vbCrLf 줄바꾸기 연산자.
For C_I = 0 To Cnt_A - 1
Picture1.Line -(T_A(C_I), T_B(C_I)), RGB(180, 0, 0)
T_Trans_Value = (56000 / ((((2.5 * T_B(C_I)) / 4096) / 0.192308) - 1))
'Text2.Text = Text2.Text & C_I + 1 & "," & T_Trans_Value & vbCrLf '&를 해줘야 덮어 써지지 않고 옆에 써지게 됨., vbCrLf 줄바꾸기 연산자.
Text1.Text = Text1.Text & Space(3) & (C_I + 1) & "," & Space(3) & T_B(C_I) & "," & Space(3) & T_Trans_Value & vbCrLf '&를 해줘야 덮어 써지지 않고 옆에 써지게 됨., vbCrLf 줄바꾸기 연산자.
'Text1.Text = Text1.Text & C_I + 1 & "," & "ADC =" & T_B(C_I) & "," & "Ohm =" & T_Trans_Value & vbCrLf '&를 해줘야 덮어 써지지 않고 옆에 써지게 됨., vbCrLf 줄바꾸기 연산자.
'Space(숫자) 공백 넣기
Next 'for문의 끝을 알려주는 구문
Picture1.CurrentX = 10 '마지막 값 위치 설정
Picture1.CurrentY = T_B(0) + 20 '마지막 값 위치 설정
Picture1.Print T_B(0) '마지막 값 표시
Picture1.CurrentX = Cnt_A '마지막 값 위치 설정
Picture1.CurrentY = T_B(Cnt_A - 1) + 20 '마지막 값 위치 설정
Picture1.Print Spc(1); T_B(Cnt_A - 1) '마지막 값 표시
Value_Data = "" '초기화 하기 위해 ""
Buffer_Temp = "" '인티거 초기화는 0, 스트링 초기화는 ""
'If Buffer_Temp = vbCrLf Then
'처리할 행동
'ElseIf a = b Then
'Else
'End If ' C언어에서 {}의 닫는 부분
End Sub
'//통신이벤트 수신
Private Sub MSComm_OnComm() 'Form2.MSComm.PortOpen = True
Module1.Proc_Event
End Sub
Option Explicit '항상 해줘야하는 선언, 선언한 변수만 사용하겠다는 선언
Global Buffer_Temp As String '전역변수 선언
Global Value_Data As Variant
'//이벤트 발생시 처리
Public Sub Proc_Event()
Dim EVMsg$
Dim ERMsg$
Dim Data_Length As Integer
Dim Count_I As Integer
Dim Buffer As String
Dim Start_P As Integer
Dim End_P As Integer
Dim StrBuffer As String
Dim SendData As String
'Debug.Print BCC
' CommEvent 속성에 따른 항목
Select Case Form2.MSComm.CommEvent
' 이벤트 메시지
Case comEvReceive '//데이터 수신 이벤트
' Form1.Picture1.AutoRedraw = False
Form1.Picture1.Refresh '//그래프 박스 화면 지움
' Form1.Picture1.Picture = Nothing
' Form1.Picture1.Image = Nothing
Debug.Print Buffer '직접 실행창에서 확인하기 위해
Form1.Timer1.Enabled = False
Form1.Timer1.Interval = 1000
Form1.Timer1.Enabled = True
Buffer = Buffer & Form2.MSComm.Input
StrBuffer = StrConv(Buffer, vbUnicode)
'Debug.Print StrBuffer
'Data_Length = Len(Buffer)
ShowData StrBuffer
Buffer = ""
Case comEvSend '//데이터 전송 이벤트
Case comEvCTS
EVMsg$ = "CTS 변경 감지" '//CTS 회선 변경
Case comEvDSR
EVMsg$ = "DSR 변경 감지" '//DSR 회선 변경
Case comEvCD
EVMsg$ = "CD 변경 감지" '//CD 회선 변경
Case comEvRing
EVMsg$ = "전화 벨이 울리는 중" '//호출음 검출
Case comEvEOF
EVMsg$ = "EOF 감지" '//파일끝 감지
' 오류 메시지
Case comBreak
ERMsg$ = "중단 신호 수신" '//중지신호 수신
Case comCDTO
ERMsg$ = "반송파 검출 시간 초과"
Case comCTSTO
ERMsg$ = "CTS 시간 초과"
Case comDCB
ERMsg$ = "DCB 검색 오류" '//DCB 검색 중 예기치 못한 오류
Case comDSRTO
ERMsg$ = "DSR 시간 초과"
Case comFrame
ERMsg$ = "프레이밍 오류" '//구조적 오류
Case comOverrun
ERMsg$ = "패리티 오류" '//데이터 손실
Case comRxOver
ERMsg$ = "수신 버퍼 초과" '//수신 버퍼 초과
Case comRxParity
ERMsg$ = "패리티 오류" '//패리티 오류
Case comTxFull
ERMsg$ = "전송 버퍼에 여유가 없음" '//전송버퍼 꽉참
Case Else
ERMsg$ = "알 수 없는 오류 또는 이벤트"
End Select
End Sub
Public Sub ShowData(SendData As String)
Dim Data_InStr As String
Dim Data_Length As Integer
'Debug.Print SendData '직접 실행창에서 확인하기 위해
'Form1.Text1.Text = Form1.Text1.Text & SendData '&를 해줘야 덮어 써지지 않고 옆에 써지게 됨.
Buffer_Temp = Buffer_Temp & SendData
Value_Data = Buffer_Temp
'Picture1.DrawWidth = 1 '선 굵기
'Picture1.Line -(10, 3000), RGB(180, 0, 0)
'Picture1.Line -(20, 2000), RGB(180, 0, 0)
'Picture1.Line -(30, 1000), RGB(180, 0, 0)
'Picture1.Line -(40, 800), RGB(180, 0, 0)
End Sub
'폼의 화면 사이즈 맞추기 1024 * 768 = 1024*15, 768*15, 15360, 11520