Создание последовательного порта в коде в VB.net - PullRequest
6 голосов
/ 01 декабря 2008

Я пытаюсь создать последовательный порт в VB.net, используя только код. Поскольку я создаю библиотеку классов, я не могу использовать встроенный компонент. Я попытался создать экземпляр нового объекта SeialPort (), но этого недостаточно. Я уверен, что есть что-то простое, что мне не хватает, и любая помощь будет принята с благодарностью! Спасибо!

P.S. Я должен добавить, что проблема, с которой я сталкиваюсь сейчас, заключается в получении кода для обработки события, полученного от данных. Кроме того, это может работать, но я не могу сказать из-за этой проблемы.

Ответы [ 4 ]

7 голосов
/ 01 декабря 2008

Если вы хотите использовать события, убедитесь, что вы объявили свой объект serialPort, используя 'withevents'. Приведенный ниже пример позволит вам подключиться к последовательному порту и вызовет событие с полученной строкой.

Imports System.Threading

Imports System.IO

Imports System.Text

Imports System.IO.Ports


Public Class clsBarcodeScanner

Public Event ScanDataRecieved(ByVal data As String)
WithEvents comPort As SerialPort

Public Sub Connect()
    Try
        comPort = My.Computer.Ports.OpenSerialPort("COM5", 9600)
    Catch
    End Try
End Sub

Public Sub Disconnect()

    If comPort IsNot Nothing AndAlso comPort.IsOpen Then
        comPort.Close()
    End If

End Sub

Private Sub comPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comPort.DataReceived
    Dim str As String = ""
    If e.EventType = SerialData.Chars Then
        Do
            Dim bytecount As Integer = comPort.BytesToRead

            If bytecount = 0 Then
                Exit Do
            End If
            Dim byteBuffer(bytecount) As Byte


            comPort.Read(byteBuffer, 0, bytecount)
            str = str & System.Text.Encoding.ASCII.GetString(byteBuffer, 0, 1)

        Loop
    End If

    RaiseEvent ScanDataRecieved(str)

End Sub
End Class
2 голосов
/ 01 декабря 2008

Я нашел эту статью довольно хорошей.

Код, который я написал от него:

port = new System.IO.Ports.SerialPort(name, 4800, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();

void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    buffer = port.ReadLine();
    // process line
}

Извините, это C #, но ...

Единственная проблема, с которой я столкнулся, это то, что если порт не работает, когда он открыт, приложение завершает работу при выходе.

1 голос
/ 03 декабря 2008

Спасибо всем за помощь, особенно за ответ на создание экземпляра класса с помощью ключевого слова WithEvents.

Я нашел действительно отличную статью, в которой объясняется, как создать класс диспетчера для последовательного порта. Также обсуждается отправка двоичных и шестнадцатеричных данных на последовательный порт. Это было очень полезно.

http://www.dreamincode.net/forums/showtopic37361.htm

0 голосов
/ 01 декабря 2008

Я использовал класс SerialPort .Net в прошлом проекте и работал нормально. Тебе действительно больше ничего не нужно. Проверьте настройки оборудования на панели управления и убедитесь, что вы создали экземпляр класса с такими же параметрами.

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