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!
27.11.2015, 11:47 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2015 13:58 von jg.)
ich habe eine State-Machine zum Speichern von Messdaten (TDMS) erstellt.
Darüber hinaus soll in einem Diagramm das Messsignal wiedergegeben werden.
Um die Messung zeitlich zu begrenzen, soll es über ein Bedienelement möglich sein, eine Messdauer zu definiert.
Genau dort liegt mein Problem, denn das Programm speichert nicht so lange wie unter Messdauer eingestellt wird.
Stelle ich 20 sec. ein, dann werden nur 4 sec. gespeichert. Bei 40 sec. sind es 8 sec. und bei 60 sec. eingestellter Messdauer werden nur 12 sec. gespeichert.
Dazu kommt, dass mit dem Start der Messung das Signal im Diagramm merklich langsamer abläuft und nachdem die Messung beendet wurde, extrem schnell.
Nach einer gewissen Zeit läuft dann das Signal wieder in normaler Geschwindigkeit.
Könnte vielleicht jemand von euch einen Blick in das Programm werfen und mir einen Tipp geben woran das liegen könnte?
1) Du schiebst einfach viel zu viele kleine Datenelemente in die Queue, die können dann bei aktivierter Filespeicherung gar nicht mehr so schnell abgearbeitet werden.
Lösung: Größere Waveforms aus DAQmx holen:
2) Was sollen die Race-Conditions im Aufnahme-Schritt? Wozu eine eigenen Überprüfung, ob die Zeit abgelaufen ist? Das liefert dir das VI "Verstrichene Zeit":
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!
Zitat:1) Du schiebst einfach viel zu viele kleine Datenelemente in die Queue, die können dann bei aktivierter Filespeicherung gar nicht mehr so schnell abgearbeitet werden.
Lösung: Größere Waveforms aus DAQmx holen:
Ja stimmt den Anschluss hatte ich total vergessen, danke für den Hinweis. Jetzt habe ich aber das Problem das mein Programm bei der Ausführung stockt. Im Task-Manager von Windows wird mir aber weder eine hohe CPU-Auslastung angezeigt noch ist der Arbeitsspeicher voll ausgelastet. Woran kann das liegen, bzw. wie kann ich dieses Problem abstellen?
Zitat:2) Was sollen die Race-Conditions im Aufnahme-Schritt? Wozu eine eigenen Überprüfung, ob die Zeit abgelaufen ist? Das liefert dir das VI "Verstrichene Zeit":
Ja da hast du vollkommen recht, der Teil ist total überflüssig und ich hätte es eigentlich besser wissen müssen.
In dem Bereich habe ich leider auch noch ein Problem. Wie muss ich das anstellen, dass die verstrichene Zeit wieder auf 0 gesetzt wird, bevor eine neue Messung beginnt?
Denn bisher ist es so, dass beim ersten Start einer Messung noch alles funktioniert aber bei nachfolgenden Messungen gibt es Probleme, die sich wie folgt äußern:
- Messbutton wird betätigt -> eine neue Datei wird erstellt und anschließend die Aufnahme beendet noch bevor die Elapsed Time startet
- Messbutton wird erneut betätigt -> die Datei wird wie gewollt gespeichert
Viele Grüße,
Gifo
30.11.2015, 10:18 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2015 10:19 von jg.)
Zitat:Ich glaube dann musst du mir vielleicht doch mal erklären, was du mit "Race Condition" in dem Fall meinst?
Jens verweist auf meine Signatur.
Meine Signatur verweist in ROT auf Einträge in der LabVIEW-Hilfe!
Jens meint die lokale Variable "Time has elapsed", die hier die RaceCondition erzeugt - und nebenbei vollkommen unnötig ist, wenn du einfach mehr DRAHT verwenden würdest…
Wie Gerd schon schreibt, das hier:
Du kannst nicht vorhersagen, was LabVIEW zuerst abarbeitet. Das Schreiben des Terminal oder das Lesen der lokalen Variable...
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!
danke für den Hinweis.
Durch verwenden von "Draht" arbeite ich mit dem Data-Flow Prinzip und durch Verwendung von "Lokalen Variablen" unterbreche ich dieses Prinzip.
Also meine Aussage ist jetzt auf mein Programm bezogen und nicht verallgemeinert! Aber habe ich das so richtig verstanden?
Hättet ihr denn einen Tipp für mich, wie ich meine anderen beiden Probleme lösen kann?
(30.11.2015 10:13 )gifo schrieb: Ja stimmt den Anschluss hatte ich total vergessen, danke für den Hinweis. Jetzt habe ich aber das Problem das mein Programm bei der Ausführung stockt. Im Task-Manager von Windows wird mir aber weder eine hohe CPU-Auslastung angezeigt noch ist der Arbeitsspeicher voll ausgelastet. Woran kann das liegen, bzw. wie kann ich dieses Problem abstellen?
Was genau meinst du mit stocken? Bei mir läuft das Programm...
Zitat:Denn bisher ist es so, dass beim ersten Start einer Messung noch alles funktioniert aber bei nachfolgenden Messungen gibt es Probleme, die sich wie folgt äußern:
- Messbutton wird betätigt -> eine neue Datei wird erstellt und anschließend die Aufnahme beendet noch bevor die Elapsed Time startet
- Messbutton wird erneut betätigt -> die Datei wird wie gewollt gespeichert
Indem du sinnvoll und korrekt den Eingang "Reset" deines "Verstrichene Zeit" VI verwendest. Beim ersten Aufruf des Schritts "Aufnahme" nach "Einstellungen" muss da ein TRUE anliegen, danach ein FALSE.
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!
Okay ich hab es eben mit weniger Samples pro Kanal (1000 statt 10000) probiert und da lief das Programm flüssiger.
Mit stocken meine ich, dass das Signal im Diagramm nicht flüssig läuft und das Programm zeitverzögert auf Eingaben reagiert. Also wenn Button gedrückt werden oder z.B. die Messdauer verändert wird.
Zitat:Indem du sinnvoll und korrekt den Eingang "Reset" deines "Verstrichene Zeit" VI verwendest. Beim ersten Aufruf des Schritts "Aufnahme" nach "Einstellungen" muss da ein TRUE anliegen, danach ein FALSE.
Ich hab das jetzt durch ein Schieberegister gelöst und gebe bei "Case-Einstellungen" ein True ins Schieberegister und bei "Case-Aufnahme" ein False. Ging dein Tipp in die Richtung oder gibt es da noch eine einfachere Lösung?