Erstellen eine serielle Schnittstelle im Code in VB.net
-
11-07-2019 - |
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.
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.
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.