LabVIEWForum.de - Synchronisation mit Queues

LabVIEWForum.de

Normale Version: Synchronisation mit Queues
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich brauche da mal wieder eine Hilfestellung.
Ich bin gerade dabei verschiedene Signale zu synchronisieren, damit bei der Auswertung auch die zusammengehörenden Werte verwendet werden.
Ich habe mal ein BeispielVI erstellt, dass meinem Problem nahe kommt.

Ich habe z.B. 2 Signale (bei mir sind es mehr), die vom Messgerät erfasst werden. Alle Messwerte werden zur Weiterverarbeitung in globale Variablen geschrieben. Nun habe ich parallel zu den glob. Variablen jeweils ein Queue, dass gefüllt wird. Somit will ich für Berechnungen die richtigen Werte bekommen. Allerdings bekomme ich das mit den Queues nicht richtig hin Undecided
Wie bekomme ich die 2 Signale aus dem Beispielprogramm synchronisiert? Die Messwerte sollen nur bei einer bestimmten Spannung ausgegeben werden.
Ich glaube zwar, dass das Beispielprogramm synchron ist, aber wahrscheinlich nicht die beste/richtige Lösung.


P.S. Es wurden glob. Variablen eingesetzt, da es der einfachste Weg war Big Grin. Wir aber wohl komplett auf Queues umgestellt.

Für Ratschläge/Feedback wäre ich sehr dankbar!


LG
Was spricht gegen eine "klassische" Producer/Consumer Struktur, bei der du die Queue unten einfach nach deinen Wunschkriterien filterst?
(23.09.2013 09:41 )Kasi schrieb: [ -> ]Was spricht gegen eine "klassische" Producer/Consumer Struktur, bei der du die Queue unten einfach nach deinen Wunschkriterien filterst?

Da spricht natürlich nix gegen Angel_not
Danke für den Tipp. Habs auch so umgesetzt

lg
(24.09.2013 13:32 )Masterg4941 schrieb: [ -> ]Danke für den Tipp. Habs auch so umgesetzt
Interessant. Dein Programm ist zwar stark RubeGoldberg-haltig, aber es ist doch bereits eine Erzeuger-Verbraucher -Struktur. Was Hast Du denn jetzt noch verändert?
Um einen Erzeuger mit einem Verbracher zu synchronisieren, genügt eine Queue oder ein Melder. Du hast deren Drei in der Erzeuger- und Verbraucher-Schleife, und außerdem ist die Wartezeit-Erzeugung in der Erzeugerschleife dubios.
Du solltes Dich für eine der beiden Varianten entscheiden:
Entweder:
Eine Erzeuger- und eine Verbraucherschleufe (so wie jetzt).Dann nur eine Queue und in dieser Übertragung aller drei Daten in einer Clusterstruktur.
Oder:
Im Erzeuger-VI drei voneinader unabhängige Erzeugerschleifen und im Verbraucher-VI drei unabhängige Verbraucherschleifen.
(Wobei das hier im Falle der boolschen Variablen nicht funktioniert, das sie abhängig ist von den Daten)

Edit: Version in 8.2 geändert
(24.09.2013 20:35 )Lucki schrieb: [ -> ]Interessant. Dein Programm ist zwar stark RubeGoldberg-haltig, aber es ist doch bereits eine Erzeuger-Verbraucher -Struktur. Was Hast Du denn jetzt noch verändert?
Naja an dem "Programmstil" nicht viel. Habe es nur in mein eigentliches Programm intigriert.

Zitat:und außerdem ist die Wartezeit-Erzeugung in der Erzeugerschleife dubios.
Ja da sickert wohl der Anfänger noch durch Tongue
Ich habe bisher in jeden While-Schleife eine Wartezeit eingefügt, um die CPU zu entlasten. Habs aber gerade getestet. Mit oder ohne Wartezeit macht der CPU nix aus. Danke für den Tipp

Zitat:Du solltes Dich für eine der beiden Varianten entscheiden:
Entweder:
Eine Erzeuger- und eine Verbraucherschleufe (so wie jetzt).Dann nur eine Queue und in dieser Übertragung aller drei Daten in einer Clusterstruktur.
Oder:
Im Erzeuger-VI drei voneinader unabhängige Erzeugerschleifen und im Verbraucher-VI drei unabhängige Verbraucherschleifen.
(Wobei das hier im Falle der boolschen Variablen nicht funktioniert, das sie abhängig ist von den Daten)
Ich habe es jetzt so belassen wie gehabt. Nur, das ich die drei Daten nicht in ein Cluster zusammenführe. Somit kann ich dann jeden Queue einzeln abfragen, falls gewünscht.

Kannst du bitte die hochgeladenen VI´s in 8.2 speichern? Oder hast du nix am Programm verändert?

LG
Ich habe jetzt mal 2 Ausschnitte aus meinem Programm beigefügt.
In dem "senden.png" werden die Messdaten direkt von dem Messgerät eingelesen und in ein Queue geschoben. Ist die Nennspannung +- 1% erreicht, so soll das "OK" in die "empfangen.png" übergeben werden.
Nun meine Frage dazu:
Wenn ich das Programm jetzt so belasse, wird mir bei einem "OK" ja immer irgendein alter Wert aus dem Queue geholt. Sollte ich dann lieber im "senden.png" immer "Element am Anfang einfügen" verwenden? Würde ja eigentlich Sinn machen, oder?

P.S. konnte meinen letzten Beitrag nicht mehr editieren, da 30 min vergangen waren -.-
Ich finde diese Art der Überprüfung immernoch nicht wirklich intuitiv.
Wenn du die Prüfung im "Empfangen"-Fall einsetzt und auf den zusätzlichen Nennspannungs-Melder verzichtest, erübrigt sich die Frage, wo genau das Element jetzt gerade in der Queue zu finden ist. Ansonsten läufst du (meiner Meinung nach) mit deiner Methode immer in die Gefahr einer Race Condition.
Hallo MasterG,

- ich verstehe nicht, warum überhaupt Queues genutzt werden, wenn du sowieso alles in globalen Variablen pufferst...
- ich verstehe nicht, warum 3 Queues und ein 1 Notifier genutzt werden, wenn eine Queue (die einen Cluster enthält) ausreichen würde...
- ich verstehe nicht, warum man eine MathScript-Node verwenden muss, um eine einfache Multiplikation, für die auch die Compound-Arithmetik ausreichen würde, zu erledigen...

Kurzum: Ich halte ein Redesign für sehr angebracht...
(25.09.2013 07:45 )Kasi schrieb: [ -> ]Wenn du die Prüfung im "Empfangen"-Fall einsetzt und auf den zusätzlichen Nennspannungs-Melder verzichtest, erübrigt sich die Frage, wo genau das Element jetzt gerade in der Queue zu finden ist.
Danke habe ich geändert.



(25.09.2013 08:08 )GerdW schrieb: [ -> ]- ich verstehe nicht, warum überhaupt Queues genutzt werden, wenn du sowieso alles in globalen Variablen pufferst...
GerdW bitte schau dir meinen Beitrag #1 an! Momentan funktioniert es mit den globalen Variablen, aber für manche Vorgänge brauche ich synchronisierte Daten und will deshalb auf Queues umrüsten.

Zitat:- ich verstehe nicht, warum 3 Queues und ein 1 Notifier genutzt werden, wenn eine Queue (die einen Cluster enthält) ausreichen würde...
Ja guter Einwand. Habe es jetzt mit einem Queue (Cluster) realisiert. Ist jetzt auch wesentlich übersichtlicher.

Zitat:- ich verstehe nicht, warum man eine MathScript-Node verwenden muss, um eine einfache Multiplikation, für die auch die Compound-Arithmetik ausreichen würde, zu erledigen...
Ich habe ein Mathscript verbaut, da
1. noch Berechnungen hinzugefügt werden
2. es für jemanden, der den Code nicht geschrieben hat, schneller zu verstehen ist (Meine Meinung).
Hallo MasterG,

Zitat:Ich habe ein Mathscript verbaut
Warum MathScript und keine FormulaNode?
Warum MathScript und keine ExpressionNode?

- MathScript ist ausgerechnet die Struktur, die die meisten Resourcen benötigt - für solch eine Rechnung...
- Ich wüsste nicht, was an einer Multiplikation mit 4 Eingängen schwer zu verstehen sein soll...
Referenz-URLs