tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
6302
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    PingOfDeath1983 PingOfDeath1983 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    16
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    
       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
     

  2. #2
    Avatar von Alex F.
    Alex F. Alex F. ist offline Mitglied Smaragd
    Registriert seit
    Jul 2004
    Beiträge
    1.034
    ich würde es nicht mit einem Timer machen sondern mit der Sleep api in einer schleife
    Code vb:
    1
    2
    3
    4
    
     while not len(readSerialData)
           sleep 200
           doEvents
     wend

    Dann ist dein Prozessor nicht so ausgelastet.

    Grüsse bb
     

Ähnliche Themen

  1. Daten korrekt von COM-Port empfangen?
    Von Jonas007 im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 21.12.06, 18:01
  2. Daten Senden & Empfangen über RS-232
    Von Paella im Forum Delphi, Kylix, Pascal
    Antworten: 3
    Letzter Beitrag: 06.08.06, 19:58
  3. comm port problem beim empfangen
    Von Serethos im Forum Java
    Antworten: 1
    Letzter Beitrag: 17.02.05, 08:18
  4. Senden und empfangen von nachrichten via Winsock
    Von MasterSHYBBY im Forum Visual Basic 6.0
    Antworten: 18
    Letzter Beitrag: 15.01.04, 18:26
  5. Antworten: 8
    Letzter Beitrag: 23.10.03, 13:14