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 

Probleme mit "Verstrichene Zeit" Baustein und Array-Addition



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!

30.07.2015, 09:56
Beitrag #1

antonym Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Jul 2015

2013
2015
DE



Probleme mit "Verstrichene Zeit" Baustein und Array-Addition
Hallo Forum,

ich habe in meinem VI einen DAQmx Read und lese mehrere Thermoelemente damit aus.
Nach einer gewissen Zeit (wenn Temperatur eingeschwungen), möchte ich die Messdaten (Array) über ein Schieberegister aufeinanderaddieren und dann das Ergebnis durch die Anzahl der Messdurchgänge teilen.
Jetzt sollte ich einen Array voller Mittelwerte haben. dieses Array mittele ich dann erneut über die Mean-Funktion und erhalte letztendlichen einen gemittelten Wert über die Zeit.

Nun habe ich das "Warten bis eingeschwungen" über den Baustein "verstrichene Zeit" und einer Case-Struktur gelöst.
Allerdings bekomme ich dann als Mean am Ende NaN angezeigt.

Danach habe ich ewig nach der Fehlerquelle gesucht, und dann ist mir aufgefallen, dass wenn ich die Verstrichene Zeit-Bausteine "Warten bis Eingeschwungen" und "warten" gegen eine True Konstante ersetze, das Addieren der Arrays einwandfrei, und somit auch die Mittelung am Ende funktioniert.

Was hat denn der Baustein Verstrichene Zeit mit dem Addieren von Arrays zu tun?!

Bekommt man das irgendwie gelöst?
Ich habe bereits schon versucht die Uhrzeit zu Beginn einzulesen und dann bei jedem Durchgang nochmals die Zeit einzulesen, um ein delta-t zu bilden.(also ohne den verstrichene Zeit Baustein)
Allerdings funktioniert dann die Mittelung auch nicht.

Es scheint so, dass das Addieren der Arrays nur funktioniert wenn kein Zeitbaustein vor der Addierung geschaltet ist.

Anbei mein VI, bitte nicht wundern wenn manche Case/while-Strukturen keinen Sinn machen. Ich habe den Inhalt des Vis aus einem größeren Vi kopiert, welches diese Schleifen (mit weiterem Inhalt, den ich hier gelöscht habe) benötigt.



Viele Grüße und vielen Dank im voraus!

lv13_img


Angehängte Datei(en)
13.0 .vi  Timer_Array_Problem.vi (Größe: 90,59 KB / Downloads: 177)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30.07.2015, 10:06 (Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2015 10:07 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition
Hallo antonym,

Zitat:Danach habe ich ewig nach der Fehlerquelle gesucht
Hast du dabei auch mal Debugging mittels Sonden gedacht? Hmm

Tipp: Eine mögliche Fehlerquelle sind immer wieder "default if unwired"-Tunnel an Case-Strukturen.

Fragen:
- Warum musst du deine Waveforms in DDT umwandeln?
- Warum verwendest du SplitSignal, um an die Elemente eines Arrays zu kommen? Dafür gibt es eigentlich IndexArray…
- Wenn du nicht alle Messkanäle brauchst: ArraySubset…
- Warum fragst du keine feste Sampleanzahl bei DAQmxRead ab?
- Warum fragst du Waveforms ab, wenn du hinterher eigentlich mit einem Array of DBL arbeiten willst?
- Bist du dir bei den ganzen Typumwandlungen zu und von DDT sicher? Wirklich? Ein Array of Waveforms (=2D-Array of Samples) wird zu DDT und das dann zu einem Array of DBL (=1D-Array of Samples)!?
- Brauchst du wirklich 3mal ElapsedTime in einem VI?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2015, 11:56
Beitrag #3

antonym Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Jul 2015

2013
2015
DE



RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition
Hallo GerdW,

nein Debugging habe ich nicht gemacht, da ich so auf den Fehler gestoßen bin.

Das mit dem "Default if unwired" werde ich mir noch anschauen evtl. liegt da was im Argen.

Zitat:- Warum fragst du Waveforms ab, wenn du hinterher eigentlich mit einem Array of DBL arbeiten willst?
Die Waveforms benötige ich , da ich nebenher noch einen Graph anzeigen lasse und zudem die Messwerte mit jeweiliger Zeit in eine Excel-Datei schreibe.
Bei DBL fehlt mir der Zeitwert.
Und Umwandeln in DBL muss ich, da die Mean-Funktion keine Dynamischen Daten "frisst".(oder etwa doch?)

Zitat:- Warum verwendest du SplitSignal, um an die Elemente eines Arrays zu kommen? Dafür gibt es eigentlich IndexArray…
Das mit dem Split Signal war zugegeben eher Bequemlichkeit, da ich mir nicht sicher bin wie der Aufbau des Arrays der Messdaten (mit zugehöriger Zeit pro Sample) aussieht.

Zitat:- Wenn du nicht alle Messkanäle brauchst: ArraySubset…
Ich brauche schon alle Messkanäle, nur einer (Umgebungstemperatur) geht separat auf eine Überwachungsfunktion.

Zu der Samplezahl, da frage ich einen Wert auf Anforderung ab (pro Kanal)

Zitat:- Warum musst du deine Waveforms in DDT umwandeln?
Zitat:- Bist du dir bei den ganzen Typumwandlungen zu und von DDT sicher? Wirklich? Ein Array of Waveforms (=2D-Array of Samples) wird zu DDT und das dann zu einem Array of DBL (=1D-Array of Samples)!?

Darüber habe ich mir noch keine Gedanken gemacht. ich habe, von der Graph-Anzeige, keinen Unterschied in der Darstellung zwischen DDT und Array of Waveforms erkannt. die Mittelung am Ende passt ja auch, wenn ich die "verstrichene Zeit" Bausteine gegen True Konstanten ersetze.
Hauptsächlich verwende ich DDT aus dem Grund, weil ich eigentlich die Temperaturwerte in einem SubVI (siehe Anhang) auslese und dieses gibt mir eben mit dem "data" Baustein die Werte im DDT Format ins Haupt-VI aus. Kann man das abändern?(bin noch nicht so LabView erfahren)

Zitat:- Brauchst du wirklich 3mal ElapsedTime in einem VI?
Jein, einmal zum Warten bis mein Signal eingeschwungen ist und einmal um eine feste Messzeit, in der die Werte zur Mittelung "aufgezeichnet" werden, zu gewährleisten. Den ersten ElapsedTime brauche ich nicht.(den habe ich nur aus Testzwecken aktuell drin, kann auch ein Boolesch sein.)


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2015, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2015 12:03 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition
Hallo antonym,

Zitat:Zu der Samplezahl, da frage ich einen Wert auf Anforderung ab (pro Kanal)
Nein, tust du nicht.
Einfach mal die Hilfe zur Funktion lesen…

Und wenn du das tun würdest, bräuchtest du weder Waveforms noch Mittelwert-Berechnung. Oder wie sinnvoll ist der Mittelwert über ein Sample? (Du willst doch einen Mittelwert pro Messkanal, oder?)

Zitat:Kann man das abändern?
Ja, durch Verzicht auf ExpressVIs. Big Grin
Oder indem man explizit in einen sinnvollen Datentyp umwandelt!

Zitat:Hauptsächlich verwende ich DDT aus dem Grund, weil ich eigentlich die Temperaturwerte in einem SubVI (siehe Anhang) auslese und dieses gibt mir eben mit dem "data" Baustein die Werte im DDT Format ins Haupt-VI aus.
Du liest ein Array of Waveform und stellst es in einem Graph/Chart dar, der auf DDT als Datentyp gestellt ist. Selber schuld…
Lösche diesen Graph und ersetze ihn durch einen "normalen" Indicator! (In einem subVI braucht man eh keinen Chart/Graph…)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2015, 12:33
Beitrag #5

antonym Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Jul 2015

2013
2015
DE



RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition
Hallo GerdW,

(30.07.2015 11:59 )GerdW schrieb:  Nein, tust du nicht.
Einfach mal die Hilfe zur Funktion lesen…

Und wenn du das tun würdest, bräuchtest du weder Waveforms noch Mittelwert-Berechnung. Oder wie sinnvoll ist der Mittelwert über ein Sample? (Du willst doch einen Mittelwert pro Messkanal, oder?)

Doch, ich lese pro Kanal einen Messwert (Temp. und Zeit) auf Anforderung aus (So ist es auch im NI MAX eingestellt)

Die Mittelung benötige ich, da ich über eine Zeit X alle gemessenen Werte aufzeichnen und anschließend mitteln will.

Dazu addiere ich der Einfachheit halber die Messwerte im DBL Array bei jedem Case-Durchlauf aufeinander (Array(t=0) + Array(t=1) + ... ).
Nun habe ich nach Zeit X ein Array voller aufaddierten Messdaten, dieses Array teile ich durch die Anzahl der Messungen und ich erhalte ein Array voller Mittelwerte über die Zeit.
Anschließend mittele ich die einzelnen Array-Werte über die Mean-Funktion und erhalte einen einzigen Mittelwert.

Zitat:Lösche diesen Graph und ersetze ihn durch einen "normalen" Indicator! (In einem subVI braucht man eh keinen Chart/Graph…)

Der Graph ist später nicht im SubVI sondern im HauptVI und wird später unbedingt benötigt, da ich anhand des Temperaturverlaufs auch optisch die Regelung der gemessenen Temperatur überprüfen möchte.



Aber nochmal zurück zur eigentlichen Frage:
gibt es irgendeinen möglichen Grund wieso der ElapsedTime Baustein meine Array-Addition stört?
Mit Boolesch Konstanten funktionierts ja.Blink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2015, 13:11 (Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2015 13:23 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.398
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition

Akzeptierte Lösung

Hallo antonym,

Zitat:Der Graph ist später nicht im SubVI sondern im HauptVI
Ja eben. Und warum brauchst du dann einen Graph im subVI???

Zitat:gibt es irgendeinen möglichen Grund wieso der ElapsedTime Baustein meine Array-Addition stört?
Ich wiederhole mich ungern:
Zitat:Tipp: Eine mögliche Fehlerquelle sind immer wieder "default if unwired"-Tunnel an Case-Strukturen.
und
Zitat:Hast du dabei auch mal Debugging mittels Sonden gedacht?

Zitat:Dazu addiere ich der Einfachheit halber die Messwerte im DBL Array bei jedem Case-Durchlauf aufeinander (Array(t=0) + Array(t=1) + ... ).
Warum berechnest du in der Schleife nicht einfach den Mittelwert direkt?
Du brauchst nur einen Zähler für die schon gesammelten Werte: Mittelwert(i) = ( Mittelwert(i-1)*(i-1) + NeuerWert ) / i

So z.B.:
   

Zitat:Doch, ich lese pro Kanal einen Messwert
Leider sieht man nicht, wie der Task definiert wurde.
Im VI sieht man nur, dass du "-1" Samples vom DAQmxRead abfragst - und was das bedeutet, sagt dir die Hilfe zur Funktion!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2015, 13:50 (Dieser Beitrag wurde zuletzt bearbeitet: 30.07.2015 13:52 von antonym.)
Beitrag #7

antonym Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Jul 2015

2013
2015
DE



RE: Probleme mit "Verstrichene Zeit" Baustein und Array-Addition

Akzeptierte Lösung

Zitat:Ja eben. Und warum brauchst du dann einen Graph im subVI???

aktuell nur für Testzwecke.

Zitat:Warum berechnest du in der Schleife nicht einfach den Mittelwert direkt?
Du brauchst nur einen Zähler für die schon gesammelten Werte: Mittelwert(i) = ( Mittelwert(i-1)*(i-1) + NeuerWert ) / i

Aus Gründen der Numerik ist es besser nicht bei jedem Schleifendurchgang zu addieren und zu multiplizieren/dividieren (Rundungsfehler!)

Daher will ich zuerst addieren, und am ende erst dividieren. Wenn die Schleife einmal pro Sekunde ausgeführt wird dann sind das bei 5Minuten Messdauer 300 Durchgänge. D.h. ich rechne 300 mal Mittelwert(i) = ( Mittelwert(i-1)*(i-1) + NeuerWert ) / i
Mit jedem Rechenzeichen geht statistisch ein weiterer Fehler ein.

Besser ist es, ich addiere alle zuerst auf und teile ein bis zwei mal ganz am Ende.




Zitat:Leider sieht man nicht, wie der Task definiert wurde.
Im VI sieht man nur, dass du "-1" Samples vom DAQmxRead abfragst - und was das bedeutet, sagt dir die Hilfe zur Funktion!
Oh das muss ich mir ansehen, kann natürlich sein, dass ich das vergessen habe.



Also ich habe jetzt den Fehler gefunden.
Wie du bereits sagtest, war es der "Standard verwenden, wenn nicht verbunden" Tunnel/Knoten.

Ich habe es jetzt so gemacht für den Case: False
   

Erstaunlich wie einfach und banal manchmal die Lösung sein kann :-)
Vielen Dank!!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
Wink Rechentrainer Addition Multiplikation Nowhere Man 1 2.536 15.10.2019 14:39
Letzter Beitrag: GerdW
  RFC-Baustein für SAP-Kommunikation Heinz 9 13.410 14.11.2018 09:21
Letzter Beitrag: Freddy
  Signalverlauf verstrichene Zeit einbauen antwort 3 3.279 06.03.2017 15:03
Letzter Beitrag: GerdW
  Countdown-Anzeige mit "Verstrichene Zeit" stockt während Messung antonym 2 3.629 13.08.2015 16:00
Letzter Beitrag: antonym
  verstrichene Zeit messen paul2012 7 13.269 17.10.2014 13:01
Letzter Beitrag: paul2012
Question Mittelwert aus Zeit Array xrzr 9 5.836 22.04.2014 10:12
Letzter Beitrag: GerdW

Gehe zu: