Domanda

Sto cercando di creare una porta seriale in VB.net usando solo il codice. Poiché sto creando una libreria di classi, non riesco a utilizzare il componente integrato. Ho provato a creare un'istanza di un nuovo oggetto SeialPort (), ma non sembra essere abbastanza. Sono sicuro che mi manca qualcosa di semplice e qualsiasi aiuto sarebbe molto apprezzato! Grazie!

P.S. Dovrei aggiungere che il problema che sto riscontrando in questo momento è ottenere il codice per gestire l'evento datareceived. A parte questo potrebbe funzionare, ma non posso dirlo a causa di quel problema.

È stato utile?

Soluzione

Se vuoi usare gli eventi assicurati di dichiarare il tuo oggetto serialPort usando 'withevents'. L'esempio seguente ti consentirà di collegarti a una porta seriale e genererà un evento con la stringa ricevuta.

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

Altri suggerimenti

Ho trovato questo articolo è abbastanza buono.

Il codice che ho scritto è:

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
}

Mi dispiace è C # ma ...

L'unico problema che ho è se la porta viene rilasciata mentre è aperta, l'app sembra non riuscire all'uscita.

Grazie a tutti per il vostro aiuto, in particolare la risposta sull'istanza di una classe utilizzando la parola chiave WithEvents.

Ho trovato un articolo davvero eccezionale che spiega come creare una classe manager per la porta seriale. Discute anche l'invio di dati binari e esadecimali alla porta seriale. È stato abbastanza utile.

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

Ho usato la classe .Net SerialPort in un progetto passato e ho lavorato bene. Non hai davvero bisogno di nient'altro. Controlla le impostazioni hardware nel pannello di controllo e assicurati di creare un'istanza della classe con gli stessi parametri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top