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 

Datenerfassung - dynamische Arraygröße



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!

10.01.2008, 11:32
Beitrag #1

krys Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Mar 2007

8.2
2007
kA


Deutschland
Datenerfassung - dynamische Arraygröße
Moin
Habe eine kleine frage und hoffe auf ein TipBig Grin

Ich benutze eine PCi 6133 karte und möchte aus 6 Kanallen die Spannungen erfassen.
Das ist mir auch gelungen , aber ich muss mehrere perioden in en 2D Array speicher.
1 Periode 1 Zeile,
2 Periode 2 Zeile usw..

Die Periodenanzahl steht nicht fest , dass heißt der 2D array soll nicht fest sein sondern erweitbar zb von 1 bis 1000 Zeilen.
Die genaue Zahl ist nicht bekannt.

Hat jemand eine Idee wie man bei LabVIEW dynamische Arrays hinbekommt ( bei "c" ist es zb. "mallock" ) ??


Gruß
Krys
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2008, 11:40
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Datenerfassung - dynamische Arraygröße
Ich habe es nicht genau verstanden, was Du meinst, weil ich mich in C so gut wie gar nicht (mehr) auskenne.
Aber so wie ich es verstanden habe, suchst Du so etwas wie die Funktion "Build Array". Probier' doch das mal.
Oder meinst Du doch was anderes?

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2008, 11:50
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Datenerfassung - dynamische Arraygröße
In LabVIEW werden die Arrays fast automatisch dynamisch verwaltet. Das Array-Element überträgt gleichzeitig die Arraygrösse mit. Da musst du dir keine gedanken darüber machen. Aber umgekehrt, wenn du es statisch haben willst, musst du etwas überlegen (nur bestimmte VIs benutzen).

Mit Build Array kannst du einfach dein Array erweitern ohne etwas besonderes dabei zu programmieren.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2008, 12:56
Beitrag #4

krys Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Mar 2007

8.2
2007
kA


Deutschland
Datenerfassung - dynamische Arraygröße
Vieleicht was nicht eindeutig, oder mag sein ,dass ich zu kompliziert denke.Rolleyes

Ich erfasse periodenweise Daten , dass heist eine Periode eine Zeile von Daten (zb 100 Werte)
Bei nächsten for schleifendurchlauf erfasse ich wieder eine Periode also wieder eine Zeile von 100 Daten.
Die zusammen zu fügen ist klar,es wird 2D array mit zwei Zeilen und 100 Spalten. Aber die Anzahl von for schleifendurchläufe wird von den Anwender angegeben.
d.h von mein 2D Array wird verschieden Zeielnanzah haben, jedes mal anders ,nicht fest.

Mein Problem ist die Zeilen mit den 100 Werten zusammenzufügen, weil ich Zeilenanzahl nicht fest gelegt ist.

Die Zeilenzahl wird in den Program gelesen aber kann beliedig groß sein
Als bei jedem Programmstart wird mein 2D array andere Zeilenzahaben.

Geht es so was überhaupt?? Oder ist es einfache die "x" Zeilen mit je 100 Werten (Spalten) in eine Datei zu speichen ??

gruß
krys
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2008, 15:55
Beitrag #5

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenerfassung - dynamische Arraygröße
' schrieb:Geht es so was überhaupt??
Es geht beides.

Erstens:
Wenn du nicht weist, wie viele Zeilen du haben wirst, kannst du ganz einfach das Element "Array erstellen" verwenden. Auf den oberen Eingang gibt du das bestehende 2d-Array und auf den unteren Eingang die neue Zeile, die ja ein 1D-Array ist. Das Ergebnis ist ein neues 2D-Array mit der neuen Anzahl von Zeilen. Das Element "Array erzeugen" musst du einstellen auf "Elemente verbinden" (siehe Eigenschaftsmenü des Elementes). Dieses Verfahren entspricht einem dymanischen Array. Vorteil: Einfach. Nachteil: Rechenintensiv wegen ständiger Speicherorganisation.

Zweitens:
Wenn du von vorne herein weist, wie viele Zeilen du haben wirst (For-Schleife), dann benutzt du die Funktion "Array initialisieren" und gibst für jede Dimension eine Größe an. In der For-Schleife benutzt du dann die Funktion "In Array ersetzen". Dieses Verfahren entspricht einem statischen Array. Allerdings wird auch dieses Array dynamisch verwaltet. Vorteil: Schnell, wenn weniger Speicheroperationen. Nachteil: Geringfügig komplizierter.

Hinweis:
In beiden Fällen besitzt die For-Schleife ein Schieberegister, das die Daten des Array während des Ablaufes der Schleife enthält.

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
10.01.2008, 18:07 (Dieser Beitrag wurde zuletzt bearbeitet: 10.01.2008 18:19 von Lucki.)
Beitrag #6

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Datenerfassung - dynamische Arraygröße
' schrieb:Es geht beides.

Erstens:
Wenn du nicht weist, wie viele Zeilen du haben wirst, kannst du ganz einfach das Element "Array erstellen" verwenden. Auf den oberen Eingang gibt du das bestehende 2d-Array und auf den unteren Eingang die neue Zeile, die ja ein 1D-Array ist. Das Ergebnis ist ein neues 2D-Array mit der neuen Anzahl von Zeilen. Das Element "Array erzeugen" musst du einstellen auf "Elemente verbinden" (siehe Eigenschaftsmenü des Elementes). Dieses Verfahren entspricht einem dymanischen Array. Vorteil: Einfach. Nachteil: Rechenintensiv wegen ständiger Speicherorganisation.

Zweitens:
Wenn du von vorne herein weist, wie viele Zeilen du haben wirst (For-Schleife), dann benutzt du die Funktion "Array initialisieren" und gibst für jede Dimension eine Größe an. In der For-Schleife benutzt du dann die Funktion "In Array ersetzen". Dieses Verfahren entspricht einem statischen Array. Allerdings wird auch dieses Array dynamisch verwaltet. Vorteil: Schnell, wenn weniger Speicheroperationen. Nachteil: Geringfügig komplizierter.
Drittens:
Wenn Du nicht weißt, wie viele Elemente Du haben wirst, aber trotzdem so schnell wir unter zweitens sein möchtest, dann macht man es so: Den Array auf maximal zu erwartende Größe initialisieren (z. B Nullen hineinschreiben). Dann bei der Aufzeichnung die Elemente des Array, von vorn beginnend, ersetzen. Nach Ende der Aufzeichnung die nicht überschriebenen Werte hinten abschneiden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.01.2008, 18:21
Beitrag #7

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Datenerfassung - dynamische Arraygröße
' schrieb:Drittens:
Wenn Du nicht weißt, wie viele Elemente Du haben wirst, aber trotzdem so schnell wir unter zweitens sein möchtest, dann macht man es so: Den Array auf maximal zu erwartende Größe initialisieren (z. B Nullen hineinschreiben). Dann bei der Aufzeichnung die Elemente des Array, von vorn beginnend, ersetzen. Nach Ende der Aufzeichnung die nicht überschriebenen Werte hinten abschneiden.


Hmm, aber woher weiss man welche werte nicht überschrieben sind? Ich meine eine 0 kann auch ein Messwert sein. Oder meinst du er soll mitzählen was er überschrieben hat und was nicht?

Gruß

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.01.2008, 18:25 (Dieser Beitrag wurde zuletzt bearbeitet: 11.01.2008 07:30 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
Datenerfassung - dynamische Arraygröße
' schrieb:Hmm, aber woher weiss man welche werte nicht überschrieben sind? Ich meine eine 0 kann auch ein Messwert sein. Oder meinst du er soll mitzählen was er überschrieben hat und was nicht?
Mitzählen muß ich ja sowieso, denn ich muß ja bei jeder folgenden Messung wissen, in welchen Index des Arrays ich den zu ersetzenden Werte hineinschreiben muß. Folglich weiß ich am Ende auch bis zu welchem Index ich gekommen bin und kann den Rest abschneiden.

Edit: Und hier ein selbstgestricktes VI:
(Mußte die Uhr mit hineinnehmen, damit man manuell stoppen kann, ohne daß schon 10000Werte erfasst wurden)

   

Das VI ist V8. Mit V8.5 läßt sich das noch besser machen: For-Schleife mit vorzeitigem Abbruch verwenden, IN-Line Struktur verwenden


Angehängte Datei(en)
Sonstige .vi  Werte_in_Array.vi (Größe: 14,08 KB / Downloads: 407)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.01.2008, 08:44
Beitrag #9

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Datenerfassung - dynamische Arraygröße
' schrieb:Drittens:
Wenn Du nicht weißt, wie viele Elemente Du haben wirst, aber trotzdem so schnell wir unter zweitens sein möchtest, dann macht man es so: Den Array auf maximal zu erwartende Größe initialisieren (z. B Nullen hineinschreiben). Dann bei der Aufzeichnung die Elemente des Array, von vorn beginnend, ersetzen. Nach Ende der Aufzeichnung die nicht überschriebenen Werte hinten abschneiden.

Und hier das Beispiel dazu:


   

Der Stop in den Beispielen muß in der Praxis kein manueller Stop sein, er symbolisiert hier nur das Nichtwissen über die endgültige Größe des Arrays während der Array-Erzeugung.

Bild1: Die übliche Art der Array-Ezeugung, die leider wegen der fortlaufenden Reorganisation des Speichern mit steigender Arraygröße immer langsamer wird.

Bild 2: So ist es schneller: Initialisierung des Arrays auf maximal zu erwartende Größe, dann hinzufügen der neuen Elemente durch Ersetzen, abschließend Abschneiden der nicht benutzten oberen Elemente.

Bild 3: Mit LabVIEW 8.5 wird das alles ganz einfach: Initialisieren, ersetzen, Abschneiden; das alles macht die neue Struktur "For loop with conditional terminal" ganz automatisch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.01.2008, 13:33
Beitrag #10

krys Offline
LVF-Grünschnabel
*


Beiträge: 10
Registriert seit: Mar 2007

8.2
2007
kA


Deutschland
Datenerfassung - dynamische Arraygröße
Hats gelapt

Danke und Gruß an alle

Krys
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  dynamische Sampleraten bei USB600x MicroScoop 10 7.430 09.06.2021 13:58
Letzter Beitrag: GerdW
  Verständnisproblem Sampling/Dynamische Mittelwertbildung RabenFlug 1 3.199 07.11.2018 13:17
Letzter Beitrag: Freddy
  Datenerfassung cDAQ + NI9203 keine synchrone Datenerfassung dieseldunst 5 6.539 24.06.2016 14:49
Letzter Beitrag: jg
  DAQmx - Analog Output - Dynamische Anpassung des Signals Philbo 17 19.394 28.04.2014 22:18
Letzter Beitrag: Lucki
  Dynamische Erstellung von Tasks und Kanälen simbi 4 7.167 23.04.2013 19:04
Letzter Beitrag: Holy
  Dynamische lokale Variable? Benjamin Fuchs 24 23.081 21.08.2007 08:44
Letzter Beitrag: Benjamin Fuchs

Gehe zu: