Forum: PC-Programmierung VisulaC++ und serielle RS 232, Timingproblem


von Karlheinz Druschel (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leuts,

ich habe da ein ziemliches Problem.
Ich arbeite mit VisualStudi 2003 und C++. Ich habe nun zwei
intelligente Messgeräte, die mittels Infrarot kommunizieren. Eines
davon ist stationär und mit RS232 mit einem PC verbunden, das andere
fährt an diesem stationären Teil vorbei. Wenn die Verbindung zwischen
den beiden aufgebaut ist, dann übergibt der mobile Teil Messdaten an
die Station, von wo aus diese mit einem PC abgerufen werden können.
Zwischen PC und Messgerät findet die Kommunikation mittels
ASCII-Protokoll statt, die Übertragungsrate zwischen PC und Station ist
38400.
Mit Hyperterminal klappt das alles wunderbar, mit dem C-Programm nicht
so ganz.

Ich arbeite mit Events, was generell auch funktioniert. Aber wenn ich
das Programm laufen lasse, dann empfange ich nur Bruchstücke der
eigentlichen Kommunikation. Wenn ich jedoch im VisualStudio einen
Breakpoint setze BEVOR ich den Buffer auslese (also in der Zeile
"m_SerialPort.Read(szData, nBuflen, &dwRead);"), dann ist die
komplette Kommunikation einwandfrei da. Kann das irgendein
Timingproblem sein ?


Greets
Karlheinz

von Wolfram (Gast)


Lesenswert?

Wie gross ist dein Puffer für die Serielle Schnittstelle?
poste mal die Initialisierung der Schnittstelle.
Rechnest du damit das es Übertragungsfehler geben kann?

BTW: Bei der Seriellen Schnittstelle sind maximal 2% Unterschied in der
Baudrate für fehlerfreie Übertragung erlaubt. Durch das Rollen deines
Wagens verschiebt sich aufgrund des Dopplereffektes die
Baudrate(frequenz). Da es sowohl draufzu als auch wegrollt, hast du
eine Verschiebung ins positive wie ins negative also nur noch 1%. Hast
du mal ausgerechnet was die maximale Geschwindigkeit deines Wagens sein
darf? ;-)

von Karlheinz Druschel (Gast)


Lesenswert?

Hi,
der Puffer ist 255 Bytes gross, die Initialisierung kann ich jetztnicht
posten, da ich zuhause bin und die Software im Büro ist. An der
Geschwindigeit meines Mobilteiles kann es nicht liegen, denn dies
kommuniziert ja mit der intelligenten Feststation, nicht mit dem PC.
Dann würde auch Hyperterminal nicht funzen....

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Setz mal den windows-internen Buffer höher. Ich benutz bei mir z.B 4k

von Karlheinz Druschel (Gast)


Lesenswert?

und wie mache ich das ?

von Wolfram (Gast)


Lesenswert?

SetupComm , das war die Puffergröße nach der ich fragte.
Da gibt es noch einiges anderes zum Einstellen, z.B. Timeouts,
Flusskontrolle, Verhalten bei Fehlübertragung etc.
Es wäre besser wenn du dir mal den entsprchenden Abschnitt in der MSDN
durchliest.

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.