LabVIEWForum.de - TCP Verbindung, Datenverlust bei hoher Rechnerauslastung

LabVIEWForum.de

Normale Version: TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich hab ein mittelschweres Problem mit den TCP VIs:


Ich empfange Daten über eine TCP/IP Verbindung:

[attachment=5665]


Dieses SubVI rufe ich in einer Endlosschleife auf, die die empfangenen Daten in einem Queue ablegt, aus dem sie von einer anderen Schleife kontinuierlich ausgelesen werden.
Mein Problem ist jetzt, dass mir bei hoher Prozessorauslastung (z.B. durch aufwendige Berechnungen im Programm) in dieser Zeit Daten "durch die Lappen gehen".
Wenn ich zur Simulation einer hohen Rechnerauslastung z.B. während der Ausführung das Frontpanel des Haupt-VIs mit dem Mausrad häufig nach oben und unten bewege (was das ganze VI ziemlich lahm legt), gehen meine empfangenen Daten für diesen Zeitraum quasi auf 0 zurück.

Woran kann das liegen und was kann ich dagegen tun? Eine etwas ruckelige Anzeige bei hoher Auslastung macht nix - aber der Datenverlust geht gar nich! Ist da ein Buffer zu klein? Ich kann den Server auch nicht auffordern, Daten erneut zu senden, da ich auf diesen keinen Einfluss habe...



Vielen Dank schonmal im Voraus für AntwortenWink


Viele Grüße

Robert
' schrieb:Dieses SubVI rufe ich in einer Endlosschleife auf, die die empfangenen Daten in einem Queue ablegt, aus dem sie von einer anderen Schleife kontinuierlich ausgelesen werden.
Hast Du in der Endlosschleife mal ne 1ms-Verzögerung ausprobiert? Sonst macht LV nämlich gerne mal 100% Systemlast!

Gruß, Rob
' schrieb:Hast Du in der Endlosschleife mal ne 1ms-Verzögerung ausprobiert? Sonst macht LV nämlich gerne mal 100% Systemlast!

Gruß, Rob


Braucht man nicht, die Schleife wird durch das TCP-Read abgebremst.

Ich würde mal einen grösseren Timeoutwert und Bytecount empfehlen. Auf die CPU Auslastung bei anderen Task-VIs achten. Insgesamt ist bei einem guten LV-Prog die CPU-Auslastung bei 2 bis 5 %. Auch wenn du das Fenster schnell bewegst, steigt sie bis 80%, da hast du immer noch genug CPU zum TCP-Lesen.

Gruss, Eugen

EDIT habe gerade ein Testprogrammchen geschrieben. Probiere es mal aus. Du kannst das Fenster bewegen wie du willst, es gibt keinen Datenverlust. Ach ja, du kannst die 100 ms Wartezeit auch weglassen um höhere Geschwindigkeiten zu ausprobieren.

EDIT EDIT EDIT
habe gerade festzgestellt, dass ich da falschen Timeout beim Lesen eingestallt hatte. Hier neue Screenshot und VI.
Vielen Dank für die Antworten... ich werd mal schauen, ob ich da noch was tunen kann. Ich benutz schon extra recht große Byteanzahl-Werte, um möglichst alle gerade verfügbaren Daten mit einem Schleifendurchlauf einzulesen...

Eine Prozessorauslastung von 2-5% wäre traumhaft für mich! Leider nicht machbar. Mein Programm muss live die Daten von mehreren CAN- und einem Flexray Bus aufzeichnen, grafisch darstellen und teilauswerten... ich bin froh, wenn mir 20% nach oben frei bleibenWink

Zum TCP: Kann es grundsätzlich sein, dass da Daten verloren gehen (Buffer Overflow oder ähnliches)? Wenn nicht, dann müsste ich den Fehler ja an einer anderen Stelle suchen.
' schrieb:Eine Prozessorauslastung von 2-5% wäre traumhaft für mich! Leider nicht machbar. Mein Programm muss live die Daten von mehreren CAN- und einem Flexray Bus aufzeichnen, grafisch darstellen und teilauswerten... ich bin froh, wenn mir 20% nach oben frei bleibenWink


Achte auf die grafische Darstellung deiner Daten, die verbraucht am meisten CPU. Wichtig: du musst nicht mit jedem Datensatz deine Grafiken updaten!
10 Hz würden für die Darstellung ausreichen.

Gruss, Eugen
' schrieb:Zum TCP: Kann es grundsätzlich sein, dass da Daten verloren gehen (Buffer Overflow oder ähnliches)? Wenn nicht, dann müsste ich den Fehler ja an einer anderen Stelle suchen.

Kann ich nicht genau sagen. Man muss ja dein Programm kennen. Aber zum Datenverlust kann es bei jeder Schnittstelle kommen. TCP ist eigentlich eine klevere Sache, es ist verbindungsorientiert. Such nach deinem Fehler weiter. Viel Glück.

Eugen
OK, vielen Dank für die Hilfe. Ich werd mal schauen, was ich noch machen kann. Wird schon irgendwie gehen (muss jaWink).

Ein schönes Wochenende wünsch ich! Smile
' schrieb:Kann ich nicht genau sagen. Man muss ja dein Programm kennen. Aber zum Datenverlust kann es bei jeder Schnittstelle kommen. TCP ist eigentlich eine klevere Sache, es ist verbindungsorientiert. Such nach deinem Fehler weiter. Viel Glück.

Eugen

Vielleicht macht das Betriebsysteme da ja auch Probleme bei TCP?
Weiss leider nicht wie man bei Windows die Buffergröße des TCP-Stacks vergrößern kann.

Eventuell ist es auch hilfreich sich den TCP-Verkehr im LAN mittels WireShark oder Ähnlichen Tools anzusehen.

Gruß, Rob
Referenz-URLs