LabVIEWForum.de
Zeitstempel in Array schreiben - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Zeitstempel in Array schreiben (/Thread-Zeitstempel-in-Array-schreiben)



Zeitstempel in Array schreiben - tommy111 - 26.08.2008 11:55

Hallo,

folgendes Problem steht in meinem VI aus:

Ich will mir den Zeitstempel in ein Array schreiben. Diese Array hat eine Größe von 10049 und werden mittels Schieberegister nach jeder Schleife aktuallisiert.
Bei den "Datenpuffern" 0, 1, 2 und AC funktioniert das soweit ganz gut (siehe angehängtes Array 2). Will ich das gleiche jedoch mit einem Zeitstempel machen, hab ich immer nur einen Wert im Array drinne stehn (siehe angehängtes Array).

[attachment=14154]

..was mach ich da falsch? Oder kann man einen Zeitstempel nicht in ein Array schreiben?

Ziel und Zweck ist es später, die Daten (Puffer 0, 1 und 2) und deren zugehörigen Zeitwert (Puffer Zeitstempel) in eine Textdatei (siehe Anhang Datenausgabe.txt) abzuspeichern.

Hänge das Programm mal mit dazu in Lv85_img


Zeitstempel in Array schreiben - sccompu - 26.08.2008 12:51

Hallo tommy,

ist eigentlich klar warum sich dein Vi so verhält.
Du hast den Schleifenzähler auf >199 überwacht. Dann schaltet dein Case auf True
und du teilst dein Array auf (Alle Daten >Index 50)
Dies wird 4 mal durchgeführt und dein Array ist dann kleiner 50 Datensätze.
Der Teil größer Index 50 enthält dann keine Datensätze mehr (also leeres Array) wird beim nächsten
Schleifendurchlauf um einen Wert erhöht (1 Datensatz im Array), usw.

Gruß

Christian


Zeitstempel in Array schreiben - tommy111 - 27.08.2008 16:16

Zitat:ist eigentlich klar warum sich dein Vi so verhält.
Du hast den Schleifenzähler auf >199 überwacht. Dann schaltet dein Case auf True
und du teilst dein Array auf (Alle Daten >Index 50)
Dies wird 4 mal durchgeführt und dein Array ist dann kleiner 50 Datensätze.
Der Teil größer Index 50 enthält dann keine Datensätze mehr (also leeres Array) wird beim nächsten
Schleifendurchlauf um einen Wert erhöht (1 Datensatz im Array), usw.

..hmm, entweder steh ich jetzt auf em Schlauch oder ich versteh das net?! Pccrash

Die ersten 4 Datenpuffer (Schieberegister) funktionieren doch mit diesem Prinzip super. Ich hab immer nur einen bestimmten Datensatz im Array drinne.

Nur wenn ich geanu das selbe mit dem Zeitstempel machen will, funktioniert das net. Hängt das nun an meinem Verständnis, oder an dem Zeitstempel? Kann ich den nicht einfach so wie meine anderen Daten in ein Array schreiben?


Zeitstempel in Array schreiben - jg - 27.08.2008 19:51

Dein Problem liegt, denke ich, hier begraben:

Deine Datenarrays sind zu Beginn 50x größer als dein Zeitstempel-Array. Denn pro Schleifendurchlauf sampelst du 50 Datenpunkte, aber nur einen 1 Zeitstempel.

Wenn also nach 200 Schleifendurchläufen der True-Case zuschlägt, sind deine Datenarrays zwar, wie beschrieben 10500 Elemente groß, dass Zeitstempel-Array enthält aber nur 201 Elemente.

MfG, Jens

Offtopic2

Ein gut gemeinter Rat: Jedes Frontpanel-Element sollte ein einfaches für den Programmierer aussagekräftiges Label haben, dass man dann auch bei dem entsprechenden Symbol im BD anzeigt. Wenn du dann für den Anwender eine andere Bezeichnung brauchst, dann verwende hierfür bitte die Caption / Untertitel, also Label unsichtbar machen, Caption anzeigen. Weiterer Vorteil bei diesem Vorgehen: Caption kann man auch zur Laufzeit per PropertyNode setzen, Label nicht!

Abschreckendes Bsp aus deinem BD:
[attachment=14187]
Die Labels sind lang und verschoben, jetzt hast du sie im BD verkleinert und teilweise sogar freie Texte als Beschreibung dazu gesetzt. Gleich diesen kurzen Text als Label verwenden wäre einfacher...


Zeitstempel in Array schreiben - sccompu - 28.08.2008 06:53

Hallo tommy,

schau mal das angehängte Vi an.
Soll das so funktionieren? Willst du im Zeitstempelarray immer die letzten 50 Werte haben?
Dann sollte das so funktionieren.
Ist etwas umständlich programmiert, aber auf die schnelle tuts das schon.

Gruß
Christian


Zeitstempel in Array schreiben - tommy111 - 28.08.2008 08:48

Zitat:Dein Problem liegt, denke ich, hier begraben:

Deine Datenarrays sind zu Beginn 50x größer als dein Zeitstempel-Array. Denn pro Schleifendurchlauf sampelst du 50 Datenpunkte, aber nur einen 1 Zeitstempel.

Wenn also nach 200 Schleifendurchläufen der True-Case zuschlägt, sind deine Datenarrays zwar, wie beschrieben 10500 Elemente groß, dass Zeitstempel-Array enthält aber nur 201 Elemente.

MfG, Jens

..hab mir das nochmal durch en Kopf gehn lassen und ich denke genau das ist das Problem. Ich glaub ich muß den Zeitstempel vor die Programmschleife setzen. Dann an die derzeitige Stelle des Zeitstempels muß ich dann irgendwie die Zeit pro Schleifendurchlauf im Schieberegister hochzählen, dann müsste das ganze funktionieren?!

Zitat:Ein gut gemeinter Rat: Jedes Frontpanel-Element sollte ein einfaches für den Programmierer aussagekräftiges Label haben, dass man dann auch bei dem entsprechenden Symbol im BD anzeigt. Wenn du dann für den Anwender eine andere Bezeichnung brauchst, dann verwende hierfür bitte die Caption / Untertitel, also Label unsichtbar machen, Caption anzeigen. Weiterer Vorteil bei diesem Vorgehen: Caption kann man auch zur Laufzeit per PropertyNode setzen, Label nicht!

..werd ich für die kommenden Vi's beherzigen. Danke für den Rüge.Unsure

Zitat:Hallo tommy,

schau mal das angehängte Vi an.
Soll das so funktionieren? Willst du im Zeitstempelarray immer die letzten 50 Werte haben?
Dann sollte das so funktionieren.
Ist etwas umständlich programmiert, aber auf die schnelle tuts das schon.

Gruß
Christian

..hmm ich will eher die 10050 Zeitwerte passend zu meinen 10050 Messwerten der oberen Datenpuffer (0, 1 und 2) haben. Trotzdem danke für die Mühe. Werd's mal, wie oben beschrieben, versuchen.

Bin trotzdem für jeden weiteren Rat dankbar....


Zeitstempel in Array schreiben - jg - 28.08.2008 13:59

' schrieb:..hab mir das nochmal durch en Kopf gehn lassen und ich denke genau das ist das Problem. Ich glaub ich muß den Zeitstempel vor die Programmschleife setzen. Dann an die derzeitige Stelle des Zeitstempels muß ich dann irgendwie die Zeit pro Schleifendurchlauf im Schieberegister hochzählen, dann müsste das ganze funktionieren?!
Nein, das ist auch nicht die Lösung, zumindest, wenn du zu jedem Datenwert eine Zeitstempel haben willst und dieses Array immer genauso groß sein soll!

Nochmal, pro Schleifendurchlauf hängst du 50 Datenpunkte an deine 3 großen Arrays dran, aber an dein Zeitstempel-Array nur einen Wert! In deiner Case-Struktur schneidest du aber bei allen Arrays immer 50 Werte weg!

Jetzt verstanden, was falsch läuft?

Übrigens, du hast jeweils schon einen Zeitstempel zu jedem 50er Satz an Daten, denn dein Read-AI Array gibt dir Waveforms zurück, die aus den Komponenten t0 (=Zeitstempel des ersten Datenwerts), Delta-t (zeitunterschied zwischen 2 Werten) und den Daten selbst besteht.

MfG, Jens


Zeitstempel in Array schreiben - tommy111 - 28.08.2008 14:29

Zitat:ZITAT(tommy111 @ 28.08.2008 , 09:48:31) *
..hab mir das nochmal durch en Kopf gehn lassen und ich denke genau das ist das Problem. Ich glaub ich muß den Zeitstempel vor die Programmschleife setzen. Dann an die derzeitige Stelle des Zeitstempels muß ich dann irgendwie die Zeit pro Schleifendurchlauf im Schieberegister hochzählen, dann müsste das ganze funktionieren?!

Nein, das ist auch nicht die Lösung, zumindest, wenn du zu jedem Datenwert eine Zeitstempel haben willst und dieses Array immer genauso groß sein soll!

Nochmal, pro Schleifendurchlauf hängst du 50 Datenpunkte an deine 3 großen Arrays dran, aber an dein Zeitstempel-Array nur einen Wert! In deiner Case-Struktur schneidest du aber bei allen Arrays immer 50 Werte weg!

Jetzt verstanden, was falsch läuft?

..ja, ist mir jetzt endlich auch mal aufgefallenIdee

Zitat:Übrigens, du hast jeweils schon einen Zeitstempel zu jedem 50er Satz an Daten, denn dein Read-AI Array gibt dir Waveforms zurück, die aus den Komponenten t0 (=Zeitstempel des ersten Datenwerts), Delta-t (zeitunterschied zwischen 2 Werten) und den Daten selbst besteht.

...dazu hab ich auch schon einige Themen im LV-Forum gelesen. War meine zweite Idee.
Da die spätere Ausgabe der Messdaten ja sowieso in Excel weiterverarbeitet werden sollen wär es sinnvoller nur das dt zu jedem Messwert anzugeben, zusätzlich halt noch eine genaue Angabe über den Zeitpunkt der Messung.
Die *.txt soll dann wie im Anhang aussehen, das reicht vollkommen.

Nur muß ich jetz noch schauen wie ich mir ein array baue, welches aus den 10050 Elementen besteht und der Abstand jedes Elementes dann halt dt hat. (siehe Anhang)

Bin heut nur etwas am kränkeln und net ganz auf der Höhe, mal sehn ob ich morgen sowas auf die Reihe bekommen oder sogar hier schon sowas gepostet wurde. Falls einem von euch was derartiges über die Füße läuft bin ich natürlich über en link oder so dankbar. Offtopic2

LG
Jürgen