登录
首页 电脑编程
回帖 发帖
正文

主题:VB2005串口通信问题

点击:719 回复:1

Imports System.IO.Ports         '使用SerialPort所引用的命名空间
Public Class Form1
   Dim fx() As Byte       ' 待发送数据数组
   Dim Rc() As Byte       ' 接收数据数组
   '  数据定时接收与显示
   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       Dim StrRc As String
       Dim i As Integer
       Dim n As Integer
       n = SerialPort1.BytesToRead   '  读缓冲区数据量,有数据则接收
       If n > 0 Then
           ReDim Rc(n)
           StrRc = ""
           For i = 1 To n
               Rc(i) = SerialPort1.ReadByte
               StrRc = CStr(Hex(Rc(i))) & ""
           Next
           TextBox2.Text = StrRc
       End If
   End Sub
   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       ComboBox1.Items.Clear() '(清空列表)
       ComboBox2.Items.Clear()
       For Each portname As String In My.Computer.Ports.SerialPortNames
           ComboBox1.Items.Add(portname)          ' 显示所有串口
           Try
               SerialPort1.PortName = portname
               SerialPort1.Open()
               ComboBox2.Items.Add(portname)      ' 显示可用串口
               SerialPort1.Close()
           Catch ex As Exception
               MsgBox("可用串口检查 " & portname)
           End Try
       Next
       If ComboBox1.Items.Count > 0 Then ComboBox1.SelectedIndex = 0
       If ComboBox2.Items.Count > 0 Then
           ComboBox2.SelectedIndex = 0
           Button2.Enabled = True        ' 有可用串口,可以打开操作
       End If
   End Sub
   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       If Button2.Text = "打开串口" Then
           SerialPort1.PortName = ComboBox2.Text
           If Not SerialPort1.IsOpen Then
               SerialPort1.Open()
               Button2.Text = "关闭串口"
               Button3.Enabled = True      '串口打开,可以发送数据
           End If
       Else
           If SerialPort1.IsOpen Then SerialPort1.Close()
           Button2.Text = " 打开串口"
           Button3.Enabled = False
       End If
   End Sub
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       If Button1.Text = "打开串口" Then
           SerialPort1.PortName = "COM1"
           SerialPort1.Open() '(串口打开与关闭)
           Button1.Text = "关闭串口"
           Button2.Enabled = True
           Timer1.Enabled = True
       Else
           If SerialPort1.IsOpen Then SerialPort1.Close()
           Button1.Text = "打开串口"
           Timer1.Enabled = False
           Button2.Enabled = False
       End If
   End Sub
   ' 待发送数据处理与发送
   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim i As Integer
       Dim n As Integer
       Dim Cmd As String = TextBox1.Text
       n = Len(Cmd) \ 2
       ReDim fx(n)
       For i = 1 To n
           fx(i) = CByte("&H" & Mid(Cmd, 2 * i - 1, 2))
       Next
       SerialPort1.Write(fx, 1, n)    ' 发送数组fx第1到n数据
   End Sub
   
 
End Class
以上代码在调试的时候出错,提示端口被占用。 好像是这一句出错   n = SerialPort1.BytesToRead  
我刚学VB2005 大家帮我分析下原因吧
13-09-26 17:35
程序出错最后没有释放串口,建议用异常捕获语句最后释放串口
try
catch
finally
在finally段释放
13-09-26 23:21

工控新闻

更多新闻资讯