16,554
社区成员
发帖
与我相关
我的任务
分享
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.IO.Ports
Imports System.Text
Public Class Form_main
Dim rs232 As SerialPort
Dim comflag As Boolean
Delegate Sub SetTextCallback(ByVal InputString As String)
Private Sub Form_main_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With Me
.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
.StartPosition = FormStartPosition.CenterScreen
.WindowState = FormWindowState.Maximized
.MaximizeBox = True
.MinimizeBox = True
.AutoScroll = True
End With
For Each sp As String In SerialPort.GetPortNames
TStripCmbCOM.Items.Add(sp)
Next
TStripCmbCOM.Sorted = False
TStripCmbCOM.SelectedIndex = 0
comflag = False
com_flag()
End Sub
Sub int_com()
Dim mbaudrate As Integer
Dim mparity As Parity
Dim mdatabit As Integer
Dim mstopbit As StopBits
Dim mportname As String
mportname = TStripCmbCOM.SelectedItem.ToString
mbaudrate = 9600
mparity = Parity.None
mdatabit = 8
mstopbit = StopBits.Two
rs232 = New SerialPort(mportname, mbaudrate, mparity, mdatabit, mstopbit)
End Sub
Sub com_flag()
If comflag = True Then
TStripBtnOnLine.Enabled = False
TStripBtnDownLine.Enabled = True
Else
TStripBtnOnLine.Enabled = True
TStripBtnDownLine.Enabled = False
End If
End Sub
Private Sub TStripBtnOnLine_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TStripBtnOnLine.Click
'rs232.ReceivedBytesThreshold = 1
int_com()
rs232.Encoding = Encoding.Default
If Not rs232.IsOpen Then
rs232.Open()
comflag = True
com_flag()
BkWorker.WorkerSupportsCancellation = True
BkWorker.RunWorkerAsync()
Else
MsgBox("通信端口打开错误 ", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
End
End If
End Sub
Private Sub BkWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BkWorker.DoWork
'GetRs232Data()
System.Threading.Thread.Sleep(1000)
If BkWorker.CancellationPending Then
e.Cancel = True
Return
End If
GetRs232Data()
End Sub
Private Sub GetRs232Data()
Dim instring As String
instring = ""
If Not rs232.IsOpen Then Exit Sub
Try
rs232.ReadTimeout = 1000
instring = rs232.ReadExisting()
If instring.Length = 0 Then
Exit Sub
Else
DisplayText(instring)
End If
Catch ex As Exception
MessageBox.Show("读取错误" + ex.ToString, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Sub
Private Sub DisplayText(ByVal comdata As String)
If Me.TxtDisplay.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf DisplayText)
Me.Invoke(d, New Object() {comdata})
Else
Me.TxtDisplay.Text += comdata
End If
End Sub
Private Sub BkWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BkWorker.RunWorkerCompleted
If Not BkWorker.CancellationPending Then
BkWorker.RunWorkerAsync()
End If
End Sub
Private Sub TStripBtnDownLine_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TStripBtnDownLine.Click
If rs232 Is Nothing OrElse Not rs232.IsOpen Then
MsgBox("通信端口尚未打开", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
Else
'rs232.ReceivedBytesThreshold = 0
BkWorker.Dispose()
BkWorker.CancelAsync()
comflag = False
com_flag()
rs232.Close()
End If
End Sub
End Class