Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Datenverlust bei ReadFile auf virtuellen COM-Port (https://www.delphipraxis.net/182580-datenverlust-bei-readfile-auf-virtuellen-com-port.html)

BlackGuest 3. Nov 2014 13:14

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Danke für den Link.
Werde ich dann gleich mal anschauen.

Habe inzwischen noch was rausgefunden. ReadFile liest schon alle Daten die ankommen bzw. die im Puffer sind, bevor die Funktion ein Timout auftritt.
Ich habe jetzt einen festen Testdatensatz verwendet. Es fehlen nicht Bytes am Anfang oder am Ende, sondern irgenwo mitten in der Antwortsequenz. Ich vermute fast, dass die CDC Implementation in meinem MC nicht mit der Windows 8 Implementation zusammenpasst und da irgendwo dieses Problem begründet ist.

Gruß
BlackGuest

BlackGuest 3. Nov 2014 17:03

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Danke noch mal für das Beispiel.
Der Code dort entspricht im Prinzip dem aus meinem Startthread.

Ich habe das Ganze ein wenig umgeschrieben, so dass ich in einer Endlosschleife immer die gleiche Sequenz zum MC sende und auch immer den gleichen Datensatz zurück bekommen sollte. Das Problem ist auch hier das Gleiche. Es gehen hin und wieder Datenbyte verloren. Auch unter Windows 7. Das ist nur nicht aufgefallen, da das Problem wesentlich seltener auftritt und ich im Fehlerfall das Kommando ein mal wiederhole. Liegt wohl eher doch an der Rechnergeschwindigkeit.

Gesendet werden 6 Byte und die Antwort sollte 35 Byte lang sein. Auf meinem Windows 7 Rechner fehlt auch ca. alle 2000 Abfragen irgend ein Byte.

Die Fehlerhäufigkeit kann ich dadurch minimieren, in dem ich mit ReadFile nicht den ganzen Block lese, sondern immer nur ein Byte.

Keine Ahnung, was da schief läuft. Ich werde es mal auf Ereignissteuerung umbauen.
So sollte es aber eigentlich auch problemlos funktionieren.??

Wenn jemand noch einen Einfall hat, immer her damit.

Gruß
BlackGuest

Sir Rufo 3. Nov 2014 17:09

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Im Prinzip ist es ja ganz einfach:

Wenn du die empfangenen Daten prüfen kannst (Länge und/oder Prüfziffer) dann sende die Anfrage so lange, bis du eine korrekte Antwort bekommst. Fehler können bei einer Übertragung immer auftauchen, egal über welches Medium auch immer.

hathor 3. Nov 2014 17:32

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Hast Du den Code vom Microcontroller?

Wie lange ist die erzwungene Pause zwischen SENDEN und EMPFANGEN?

BlackGuest 3. Nov 2014 17:53

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Zitat:

Zitat von Sir Rufo (Beitrag 1278565)
Wenn du die empfangenen Daten prüfen kannst (Länge und/oder Prüfziffer) dann sende die Anfrage so lange, bis du eine korrekte Antwort bekommst. Fehler können bei einer Übertragung immer auftauchen, egal über welches Medium auch immer.

Mache ich ja, aber die Häufigkeit des Fehlers ist zu groß. Eine gewissen Timeoutzeit muss ich dem Ganze aber einräumen. Wenn jeder 10. Datensatz falsch ist, dann dauert das Ganze ewig, was nur ein paar sekunden dauert, wenn die Übertragung fehlerfrei abläuft. Es sind auch keine direkten Übertragungsfehler.

Zitat:

Hast Du den Code vom Microcontroller?
Wie lange ist die erzwungene Pause zwischen SENDEN und EMPFANGEN?
Ja, habe ich. Ist allerdings die Standardimplementation, die beim Compiler dabei war. Ich will nicht ausschließen, dass die nicht 100%-ig konform ist und das Problem dadurch auftaucht. Nur bevor ich mich da durchwühle nehme ich Testweise lieber einen anderen Compiler.

Momentan ist keine Pause dazwischen. Also (fast9 direkt nach dem Senden versuche ich mit Readfile Daten zu lesen.

Gruß
BlackGuest

hathor 3. Nov 2014 18:56

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Zitat:

Zitat von BlackGuest (Beitrag 1278582)
Zitat:

Wie lange ist die erzwungene Pause zwischen SENDEN und EMPFANGEN?
Momentan ist keine Pause dazwischen. Also (fast direkt nach dem Senden versuche ich mit Readfile Daten zu lesen.

Gruß
BlackGuest


Mach mal ein SLEEP(50); dazwischen.

BlackGuest 3. Nov 2014 19:12

AW: Datenverlust bei ReadFile auf virtuellen COM-Port
 
Hatte ich auch schon alles versucht. Hat nix gebracht.

Ich glaube ich fresse einen Besen!
Es scheint jetzt zu funktionieren. Egal mit welchem Rechner. Das Problem lag eindeutig am Zusammenspiel der Treiber. Der auf der Mikrocontrollerseite war wahrscheinlich nicht sauber implementiert. Ich habe jetzt eine neuere Version getestet und siehe da es scheint zu gehen.
Da muss man erst mal drauf kommen, wenn es auf dem einen Rechner funktioniert und auf dem anderen nicht. Die Probleme sind hauptsächlich mit PCs aufgetreten, die mit Windows 8 liefen. Liegt aber wahrscheinlicher an der eingebauten USB-Hardware.

OK, falls jemand ähnliche Probleme hat, ich verwende den CCS Compiler. V4.124 verursacht die beschriebenen Probleme. Mit V4.137 funktioniert alles.

Danke für Eure Geduld und Hilfe.

Gruß
BlackGuest


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz