2008-12-01 3 views
6

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

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

ответ

7

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

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

2

Я нашел this article, чтобы быть неплохим.

Код я написал из него:

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

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

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

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