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 

Messdaten in 3D Array speichern und sortieren



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!

06.04.2016, 11:51
Beitrag #1

andrepf Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Oct 2014

12.01 (32bit)
2014
DE



Messdaten in 3D Array speichern und sortieren
Hallo Zusammen, ich weiß der Betreff klingt für viele abgedroschen und nach wenig von mir investierter Zeit. Keine Angst das ist nicht der Fall Smile

Ich habe zyklische Messdaten von X Messteilnehmern, jeder Messteilnehmer hat 2 Module das mir je ein 1 x 78 Array liefert. Das möchte ich in ein 3D-Array sortieren. Ich habe des öfteren gelesen, man soll 3D Arrays vermeiden. Ich finde das aber sehr praktisch und auch übersichtlich für meine Anwendung. Gerade weil ich die Daten später noch in einem Graph zur Laufzeit auswählen und darstellen möchte. Hier meine Fragen:

- Was ist an dem 3D Array der Nachteil und was wäre denn der Vorschlag von den Profis?
- Kann mir jemand helfen warum die Sortierung einfach nicht will?
- Ist das von mir gedachte 3D Array überhaupt eine gute Vorbereitung für die Darstellung in einem Graphen und die Abspeicherung als CSV?
- Insert into Array ist anscheinend auch nicht von Vorteil. Wie aber sortiere ich dann am besten noch das 1 x 78 Array nach der Zellnummer von der niedrigsten Zelle, zur höchsten Zelle? Hat hier jemand einen Vorschlag.

Anbei das Minimalbeispiel. Zur Information, die Messsdaten werden über eine queued state machine zyklisch abgefragt und sollen dann direkt in das 3D Array einsortiert werden. Das tut aber für die reine Sortierung nichts zur Sache. Ich habe, um die zyklischen Messdaten zu simulieren, ein 100 x 78 Array als Inputdata in meinem Minimalbeispiel. Die Sortierung nach Zellnummer habe ich im Minimalbeispiel noch nicht probiert (weil noch kein Funkte Ahrg1) ... .

Vielen Dank!


Angehängte Datei(en)
14.0 .vi  messdaten in 3d array speichern und sortieren.vi (Größe: 50,47 KB / Downloads: 219)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.04.2016, 12:10
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Messdaten in 3D Array speichern und sortieren
3D-Array, schön und gut, aber in deinem Bsp verwendest du ein 4D-Array?! Wozu denn das?

Die Gefahr bei solch hochdimensionalen Arrays ist, das unnötig Speicherplatz verschwendet wird, da alle Zeilen, Spalten, Seiten etc. dieselbe Größe haben müssen!

Deine Datenstruktur "[Messwerte 1&2] [Zelle] [Modul] [Time] [ID Master]", die du im BD beschreibst, schreit nach einem typdefinierten Cluster mit den passenden Datentypen anstatt nach einem "Array of String".

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.04.2016, 18:16
Beitrag #3

andrepf Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Oct 2014

12.01 (32bit)
2014
DE



RE: Messdaten in 3D Array speichern und sortieren
Hallo,


also ich habe jetzt die Messdaten für ein Modul von einem Messteilnehmer in ein Typedef gepackt. Das sieht schonmal super aus, weil die Daten vorab auch schon sortiert werden. Aber das sortieren in die Messdaten(tabelle?) kriege ich einfach nicht gebacken. Was du genau mit einem "typdefinierten Cluster mit den passenden Datentypen" habe ich nicht verstanden. Bis jetzt habe ich nur mit Typedefs gearbeitet. Ich habe meinen neuen Versuch mal anbei gehängt. In der Messdatenkonstante sind Fake-Messdaten von zwei unterschiedlichen ID's welche ich jetzt in ein 2D Array verschachteln würde. Dabei gibt die ID die Seite und das Modul (1 oder 2) die zweite Dimension an. Spart denke ich schon mal Speicherplatz.

Jedoch bekomme ich meine Sortierung weder mit "index array" noch mit "insert into array" hin??????

VG und Danke


Angehängte Datei(en)
14.0 .vi  messdaten in 3d array speichern und sortieren.vi (Größe: 43,01 KB / Downloads: 240)

14.0 .ctl  bms_dataq_can_messdaten_input.ctl (Größe: 6,92 KB / Downloads: 201)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.04.2016, 20:40
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Messdaten in 3D Array speichern und sortieren
Das mit dem Cluster als TypDef hast du schon richtig gemacht, so in der Art meinte ich das. Aber wieso muss jedes Element hier ein String sein, auch wenn es eigentlich Zahlen sind?

Ich habe aber immer noch nicht verstanden, was du jetzt wo einsortieren willst. Bahn

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.04.2016, 09:14
Beitrag #5

andrepf Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Oct 2014

12.01 (32bit)
2014
DE



RE: Messdaten in 3D Array speichern und sortieren
Hallo Jens,

ich habe mein Vorhaben mal graphisch dargestellt. Hoffe jetzt ist es verständlich.
Warum ich Strings verwende? Weil ich gerne für alle Werte im Typedef das gleich Format hätte und das mit dem Sting am "einfachsten" für den Timestamp war. Aber fest halten muss ich daran nicht. Bei meinen jetzigen Überlegungen habe ich immer im Hinterkopf, dass ich die Messwerte dann als CSV abspeichern möchte (1 CSV pro Messteilnehmer) und das ich das ganze zur Laufzeit darstellen möchte, gerade mache ich das exemplarisch für den ersten Messwert mit einem Waveformgraph und wandle den String wieder zu einem Timestamp um. Weiß nicht wie sehr das die Laufzeit beeinträchtigt oder ob ich den Datentyp Timestamp unverändert lasse und die Integers auch ... (?) Dazu habe ich zu wenig Erfahrung mit so vielen Messdaten.

VG


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.04.2016, 11:40
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Messdaten in 3D Array speichern und sortieren
Dein 3D-Array überzeugt mich weiterhin nicht. Wie viele Datensätze willst du im Speicher vorhalten?

Wenn ich dich bisher richtig verstanden habe, dann bekommst immer von einer bestimmten ID/Modul-Kombination einen neuen Datensatz. Problem dabei: Den hängst du jetzt auf Seite "ID", Spalte "Modul" in einer neuen Zeile dran. Zwecks 3D-Array wird dadurch aber auf jeder Seite & Spalte eine neue Zeile angefügt. Den nächsten Datensatz, den du bekommst, musst du also nicht anfügen, sondern in der passenden Kombination Seite/Spalte/Zeile ersetzen (wenn er denselben Zeitstempel hat die der Datensatz davor). Da wirst du IMHO nicht glücklich mit werden. Ganz unübersichtlich wird es, wenn du von verschiedenen Messteilnehmern die Daten in unterschiedlichen Zeitabständen bekommst.

Dann lieber ein Arry of Cluster of Array of Cluster of Array...

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.04.2016, 16:24
Beitrag #7

andrepf Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Oct 2014

12.01 (32bit)
2014
DE



RE: Messdaten in 3D Array speichern und sortieren
(07.04.2016 11:40 )jg schrieb:  Dein 3D-Array überzeugt mich weiterhin nicht. Wie viele Datensätze willst du im Speicher vorhalten?
-> Soviel wie geht (haha ...). Aber im Ernst, es soll schon über 8h 3600/h mal pro Messteilnehmer sein. (Ein Messteilnehmer sind zwei solche Typedefs)

(07.04.2016 11:40 )jg schrieb:  Wenn ich dich bisher richtig verstanden habe, dann bekommst immer von einer bestimmten ID/Modul-Kombination einen neuen Datensatz. Problem dabei: Den hängst du jetzt auf Seite "ID", Spalte "Modul" in einer neuen Zeile dran. Zwecks 3D-Array wird dadurch aber auf jeder Seite & Spalte eine neue Zeile angefügt. Den nächsten Datensatz, den du bekommst, musst du also nicht anfügen, sondern in der passenden Kombination Seite/Spalte/Zeile ersetzen (wenn er denselben Zeitstempel hat die der Datensatz davor). Da wirst du IMHO nicht glücklich mit werden. Ganz unübersichtlich wird es, wenn du von verschiedenen Messteilnehmern die Daten in unterschiedlichen Zeitabständen bekommst.
-> Ich kriege immer die Daten die im Typedef angegeben sind (13x[Messwert1 und 2 + Timestamp] + 1x[MessslaveID + LTCModul)]. Es werden immer alle Messteilnehmer abgefragt, sprich nach einem Messdurchgang (=Jeder Teilnehmer schickt einmal seine Daten) -> ist der Datensatz immer gleich lang. Ich hab die ganze Sache jetzt auf ein 2D-Array reduziert (Siehe .jpg). Jedoch wird meine Abtastrate der Messteilnehmer mit steigender Arraygröße immer langsamer. Konkret, bei zwei Messteilnehmern bricht Labview nach dem Messdurchlauf 7000+ mit der Fehlermeldung "DAbort 0xF50EFD7B in MemoryManager.cpp" ab. Ich deute das als überlaufen eines lokalen Speichers wegen zu großem Array. Das sagt mir ich muss was an meiner Datenstruktur ändern.

(07.04.2016 11:40 )jg schrieb:  Dann lieber ein Arry of Cluster of Array of Cluster of Array...
-> Kannst du mir dazu ein Beispiel nennen. Mit der Konstruktion komme ich gerade nicht klar. Kann man abschätzen wie viel mehr Daten ich dadurch speichern kann? Gibt es noch weitere Möglichkeiten "Big-Data" zu sammeln? Z.b. zwischenspeichern in einer Datei?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2016, 07:34
Beitrag #8

Freddy Offline
Oldtimer
****


Beiträge: 729
Registriert seit: Aug 2008

2019, 2020, 2021
1996
DE

76275
Deutschland
RE: Messdaten in 3D Array speichern und sortieren
Zitat: Konkret, bei zwei Messteilnehmern bricht Labview nach dem Messdurchlauf 7000+ mit der Fehlermeldung "DAbort 0xF50EFD7B in MemoryManager.cpp" ab.
Hast Du Dir schon mal über eine Datenbankanwendung Gedanken gemacht?
Die Daten sollen doch irgendwann ausgewertet werden. Da würde ich schon lange mit einer SQL Datenbank operieren.

Gruß
Freddy

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.04.2016, 10:12 (Dieser Beitrag wurde zuletzt bearbeitet: 13.04.2016 09:17 von jg.)
Beitrag #9

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Smile RE: Messdaten in 3D Array speichern und sortieren
Du kannst ja mal selber hochrechnen: 86400 * 512 Datensätze willst du in RAM halten, jeder Datensatz braucht mal locker 200 Byte, wenn nicht sogar mehr. Und wenn du dauernd dein Array vergrößerst, dann ist schnell der Speicher voll. Nicht vergessen, LabVIEW alloziert für ein Array immer zusammenhängenden Speicherbereich.

Ich empfehle ebenfalls eine Datenbank als Speicherung für so viele Daten. Alternativ musst du halt jede so jede Minute deine Daten an die bestehenden csv Files anhängen.

Dann noch zu meinem Vorschlag der Datenstruktur, das ist so gemeint: Oberste Ebene 1D-Array. Jedes Array-Element ist ein Cluster. Der Cluster entspricht dem Messgerät (ID) und enthält z.B. wieder ein Array (die beiden Module). Die Array-Elemente sind wieder Cluster. Etc. pp. Wie genau du es aufbaust, das liegt bei dir, es muss auch nicht so kompliziert sein. Vorteil bei einem Array of Cluster of Array gegenüber einem 2D-Array: die beiden 1D-Array im Cluster müssen nicht mehr dieselbe Größe haben.

Insgesamt wird das aber nicht wesentlich weniger Speicher als dein 3D-Array brauchen.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
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
  Maximalwert aus Array speichern Hans96 3 5.044 15.07.2021 14:56
Letzter Beitrag: Hans96
  1D-Array sortieren Fuchs 6 4.068 09.03.2021 16:27
Letzter Beitrag: Fuchs
  String in Array speichern für flexible Gruppenbenennung in TDMS Datei hansi_1 3 4.041 10.12.2019 09:45
Letzter Beitrag: Freddy
  Encoder werte nach bestimmte steps in Array speichern ziarehmann 4 5.308 09.07.2017 23:33
Letzter Beitrag: Trinitatis
  Elemente aus 2D-Array nach bestimmten Index (n,m) auslesen und in 2D Array speichern 1990 2 5.620 29.04.2017 21:51
Letzter Beitrag: 1990
  Messdaten als glob. Variable speichern Majuler 3 3.995 10.11.2016 20:06
Letzter Beitrag: GerdW

Gehe zu: