Почему этот код не может открыть последовательный порт? - PullRequest
0 голосов
/ 01 сентября 2010
Public Class my_class

Dim WithEvents COMPort As New System.IO.Ports.SerialPort

Public Sub FindReader()

    Dim ports As String() = IO.Ports.SerialPort.GetPortNames()
    Dim port As String
    For Each port In ports
        MsgBox(port, MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation, "Serial port detecetd")
    Next port


  If COMPort.IsOpen Then
     COMPort.RtsEnable = False
     COMPort.DtrEnable = False
     COMPort.Close()
     System.Threading.Thread.Sleep(200)
  End If

    COMPort.PortName = "COM1"
    COMPort.BaudRate = 9600
    COMPort.DataBits = 8
    COMPort.Parity = IO.Ports.Parity.None
    COMPort.StopBits = IO.Ports.StopBits.One
    COMPort.Handshake = IO.Ports.Handshake.RequestToSend
    COMPort.ReadTimeout = 2000 
    COMPort.WriteTimeout = -1
    COMPort.NewLine = Chr(13)
    COMPort.ReadBufferSize = 12
    COMPort.ReceivedBytesThreshold = COMPort.ReadBufferSize

  Try
     COMPort.Open()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

  If COMPort.IsOpen Then
     COMPort.RtsEnable = True
     COMPort.DtrEnable = True

     'Kick start the serial port so it starts reading data.
     COMPort.BreakState = True
     System.Threading.Thread.Sleep(CInt(11000 / COMPort.BaudRate) + 2)   ' Min. 11 bit delay (startbit, 8 data bits, parity bit, stopbit
     COMPort.BreakState = False

     MsgBox(COMPort.PortName & " opened at " & COMPort.BaudRate.ToString & " baud", MsgBoxStyle.OkOnly Or MsgBoxStyle.Exclamation, "FindReader()")

  End If
 End Sub

При запуске отображается один COM-порт «COM1».Я уверен, что подключенное к нему устройство имеет стандартные 8, n, 1 и использует 9600 бод.

Исключение составляет «Доступ к порту COM1 запрещен».Есть идеи?

1 Ответ

2 голосов
/ 01 сентября 2010

Доступ запрещен, это может означать, что оно уже было открыто другим приложением.

Можете ли вы открыть порт с помощью другого, хорошо известного приложения, например, Hyperterminal ?

[Потому что если нет, то проблема не в вашем коде.]

В качестве альтернативы, я думаю, что Portmon можно использовать для определения того, какой другой процесс (если есть) уже открыл порт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...