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!
16.06.2010, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 10:23 von jg.)
Das Forum ist sehr hilfreich und ich habe schon viele tolle Ideen und Vorschläge in meinem Programm einbinden können. Doch trotz der Suchfunktion kann ich zu meinem jetztigen Problem irgendwie nichts vernüftiges finden und so habe ich mich entschlossen ein Thread zu erstellen.
Das Picoscope (Oszi) liefert mir Daten und diese sollen von Programm zuerst in ein Array gefüllt und am Ende in tabellenform abgespeichert werden. Das Array ist von Anfang an schon bekannt. Es ist zB. 5000 x 10000 groß. Ich habe das ganze bis jetzt so realisiert.
Dies funktioniert zwar aber das Array wird sehr langsam aufgebaut. Wenn ich das Array verkleinere auf 500 x 1000, dann geht das ganze relativ schnell. Man muss bedenken, dass das Picoscope nicht 2D Array auf ein Mal liefert, sondern nach und nach 1D Array mit der Länge der "Number of Samples" ( in dem Fall mit der Länge 10000)
Nun die Frage, kann man das ganze eleganter und besser lösen und wenn ja wie ?
da sich kein anderer erbarmt, rate ich mal ins Blaue hinein:
Ich habe bei den "freihängenden" FeedbackNodes (FN) immer noch leichte Verständnisprobleme, was die Initialisierung angeht...
Kann es sein, dass deine FN bei jedem Aufruf aufs Neue initialisiert wird, wofür Speicher und Zeit benötigt wird?
Könntest du das komplette VI anhängen (evtl. DAQ-Aufruf durch dummy-FOR-loop ersetzen)?
"Wäre das nicht ein völlig unsinniges Verhalten?"
Eben.
Im Bild oben sehe ich: bei jedem Aufruf wird ein Array initialisiert (400MB!, falls DBL verwendet wird). Mit diesem Array wird die FN initialisiert, augenscheinlich auch bei jedem Aufruf ("...leichte Verständnisprobleme..."). Beide Aktionen halte ich für unsinnig...
' schrieb:Im Bild oben sehe ich: bei jedem Aufruf wird ein Array initialisiert (400MB!, falls DBL verwendet wird).
Achsooo, ja ein Array wird jedes Mal initialisiert.
Zitat:Mit diesem Array wird die FN initialisiert, augenscheinlich auch bei jedem Aufruf ("...leichte Verständnisprobleme..."). Beide Aktionen halte ich für unsinnig...
Dass die FN jedes Mal neu initialisiert wird, was auch immer dabei geschieht - ich hab davon keine Ahnung, glaube ich nicht. Da wird es wohl einen internen First-Run-Flag geben.
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
16.06.2010, 12:32 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 12:44 von Lucki.)
Bei so großen Datenmengen und wenn die Daten von einem Oszilloskop mit vielleicht nur 8 bit kommen. lohnt es sich auch mal über andere Datenformate als DBL nachzudenken. Das Mindeste wäre die Umstellung auf SGL.
Zur Initialisierung: Der Initialisierungsanschluß wird, wenn er sich in einer Schleife befindet, genau so nur einmal initialisiert, als wenn er sich bei einem Schieberegister außerhalb der Schleife befinden würde. Allgemein muß man sich den Initialisierungsanschluß so vorstellen, daß er nur dann aktiv ist, wenn ein unmittelbar daneben platziertes VI "erster Aufruf" den Ausgangswert true liefern würde. Diese Test könnte man ja leicht machen - wenn es ein VI gäbe.
Das Anzeigeelement verbraucht 100% der Leistung. Das Ersetzen der Daten selbst bei 5000 Reihen dauert gerademal 300ms. Solange dauert es alleine einmal das Anzeigeelement zu refreshen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
16.06.2010, 12:53 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2010 13:57 von jg.)
Ich habe Mal schnell ein Programm gebastelt, wie es bei mir zZ realisiert ist. Anstelle des Picoscopes habe ich einfach Zufallszahlen genommen. Ich hoffe ihr könnt mir jetzt weiter helfen.
Edit: Warten (ms) könnt ihr natürlich rausnehmen, habe es für mich nur schnell eingebaut um es besser zu sehen.
16.06.2010, 12:53 (Dieser Beitrag wurde zuletzt bearbeitet: 17.06.2010 07:36 von dimitri84.)
' schrieb:..., wenn ein unmittelbar daneben platziertes VI "erster Aufruf" den Ausgangswert true liefern würde.
[*Korinthenkacker on*]
Da wäre ich mir nicht so sicher. Das VI "erster Aufruf" gibt wirklich nur einmal ein True pro "Applikationsstart mit dem Pfeil" aus - auch, wenn sich dieses VI z.B. in einem subVI befindet und das BD immer wieder aufgerufen wird. Eine FN oder ein SR kann in einem subVI öfter als nur einmal initialiesiert werden, nämlich bei jedem subVI-Aufruf.
[/*Korinthenkacker off*]
Mir gefällt dieses kleine runde Ding einfach nicht ...
„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)