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!
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).
..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
26.08.2008, 12:51 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2008 13:09 von sccompu.)
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.
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?!
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?
27.08.2008, 19:51 (Dieser Beitrag wurde zuletzt bearbeitet: 27.08.2008 19:52 von jg.)
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
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:
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...
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!
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.
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.
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.
' 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
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!
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 aufgefallen
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.