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!
<div align="left">Hallo,
ich arbeite nun seit 4 Monaten an der Erstellung meiner Diplomarbeit (Automatisierung einer Messung) und bis jetzt wurden all meine Fragen immer durchs Forum zu genüge beantwortet, nur mittlerweile wirds komplexer....
...zum Problem selbst...:
In meinem derzeitigen Hauptprogramm habe ich mittlerweile 3 while-schleifen und x Squenzen, cases, subvis etc. und auf meinem 19''er kann ichs auch schon nicht mehr darstellen. Daher möchte ich zumindest die 3 Haupt-Schleifen als Subvis verpacken um die ganze Sache übersichtlicher zu gestalten. Normal kein Problem nur habe ich ringsherum 35-40 vordefinierte Anzeigeelemente erzeugt, die ich über lokale Variable in den verschiedenen Schleifen & Strukturen aufrufe und bearbeite, sodass die Schleifen darüber untereinander verknüpft sind. Letztlich läuft in den Schleifen die Messung (parallel) ab und aktuelle Messwerte (10), sowie Zustandinfos und Fehler werden ausgegeben. Demnächst sollen vor der Messung noch Eingaben gemacht werden und danach ein Excel-Protokoll aus allen Messwerten (1Array) erstellt werden.
...zurück zum Problem...
wie kann ich dennoch ein Sub erzeugen? Die 3 Schleifen zusammen - geht nicht, 3 einzelne Subs? - müssen parallel ablaufen und miteinander kommunizieren. Ich hab die Vermutung, dass das sich vielleicht über Referenzen, Queue, oder sogar State-Machine lösen lässt, aber ich versteh die Benutzung dieser Funktionen nicht recht, und ich hab die Befürchtung, dass die Aufruf-WerteZuordnung-Schließen-Prozedur die Übersichtlichkeit noch mehr gesprengt wird. Außerdem habe ich an manchen Stellen >5 Unterstruktuen, wie soll man da noch übersichtlich z.B. Queues anschließen?...
Ich hoffe ich hab nicht zu viel drumrumm erzählt und mein Problem ist noch klar. Aufgrund der vielen Subvis und der diversen angeschlossenen Hardware, macht ein Bsp.-Vi leider keinen Sinn und nen Screenshot ist durch die derzeitige Größe und Hierarchie auch nicht sinnvoll, aber ich erklär gerne weiter...
...Achimedes, die Idee ist schonmal nicht schlecht, nur wie kann ich dann Daten synchron während das Sub arbeitet übermittel? Ein Cluster lässt sich auch leider nicht über Queues übertragen - zumindest was ich bis jetzt herausgefunden habe...
...aber ein paar andere Daten kann und werd ich wohl so zusammenpacken...
Wenn deine einzelnen Schleifen wirklich so komplex miteinander verknüpft sind, würd ich nicht unbedingt aus den Schleifen ein SubVi machen.
Gibt es denn nicht innerhalb deiner Schleifen einzelne Strukturen (Sequenzen, Schleifen, Rechnungen), die, wenn einmal eine (oder mehrere) Eingangsgrößen festliegen, abgearbeitet werden?
Aus solchen SubVis basteln würde sich anbieten.
Strukturen, die öfters in deinem Programm vorkommen eignen sich natürlich auch hervorragend.
Ansonsten kannst du die Kommunikation zwischen SubVis mittels Melder und Queues verwirklichen. Die sind auch hinsichtlich Synchronisation viel besser geeignet als lokale Variable (auch ohne SubVi's).
Zu diesen Themen gibts genügend Beispiele und auch schon viel hier im Forum.
<div align="left">....so ich hab jetzt mal nen bisschen rumgebastelt und versucht in einen Teil meines Programmes lokale Variablen durch Queues zu ersetzen. (Queues und Cluster sind natürlich kein Problem). Herausgekommen ist ein teilweise funktionierendes VI mit 2 parallelen Schleifen, die synchron Daten erfassen und ausgeben sollten - Macht es nur nicht, die Daten kommen garnicht, nur einmalig oder mit bis zu 5 sek verspätung an...
...vielleicht hat einer von euch ne Idee. Da mir aber Queues wie erwähnt eher fremd sind, dürften da einige grobe Schnitzer din sein....
Wie kann man eigentlich nun aus sowas, wenns denn funktionieren sollte, subvis erstellen? Es gibt doch garkeine Anzeige-/Bedienelemente, die ich als Anschlusspunkte wählen könnte....
also so wie du die Queues verwendest würd ich das nicht machen.
Ein paar Dinge dazu:
- Du verwendest ja immer noch massig lokale Variablen. Der Sinn wäre ja eigentlich gewesen, diese zu vermeiden. Z.B.: Deine Abbruchbedingung für die Schleifen.
Hier ist eine elegante Lösung einfach den Errorcluster der Queue als Abbruchbedingung zu verwenden. Entlässt du die Queue, dann gibt das beim Warten auf die Queue einen Error und die Schleife schließt sich.
- Du verwendest 2 Queues hier. Beide Schleifen beeinflußen sich gegenseitig. Allerdings läuft das bei dir wechselseitig. Also jede Schleife kann nur weiterlaufen, wenn sie ein Element aus der anderen Schleife erhält.
Bau doch ein Timeout beim auslesen der Queues ein. So kann jede Schleife seperat laufen und ihre Einträge in die Queue schreiben.
Ich habe dir dein Programm umgeschrieben. Ich arbeite jetzt allerdings nur mit einer Queue, d.h. eine Schleife beeinflußt die 2., aber nicht retour. Allerdings kannst du sehen, was ich mit dem Errorcluster und dem Timeout meine.
Gruß
A few weeks of developement and testing can save a WHOLE afternoon in the library!
...klasse, so war's gedacht! manchmal harkt es einfach. Jetzt muss ich "nurnoch" den Rest umbauen und möglichst viele Variablen vernichten....das mit dem wechselseitig Abarbeiten müsste dann ja auch noch hinzukriegen sein.
Für die Erstellung eines SubVis habe ich auch noch ein Beispiel gefunden, nur habe ich z.Z. keinen Plan wie man das bei wechselseitiger Beschaltung machen kann...
...aber egal, vielen Dank schonmal für die Tipps - für die nächsten Tage dürfte ich damit ausgelastet sein.