|
|
Endlose Datenerfassung und Weiterverarbeitung |
|
rudio |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 21.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.07.2010, 14:28
Titel: Endlose Datenerfassung und Weiterverarbeitung
|
|
|
|
|
Hallo werte Community,
das ist hier mein erster Beitrag und ich würde mich echt freuen, wenn mir bei meinem Problem oder Aufgabenstellung weitergeholfen wird.
Allgemein:
Ich will mit Matlab ein Signal von einer USB-Datenerfassungskarte abtasten. Dabei sollen vier Kanäle gleichzeitig erfasst werden. Die Datenrate pro Kanal leigt bei 50-100 kHz.
Problem:
Das Signal soll dauerhaft, also über einen längeren Zeitraum abgetastet werden. Da der Matlabspeicher irgendwann voll ist, müssen die Daten nach einer gewissen Zeit in einen Buffer oder einen anderen Speicherort geschrieben werden. Und die Variablen und Matlab wieder gelöscht werden, um die weiteren Daten aufnehmen zu können.
Ich habe zu dem Thema noch keine echte Idee, wie ich an die Sache herangehen kann. Das ganze mit einer Endlos-while-Schleife zu realisieren, bei der ich die Vektorgröße abfrage und dann die Variable speicher und dann lösche, halte ich für eine sehr schlechte Lösung.
Auf der anderen Seite habe ich keine Ahnung wie ich während der Datenerfassung in den Prozess eingreife.
Die Datenerfassung wird folgendermaßen gestartet:
start(ai);
[data,time]=getdata(ai)
stop(ai)
Da der stop-Befehl eigentlich nicht ausgeführt werden soll, läuft irgendwann der Speicher voll und ich weiß nicht, wie ich das verhindern kann.
Falls noch weitere Infos zu dem Problem fehlen, einfach schreiben. Ansonsten wär ich sehr dankbar, wenn ich ein paar Infos und Feedbacks erhalten würde.
greetz
|
|
|
|
|
yankemen |
Forum-Century
|
|
Beiträge: 104
|
|
|
|
Anmeldedatum: 14.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 32: 2008a & 2010a
|
|
|
|
|
|
Verfasst am: 21.07.2010, 15:09
Titel: Re: Endlose Datenerfassung und Weiterverarbeitung
|
|
|
|
|
Hallo rudio,
herzlich willkommen im Forum.
rudio hat Folgendes geschrieben: |
Hallo werte Community,
herangehen kann. Das ganze mit einer Endlos-while-Schleife zu realisieren, bei der ich die Vektorgröße abfrage und dann die Variable speicher und dann lösche, halte ich für eine sehr schlechte Lösung.
Auf der anderen Seite habe ich keine Ahnung wie ich während der Datenerfassung in den Prozess eingreife.
Die Datenerfassung wird folgendermaßen gestartet:
start(ai);
[data,time]=getdata(ai)
stop(ai)
|
Nun, wie wird denn der Prozess am Leben erhalten? Gibt es nicht da dann eine Endlosschleife, die dafür sorgt, dass immer wieder Daten in ai speichert?
Dann brauchst Du statt oder nach der Speicherung von ai nur ins geeignete Format speichern (dlmwrite, save, ... siehe andere beiträge im Forum) und die Variable wieder freigeben.
Tschuldigung ob der Nachfrage, da fehlt mir vermutlich der technische Hintergrund, wie das getdata(ai) permanent neue Daten liefert.
Ansonsten glaube ich nicht, dass Du um die Endlosschleife drum herum kommst. Das schnellste Verfahren ist save, aber wie Du die Daten anschließend verwerten willst, hängt ja davon ab, wie Du sie speicherst.
HTH,
yankemen
|
|
|
rudio |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 21.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.07.2010, 16:23
Titel:
|
|
|
|
|
Hi yanke
schonma danke, dass du dich mit dem Thema befasst hast.
Ich habe mich jetzt etwas intensiver mit der Sache beschäftigt.
Der Befehl start(ai) startet die Datenerfassung der Karte, was bedeutet, dass ein Buffer mit den abgetasteten Daten beschrieben wird. Ist der Buffer voll und die Daten werden nicht abgeholt, werden die ältesten Daten wieder überschrieben. Zum Daten abholen, kann der Befehl getdata(ai) verwendet werden, wobei dann der Buffer geleert wird (falls ich das richtig verstanden habe). Bin mir nicht sicher, ob Matlab den Buffer im Speicher deklariert oder das ein Speicher auf der Datenerfassungskarte ist.
Nun gibt es die Möglichkeit z.B. die Anzahl der Abtastwerte mit SamplesAvailable zu bestimmen und dann immer nach gewünschter Anzahl die Daten abzuholen.
Die Frage ist nun, wie das schnellste Vorgehen danach ist. Die Daten müssen dann abgespeichert werden und oder Echtzeit prozessiert werden, wobei die Datenerfassung aber nicht unterbrochen werden darf.
Kann man mit Matlab irgendeinen Ringbuffer beschreiben, aus dem z.B. dann ein anderer Rechner oder ein anderes Programm die Daten regelmäßig abholen kann?
Habe in dem Gebiet leider noch keinerlei Erfahrung...
greetz
|
|
|
rudio |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 21.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.07.2010, 09:39
Titel:
|
|
Naja ganz so einfach funktioniert das auch wieder nicht. Wäre ja zu schön.
Nach dem start(ai)-Befehl muss ich dann ein 'wait' einfügen und dann könnte ich mit SamplesAvailable abfragen wieviele Samples ich habe. Das Ganze ist aber auch nur einmalig möglich, was heißt, dass ich wieder bei der endlos-while-Schleife angelangt bin.
|
|
|
yankemen |
Forum-Century
|
|
Beiträge: 104
|
|
|
|
Anmeldedatum: 14.04.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 32: 2008a & 2010a
|
|
|
|
|
|
Verfasst am: 26.07.2010, 13:46
Titel:
|
|
|
|
|
Moin rudio,
m.E. nach scheint es für die Aufzeichnung am einfachsten zu sein, in eine Endlosschleife die Zeile [data,time]=getdata(ai) zu packen.
Nun werden sehr viele .mat-Dateien erzeugt. Mit load kannst Du sie später dann wieder einlesen und weiterverarbeiten. Gegebenenfalls mit format noch entsprechend vorher formatieren.
rudio hat Folgendes geschrieben: |
Der Befehl start(ai) startet die Datenerfassung der Karte, was bedeutet, dass ein Buffer mit den abgetasteten Daten beschrieben wird. Ist der Buffer voll und die Daten werden nicht abgeholt, werden die ältesten Daten wieder überschrieben. Zum Daten abholen, kann der Befehl getdata(ai) verwendet werden, wobei dann der Buffer geleert wird (falls ich das richtig verstanden habe). Bin mir nicht sicher, ob Matlab den Buffer im Speicher deklariert oder das ein Speicher auf der Datenerfassungskarte ist.
|
Wenn die Daten in Matlab bereits einen Puffer bekommen, dann kann man sie auch von dort wegschreiben. Das sollte bei start(ai) näher definiert sein.
Es klingt fast so, als bräuchtest Du zwei Speicher. Denn wenn der Lese-Zugriff auf den aufgebauten und permanent gefüllten Puffer nur von einem Prozess zeitgleich geschehen darf, dann läuft der voll, Du kannst auslesen - und alles, was passiert, bis Du ausgelesen hast, geht verloren. Bei zwei Speichern würde immer einer gelesen und der andere geschrieben. Zumal das Lesen auch mit Schreiben verbunden ist, wenn der Puffer leer gemacht wird.
Matlab kann Multithreading, aber dazu braucht es die richtige Toolbox. Ich vermute(!) zumindest, dass es erst mit dieser Toolbox möglich wird, die Zugriffsrechte detailliert zu regeln.
Bezüglich einer Verwendung auf/ von externen Rechnern/ Speichern kann ich Dir nichts sagen, da kenne ich mich nicht aus.
Um genau zu sein:
ich kenne mich wohl mit den Möglichkeiten von Matlab mit und ohne den Toolboxen zu wenig aus, um da noch eine funktionierende Antwort zu liefern. save ist das schnellste, was Matlab bietet, afaik.
Grüße,
yankemen[/quote]
_________________
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|