Schleifen gegenseitig "verriegeln" - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenkommunikation (/Forum-Datenkommunikation) +---- Thema: Schleifen gegenseitig "verriegeln" (/Thread-Schleifen-gegenseitig-verriegeln) |
Schleifen gegenseitig "verriegeln" - gm-axion - 21.05.2011 18:59 Hallo und guten Abend zusammen, ich probiere seit einigen Tagen die Störungsfreie Kommunikation zwischen dem PC und dreier elektronischer Lasten hinzubekommen. Ich habe zwei parallele Schleifen eingerichtet, die erste sendet Leistungsvorgaben an die Lasten und wartet dann eine einstellbare Dauer, die zweite Schleife misst in einem einstellbaren Intervall (also z.B. jede Sekunde) Spannung, Strom, Leistung, etc. Allerdings behindern sich die Datensätze gegenseitig: Wenn die Messschleife Daten abruft, während Daten an die Lasten gesendet werden, spielen die Lasten verrückt und nehmen nicht die Werte, die jeder von ihnen zugeschickt wird, an, sondern halt irgendwas. Ich müsste es einrichten, dass die erste Schleife die Werte an die Lasten übergibt und die zweite Schleife nur dann und nur solange misst, wie die erste Schleife nichts sendet, also dann auch von der ersten Schleife eine Meldung bekommt, dass es jetzt weitergeht mit der Datenübermittlung und sie mit messen aufhören soll, bis die erste fertig ist. Hat jemand einen Hinweis wie ich das am geschicktesten anstelle? Ich habs schon mit gegenseitiger "Verriegelung" über True/False Cases und Meldern probiert, habs aber nicht hinbekommen. Meine aktuelle Idee ist die, dass ich die Messschleife als For statt While-Schleife einrichte und die Anzahl der Schleifendurchläufe in Abhängigkeit von den einstellbaren Verweilzeiten/Messintervallen realisiere, bin mir aber nicht sicher, da muss es doch was einfacheres geben? Vielen Dank schon einmal, Jonas RE: Schleifen gegenseitig "verriegeln" - BNT - 21.05.2011 20:20 Hi Sieh mal in der Helfe und dem Beispielen unter dem Stichwort Semaphore nach. Gruß Holger RE: Schleifen gegenseitig "verriegeln" - Lucki - 21.05.2011 20:39 Ich bin nicht ganz überzeugt, daß Dein Problem wirklich so kompliziert ist, wie es sich anhört. Wenn ja, dann liegt Holger mit seinem Vorschlag richtig. Normalerweise sind aber die meisten Synchronisationsprobleme bei parallel arbeitenden Erzeuger- und Verbraucher-Schleifen durch Verwendung von Meldern oder Queues zum Datenaustausch perfekt zu lösen. RE: Schleifen gegenseitig "verriegeln" - gm-axion - 22.05.2011 09:06 Na ja, das Problem ist ja, dass die Messschleife, egal in welchem Prozess sie sich befindet, sofort abbrechen muss, sobald die Wertübergabe, also die primäre Schleife wieder anfängt, Werte an die Lasten zu senden, da es sonst zu Kollisionen kommt. Wäre denn die Realisierung von Timimg-Schleifen mit Prioritäten sinnvoll? Ich habe das eben in den LV Beispielen gefunden und es scheint mir genau das Richtige zu sein. Wie ich die Queues da einbauen soll, verstehe ich nicht ganz. Semaphore wären auch denkbar. Das Blöde ist einfach, dass die gemessenen Werte durch meine Programmierung unter Umständen einfach "Aussetzer" haben, also wenn zum Beispiel jede Sekunde ein Wert aufgeschrieben werden soll, ich die Schleife dann aber genau in einem Messvorgang abbreche, um neue Werte an die Lasten zu senden, werden mir ja logischerweise ab und an einfach Werte fehlen. Eine andere Überlegung wäre auch, gar nicht zwei Schleifen zu programmieren, sondern alles in eine zu packen und mittel Statemachine zu verfahren. Dann würde ich die vorgegebene Wartezeit einfach als dem Messvorgang zur Verfügung stehende Zeit zuschreiben und durch die fest definierte Reihenfolge wären Kollisionen ausgeschlossen? Ich verzweifel hier an den einfachsten Überlegungen. Zu meiner Verteidigung: Ich bin (fast absolvierter) Energieingenieur und kein Programmierer RE: Schleifen gegenseitig "verriegeln" - Y-P - 22.05.2011 09:07 Kannst Du mal Dein Bsp. (am Besten vereinfacht) hochladen? Ansonsten auch mein Tip: Semaphoren oder Queues verwenden (je nach Anwendung) Gruß Markus RE: Schleifen gegenseitig "verriegeln" - gm-axion - 22.05.2011 09:26 So anbei das Programm. Da man extra die Gerätetreiber braucht, dürften einige VIs nicht angezeigt werden. Das Problem liegt übrigens im Zustand "Messvorgang" RE: Schleifen gegenseitig "verriegeln" - Lucki - 22.05.2011 10:22 In 2 Schleifen hast Du wegen fehlendem Wait 100% CPU-Last - wenn das mal gut geht. Daß die beiden Schleifen selbst unterbrechbare Wartezeit erzeugen, ändert nichts daran, daß ein Wait heineingehört. Zitat:Ich bin (fast absolvierter) Energieingenieur und kein Programmierer Gute Wahl: Ein Ingenieur wird, wenn es sich um ingenieurnahe Projekte handelt, als diletantischer Programmierer vermutlich besser sein, als ein Profi- Programmierer ohne technischen Background. RE: Schleifen gegenseitig "verriegeln" - gm-axion - 22.05.2011 14:17 Zitat:In 2 Schleifen hast Du wegen fehlendem Wait 100% CPU-Last - wenn das mal gut geht. Daß die beiden Schleifen selbst unterbrechbare Wartezeit erzeugen, ändert nichts daran, daß ein Wait heineingehört. Wie "wait" ? RE: Schleifen gegenseitig "verriegeln" - gm-axion - 22.05.2011 17:56 Okay, ich denke ich habe das jetzt verstanden (nach eigener Recherche). Du spielst sicher auf die Zustandsautomaten mit Queues und Ereignisstruktur an, wodurch ein "Anhalten" und sparen von CPU Leistung realisiert wird? Das werde ich dann wohl noch einbauen müssen. Die Synchronisation der "Dateneinbahnstraße" werde ich mal mit Semaphoren ausprobieren. Wünscht mir Glück RE: Schleifen gegenseitig "verriegeln" - gm-axion - 23.05.2011 03:33 Hi, ich habe mich nochmal gefragt, wieso es überhaupt zu den Konflikten mit den Lasten kommt? Im Prinzip wird doch nur einmal gesendet jede Minute, ansonsten nur empfangen. Das sollte über GPIB doch parallel ablaufen können? Ich bin der Meinung, mein altes Programm hätte die Fehler nicht gehabt. Ich habs zum Vergleich mal mit rangehängt, vielleicht sieht jemand einen entscheidenden Unterschied? Mfg, Jonas |