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 

Grundkonzept einer Datenerfassung/Auswertung



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!

02.10.2009, 18:32 (Dieser Beitrag wurde zuletzt bearbeitet: 02.10.2009 18:37 von IchSelbst.)
Beitrag #15

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Grundkonzept einer Datenerfassung/Auswertung
' schrieb:Ok, vermutlich habe ich eine falsche Vorstellung vom Ringpuffer. Bisher habe ich mir den manuell vorgestellt (Array ist 2 Pufferlängen groß, erster Pufferinhalt wird reingeschrieben, zweiter Pufferinhalt wird reingeschrieben, dritter wird reingeschrieben mit Überschreiben des ersten, vierter wird reingeschrieben mit Überschreiben des zweiten, etc). Das nennt man scheinbar "linear"? So meinst du es aber vermutlich nicht, sondern eben dynamisch mit Lese- und Schreibzeigern, von denen ich aber (bisher) nichts verstehe/kenne.
Mit linear hab ich gemeint: Hat einen Anfang immer bei 0 und ein Ende immer bei MaxLength-1. (Das ergibt dann einen "linearen Pfeil", der immer bei 0 beginnt in in Richtung Ende kuckt und MaxLength lang ist).
Ein Ringpuffer ansich hat - wie eben ein Ring, also ein Kreis - keinen Anfang und kein Ende, (respektive ist der Anfang immer mit dem Ende identisch, wenn der Puffer ganz voll ist). Anfang und Ende werden festgelegt durch die beiden Zeiger "Lese ab hier" und "Schreibe ab hier". Außerdem müssen die Teile, die in den Puffer geschrieben werden sollen, nicht zwangsläufig alle gleich lang sein. Bei einen Ringpuffer muss auch folgendes Problem beachtet werden: Der Ringpuffer selbst ist organisiert als linearer Speicherbereich - also mit Anfang und Ende. Der Ringpuffermanager muss sich nun darum kümmern, dass nicht über das "lineare Ende" hinausgeschrieben werden darf, sondern dass ein Umbruch auf den linearen Anfang gemacht werden muss.

Zitat:Aber: Ist das notwendig? Reicht für meine Anwendung ein linearer Ringpuffer nicht völlig aus?
Wenn du alles im Griff hast, kannst du selbstverständlich auch einen optimierten Ringpuffer verwenden. So wie du gesagt hast: Der Ringpuffer ist so groß wie zwei Datensätze, die einfach wechselweise überschrieben werden. Aber vorsicht hier: Die neuen Datensätze müssen immer die gleiche Größe haben (was selbstverständlich möglich ist, wenn man mit dem DaqMX immer eine feste Zahl ausliest)

Zitat:Folgende Idee: Für die Verarbeitung ist es ja nicht notwendig, dass ich so viele "Vergangenheitswerte" mitnehme. Es würde, um zB den Knick beim Intergieren zu vermeiden, völlig ausreichen jeweils den Pufferinhalt vom letzten Durchlauf mitzunehmen. Ich muss hier ja sowieso begrenzen, weil sonst in der Verarbeitung viel zu viele Daten ankommen und die Schleifengeschwindigkeit mit zunehmender Datenmenge ins unendliche geht.
Also: "Manueller Ringpuffer". Dh, immer nur den aktuellen Pufferinhalt und den vom Durchlauf zuvor in die Verarbeitung schicken, dort verarbeiten, im Graf nur den letzten anzeigen und die Daten (falls Speicherung gewünscht) dann in ein sehr groß initialisiertes Array schicken, welches so mit der Zeit aufgefüllt wird. Vor der Speicherung evtl noch den leeren Rest abschneiden und das wars.
Aber wahrscheinlich habe ich es doch noch nicht verstanden und auch hier ist wieder ein Denkfehler drin?
Wie, wo soll hier ein Denkfehler sein? Tongue
Jetzt, als du erklärt hast, was du brauchst und was du nicht brauchst, sehe ich gleich, dass das auch so geht. Es könnte auch noch so gehen: Du hast drei Arrays parallel laufen. Zwei der Länge MaxLength (M1, M2) und eines der Länge 2*MaxLength (MM). Außerdem gibt es eine Boolsche Variable M?, die mit jedem DaqMX-Rd getoggelt wird. Ist M? true, wird M1 überschrieben und MM ergibt sich aus M2+M1. Ist M? false, wird M2 überschieben und MM ergibt sich aus M1+M2. Beachte: Alle drei Arrays sind initialisiert und werden nur mit Replace ersetzt.

Zitat:@Datentypen: Gut, da werde ich dann wohl leider nicht viel einsparen können.
Jetzt hast du's aber schriftlich und kannst nachweisen, warum du so viel Speicher brauchst.



Zitat:Und vor allem, wieso bleibt die Auslagerungsdatei auch nach Programmende so groß? Ist das ein Windows-Problem? (Windows XP Prof mit SP3 hier)
JaNein.
Wenn du alles so gemacht hast wie erklärt, sollte es nicht zu solchen Problemen kommen. Speichermanager sind immer sehr kompliziert. Wer (LV oder Win32) da genau wo seine Finger drinnen hat, weis hier nur einer. Normalerweise würde ich aber sagen, dass LV, also dein Programm daran schuld ist (einen speziellen Fehler in LV, den du gerade gefunden hast, schließen wird vorerst aus genauso wie einen in WinXP).
Der Fehler muss nicht zwangsläufig von der Array-Geschichte kommen, die hier gerade diskutiert wird. Möglicherweise generierst du ständig Handle und schließt sie nicht wieder. Das führt früher oder später (bei 3MHz eher früher) zu einen Überlastung des Systems.

Kannst du mal ein Bild vom Blockdiagramm mit den Arrays und den Datenflüssen davor machen? Vielleicht sehe ich ja was.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Grundkonzept einer Datenerfassung/Auswertung - IchSelbst - 02.10.2009 18:32

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
Question Auswertung von Schwellwerten / Aufzeichnung in TDMS ZwergNase 3 3.482 12.08.2019 19:57
Letzter Beitrag: GerdW
  Datenerfassung mit einer zeitgesteuerten Schleife DM_94 16 9.655 25.07.2018 10:20
Letzter Beitrag: DM_94
  Auswertung Drehgeber mit NI 9401 BenutzernameNO 6 6.164 29.08.2016 13:25
Letzter Beitrag: GerdW
  Datenerfassung cDAQ + NI9203 keine synchrone Datenerfassung dieseldunst 5 6.145 24.06.2016 14:49
Letzter Beitrag: jg
  Datenerfassung und Auswertung Rajesh 9 7.461 09.06.2015 07:40
Letzter Beitrag: wladimir s
  Laufzeitprobleme; Auswertung Lifter 7 5.660 27.11.2013 21:33
Letzter Beitrag: jg

Gehe zu: