Frage

Ich versuche, eine serielle Schnittstelle in VB.net nur unter Verwendung von Code zu erstellen. Weil ich eine Klassenbibliothek erschaffe kann ich die integrierte Komponente verwenden. Ich habe versucht, einen neuen SeialPort () Objekt zu erhalten, aber das scheint nicht genug zu sein. Ich bin sicher, es ist etwas einfach ich fehle und jede Hilfe wäre sehr dankbar! Vielen Dank!

P. S. Ich sollte hinzufügen, dass das Problem, das ich zu diesem Zeitpunkt habe den Code wird immer das DataReceived Ereignis zu behandeln. Abgesehen davon, es könnte funktionieren, aber ich wegen dieses Problems nicht sagen.

War es hilfreich?

Lösung

Wenn Sie die Ereignisse verwenden, stellen Sie sicher, Ihr Serieller_Anschluss Objekt erklären mit den ‚Withevent‘. Das folgende Beispiel ermöglicht es Ihnen, mit einer seriellen Schnittstelle zu verbinden, und ein Ereignis mit der empfangenen Zeichenfolge erhöhen.

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

Andere Tipps

Ich fand dieser Artikel als recht gut.

Der Code i von ihm geschrieben ist:

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
}

Leider ist es C #, aber ...

Das einzige Problem habe ich mit ihm ist, wenn der Port fallen gelassen wird, während es geöffnet ist, die App scheint bei der Ausfahrt zum Scheitern verurteilt.

Vielen Dank für Ihre Hilfe, vor allem die Antwort über eine Klasse instanziieren das Withevents Schlüsselwort.

fand ich einen wirklich großen Artikel, der erklärt, wie ein Manager-Klasse für die serielle Schnittstelle erstellen. Es behandelt auch Binary sowie Hex-Daten an die serielle Schnittstelle gesendet werden. Es war sehr hilfreich.

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

Ich habe die Serialport -Klasse in einem früheren Projekt verwendet und ich funktionierte gut. Sie wirklich nichts anderes brauchen. Überprüfen Sie die Hardware-Einstellung in der Systemsteuerung und stellen Sie sicher, dass Sie die Klasse mit den gleichen Parametern instanziiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top