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!
21.02.2012, 15:05 (Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2012 15:18 von jg.)
ich habe ein Problem, und zwar :
In einem VI.Hauptprogramm habe ich mehrere Unterprogramme(Sub.VI) verwendet und sie beinhalten alle eine while schleife (Z.B für Datenerfassung, Datenerzeugung...usw).
Wenn ich die Unterprogramme einzeln laufen lassen, dann ist alles Prima.
aber wenn ich versuche das ganzes programm laufen zu lassen, dann werden die Sub.VI nicht mitkompiliert.
hat jemand eine Idee wie ich das ganze programm mit den Sub.VI durchlaufen lassen?
Danke
Als Beispiel, habe ich hier eine kleine Programm angehängt.was auch das Problem in meinem Hauptprogramm beschreibt.
Ein VI (auch ein SubVI) wird erst beendet, wenn alle Ausgänge anliegen. Deswegen funktioniert deine hochgeladene Struktur nicht!
Dein Haupt-VI schreibt sofort ein "FALSE" in die globale Variable "stop". Parallel wird ein Sub-VI aufgerufen. Da darin aber eine While-Schleife ist, die du probierst, über die globale Variable "stop" abzubrechen, wird das Sub-VI nie beendet. Solange das Sub-VI aber nicht beendet wird, läuft auch die While-Schleife im Main-VI nicht neu an.
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!
Ohne Berücksichtigung der Global Variable, wie kann ich im einfache Beispiel ohne beutzung der Parallele Schleifen, unterprogramme mit while schleife im Hauptprogramm auch starten und von der while schleife wieder raus?
Danke
PS: Ich habe hier ein Beispiel neu hochgeladen, der aber funktioniert aber nicht ganz so richtig wie es sein soll.(auch nach Amplituden Änderung, tut sich nix ????)
wenn man einfache Grundregeln wie "Aufräumknopf benutzen" und "sinnvolles Schleifentiming" beachtet, sieht dein VI so aus:
Und dann funktioniert es sogar! (Außerdem beachte man die Nutzung des Timeouts beim Dequeue, was ja glücklicherweise in der Kontexthilfe beschrieben wird...)
wenn man einfache Grundregeln wie "Aufräumknopf benutzen" und "sinnvolles Schleifentiming" beachtet, sieht dein VI so aus:
Und dann funktioniert es sogar! (Außerdem beachte man die Nutzung des Timeouts beim Dequeue, was ja glücklicherweise in der Kontexthilfe beschrieben wird...)
Vielen Dank für den Tipps.
Ich habe jetzt wieder eine Frage, und zwar:
Was ist wenn ich Daten mit DAQmx Assistenz erfasse (ca. 10 Sensoren: Drück,Temp. Füllstand, Durchfluss...usw.).
Diese Datenerfassungsfunktion als Sub.VI programmiert, Die Erfasste-werte sollen im Hauptprogramm wieder aufgerufen werden.
Solle ich jetzt für jede einzelne Wert bzw. Sensor eine Element einfüge? (wie mein Vorheriges beispiel, aber halt mit mehrere Element )
ich kenn mich mit dem DAQ-Assi nicht aus, aber üblicherweise konfiguriert man seine DAQmx-Erfassung so, dass man alle Kanäle gebündelt in einem Array (oder Waveform, je nachdem, was passt) bekommt. Gern auch schon mit den DAQmx-Skalierungsmöglichkeiten verbunden, sodass nicht rohe Messwerte (Strom, Spannung) gemeldet werden, sondern schon Füllstand, Durchfluss, whatever...
Dieses Array mit Messwerten kann man dann auch wieder komplett in die Queue schieben, man muss nicht 10 Einzelwerte hineinschieben (was beim Auslesen ja auch wieder synchronisiert werden muss!).
Beispiele findest du im LabVIEW-Hilfe-Menü unter "Beispiele suchen"