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!
10.10.2014, 16:27 (Dieser Beitrag wurde zuletzt bearbeitet: 10.10.2014 16:36 von jg.)
seit einigen Tagen ärgere ich mich mit einem Problem herum, das wahrscheinlich ganz einfach und elegant gelöst werden kann:
Ich habe zwei unabhängig voneinander kontinuierlich Werte generierende While-Schleifen, die jeweils über TCP/IP einen Sensor abfragen. Dies geschieht zyklisch mit 5ms. Dabei benötigt jeder Sensor (s)eine eigene While-Schleife für Initialisierung, Parametrierung etc. In einer Consumer-While-Schleife soll die Datenverarbeitung der gewonnenen Messdaten aus beiden Sensor-Schleifen stattfinden.
Das angehängte Programm soll das mal rudimentär darstellen: zwei Producer-Schleifen und eine Consumer-Schleife, in der mittels SET-Knopf die Daten aus der Queue gelesen und im eigentlichen Programm weiterverarbeitet werden sollen. Im Detail heißt das:
Bei Drücken des SET-Knopfes/-Tasters in der DV-Schleife soll jeweils genau 1 aktuelles Wertepaar aus den beiden Producer-Schleifen via Queue an die DV-Consumer-Schleife übergeben werden. Der gelatchte SET-true-Wert setzt also den Empfang des akutellen Wertepaares in Gang und dient gleichzeitig als Trigger für die Datenverarbeitung. Möglich wäre auch, dass SET das Schreiben eines Wertepaares aus Producer 1 & 2 auslöst, das Wertepaar über die Queue an die Consumer-Schleife gesendet wird und dann dort, wenn beide Wertepaare anliegen, die Verarbeitung startet. Alternativ wäre vllt auch eine eigene Kommando-Schleife mit Eventstruktur für eine alleinige Ausgabe der Steuerungsbefehle SET und STOP denkbar.
Zum Hintergrund:
In meinem auf einer State-Machine basierenden Datenverarbeitungs-Code wird zuerst das Wertepaar an ein Array angehängt - anschließend werden im nächsten State Berechnungen durchgeführt und im folgenden State graphisch dargestellt. Der SET-Knopf dient dabei als Trigger für diese Routine.
Das Problem:
Sowohl der DV-Code als auch der Code für die Sensoren existiert für sich schon und funktioniert auch wie gewünscht. Einzig die Datenübergabe klappt nicht. Daher habe ich versucht, dieses Problem mit dem angehängten LV-Programm abzubilden. Könnt ihr mir weiterhelfen, wo bei mir der Denkfehler liegt?
RE: Übergabe-Problem zweier While-Schleifen mit Queue
Autsch, 1 Queue für eine Read-Write Kommunikation, und dabei auch noch in der einen Richtung von 1 Sender zu 2 Empfängern, das muss schief gehen!
Eine Queue ist prädestiniert für eine 1-zu-1 oder N-zu-1 Kommunikation, aber nur mit großen Klimmzügen für eine 1-zu-N Kommunikation.
Bei dir passiert folgendes: In der DataRetrival Loop hängst du 1 Element "Ready" an. Wer von den beiden Daten-Loops erwischt das jetzt? Zufall! Und wenn das Element weg ist, dann ist es für die 2. Loop nicht mehr sichtbar.
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!