INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Bedienelemente bündeln zum Auslösen eines Events



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!

27.08.2019, 17:05 (Dieser Beitrag wurde zuletzt bearbeitet: 27.08.2019 17:05 von Marcusius.)
Beitrag #1

Marcusius Offline
LabView-Nutzer
*


Beiträge: 36
Registriert seit: Jan 2008

7.00, 8.61, 2010, 2019
2005
EN

18057
Deutschland
Bedienelemente bündeln zum Auslösen eines Events
Hallo.

Ich habe in meinem Programm viele Bedienelemente (zum Einstellen von Parametern eine Messgerätes). Wenn der Nutzer einen Parameter ändern möchte, verstellt er ein Bedienelement und damit wird dann ein Parameter im angeschlossenen Messgerät verändert. Im Frontpanel sind die Bedienelemente nach Gruppen in einem Tabcontainter gruppiert. Eine Lösung dafür wäre pro Parameter (=Bedienelement) ein Event-Case zu erstellen und dann den entsprechenden Parameter an das Gerät zu senden. Bei 50 Parametern wird das mit den Event-Cases unübersichtlich.

Frage: Ist es möglich die Bedienelemente zu gruppieren (kein Cluster) und dann in einem Event-Case auf die Gruppe zu reagieren?
Oder ich reagiere auf Änderungen im Tabcontainer. Das habe ich bereits probiert. Allerdings weiß ich nicht, wie ich herausfinden soll, welches Element in dem entsprechenden Tab das Event ausgelöst bzw. wo der Nutzer konkret hingeklickt hat.

Ideal wäre, für alle Parameter ein Event zu haben. Das dann ein SubVI aufruft, welches den Parameter übergeben bekommt und weiter mit dem Messgerät kommuniziert.


Ich danke euch für Anregungen zur Lösung der Aufgabe.

Hinweis: meine derzeitige Lösung ist, dass ich immer für eine Hand voll Parameter ein Event-Case habe. Hinsichtlich Erweiterung und Wartung ist das etwas mühsam.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.08.2019, 19:56
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 16.075
Registriert seit: May 2009

09SP1, 11SP1, 17 (selten 19)
1995
DE_EN

10×××
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Hallo Marcusius,

sammle dir die Referenzen auf deine Controls ein, z.B. über die Controls[]-Property des Frontpanels, und erstelle dir damit ein benutzerdefiniertes Event. Dann reicht ein einziger Eventcase für alle Controls aus…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2019, 10:15
Beitrag #3

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.636
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
(27.08.2019 17:05 )Marcusius schrieb:  (kein Cluster)
Die Methode von GerdW funktioniert gut. Kann ich empfehlen.

Noch mehr empfehlen würde ich allerdings, es doch mit Cluster zu machen. Man kann im Event den Alten mit dem Neuen Wert vergleichen und so den Index innerhalb des Clusters finden. Mit dem Index im Cluster (wie auch im Referenz-Array) kann man dann spezifische Abläufe starten

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2019, 12:04
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 16.075
Registriert seit: May 2009

09SP1, 11SP1, 17 (selten 19)
1995
DE_EN

10×××
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Hallo,

ich mache die "spezifischen Abläufe" über das Control-Label. Das bekommt man über die Control-Referenz…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.08.2019, 21:18 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2019 07:54 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.670
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
(27.08.2019 17:05 )Marcusius schrieb:  Ist es möglich die Bedienelemente zu gruppieren (kein Cluster) und dann in einem Event-Case auf die Gruppe zu reagieren?
Was hast Du eigentlich gegen Cluster? Wahrscheinlich stört es Dich, dass Du dann bei der Gestaltung des FP weinig Spielraum hast, weil die Controls sich dann alle in einem kleinen Recheck befinden. Das muß aber nicht so sein. Man kann das Cluster transparent machen, so dass man den Rahmen gar nicht mehr sieht, und außerdm kann man den Cluster so groß machen wie das ganze FP-Fenster, und in dieses Cluster-Fenster andere Elemene hineinplatzieren, die gar nicht zum Cluster gerhören. Die Freiheit des FP-Designs ist damit praktisch keinererlei Enschränkungen unterworfen.

Zitat:Oder ich reagiere auf Änderungen im Tabcontainer. Das habe ich bereits probiert.
Da müßte ich noch etwas dazu lernen, ich weiß nicht wie das geht oder wie Du das meinst.

Zitat: Allerdings weiß ich nicht, wie ich herausfinden soll, welches Element in dem entsprechenden Tab das Event ausgelöst bzw. wo der Nutzer konkret hingeklickt hat.
Ganz einfach: auf der linken Seite des Ereigniscases gibt es den Anschluß "Referenz". Dort schließt Du den Eigenschaftsknoten "Beschriftung" an - und schon weißt Du es.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.08.2019, 16:46 (Dieser Beitrag wurde zuletzt bearbeitet: 29.08.2019 16:47 von Marcusius.)
Beitrag #6

Marcusius Offline
LabView-Nutzer
*


Beiträge: 36
Registriert seit: Jan 2008

7.00, 8.61, 2010, 2019
2005
EN

18057
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Hallo.

Ich dachte ich hätte die Nutzung von benutzerdefinierten Events verstanden. Leider nein. Ich habe damit auch noch nie gearbeitet...

Beiligend mein VI-Entwurf in Screenshotform.

   

   

Wie kann ich direkt auf eine Bedienung eines Frontpanelelementes reagieren?
Im User-Event geht das zwar. Aber um dieses Event auszulösen, muss ich doch vorher etwas anderes auslösen, oder nicht? Im gezeigten Beispiel hier, mit dem Schalter "Keine Ahnung".
Wie komme ich auf das FP-Element, dass das Ereignis ausgelöst hat?

Hinweis: Das VI am Anfang sammelt alle FP-Elemente ein.

Ich bin leider etwas ratlos... Confused
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.08.2019, 20:32
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 16.075
Registriert seit: May 2009

09SP1, 11SP1, 17 (selten 19)
1995
DE_EN

10×××
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Lege doch das benutzerdefinierte Event als ValueChange an, wenn du darauf reagieren willst...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2019, 14:12
Beitrag #8

Marcusius Offline
LabView-Nutzer
*


Beiträge: 36
Registriert seit: Jan 2008

7.00, 8.61, 2010, 2019
2005
EN

18057
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Bei User Event kann ich kein "Value change" einstellen.

   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2019, 10:01
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.636
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
(29.08.2019 20:32 )GerdW schrieb:  Lege doch das benutzerdefinierte Event als ValueChange an, wenn du darauf reagieren willst...
@GerdW:

Das verstehe ich nicht:
Was meinst du mit "als ValueChange anlegen"? Anlegen heißt ja Erstellen: Kann man denn einen Event als Quelle für ein benutzerdefiniertes Event verwenden? Ist mit nicht bekannt. Würde ich als sinnlos erachten: Wenn ein Event vorliegt, warum dann nochmals weiterleiten? Da kann man doch gleich dort reagieren, wo das Event auftritt.

Bisher arbeite ich nur mit LV bis Version 2017. Mag sein, dass es in 2019 was neueres gibt.

@Marcusuis:

Du möchtest ja (unbedingt) keine Cluster verwenden. Nun gut.

Einen Sachverhalt (spricht: ein Problem) hast du aber grundsätzlich immer: Für jedes einzelne Bedienelement brauchst du einen spezifischen Algorithmus, also entweder einen eigenen Sourcecode oder einen parametrierten Sourcecode, der dann für mehrere Bedienelemente brauchbar ist. Aufgabe: Wo steht der Sourcecode, wenn es sich um 50 Bedienelemente handelt?

Vorteilhaft ist es immer, so wenig wie möglich Sourcecode innerhalb eines VIs zu haben (=> SubVIs). Grundsätzlich geht das auch mit deinen Wünschen.

Sammle alle ValueChange-Events deiner 50 Bedienelemente in einem einzigen Eventcase. Dann hat du zwar sehr, sehr wenig Sourcecode - aber einen "Nachteil": die Liste der Eventcase-Auslöser wird sehr, sehr lang. Dem Compiler bzw. dem Runtime-System ist die Länge egal, nicht aber dem Programmierer. Beachte, dass dieses alles mit Clustern wesentlich einfacher wird.

In dem einen Eventcase bekommt du jetzt zwei relevante Daten: "Referenz" und "Neuer Wert". Beide gibst du jetzt in ein SubVI. Vorteil: Das VI, speziell diese Eventcase, bleibt klein und übersichtlich (Hinweis: Funktioniert auch mit Clustern).

Über die Referenz (=> Name und Typ des Bedienelementes) kannst du feststellen, welches Bedienelement verarbeitet werden soll und welchen Datentyp es hat. Beachte, dass der Typ von "Neuer Wert" Variant ist, wenn die Ereignisquellen unterschiedliche Typen haben.

In dem SubVI kann du nun per "Name von Eventquelle" mittels einer Case-Struktur Eventquellen-spezifische Sachen machen.

Ausblick:
Für Cluster gilt: "Neuen Wert" mit "Altem Wert" auf Gleichheit vergleichen. Erste False-Position im Vergleichsarray ergibt den neuen Wert und indirekt den Bedienelementnamen. Mit Bedienelementname und Wert so verfahren, wie bereits oben dargelegt.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2019, 12:20 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2019 12:23 von GerdW.)
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 16.075
Registriert seit: May 2009

09SP1, 11SP1, 17 (selten 19)
1995
DE_EN

10×××
Deutschland
RE: Bedienelemente bündeln zum Auslösen eines Events
Hallo zusammen,

Entschuldigung für die nicht korrekte Ausdrucksweise: "dynamisch registrierte Events" anstatt "benutzerdefinierter Events":
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Benutzer Event auslösen ? Niko1912 7 1.065 22.11.2018 16:35
Letzter Beitrag: GerdW
Question (viele) Bedienelemente deaktivieren / aktivieren F.Bi 3 1.360 16.08.2018 12:59
Letzter Beitrag: GerdW
  Bedienelemente nach Bedarf ein / ausblenden 1johleh 14 13.715 31.05.2017 13:18
Letzter Beitrag: MaxP
  Mausrad bei Events/Casestrukturen Schwand 1 1.554 20.09.2016 08:30
Letzter Beitrag: Schwand
  Dynamische Events programmatisch auslösen AMueller 6 3.128 22.04.2016 07:43
Letzter Beitrag: GerdW
  2 Ereignisse nacheinander auslösen jan_1 31 6.244 13.04.2016 19:27
Letzter Beitrag: Lucki

Gehe zu: