INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Pufferüberlauf bei serieller Kommunikation



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!

18.06.2010, 07:49 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2010 07:53 von Yantit.)
Beitrag #1

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
Pufferüberlauf bei serieller Kommunikation
Hallo!

Ich bin momentan dabei, mir Amplitudenwerte aus einem Spektrumanalyzer ausgeben zu lassen und diese dann graphisch darzustellen.

Jetzt bin ich auf folgendes Problem gestoßen: Wenn mein Programm eine Weile läuft, kommt eine Fehlermeldung, dass das nächste Zeichen bereits da ist, bevor das letzte gelesen werden konnte (sinngemäß). In der Sondenüberwachung zeigt sich nun, dass der Puffer nach und nach vollläuft, bis er die bei der Initialisierung eingetragenen 512 kB überschreitet.

Ich habe jetzt schon mal versucht, den Puffer zwischendurch zu leeren, allerdings kriege ich die "Reihenfolge" nicht so wirklich hin, da er mir dann auch meine ausgelesenen Werte gleich verwirft. (Deswegen hängt das "Puffer leeren" momentan einfach oben in der Ecke).

Anbei der entsprechende Ausschnitt aus meinem VI.

Hoffe, es kann mir (wieder mal) jemand helfen.

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.06.2010, 08:19 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2010 08:25 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Pufferüberlauf bei serieller Kommunikation
Hallo Yantit,

vielleicht solltest du den "Receive buffer" löschen anstatt den "Transmit buffer" wie bisher? D.h. eine 64 statt der 128 an VISA Flush anschließen!
Edit: Alternativ könntest du auch die komplette Antwort deines Analyzers lesen, so würde der Puffer erst gar nicht volllaufen...

Weitere Hinweise:
Aufräumen mit dem Button in der Menüzeile täte auch gut. Die beiden X-Achse-Properties kann man zu einer zusammenfassen, dann benötigt man auch nicht 2 Drähte für die Referenz und zwei Tunnel in die Schleife rein. Die ganzen CoercionDots tauchen gar nicht erst auf, wenn man Konstanten/Controls/Indicator per Rechtsklick erzeugt... Konstante (Rechen-)Operationen außerhalb von Schleifen erledigen. Warum setzt du bei jedem Schleifendurchlauf die X-Achse auf's Neue mit augenscheinlich immer den gleichen Werten - würde nicht einmal vor der Schleife ausreichen? Du hast den ErrorCluster nicht verdrahtet und ausgewertet... Mach dir eine Wartefunktion mit durchgeführtem ErrorCluster, dann brauchst du keine Sequenzstruktur mehr.

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 08:27
Beitrag #3

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
Pufferüberlauf bei serieller Kommunikation
' schrieb:Hallo Yantit,

vielleicht solltest du den "Receive buffer" löschen anstatt den "Transmit buffer" wie bisher? D.h. eine 64 statt der 128 an VISA Flush anschließen!

Die Hilfe bin ich auch schon mehrfach durchgegangen, allerdings (wie bereits erwähnt), verwirft mir das Programm beim Leeren des Empfangspuffers meine ausgelesenen Werte. Ich habe auch versucht, mit Verzögerungen innerhalb der Sequenz zu arbeiten, jedoch ohne Erfolg. Daher rührte auch meine Frage bezüglich der Reihenfolge...

Weitere Hinweise:
Aufräumen mit dem Button in der Menüzeile täte auch gut. Die beiden X-Achse-Properties kann man zu einer zusammenfassen, dann benötigt man auch nicht 2 Drähte für die Referenz und zwei Tunnel in die Schleife rein. Die ganzen CoercionDots tauchen gar nicht erst auf, wenn man Konstanten/Controls/Indicator per Rechtsklick erzeugt...

Jep, stimmt wohl. Mit dem Aufräumen werde ich mich dann befassen, wenn das Programm sauber länger als eine viertel Stunde durchläuft, ^_^damit wäre mir nämlich schon sehr geholfen, weil das als Monitoring-System für 24/7-Betrieb ausgelegt werden soll...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 08:33 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2010 08:36 von dimitri84.)
Beitrag #4

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Pufferüberlauf bei serieller Kommunikation
Noch ein Tip: Soweit ich das sehen kann ändert sich an der Berechnung von f0 und df nix. Auch Min/Max der x-Achse ändert sich nicht zur Laufzeit. Also: Raus mit dem Kram (raus aus der Schleife...)!! Das hat nix in der Schleife verloren. Die Eigenschaftsknoten sind dazu elend langsam. In einer zeitkritischen Schleife solltest du nur das Nötigste drin haben.

Und um so eine Unordnung in ein BD zu hinzubekommen muss man sich schon echt Mühe geben ...
' schrieb:Jep, stimmt wohl. Mit dem Aufräumen werde ich mich dann befassen, wenn das Programm sauber länger als eine viertel Stunde durchläuft, ^_^damit wäre mir nämlich schon sehr geholfen,
Dir wäre sehr geholfen, wenn du direkt sauber programmierst.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 08:35 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2010 08:38 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Pufferüberlauf bei serieller Kommunikation
Hallo Yantit,

das Aufräumen erfordert nur einen einzigen (!) Klick - und erleichtert es anderen ungemein, deine VIs zu "lesen"!
Wenn du Hilfe von anderen erwartest, solltest du auch einen gewissen "Respekt" durch ein aufgeräumtes BD zeigen...
(Ein Lob von mir für das Einstellen eines Snippets, da ich nicht immer an einem Rechner mit installiertem LabVIEW sitze und so trotzdem auf den Code schauen kann. Aufgeräumt wäre natürlich schönerSmile)

Siehe auch die editierten Hinweise oben...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 08:39
Beitrag #6

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
Pufferüberlauf bei serieller Kommunikation
Okay, ich werde jetzt erstmal die Schleife bereinigen und dann ein (hoffentlich aufgeräumtes) Snippet hochladen..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.06.2010, 09:01
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Pufferüberlauf bei serieller Kommunikation
Hallo Yantit,

bei den Funktionen zur seriellen Schnittstelle findest du auch eine, die dir mitteilt, wieviele Bytes im Buffer liegen. Damit könntest du herausfinden, wie groß die Antwort deines Analyzers ist, um sie dann komplett zu lesen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 09:52 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2010 09:54 von Lucki.)
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Pufferüberlauf bei serieller Kommunikation
Wie kommst Du überhaupt darauf, 5000 bytes auszulesen? Wenn z.B. Nach jeder Sendeanforderung 6000 bytes kommen aber nur 5000 gelesen werden dann ist unvermeidlich, daß der Buffer sich immer mehr füllt.
(Ich vermisse auch jegliche Konfiguration der Schnittstelle).

Eine primitive, aber immerhin gangbare Möglichkeit ist: Nach der Sendeaufforderung genügend lange warten, bis die Antwort fertig ist. Dann Die Anzahl der Bytes im Buffer bestimmen und diese Anzahl auslesen. Dann kann der Buffer nie überlaufen. (Primitiv deshalb, weil ich Waits in so einem Kommunikationsdialog nicht mag)
Nach besser ist allerdings, wenn die Gegenstelle ein Abschlusszeichen (TermChar) senden würde. Das ist die beste Art des Dialogs. (Einziger Nachteil: Gesendete Bytes müssen ASCII-Codiert sein, es kann nicht einfach der Bytewert 1 gesendet werden, sondern immer die zweistellige ASCII- HEX- Zeichenkette "01". Das scheint aber bei Dir der Fall zu sein)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 10:03
Beitrag #9

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
Pufferüberlauf bei serieller Kommunikation
So, hier jetzt mal die optisch etwas aufbereitete Version:

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.06.2010, 10:07
Beitrag #10

Yantit Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 160
Registriert seit: Jun 2010

8.2.1
2010
de

63xxx
Deutschland
Pufferüberlauf bei serieller Kommunikation
' schrieb:Wie kommst Du überhaupt darauf, 5000 bytes auszulesen? Wenn z.B. Nach jeder Sendeanforderung 6000 bytes kommen aber nur 5000 gelesen werden dann ist unvermeidlich, daß der Buffer sich immer mehr füllt.
(Ich vermisse auch jegliche Konfiguration der Schnittstelle).

Eine primitive, aber immerhin gangbare Möglichkeit ist: Nach der Sendeaufforderung genügend lange warten, bis die Antwort fertig ist. Dann Die Anzahl der Bytes im Buffer bestimmen und diese Anzahl auslesen. Dann kann der Buffer nie überlaufen. (Primitiv deshalb, weil ich Waits in so einem Kommunikationsdialog nicht mag)
Nach besser ist allerdings, wenn die Gegenstelle ein Abschlusszeichen (TermChar) senden würde. Das ist die beste Art des Dialogs. (Einziger Nachteil: Gesendete Bytes müssen ASCII-Codiert sein, es kann nicht einfach der Bytewert 1 gesendet werden, sondern immer die zweistellige ASCII- HEX- Zeichenkette "01". Das scheint aber bei Dir der Fall zu sein)


Die Schnittstelle wird vorher in einem eigenen Sub-Vi konfiguriert, da darüber auch die Initialisierung läuft. 5000 Bytes lese ich aus, weil ca. 4600 Bytes pro Sendeanforderung auflaufen (wurde vorher geprüft).
Leider sendet der Analyzer kein Abschlusszeichen, das wäre natürlich eine elegante Lösung...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Überlauffehler bei serieller Schnittstelle DominikPl 14 9.470 29.05.2018 11:51
Letzter Beitrag: Kiesch
  Fehlermeldung bei serieller Schnittstelle Lab-Girl 3 5.366 02.02.2016 17:12
Letzter Beitrag: IchSelbst
  Synchrone Datenerfassung von Serieller Schnittstelle und DAQ darkbeppo 5 6.209 17.12.2014 12:46
Letzter Beitrag: GerdW
  Konfiguration von serieller Schnittstelle funktioniert erst das 2. Mal machfax 11 9.653 08.01.2014 13:51
Letzter Beitrag: Lucki
  Probleme bei der Datenkommunikation mit serieller Schnittstelle Prama 9 7.392 26.02.2013 10:02
Letzter Beitrag: Prama
  Problem mit 2ter serieller Schnittstelle jojo2203 2 3.743 30.04.2011 09:15
Letzter Beitrag: IchSelbst

Gehe zu: