안녕하세요. Vb 완전 초보입니다.. 이런 좋은 사이트를 알게 되어 영광입니다..
현재 저는 모회사에서 일하는 연구원입니다. 정식 프로젝트는 아닌데, 사회에 공헌을 하고자 개발하는 기기가 하나 있습니다...가스상물질 (황화수소) 측정 기기인데, 값싼 센서를 사서 저렴하게 구성하고 소프트웨어까지 필요한 곳에 뿌리려고 합니다. 그래서 기기 조립은 다 하고 센서값도 비주얼베이직 통신을 통해서 어찌어찌 받긴 했는데... 문제는 '단순화'가 되지 않는다는 겁니다. 자세한 내용은..
1. 시리얼 통신을 통해 값을 받으면 [Serial number, concentration, temp, humidity, ... , ] 라는 센서에서 읽어들이는 한 줄이 쭈욱 들어옵니다.
2. 이후 1초마다 이 값이 Appendtext를 통해 richtextbox에 로깅되도록 만들었습니다...
3. ","로 나눠진 저 값에서 2번째 값! (Concentration)을 따로 빼내어 Label10.text에 보기 편하도록 표시하고 싶은데... UI구성은 다 해뒀습니다만, Split function이 아무리해도 먹히질 않네요...배열을 만들어봐도...인덱스를 벗어났다는 등의 메시지만... 코드를 읽어보면 [text]에 위 한 줄이 저장되는거 아닌가요?... 어떤 곳에 시리얼 값이 저장되는지 모르겠습니당..
4. 초보라 인터넷에 있는 코드를 긁어 약간 수정한 정도입니다. 그래서 자세한 내용은 모르겠습니다..
고수분들의 팁과 조언 부탁드리겠습니다! 감사합니다! 아래는 코드입니다. 보시기 편하도록 제가 생각할 때 주요 부분만 빨강 처리해두었습니다!
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Public Class frmMain
Dim myPort As Array 'COM Ports detected on the system will be stored here
Dim WithEvents kell As Timer
Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'When our form loads, auto detect all serial ports in the system and populate the cmbPort Combo box.
myPort = IO.Ports.SerialPort.GetPortNames() 'Get all com ports available
'cmbBaud.Items.Add(9600) 'Populate the cmbBaud Combo box to common baud rates used
For i = 0 To UBound(myPort)
cmbPort.Items.Add(myPort(i))
Next
cmbPort.Text = cmbPort.Items.Item(0) 'Set cmbPort text to the first COM port detected
'cmbBaud.Text = cmbBaud.Items.Item(0) 'Set cmbBaud text to the first Baud rate on the list
btnDisconnect.Enabled = False 'Initially Disconnect Button is Disabled
Timer1.Interval = 1000 'Time interval
Timer1.Enabled = True
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
SerialPort1.PortName = cmbPort.Text 'Set SerialPort1 to the selected COM port at startup
SerialPort1.BaudRate = 9600 'Set Baud rate to the selected value on
'Other Serial Port Property
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.DataBits = 8 'Open our serial port
SerialPort1.Open()
btnConnect.Enabled = False 'Disable Connect button
btnDisconnect.Enabled = True 'and Enable Disconnect button
End Sub
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
SerialPort1.Close() 'Close our Serial Port
btnConnect.Enabled = True
btnDisconnect.Enabled = False
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
SerialPort1.Write("c" & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii
'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
SerialPort1.Write("r" & vbCr) 'The text contained in the txtText will be sent to the serial port as ascii
'plus the carriage return (Enter Key) the carriage return can be ommitted if the other end does not need it
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting()) 'Automatically called every time a data is received at the serialPort
End Sub
Private Sub ReceivedText(ByVal [text] As String)
'compares the ID of the creating Thread to the ID of the calling Thread
If Me.rtbReceived.InvokeRequired Then
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
'Label10.Text = ""
rtbReceived.AppendText([text])
rtbReceived.ScrollToCaret()
End If
End Sub
Private Sub cmbPort_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbPort.SelectedIndexChanged
If SerialPort1.IsOpen = False Then
SerialPort1.PortName = cmbPort.Text 'pop a message box to user if he is changing ports
Else 'without disconnecting first.
MsgBox(”Valid only if port is Closed”, vbCritical)
End If
End Sub
Private Sub cmbBaud_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
If SerialPort1.IsOpen = False Then
SerialPort1.BaudRate = 9600 'pop a message box to user if he is changing baud rate
Else 'without disconnecting first.
MsgBox(”Valid only if port is Closed”, vbCritical)
End If
End Sub
End Class
현재 아래와 같이 되어있는 부분을
아래와 같이 수정하신 후,
[text]라고 되어있는 부분들을 찾아서 text로 수정해보시기 바랍니다.
혹시 안되시면 댓글 남겨 주세요~