Hallo,
Ich habe ein Programm zum Auslesen eines ComPorts, das ich auch schon durch eure Hilfe zusammengebastelt habe. Es funktioniert nun endlich seit einiger Zeit ohne Fehler. Würdet ihr trotzdem noch einmal drüberschauen und mir sagen was man verbessern kann? Es soll minimalistisch sein.
Der konkrete Anwendungsfall: Ein Scanner simuliert über USB einen Com-Port. Dieses Gerät wird ausgelesen. Eigentlich macht es nur Piep und der gelesene Barcode erscheint. Man sieht den Port-Status, kann ihn ändern und das Programm macht darauf aufmerksam, dass es mit geschlossenem ComPort nichts wird.
Der Code:
Spoiler anzeigen
Ich habe die Controls so umbenannt, dass es sofort funktionieren würde, wenn ihr ein Form mit 2
Die Spezifikationen wie BaudRate usw. habe ich dem Gerät entnommen. Was das genau ist weiß ich gar nicht ...
Viele Grüße
Ich habe ein Programm zum Auslesen eines ComPorts, das ich auch schon durch eure Hilfe zusammengebastelt habe. Es funktioniert nun endlich seit einiger Zeit ohne Fehler. Würdet ihr trotzdem noch einmal drüberschauen und mir sagen was man verbessern kann? Es soll minimalistisch sein.
Der konkrete Anwendungsfall: Ein Scanner simuliert über USB einen Com-Port. Dieses Gerät wird ausgelesen. Eigentlich macht es nur Piep und der gelesene Barcode erscheint. Man sieht den Port-Status, kann ihn ändern und das Programm macht darauf aufmerksam, dass es mit geschlossenem ComPort nichts wird.
Der Code:
VB.NET-Quellcode
- Private pPortname = "COM3"
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
- Timer1.Interval = 10000
- If Not SerialPort1.IsOpen Then
- Button1.Enabled = False
- SerialPort1.PortName = pPortname
- SerialPort1.BaudRate = 115200
- SerialPort1.DataBits = 8
- SerialPort1.Parity = IO.Ports.Parity.None
- SerialPort1.StopBits = IO.Ports.StopBits.One
- SerialPort1.DtrEnable = True
- SerialPort1.RtsEnable = True
- SerialPort1.Handshake = IO.Ports.Handshake.None
- SerialPort1.Open()
- End If
- If SerialPort1.IsOpen Then
- Button1.BackColor = Color.FromArgb(0, 200, 0)
- If Timer1.Enabled Then Timer1.Stop()
- Else
- Timer1.Start
- Button1.Enabled = True
- End If
- End Sub
- Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles Button1.Click
- If Not SerialPort1.IsOpen Then
- Button1.Enabled = False
- SerialPort1.PortName = pPortname
- SerialPort1.BaudRate = 115200
- SerialPort1.DataBits = 8
- SerialPort1.Parity = IO.Ports.Parity.None
- SerialPort1.StopBits = IO.Ports.StopBits.One
- SerialPort1.DtrEnable = True
- SerialPort1.RtsEnable = True
- SerialPort1.Handshake = IO.Ports.Handshake.None
- SerialPort1.Open()
- End If
- If SerialPort1.IsOpen Then
- Button1.BackColor = Color.FromArgb(0, 200, 0)
- If Timer1.Enabled Then Timer1.Stop()
- End If
- Button2.Enabled = True
- End Sub
- Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles Button2.Click
- If SerialPort1.IsOpen Then
- SerialPort1.Close()
- Button1.BackColor = Color.FromArgb(180, 191, 185)
- Button1.Enabled = True
- Button2.Enabled = False
- Timer1.Start()
- End If
- End Sub
- Private Sub timePortClosed_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
- Timer1.Stop()
- MessageBox.Show("Die Verbindung zum Port wurde getrennt!" & vbLf & "Sie können entweder das Programm neustarten oder Sie öffnen die Verbindung mit dem Öffnen-Knopf (Er wird dann grün)", "Nutzung Scanner", MessageBoxButtons.OK)
- Timer1.Start()
- End Sub
- Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
- If Timer1.Enabled Then Timer1.Stop()
- If SerialPort1.IsOpen Then SerialPort1.Close()
- End Sub
- Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- If SerialPort1.IsOpen Then
- Dim prüf As Integer
- System.Threading.Thread.Sleep(100)
- Me.Invoke(Sub() prüf = SerialPort1.BytesToRead)
- Dim COMBuffer() As Byte = New Byte(prüf - 1) {}
- Try
- SerialPort1.Read(COMBuffer, 0, prüf)
- Me.BeginInvoke(Sub() Read_Message(COMBuffer))
- System.Threading.Thread.Sleep(100)
- Catch ex As InvalidOperationException
- MessageBox.Show("2 " & ex.ToString)
- End Try
- End If
- End Sub
- Private Sub Read_Message(COMB As Byte())
- System.Threading.Thread.Sleep(0)
- Dim enc As New System.Text.ASCIIEncoding()
- Dim strbarcode As String = enc.GetString(COMB)
- While SerialPort1.IsOpen
- SerialPort1.Close()
- Button1.BackColor = Color.FromArgb(180, 191, 185)
- Button1.Enabled = True
- Button2.Enabled = False
- End While
- TextBox1.Text = strbarcode ''oder was man dann so macht mit dem Input
- While Not SerialPort1.IsOpen
- SerialPort1.Open()
- Button1.BackColor = Color.FromArgb(0, 200, 0)
- Button1.Enabled = False
- Button2.Enabled = True
- End While
- End Sub
Ich habe die Controls so umbenannt, dass es sofort funktionieren würde, wenn ihr ein Form mit 2
Buttons
, 1 TextBox
, 1 Timer
, und einem SerialPort
habt, falls ihr selbst einen Scanner hättet.Die Spezifikationen wie BaudRate usw. habe ich dem Gerät entnommen. Was das genau ist weiß ich gar nicht ...
Viele Grüße
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()