Einen schönen guten Tag,
Ich habe die Aufgabe eine Software für eine Messdatenerfassung für Strom,Spannung und Leistungen herzustellen. Das ganze soll in einer.dat Datei abgespeichert und folgenderweise versehen werden(Ist nur ein Beispiel):
Titel blabla
Date_Time 1.1.1904
Zeit/s P1/W P2/W
0.000 0.12 xx
0.011 0.36 xx
0.025 0.21 xx .... usw.
Das klappt alles auch soweit und so gut ,bloß habe ich das Problem , dass die Sekunden von 0,000 s beim nächsten Wert(Durchlauf) auf 0,1 s springt ,obwohl ein Messintervall 100 ms betragen und ich hier eine Netzfrequenz von 50 Hz messen soll. Brauche hilfe bin am verzweifeln und für Express-VI hater habe ich auch das spreadsheet zum speichern genommen. Wäre sehr erfreut auf Antworten und bedanke mich im Vorraus. Im Anhang stelle ich euch die LV-Datei und txt Datei zur verfügung.
Zitat:Das klappt alles auch soweit und so gut ,bloß habe ich das Problem , dass die Sekunden von 0,000 s beim nächsten Wert(Durchlauf) auf 0,1 s springt ,obwohl ein Messintervall 100 ms betragen
Hallo Q62,
mache ich einen Denkfehlr, oder sind 100ms nicht genau 0,1s?
Gruß, Marko
(23.07.2013 17:50 )Trinitatis schrieb: [ -> ]Zitat:Das klappt alles auch soweit und so gut ,bloß habe ich das Problem , dass die Sekunden von 0,000 s beim nächsten Wert(Durchlauf) auf 0,1 s springt ,obwohl ein Messintervall 100 ms betragen
Hallo Q62,
mache ich einen Denkfehlr, oder sind 100ms nicht genau 0,1s?
Gruß, Marko
Hi Marko,
danke erst einmal das du dich meldest. Richtig 100ms sind 0,1 s , bei 50 Hz hast du 20 ms für eine Periode.
Das heisst wenn mein Messintervall von 0 bis 100 ms sein soll, passen 5 Perioden in den Messintervall.
Nun aber zurück zum Messen: Wenn ich z.b. ein Signal derart messe habe ich nichts von dem instantanem Wert in dem Messintervall .
Ich überspringe quasi das Messintervall und habe nichts von dem instantanen Wert und deshalb will ich "schneller" die Zeit messen und nicht langsam
(23.07.2013 20:59 )Q62 schrieb: [ -> ]Hi Marko,
danke erst einmal das du dich meldest. Richtig 100ms sind 0,1 s , bei 50 Hz hast du 20 ms für eine Periode.
Das heisst wenn mein Messintervall von 0 bis 100 ms sein soll, passen 5 Perioden in den Messintervall.
Nun aber zurück zum Messen: Wenn ich z.b. ein Signal derart messe habe ich nichts von dem instantanem Wert in dem Messintervall .
Ich überspringe quasi das Messintervall und habe nichts von dem instantanen Wert und deshalb will ich "schneller" die Zeit messen und nicht langsam
Aber kehren wir zurück zu deinem VI und besprechen/kritisieren einige Merkwürdigkeiten.
1) Zum Erstellen von Pfaden solltest du Build Path und Strip Path verwenden. Durch einen String als "Verzeichnis"-Start (das Control "Pfad") ist das VI nicht mehr einfach konvertierbar auf andere Dateisysteme, bei denen z.B. ein / anstatt \ verwendet wird.
2) Was erhoffst du dir mit der Mess-While Schleife zu erreichen? Wozu verwendest du "Delete From Array", hier langt auch "Index Array". Weshalb 2x dieselbe Spannung per "Delete From Array" herausholen? Wieso gibst du nur den allerletzten Messdurchlauf an das Speicher-VI außerhalb der While-Schleife weiter? Was erhoffst du durch das "Zeit-Array" (soll heißen das Array, dass du per Schieberegister zusammenbaust) zu erreichen?
Zusammenfassend: Laut deiner Aussage funzt (fast) alles. Ich möchte das stark bezweifeln. Zumindest funktioniert es sicher nicht so, wie du dir vielleicht vorstellst, dass es funktionieren sollte.
Gruß, Jens
(23.07.2013 20:59 )Q62 schrieb: [ -> ]Nun aber zurück zum Messen: Wenn ich z.b. ein Signal derart messe habe ich nichts von dem instantanem Wert in dem Messintervall .
Ich überspringe quasi das Messintervall und habe nichts von dem instantanen Wert und deshalb will ich "schneller" die Zeit messen und nicht langsam
Du bastelst dir einen Zeitstempel...das ist vollkommen überflüssig. Verwende mal den "Waveform Data type", da ist der Zeitstempel (von der Hardware!) automatisch mit dabei. Dazu gibts jede Menge Beispiele im Example Finder.
Und dann ist der Zeitstempel auch absolut äquidistant, weil sich der DAQmx-Treiber bzw. die Karte darum kümmert! Und dann kriegst du auch mehr Messwerte innerhalb von 100ms, nämlich soviele wie du per Abtastrate (meinetwegen auch per DAQ-Assi) einstellst!
A.
Hallo,
noch ein weiteres Problem:
Du baust in deiner Messschleife ein 2D-Array zusammen mit 3 Spalten: einmal "relative Zeit", zweimal Spannungswerte. Du bekommst 1000 Samples vom DAQ-Assi für die beiden Spannungen geliefert - und "klebst" da einfach eine Zeitspalte davor, die
überhaupt nichts mit den Zeitpunkten der Samples zu tun hat...
Daraus resultieren gleich
zwei Fehler: die von dir beobachteten 0,1s-Intervalle an der Zeitspalte und zweitens die vielen Nullen ab
Mitte 15% der Zeitspalte...
P.S.: Ich finde es immer wieder toll, wie Leute riesige ConcatString (mit vielen Zusatzfunktionen) aufbauen, statt nur ein einziges gut selbstdokumentierendes FormatIntoString zu verwenden...
(23.07.2013 21:54 )jg schrieb: [ -> ] (23.07.2013 20:59 )Q62 schrieb: [ -> ]Hi Marko,
danke erst einmal das du dich meldest. Richtig 100ms sind 0,1 s , bei 50 Hz hast du 20 ms für eine Periode.
Das heisst wenn mein Messintervall von 0 bis 100 ms sein soll, passen 5 Perioden in den Messintervall.
Nun aber zurück zum Messen: Wenn ich z.b. ein Signal derart messe habe ich nichts von dem instantanem Wert in dem Messintervall .
Ich überspringe quasi das Messintervall und habe nichts von dem instantanen Wert und deshalb will ich "schneller" die Zeit messen und nicht langsam
Aber kehren wir zurück zu deinem VI und besprechen/kritisieren einige Merkwürdigkeiten.
1) Zum Erstellen von Pfaden solltest du Build Path und Strip Path verwenden. Durch einen String als "Verzeichnis"-Start (das Control "Pfad") ist das VI nicht mehr einfach konvertierbar auf andere Dateisysteme, bei denen z.B. ein / anstatt \ verwendet wird.
2) Was erhoffst du dir mit der Mess-While Schleife zu erreichen? Wozu verwendest du "Delete From Array", hier langt auch "Index Array". Weshalb 2x dieselbe Spannung per "Delete From Array" herausholen? Wieso gibst du nur den allerletzten Messdurchlauf an das Speicher-VI außerhalb der While-Schleife weiter? Was erhoffst du durch das "Zeit-Array" (soll heißen das Array, dass du per Schieberegister zusammenbaust) zu erreichen?
Zusammenfassend: Laut deiner Aussage funzt (fast) alles. Ich möchte das stark bezweifeln. Zumindest funktioniert es sicher nicht so, wie du dir vielleicht vorstellst, dass es funktionieren sollte.
Gruß, Jens
Erstmals danke Jens das du auf meinen Beitrag eingegangen bist ,
1) die Stringkonvertierung habe ich nun mit Build Path ersetzt
2)"Was erhoffst du dir mit der Mess-While Schleife zu erreichen?" Sie dient sie dazu ,dass das zu jedem instantanen Wert eine instantane Zeit zugeordnet wird um daaraus ein Array zu basteln.
"Wozu verwendest du "Delete From Array", hier langt auch "Index Array"" weil ich anfangs nichts anderes gefunden hab
"Weshalb 2x dieselbe Spannung per "Delete From Array" herausholen?" Das wird vom Funktionsgenerator als Test erzeugt ,habe jetzt einfach mal 2mal die selbe Spannung genommen(spielt ja auch keine Rolle).
"Wieso gibst du nur den allerletzten Messdurchlauf an das Speicher-VI außerhalb der While-Schleife weiter?" Weil ich durch den allerletzten Messdurchlauf den allerletzten instantanen Spannung ein Wert zuweise.
(24.07.2013 07:46 )GerdW schrieb: [ -> ]Hallo,
noch ein weiteres Problem:
Du baust in deiner Messschleife ein 2D-Array zusammen mit 3 Spalten: einmal "relative Zeit", zweimal Spannungswerte. Du bekommst 1000 Samples vom DAQ-Assi für die beiden Spannungen geliefert - und "klebst" da einfach eine Zeitspalte davor, die überhaupt nichts mit den Zeitpunkten der Samples zu tun hat...
Daraus resultieren gleich zwei Fehler: die von dir beobachteten 0,1s-Intervalle an der Zeitspalte und zweitens die vielen Nullen ab Mitte 15% der Zeitspalte...
P.S.: Ich finde es immer wieder toll, wie Leute riesige ConcatString (mit vielen Zusatzfunktionen) aufbauen, statt nur ein einziges gut selbstdokumentierendes FormatIntoString zu verwenden...
Danke erst einmal für deine Antwort,
""klebst" da einfach eine Zeitspalte davor, die
überhaupt nichts mit den Zeitpunkten der Samples zu tun hat..." Habe ich aber schon erklärt deswegen frage ich gibt es da nicht eine andere Möglichkeit. Das habe ich ja gemacht um zu zeigen wo ich hilfe brauche .
"zweitens die vielen Nullen ab
Mitte 15% der Zeitspalte..."
das hast du richtig erkannt
gibt es da kein besseren Timer?
(24.07.2013 05:48 )Achim schrieb: [ -> ] (23.07.2013 20:59 )Q62 schrieb: [ -> ]Nun aber zurück zum Messen: Wenn ich z.b. ein Signal derart messe habe ich nichts von dem instantanem Wert in dem Messintervall .
Ich überspringe quasi das Messintervall und habe nichts von dem instantanen Wert und deshalb will ich "schneller" die Zeit messen und nicht langsam
Du bastelst dir einen Zeitstempel...das ist vollkommen überflüssig. Verwende mal den "Waveform Data type", da ist der Zeitstempel (von der Hardware!) automatisch mit dabei. Dazu gibts jede Menge Beispiele im Example Finder.
Und dann ist der Zeitstempel auch absolut äquidistant, weil sich der DAQmx-Treiber bzw. die Karte darum kümmert! Und dann kriegst du auch mehr Messwerte innerhalb von 100ms, nämlich soviele wie du per Abtastrate (meinetwegen auch per DAQ-Assi) einstellst!
A.
Danke A.,
http://digital.ni.com/public.nsf/allkb/B...DF00363B10
Wenn du das meinst, habe ich getestet funktioniert nicht.
Wenn du was anderes meinst , bitte über so ein ähnlichen Link posten , damit ich weiss welcher es ist .
Hallo Q62,
siehe
Beitrag #5...
Zitat:Wenn du das meinst, habe ich getestet funktioniert nicht.
Ja, das meinte Achim. Wenn es nicht funktioniert, dann ist irgendwas in deinem VI nicht in Ordnung.
Außerdem ist "funktioniert nicht" keine wirklich gute Fehlerbeschreibung...
Beitrag #5
hab es versucht ,gibt mir aber auch komische Werte aus. Beispiel: Bei 0,001 s hat er den Wert xyz und dann wird aber beim nächsten Durchlauf ein anderer Wert der gleichen Zeit erzeugt. Außerdem entstehen weiter Nullen, wie schon GerdW darauf angesprochen. Also wenn ich stopp z.b. drücke, sollen alle Zeitwerte des Digitaloszilloskopes schon in der .Dat reingeschrieben werden