Создание последовательного порта в коде в VB.net

StackOverflow https://stackoverflow.com/questions/329865

Вопрос

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

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

Это было полезно?

Решение

Если вы хотите использовать события, обязательно объявите свой объект серийного порта, используя «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

Другие советы

я нашел Эта статья быть вполне хорошим.

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

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#, но...

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top