TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
Hallo,
ich hab ein mittelschweres Problem mit den TCP VIs:
Ich empfange Daten über eine TCP/IP Verbindung:
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...
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
' 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
Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.
N.B.: "Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett
15.03.2007, 17:20 (Dieser Beitrag wurde zuletzt bearbeitet: 16.03.2007 10:01 von eg.)
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
' 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.
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
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 bleiben
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.
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
' 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 bleiben
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.
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
' 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.
TCP Verbindung, Datenverlust bei hoher Rechnerauslastung
' 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
Bitte Beachten:
Die obenstehenden Texteile können unter Umständen Sarkasmus und Ironie enthalten, für nicht erkannten Sarkasmus oder nicht erkannte Ironie wird keine Haftung übernommen.
N.B.: "Multiple exclamation marks, " he went on, shaking his head, "are a sure sign of a deseased mind." - Terry Pratchett