Forum: PC-Programmierung VBA MSCOMM32 RS232


von guy (Gast)


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

von Peter II (Gast)


Lesenswert?

Du musst so oft Port.Input aufrufen, bis du alle Daten die du erwartest 
empfangen hast. Woher soll das System denn sonst wissen auf was du 
wartest?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Im normal wird die Ausgabe des Messgerätes bis zum vbcrlf laufen.
Solange mußte du halt einlesen bevor du es weiterverarbeitest.

von fredylich (Gast)


Lesenswert?

Hallo guy,

dein Ansatz ist falsch. Ohne Schleife ist Verhalte okay.
Com- Port ohne ISR, muss Abfrage rolliehrend sein. Dies sehe ich aber 
nicht im Code.

Gruß

von Guy (Gast)


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?

von Sascha W. (sascha-w)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.