LabVIEWForum.de
Messwerte speichern -> X Achse soll die Systemzeit sein - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Messwerte speichern -> X Achse soll die Systemzeit sein (/Thread-Messwerte-speichern-X-Achse-soll-die-Systemzeit-sein)



Messwerte speichern -> X Achse soll die Systemzeit sein - Dr_Skolsson - 11.12.2007 22:58

Hallöchen ..

Ich hab keine Ahnung wie ich folgendes lösen soll ...

Und zwar möchte ich Messwerte einlesen und zwar jede Sekunde einen. Diese möchte ich dann in eine Datei schreiben, welche als X Achsen"skalierung" allerdings die Systemzeit hat.

Soll so ausschauen:

Drück ich START für meine Messung:

y: | 4,56 | | 3,48 | |5,24 | usw
x: 10.12.2007 - 22:56:01 | 10.12.2007 - 22:56:02 | 10.12.2007 - 22:56:03 |


Bisher konnte ich nämlich nichtmal eine nur ansatzweise richtige Lösung finden ..

Vielleicht kann mir jemand weiterhelfen ?!

Vielen Dank !


Übrigens, ich verwende LabVIEW 8.2.1


Messwerte speichern -> X Achse soll die Systemzeit sein - monoceros84 - 12.12.2007 08:44

' schrieb:Übrigens, ich verwende LabVIEW 8.2.1

Dann: Profil_ergaenzen

Wie nimmst du denn die Messwerte auf? Als Waveform? Wenn ja -> gut, wenn nicht -> empfehlenswert. Waveforms haben eine Startzeit und dann für jeden Messwerte ein Zeitinkrement. So kannst du die Startzeit nachträglich (oder vorher) auf die Systemenzeit setzen. Wenn du nun jede Sekunde misst, dann wird immer automatisch eine Sekunde addiert...


Messwerte speichern -> X Achse soll die Systemzeit sein - Lucki - 12.12.2007 10:40

Anbei erst mal der fehlende "Ansatz". Wenn Du weitere Fragen hast --> gib Laut.

[attachment=10298]

Anbei noch ein VI für Konvertierung in beide Richtungen, das müßte auf jeden Fall helfen.

Lv82_img


Messwerte speichern -> X Achse soll die Systemzeit sein - Dr_Skolsson - 12.12.2007 10:45

' schrieb:Dann: Profil_ergaenzen

Wie nimmst du denn die Messwerte auf? Als Waveform? Wenn ja -> gut, wenn nicht -> empfehlenswert. Waveforms haben eine Startzeit und dann für jeden Messwerte ein Zeitinkrement. So kannst du die Startzeit nachträglich (oder vorher) auf die Systemenzeit setzen. Wenn du nun jede Sekunde misst, dann wird immer automatisch eine Sekunde addiert...

Aha, vielen Dank ... ich vermute nun wirds passen ...

Allerdings hab ich ja schon wieder ganz andere Probleme. Ich hab mal mein VI angehängt.

Es soll eigentlich nur 5 Motoren EIN - AUS - EIN - AUS schalten. In den EIN Zeiten soll dazu der aufgenommene Strom gemessen und in eine Datei geschrieben werden ...

Kann mir vielleicht jemand beantworten warum die Messschleife allerdings nie startet ?! Ich hab ds über Variablen gelöst. Meine Theorie ist, sobald die 'EIN' Phasen laufen, sollte auch die "untere" Case Schleife True sein und somit arbeiten ...

Funktioniert aber genau garnicht ... Ich hab da sowieso noch ein paar Probleme was diese Schleifen angeht ... Dry

Weiss jemand was ich hier so falsch mach ?!


Vielen DankSmile

Lv82_img


Messwerte speichern -> X Achse soll die Systemzeit sein - monoceros84 - 12.12.2007 11:25

Dein Problem scheint folgendes zu sein: Die große While-Schleife außen läuft nicht ständig durch, weil du in den kleineren Schleifen zur Motorstäuerung hängen bleibst. Damit wird die Bedingung für den unteren Case (und dieser selber auch) nur genau 1x ausgeführt. Abhilfe schaffen statt einer großen While-Schleife zwei kleinere parallele - eine um die Motorsteuerung, eine um die Datenerfassung.

Übrigens scheinst du den Hinweis noch nicht zu kennen, dass man einen Rechtsklick auf Eingänge von VIs machen kann und dann Create -> Constant. Damit hat man immer den richtigen Datentyp für Konstanten, Controls und Indicators. Bei dir wird fast überall erst eine Datentyp-Konvertierung durchgeführt. Du nimmst sicherlich die Standard-Konstante aus der Funktions-Palette...


Messwerte speichern -> X Achse soll die Systemzeit sein - Dr_Skolsson - 12.12.2007 12:55

' schrieb:Dein Problem scheint folgendes zu sein: Die große While-Schleife außen läuft nicht ständig durch, weil du in den kleineren Schleifen zur Motorstäuerung hängen bleibst. Damit wird die Bedingung für den unteren Case (und dieser selber auch) nur genau 1x ausgeführt. Abhilfe schaffen statt einer großen While-Schleife zwei kleinere parallele - eine um die Motorsteuerung, eine um die Datenerfassung.

Übrigens scheinst du den Hinweis noch nicht zu kennen, dass man einen Rechtsklick auf Eingänge von VIs machen kann und dann Create -> Constant. Damit hat man immer den richtigen Datentyp für Konstanten, Controls und Indicators. Bei dir wird fast überall erst eine Datentyp-Konvertierung durchgeführt. Du nimmst sicherlich die Standard-Konstante aus der Funktions-Palette...


Ha, vielen Dank ! Mit 2 seperaten While Schleifen funktionierts schon mal recht nett. Auch das Speichern der Daten funktioniert und soweit bin ich nun recht glücklich ...

Allerdings, gibts sowas wie einen Ultimativen STOP Knopf ?! ... Um mein Programm beenden zu können muss 1. die SollSchleifen Anzahl erreicht sein und 2. muss ich bei 2 While Schleifen nun 2 Stop Knöpfe drücken .. Mellow

Und wegen der Typenkonvertierung, danke erstmals. Aber ist es ein Problem wenn mans lässt ?! .. Also gibts Performance Verluste oder sowas ?!

Danke und viele Grüße


Messwerte speichern -> X Achse soll die Systemzeit sein - monoceros84 - 12.12.2007 14:21

Nein, die Konvertierung ist in diesen einfachen Fällen kein Problem. Du wirst auch den Rechenzeit-Verlust nicht bemerken. Du solltest es dir nur für die Zukunft angewöhnen, weil es bei komplizierteren Datentypen zu Fehlern kommen kann, bei denen du dich dann tot suchst...

Zum Schleifenabbruch. Es gibt viele Möglichkeiten, zwei paralelle Schleifen abzubrechen (durch Suche im Forum solltest du auch was finden). Einfachste, aber sehr unbeliebte, Methode ist, in einer der beiden Schleifen eine lokale Variable des Stop-Buttons abzufragen, in der anderen den Button selber. Unbeliebt, weil erstens langsam und zweitens gibt sie den Geist auf, sobald du eine Schleife in ein SubVI verlagerst.
Besser ist schon alles, was du in der Synchronization-Palette findest. Tipp: Notifier oder Rendezvous.
Auch sehr beliebt: Functional Global Variable.

Damit solltest du eigentlich genug Möglichkeiten zusammen haben, um den zweiten Stop-Button zu vermeiden.

Zum Thema Soll-Zyklen: Wieso verwendest du eine Schleife in der Schleife in der Schleife. Dann hast du unnötig viele Abbruch-Bedingungen zu checken. Die For-Schleife brauchst du z.B. nicht. Ein Case in der äußeren While-Schleife reicht. Dort fragst du ab, ob dein Schleifenzähler i noch kleiner als die Soll-Laufzeit ist, wenn ja, dann Schleifeninhalt ausführen. Wenn nicht, dann Schleife beenden.
Richtig interessant, professionell und flexibel wird es, wenn du deine Struktur zu einer State-Machine umbaust (viel fehlt nicht dazu)... Dann hast du alles in der Hand und musst auf nix warten. Du kannst dir sogar die parallele Mess-Schleife sparen. Suche einfach mal im Forum oder bei Google nach State-Machine, wenn du Lust dazu hast...


Messwerte speichern -> X Achse soll die Systemzeit sein - Dr_Skolsson - 12.12.2007 16:49

Zitat:Zum Thema Soll-Zyklen: Wieso verwendest du eine Schleife in der Schleife in der Schleife. Dann hast du unnötig viele Abbruch-Bedingungen zu checken. Die For-Schleife brauchst du z.B. nicht. Ein Case in der äußeren While-Schleife reicht. Dort fragst du ab, ob dein Schleifenzähler i noch kleiner als die Soll-Laufzeit ist, wenn ja, dann Schleifeninhalt ausführen. Wenn nicht, dann Schleife beenden.
Richtig interessant, professionell und flexibel wird es, wenn du deine Struktur zu einer State-Machine umbaust (viel fehlt nicht dazu)... Dann hast du alles in der Hand und musst auf nix warten. Du kannst dir sogar die parallele Mess-Schleife sparen. Suche einfach mal im Forum oder bei Google nach State-Machine, wenn du Lust dazu hast...

Nunja, die Überlegung war den Ablauf durch die Case Schleife ganz innen zu machen. Sobald im letzten Case angekommen wird dann die While Schleife gestoppt und das ganze eben durch eine For Schleife öfters ausgeführt ..

Aber gut, dieser Ansatz war die erste Idee und funktioniert auch, zumindest irgendwieBig Grin. Ich werds nun mal mit ne State Machine versuchen ... Ich hab damit eh bereits mal zu tun gehabt, allerdings nur beim µC. Vielen Dank für die Unterstützung bisher, ich werd die Tipps und Hinweise gleich mal einbauen und meld mich dann wieder !


Ja und Grüße noch an die gesamten Helfer !! Winke