Messwerte speichern -> X Achse soll die Systemzeit sein
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!
Messwerte speichern -> X Achse soll die Systemzeit sein
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.
Messwerte speichern -> X Achse soll die Systemzeit sein
' schrieb:Übrigens, ich verwende LabVIEW 8.2.1
Dann:
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
' schrieb:Dann:
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 ...
Messwerte speichern -> X Achse soll die Systemzeit sein
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
' 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 ..
Und wegen der Typenkonvertierung, danke erstmals. Aber ist es ein Problem wenn mans lässt ?! .. Also gibts Performance Verluste oder sowas ?!
Messwerte speichern -> X Achse soll die Systemzeit sein
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
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 irgendwie. 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 !