VBA MSCOMM32 RS232

Gast #4625837
Lesenswert?

Hallo,

ich habe folgenden Code in vba6 (excel). Ich will ein Multimeter über 
rs232c ansprechen. Dazu habe ich in vba das folgende kleine Programm:
1
Sub CommandButton3_Click()
2

3
//deklaration Kommunikation Fluke Multimeter
4
    Dim var_string As String
5
    Dim Port As New MSComm
6

7
    With Port
8
        .CommPort = 1 'Com-Port Nummer
9
        .Settings = "9600,N,8,1" 'Baudrate,Parity(N entspricht none),Datenbits,Stobbits)
10
        .PortOpen = True 
11
        .Handshaking = comRTS
12
    End With
13
      
14
    Port.Output = "*IDN?" + Chr$(10) //sendet Befehl an Multimeter sich zu identifizieren.
15
         
16
     MsgBox "a"//Ausgabe von a
17
    
18
    var_string = Port.Input//fragt den eingang ab
19
    MsgBox "Antwort Com-Port: " & var_string, vbOKOnly, "Antwort"//Ausgabe der erhaltenen Zeichenkette vom rs232 Port
20
End Sub

Das obige Programm gibt dann erst "a" aus und dann die Antwort vom 
Multimeter(Seriennummer).

Das Problem ist, wenn ich die MsgBox "a" weglasse, enthält die zweite 
MsgBox nicht mehr die Seriennummer des Multimeters...sondern gar nichts, 
wenn man das Programm nochmal ausführt.

Meine Vermutung ist, dass die Abfrage des var_string = Port.Input zu 
schnell kommt und das Multimeter noch gar nicht zurückgesendet hat...

Wie kann ich das beheben? Es gibt noch die Methode Port.commevent, aber 
die Attribute haben meiner Meinung nach nichts, was mir helfen würde. 
Ich bräuchte ein Flag, dass sagt, wann die Daten vollständig empfangen 
wurden. Gibt es so etwas, oder hat jemand eine andere Idee?

Gruß guy
Gast #4626183
Lesenswert?

Ich weiß nie wie lang die Strings sind die empfangen werden...aber das 
Frame wird immer mit Char(10) also einem line feed beendet.

Gibt es nicht die Möglichkeit solange einzulesen bis das Line feed 
Zeichen kommt?
#4626292
Lesenswert?

Guy schrieb:
> Ich weiß nie wie lang die Strings sind die empfangen werden...aber das
> Frame wird immer mit Char(10) also einem line feed beendet.
>
> Gibt es nicht die Möglichkeit solange einzulesen bis das Line feed
> Zeichen kommt?

Ja mit einer Schleife, lies solange ein und verbinde den Input mit dem 
bis dahin gelesenen bis das letzte Zeichen im String (erstes von Rechts) 
gleich chr(10) ist.

Sascha

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren