Option Explicit On
Option Strict Off
Imports System.IO.Ports
Public Class Form1
Dim Wert(0 To 45) As Byte
Dim zahler As Integer
Dim PufferString As String
Dim Startflag As Boolean
Private Delegate Sub DelegateSub()
Private Datenanzeigen As New DelegateSub(AddressOf Anzeigen)
Sub Form1Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Startflag = False
Dim EinzelPort As String
For Each EinzelPort In My.Computer.Ports.SerialPortNames
ComboBox1.Items.Add(EinzelPort)
Next EinzelPort
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) _
Handles Me.FormClosing
If SerialPort1.IsOpen Then SerialPort1.Close() ' Port wieder Schließen
End Sub
Private Sub verbinden_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles verbinden.Click
With SerialPort1
If Not .IsOpen Then
Try
.PortName = ComboBox1.Text
.BaudRate = 38400
.DataBits = 8
.Parity = Parity.None
.StopBits = StopBits.One
.WriteTimeout = 1000 ' 1000 ms = 1 Sek.
.ReadTimeout = 1000 ' 1000 ms = 1 Sek.
.Open()
verbinden.BackColor = Color.Green
verbinden.Text = "Verbunden"
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Open", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
End If
End With
End Sub
Sub Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Start.Click
If Startflag = False Then
Start.BackColor = Color.Red
Start.Text = "Stopp"
Timer1.Start()
Startflag = True
Else
Start.BackColor = Color.Green
Start.Text = "Starten"
Timer1.Stop()
Startflag = False
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Timer1.Tick
With SerialPort1
Try
Dim ByteArray() As Byte = {&HFF, &H20, &H1, &HFE, &H0, &H2, _
&H66, &H42, &H10, &HB9}
.BaseStream.Write(ByteArray, 0, ByteArray.Length) '
' Einzelbytes senden
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Senden ...")
Exit Sub
End Try
End With
End Sub
Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles _
SerialPort1.DataReceived
Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding()
With SerialPort1
Try
For I As Integer = 1 To .BytesToRead ' Alle Bytes einzeln
' lesen
Dim ByteArray() As Byte = {.BaseStream.ReadByte} ' 1 Byte
' lesen
Wert(I) = CInt(ByteArray(0)) ' Array in String
Next
Me.Invoke(Datenanzeigen) ' Delegaten aufrufen
Catch ex As Exception
MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
End Try
End With
End Sub
Sub Anzeigen()
Label8.Text = Wert(8)
Label9.Text = Wert(9)
Label10.Text = (Wert(10) * 255) + Wert(11)
Label11.Text = Wert(12)
Label24.Text = Wert(17)
Label25.Text = (Wert(18) * 255) + Wert(19)
Label26.Text = Wert(20)
Label27.Text = Wert(21)
Label28.Text = Wert(22)
.
.
usw.
End Sub
End Classhabt Ihr Ideen für die Sub SerialPort1_DataReceived und Sub Anzeige? Würde auch gerne eine übertragungsfehler abfrage mit reinmachen.
gruß
Matthias |