Pregunta

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

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

¿Fue útil?

Solución

Si desea utilizar los eventos, asegúrese de declarar su objeto serialPort usando 'withevents'. El siguiente ejemplo le permitirá conectarse a un puerto 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

Otros consejos

Encontré este artículo es bastante bueno.

El código que escribí 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
}

Lo siento, es C # pero ...

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

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

Encontré un artículo realmente genial 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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top