Globale Varible - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Globale Varible (/Thread-Globale-Varible) |
Globale Varible - tobey - 09.06.2006 08:37 <div align="left">Hallo Leute, ich hab eine Globale Variable die aus einem Array von U16 mit mehreren Elementen besteht. Ich benötige diese für den Datenaustausch zwischen mehreren VIs. Aber ich habe jetzt folgendes Problem, und zwar beschreiben einzelnen VIs nur immer ein Element des Arrays, aber wie kann ich dies verwirklichen? In meiner momentanen Lsg. überschreibe ich immer den gesamten Array (mit den alten und dem einen neuen Wert). Ist es nicht möglich nur ein Element aus dem Array der globalen Variablen zu beschreiben? Vielen Dank im Voraus! mfg tobi Anhang: Screenshot der momentanen Lsg.</div> Globale Varible - M. Vöcking - 09.06.2006 10:17 Versuchs mal mit "Replace Array Subset" in der Arraypalette. Globale Varible - A.Berndsen - 09.06.2006 10:19 Hallo Tobey, Du kannst in einem Array natürlich jeden einzelnen Wert verändern. Ob die Quelle und das Ziel eine globale variabel sind ist nicht relevant. Dein Screenshot sollte so wie ich es sehe funktionieren, wenn das VI "Teilarray ersetzen [Replace Array subset]" ist. Gruß Andreas Globale Varible - tobey - 09.06.2006 11:05 <div align="left">Ja das ist mir klar dass ich jedes einzelne Element ändern kann, aber eben nicht bei einer globalen Variablen (zumindest laut meines Wissenstandes). Das VI aus dem Screenshot ist: "Teilarray ersetzen [Replace Array subset]" Aber das Problem ist, dass ich beim Schreiben auf die globale Variable, alle Elemente aus der globalen Variable überschreibe. Zwar werden die unveränderten Werte mit den gleichen (alten) Werten wieder überschrieben. Aber das ist genau mein Problem, da ich viele solcher Schreibzugriffe parallel habe, und somit es zu Race Conditions kommen kann. Das heißt im Klartext: Das VI X holt sich den Array aus der globalen Variablen, ersetzt Element 3 durch neue Daten, und schreibt den gesamten Array (mit dem neuen Element 3) auf die globale Variable. Aber z.B. kurz bevor das VI X die neuen Daten schreiben kann liest VI Y den Array aus der Globalen Variable aus und VI X schreibt danach erst die den Array auf die globale Variable. Und jetzt ändert VI Y das Element 4 ab, und schreibt den gesamten Array (mit dem neuen Element 4) auf die globale Variable. Und jetzt habe ich ein Problem, WEIL: im Element 3 steht zwar der neue Datensatz den X geschrieben hat, aber leider hat davor Y die globale Variable schon ausgelesen und deswegen geht der Wert von X verloren weil Y diesen mit alten Daten überschreibt. ---> Diese Phänomen nennt man Race Condition! Ich könnte zwar mit Hilfe von Semaphoren dies unterbinden, aber lieber wäre mir eine Möglichkeit, wo ich wirklich nur einzelne Elemente des Arrays der globalen Variablen überschreiben kann!</div> Globale Varible - A.Berndsen - 09.06.2006 11:15 Hallo Tobey, ich habe bisher noch nie auf globale Variable zurückgegriffen. Die Problematik mit Race Conditions ist mir bewußt, und Deine Schilderung verdeutlicht das zusätzlich. Hast Du mal versucht mit Referenzen in den SubVI's zu arbeiten ? Damit könnte es funktionieren. Gruß Andreas Globale Varible - tobey - 09.06.2006 12:07 <div align="left">Mit ist nichts bekannt, dass ich Referenzen von globalen Variablen erstellen kann! Wie sollte das gehen? Eine globale Variable ist doch eigentlich schon eine Referenz?</div> ' schrieb:Hallo Tobey, Globale Varible - A.Berndsen - 09.06.2006 12:38 Statt globale Variabel mit der Referenz auf das ursprüngliche Array arbeiten! Globale Varible - tobey - 09.06.2006 13:01 <div align="left">Mit Referenzen komme ich auch nicht wirklich weiter, schaffe es nicht ein einzelnes Element aus dem Array auszulesen bzw. zu schreiben (aber habe auch nicht so viel Erfahrungen mit Referenzen). Aber zum anderen ist das schätzungsweise dann schon wieder zu Umständlich und somit für einen generischen Ansatz nicht brauchbar, oder? thx, tobi</div> |