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!
Genau das stellt ja das Problem da, wie kann ich denn unterscheiden, für welche Funktion meine Daten genau in einem Augenblick sind?
Werden sie mit einer Kennung oder einer Position oder sonstigem versehen, so dass ich identifizieren kann, durch wen das Ereignis (z. B. btn1) ausgelöst worden ist?
04.07.2019, 09:24 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2019 09:28 von GerdW.)
Zitat:Werden sie mit einer Kennung oder einer Position oder sonstigem versehen, so dass ich identifizieren kann, durch wen das Ereignis (z. B. btn1) ausgelöst worden ist?
Wenn du das so programmierst, dann haben die Datenelemente der Queue auch eine Kennung für die Quelle der Daten…
Du musst dir vorher überlegen, was du genau brauchst: wenn du nur ein Flag /true/false) benötigst, sollte dessen Quelle egal sein. Wenn du aber Daten weiterverteilen willst, dann ist es hilfreich, etwas über das Woher? und Wohin? zu wissen. Dafür könnte man einen Cluster mit mehreren Elementen verwenden. Gern genommen wird ein Cluster aus Enum (oder String) und Variant…
Zurück zum Anfang:
Zitat:Ich habe zwar eine Möglichkeit gefunden die Button über Case-Strukturen weiterzuleiten, jedoch weiß ich nicht genau, wie ich die Daten in der zweiten While-Schleife wieder in einen Bool Wert ändere, damit eine weitere Case Struktur, eine Aufgabe ausführt (z.B. einschalten einer LED).
Du könntest im Erzeuger aus dem boolschen ValueChangeEvent einen String wie "0/1,Button1" (boolscher Wert, Label des Buttons) generieren und in die Queue schicken. Am anderen Ende dann einfach ein ScanFromString mit "%b,%s" und du hast sofort wieder den boolschen Wert und das Label zur Verfügung…
Das wäre aber dann auf diesen konkreten Anwendungsfall zugeschnitten: die Variante mit Enum/String und Variant ist dann flexibler!
Wäre es nicht auch möglich das ganze mit Meldern statt Queues aufzubauen? Bin mir nicht ganz sicher ob man das so macht. Nachteil der Melder ist auf jeden Fall das du keinen Puffer hast..
Bevor du das aber so nachbaust würde ich erst warten was die Erfahrenen LV-User sagen!
Zitat:Werden sie mit einer Kennung oder einer Position oder sonstigem versehen, so dass ich identifizieren kann, durch wen das Ereignis (z. B. btn1) ausgelöst worden ist?
Wenn du das so programmierst, dann haben die Datenelemente der Queue auch eine Kennung für die Quelle der Daten…
Du musst dir vorher überlegen, was du genau brauchst: wenn du nur ein Flag /true/false) benötigst, sollte dessen Quelle egal sein. Wenn du aber Daten weiterverteilen willst, dann ist es hilfreich, etwas über das Woher? und Wohin? zu wissen. Dafür könnte man einen Cluster mit mehreren Elementen verwenden. Gern genommen wird ein Cluster aus Enum (oder String) und Variant…
Zurück zum Anfang:
Zitat:Ich habe zwar eine Möglichkeit gefunden die Button über Case-Strukturen weiterzuleiten, jedoch weiß ich nicht genau, wie ich die Daten in der zweiten While-Schleife wieder in einen Bool Wert ändere, damit eine weitere Case Struktur, eine Aufgabe ausführt (z.B. einschalten einer LED).
Du könntest im Erzeuger aus dem boolschen ValueChangeEvent einen String wie "0/1,Button1" (boolscher Wert, Label des Buttons) generieren und in die Queue schicken. Am anderen Ende dann einfach ein ScanFromString mit "%b,%s" und du hast sofort wieder den boolschen Wert und das Label zur Verfügung…
Das wäre aber dann auf diesen konkreten Anwendungsfall zugeschnitten: die Variante mit Enum/String und Variant ist dann flexibler!
Hi Gerd,
danke für die Info, werde ich heute Abend mal versuchen mit den Clustern.
Sollte denn die Eventstruktur dabei dann beibehalten werden oder würde sie dann überflüssig sein.
(04.07.2019 10:36 )MarcoN schrieb: Wäre es nicht auch möglich das ganze mit Meldern statt Queues aufzubauen? Bin mir nicht ganz sicher ob man das so macht. Nachteil der Melder ist auf jeden Fall das du keinen Puffer hast..
Bevor du das aber so nachbaust würde ich erst warten was die Erfahrenen LV-User sagen!
Hallo Marco,
leider kann ich das Beispiel nicht laden, da ich mit einer Version (13.0) von 2013 arbeite, eine andere habe ich nicht zur Verfügung.
Anzeige
04.07.2019, 12:51 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2019 12:54 von MarcoN.)
(04.07.2019 10:36 )MarcoN schrieb: Wäre es nicht auch möglich das ganze mit Meldern statt Queues aufzubauen? Bin mir nicht ganz sicher ob man das so macht. Nachteil der Melder ist auf jeden Fall das du keinen Puffer hast..
Bevor du das aber so nachbaust würde ich erst warten was die Erfahrenen LV-User sagen!
Hallo Marco,
leider kann ich das Beispiel nicht laden, da ich mit einer Version (13.0) von 2013 arbeite, eine andere habe ich nicht zur Verfügung.
Ich hier einfach ein Cluster aus 2 nummerischen Controls gebaut. "Verbraucher Daten 1" wertet nur "Daten 1" des Clusters aus und "Verbraucher Daten 2" wertet nur "Daten 2" aus. Die Änderung wird jeweils erst aktiviert wenn du auf den Button "Wertänderung" drückst.
Gruß
Marco
05.07.2019, 00:56 (Dieser Beitrag wurde zuletzt bearbeitet: 05.07.2019 08:28 von Lucki.)
Melder würde ich nur nehmen, wenn es wirklich notwendig ist, also wenn man z.B die erzeugten Werte in mehreren VIs benötigt.
Allgemein macht man es so (es wurde ja hier schon angedeutet):
Das Queueelement ist ein Cluster mit 2 Elementen:
1. Element: Name (Adresse). Format: String oder Enum
2. Element: Wert. Format: Variant (Oder, wenn alle Werte von den verschiedenen Erzeugern gleiches Format haben, z.B DBL, dann eben DBL)
Jeder Adresse hat seine eigene Erzeugerschleife.
Empfangsschleife gibt es nur eine, dort müssen die Adressen in einer Casestruktur sortiert werden, und in jedem Case die Rück-Konvertierung von Variant zu Wert erfolgen.
Die Erzeugerschleifen sind bezüglich des Timings voneinander völlig unabhängig.
Einfaches Beispiel:
so ich habe es jetzt weitestgehend hinbekommen, dass die einzelnen Funktionen für einen Screenshot sowie zur Speicherung der Daten aufgerufen werden.
Das Problem ist jetzt, dass sie ständig aufgerufen werden und nicht, wenn ich nur den entsprechenden Button gedrückt habe.
Wahrscheinlich ist es ein Blöder Fehler oder ich habe eine Funktion nicht richtig verstanden, aber vielleicht hat jemand eine Idee, wie ich das Verhalten umgehen kann?
(11.07.2019 08:14 )maxil schrieb: Guten Morgen,
so ich habe es jetzt weitestgehend hinbekommen, dass die einzelnen Funktionen für einen Screenshot sowie zur Speicherung der Daten aufgerufen werden.
Das Problem ist jetzt, dass sie ständig aufgerufen werden und nicht, wenn ich nur den entsprechenden Button gedrückt habe.
Wahrscheinlich ist es ein Blöder Fehler oder ich habe eine Funktion nicht richtig verstanden, aber vielleicht hat jemand eine Idee, wie ich das Verhalten umgehen kann?
11.07.2019, 08:29 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2019 08:30 von jg.)