7,763
社区成员
发帖
与我相关
我的任务
分享
Public Class 多通道数据采集
Public Delegate Sub myDelegate()
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
cmbSerialPort.Items.Add(My.Computer.Ports.SerialPortNames(i))
Next
btnCloseSerialPort.Enabled = False
SerialPort.Close()
Timer.Enabled = False
picState.BackColor = Color.Red
cmbBoadrate.Items.Add("4800")
cmbBoadrate.Items.Add("9600")
cmbBoadrate.Items.Add("57600")
cmbChanel.Items.Add("通道一")
cmbChanel.Items.Add("通道二")
cmbChanel.Items.Add("通道三")
cmbChanel.Items.Add("通道四")
End Sub
Private Sub btnOpenSerialPort_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOpenSerialPort.Click
If SerialPort.IsOpen = True Then
SerialPort.Close()
End If
If cmbSerialPort.Text = "" Then
MessageBox.Show("请选择一个串口", "串口选择警告", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
SerialPort.PortName = cmbSerialPort.Text
SerialPort.ReadBufferSize = 4096
SerialPort.BaudRate = cmbBoadrate.Text
SerialPort.Parity = IO.Ports.Parity.None
SerialPort.DataBits = 8
SerialPort.StopBits = IO.Ports.StopBits.One
SerialPort.DiscardNull = True
SerialPort.DtrEnable = False
SerialPort.Encoding = System.Text.Encoding.ASCII
SerialPort.RtsEnable = False
SerialPort.Open()
picState.BackColor = Color.Green
btnCloseSerialPort.Enabled = True
End If
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
If MessageBox.Show("清空文本框显示请选择Yes,清零计数器请选择No", "选择一个删除对象", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
txtDataReceive.Text = String.Empty
Else
txtNumOfReceive.Text = "0"
txtNumOfSendChar.Text = "0"
End If
End Sub
Public Sub SendtoSbuf()
Dim TestArray() As String = Split("fe")
'Dim str(0)="fe" as string
Dim hexBytes() As Byte
ReDim hexBytes(TestArray.Length - 1)
Dim i As Integer
For i = 0 To TestArray.Length - 1
hexBytes(i) = Val("&h" & TestArray(0))
Next
SerialPort.Write(hexBytes, 0, 1)
txtNumOfSendChar.Text = (Val(txtNumOfSendChar.Text) + 1).ToString
End Sub
Public Function DecToHex(ByVal DecNumber As Byte) As String '转换成十六进制字符串
If DecNumber <= 15 Then
DecToHex = " 0" & Hex(DecNumber)
Else : DecToHex = " " & Hex(DecNumber)
End If
End Function
Public Sub GetCharFromAndSendToTextBox()
Dim str_indata As String
Dim byteToRead As Int16
byteToRead = SerialPort.BytesToRead '(读取缓冲区的字节长度)
txtNumOfReceive.Text = (Val(txtNumOfReceive.Text) + byteToRead).ToString
Dim ch(byteToRead) As Byte
Dim bytesRead As Int16 = 0
' str_indata = SerialPort1.ReadExisting()
bytesRead = SerialPort.Read(ch, 0, byteToRead)
If bytesRead > 0 Then
For i As Int16 = 0 To bytesRead - 1
'System.Threading.Thread.Sleep(50) ' 这个很重要!
str_indata = str_indata & DecToHex(ch(i))
Next
End If
With txtDataReceive
.Font = New Font("Garamond", 12.0!, FontStyle.Bold)
.AppendText(str_indata)
.ScrollToCaret()
End With
End Sub
Private Sub btnStartCollectData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartCollectData.Click
If SerialPort.IsOpen = True Then
SendtoSbuf()
Else : MessageBox.Show("请打开串口", "警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
End Sub
Private Sub btnCloseSerialPort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseSerialPort.Click
SerialPort.Close()
picState.BackColor = Color.Red
End Sub
Private Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
txtDataReceive.Invoke(New myDelegate(AddressOf GetCharFromAndSendToTextBox), New Object() {})
End Sub
Private Sub btnCycleCollect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCycleCollect.Click
If SerialPort.IsOpen = True Then
SendtoSbuf()
Timer.Enabled = True
Else : MessageBox.Show("请打开串口", "警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If
End Sub
Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer.Tick
SendtoSbuf()
End Sub
Private Sub btnStopCollect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopCollect.Click
Timer.Enabled = False
End Sub
End Class