2008-12-01 78 views
6

Estoy tratando de crear un puerto serie en VB.net utilizando solo código. Como estoy creando una biblioteca de clases, no puedo usar el componente integrado. He intentado crear una instancia de un nuevo objeto SeialPort(), pero eso no parece ser suficiente. ¡Estoy seguro de que me falta algo simple y cualquier ayuda sería muy apreciada! ¡Gracias!Creación de un puerto serie en el código en VB.net

P.S. Debo añadir que el problema que estoy teniendo en este momento es obtener el código para manejar el evento de datos recibidos. Aparte de eso, podría estar funcionando, pero no puedo decirlo debido a ese problema.

Respuesta

7

Si desea utilizar los eventos, asegúrese de declarar su objeto serialPort utilizando 'withevents'. El siguiente ejemplo le permitirá conectarse a un puerto en serie y generará un evento con la cadena recibida.

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

He utilizado la clase SerialPort .Net en un proyecto anterior y he trabajado bien. Realmente no necesitas nada más. Compruebe la configuración del hardware en el panel de control y asegúrese de crear una instancia de la clase con los mismos parámetros.

2

Encontré this article para ser bastante bueno.

El código que he escrito de él es:

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 
} 

sentimos que es C#, pero ...

El único problema que tengo con él es si el puerto se cae mientras está abierto, la aplicación parece fallar en la salida

1

Gracias a todos por su ayuda, especialmente por la respuesta a la instanciación de una clase utilizando la palabra clave WithEvents.

Encontré un excelente artículo que explica cómo crear una clase de administrador para el puerto serie. También analiza el envío de datos binarios y hexadecimales al puerto serie. Fue bastante útil.

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