Создание последовательного порта в коде в VB.net
-
11-07-2019 - |
Вопрос
Я пытаюсь создать последовательный порт в 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.
Я нашел отличную статью, в которой объясняется, как создать класс менеджера для последовательного порта.Здесь также обсуждается отправка двоичных и шестнадцатеричных данных в последовательный порт.Это было весьма полезно.
Я использовал класс SerialPort .Net в прошлом проекте, и все работало нормально.Вам действительно больше ничего не нужно.Проверьте настройки оборудования на панели управления и убедитесь, что вы создали экземпляр класса с теми же параметрами.