Zunächst mal: Ein ganz dickes Lob für das so wunderschön aufgeräumte VI. Solange ich hier im Forum dabei bin, habe ich so etwas Schönes kaum gesehen, die Regel ist eher säuisches Aussehen bis zum Geht-nicht-mehr.
Unterschied Lokale/globale Variablen einerseits und Queues/Melder andererseits:
Beim Datenaustausch mit lokalen/Globalen Variablen gibt es keine Synchronisation zwischen Erzeuger und Verbraucher. Beim Lesen weiß der Verbraucher nicht, ob der Wert bereits gelesen wurde oder nicht. Und umgekehrt, der Erzeuger weiß nicht, ob der letzte Wert beim Verbraucher schon abgeholt wurde oder nicht.
Dieses Manko wird überwunden mit Queues und Meldern.
Unterschied Queue und Melder:
Grob gesagt: Bei Queues kann es mehrere Erzeuger geben, aber immer nur einen Verbraucher.
Bei Meldern kann es mehrere Verbraucher geben. (Ob auch mehr als 1 Erzeuger möglich ist, weiß ich jetzt nicht genau)
Queues mit mehreren Erzeugern: Natürlich hat dann der Verbraucher ein Interesse daran zu wissen, von woher das Element kommt. Deshalb ist das Queueelement in der Regel ein Cluster mit den Elementen "Name" (Adresse) und "Wert" . Da wiederum der "Wert" je nach Herkunft unterschiedliches Format haben kann, nimmt man als Format meistens den Typ "Variant".
Die Einführung einer Wartefunkion in Deiner Verbraucherschleife ist hier für Studienzwecke natürlich begründbar. In realen Anwendungen wird man das aber nicht machen. Man könnte hier auch das studieren: Wenn der Verbrauch langsamer ist als die Erzeugung, dann ist eines Tages die Queue voll, und dann gibt es zwei Möglichkeiten: Entweder man macht es wie Du, dann bremst ab da die Verbraucherschleife die Erzeugerschleife aus. Es gehen aber keine Daten verloren. Oder man verwendet das VI "Element verlustbehaftet aus der Queue entfernen". Dann wird die Erzeugerschleife nicht ausgebremt, es gehen aber Daten verloren.
Ich habe mal das Haupt Vi ein ganz klein wenig verschlimmbessert und hänge es hier an.
Gruß Ludwig
Queues vs Local Variables.vi (Größe: 52,77 KB / Downloads: 713)