COM-Port Senden/Empfangen

PingOfDeath1983

Grünschnabel
Hallo :)

Wie ich Daten über den COM-Port sende weiss ich inzwischen, aber jetzt habe ich ein neues Problem:

Ich möchte an ein über RS232 angeschlossenes Gerät einen Befehl senden "info" --> das Gerät antwortet dadrauf und gibt mir 3 Zeilen Code zurück (im Hyperterminal gesehen).

Wie kann ich es jetz hinbekommen, dass mein Programm dann ausliest wenn ich gerade den Befehl abgesendet habe (ich weiss ja nicht wie schnell das Gerät reagiert....).

Code:
   Sub SendSerialData(ByVal data As String)
        Dim readbuffer As Byte() = {}
        If strComport = "COM ?" Then
            Me.ComboBoxCOM.Enabled = True
        Else
            Using com As IO.Ports.SerialPort = _
                My.Computer.Ports.OpenSerialPort(strComport, 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
                com.Encoding = System.Text.Encoding.ASCII 'GetEncoding(850)
                'portName ,baudRate ,parity ,dataBits ,stopBits
                com.Encoding = System.Text.Encoding.UTF8
                com.WriteLine(data)
            End Using
        End If
    End Sub

    Function ReadSerialData() As String
        ' Receive strings from a serial port.
        Dim returnStr As String = ""
        If strComport = "COM ?" Then
            Me.ComboBoxCOM.Enabled = True
        Else
            Using com1 As IO.Ports.SerialPort = _
                    My.Computer.Ports.OpenSerialPort(strComport, 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
                Do
                    Dim Incoming As String = com1.ReadLine()
                    If Incoming Is Nothing Then
                        Exit Do
                    Else
                        returnStr &= Incoming & vbCrLf
                    End If
                Loop
                com1.Close()
            End Using
        End If
        Return returnStr
    End Function

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        SendSerialData("info")
        MsgBox(ReadSerialData())
    End Sub

Das Programm scheint dann zu hängen, jedenfalls kann man es nicht mehr minimieren, verschieben etc. ....

Jemand einen Lösungsvorschlag?

Gruß, PingOfDeath :confused:
 
ich würde es nicht mit einem Timer machen sondern mit der Sleep api in einer schleife
Visual Basic:
 while not len(readSerialData)
       sleep 200
       doEvents
 wend

Dann ist dein Prozessor nicht so ausgelastet. :D

Grüsse bb
 
Zurück