我在一堵磚牆上!從VB.net 2008的串口讀取信息
我有一個高溫PCB通過串口報告溫度。
我可以打開超級終端並接收所有我想要的數據 - 所以我知道該單元正在工作......但我想創建一個VB應用程序,以便我可以使用收到的數據。
當我運行程序我得到這個錯誤:
System.TimeoutException: The operation has timed out.
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
at System.IO.Ports.SerialStream.Read(Byte[] array, Int32 offset, Int32 count)
at System.IO.Ports.SerialPort.InternalRead(Char[] buffer, Int32 offset, Int32 count, Int32 timeout, Boolean countMultiByteCharsAsOne)
at System.IO.Ports.SerialPort.ReadTo(String value)
at System.IO.Ports.SerialPort.ReadLine()
at Temperature.Form1.ReadFromCom() in C:\Documents and Settings\asamuel\Desktop\VB Project Sollutions\Temperature2\Temperature\Form1.vb:line 43
有人能幫幫我吧!我瘋了!
在超級終端的數據來自經過是這樣的:
R V1.0 2002-01-06 20:37:37 C
1 0027.00
2 0027.00
3 0027.06
4 0027.18
1 0027.00
2 0027.00
3 0027.06
4 0027.18
1 0027.00
2 0027.06
我的VB應用程序代碼如下所示:
Imports System
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Dim SerialPort1 As New SerialPort
Dim readThread As Thread = New Thread(AddressOf ReadFromCom)
Dim abortThread As Boolean
Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Button1.Text Is "Start Capture" Then
Try
abortThread = False
SerialPort1.Open()
readThread.Start()
Button1.Text = "Stop Capture"
Catch ex As Exception
MsgBox("Another program is already using COM1." & vbCrLf & vbCrLf & _
"Please try again later", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "COM1 Not Available")
End Try
ElseIf Button1.Text Is "Stop Capture" Then
abortThread = True
Button1.Text = "Start Capture"
End If
End Sub
Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With SerialPort1
.PortName = "COM1"
.BaudRate = 2400
.Parity = Parity.None
.DataBits = 8
.StopBits = 1
.ReadTimeout = 500
End With
End Sub
Public Sub ReadFromCom()
While abortThread = False
Try
Dim message As String = SerialPort1.ReadLine
updateStatus("Received: " & message)
Catch ex As TimeoutException
updateStatus(ex.ToString)
End Try
End While
End Sub
Public Delegate Sub updateStatusDelegate(ByVal newStatus As String)
Public Sub updateStatus(ByVal newStatus As String)
If Me.InvokeRequired Then
Dim upbd As New updateStatusDelegate(AddressOf updateStatus)
Me.Invoke(upbd, New Object() {newStatus})
Else
TextBox1.Text = newStatus & vbCrLf & vbCrLf & TextBox1.Text
End If
End Sub
End Class
什麼問題?就你的問題而言,一切都進展順利。 – 2009-11-02 13:28:05
同意Konrad,告訴我們什麼是或不正在發生與VB – 2009-11-02 13:49:10
啊 - 對不起! 基本上,我運行程序時出現超時錯誤。 似乎沒有任何信息通過COM1傳出......但我知道它是! – 2009-11-02 14:02:14