18.08.2018, 18:38
(Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2018 18:53 von Lucki.)
Beitrag #1
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Frage zu Ereignisknoten
Ich verwende in einem Projekt mehrere Schieberegler, deren aktuelle Werte über eine serielle Schnittstelle an ein µP-System weitergegeben werden. Die Werte werden aber auch im HauptVI verwendet. Das Erkennen der Wertänderungen erfolgt in Ereigniscases. Dort werden die neuen Werte, mit Adresse versehen, in eine Queue gesteckt, die dann woanders ausgelesen wird und wo die Daten über RS232 gesendet werden.
Das Problem ist: Mit "Wertänderung" die Ereignisse auszulösen geht nicht. Das Ergebnis wäre ein Maschinengewehrfeuer von Ereignissen beim Schieben des Sliders, welches die Schnittstelle überfordern würde.
Also nimmt man als Ereignis "Maustaste losgelassen". Das geht, ist aber unzuverlässig. Es funkioniert nämlich nur, wenn die Maustaste innerhalb des Slider-Bereiches losgelassen wird. Deser Bereich ist aber ganz schmal, denn das ist nur der wenige Pixel breite Schieberegler selbst. Wenn man während des Stellens mit dem Mauszeiger etwas daneben kommt, so fällt das überhaupt nicht auf, weil der Slider weiterhin mit dem Mauszeiger mitgeht. (Der Mauszeiger kann sogar meilenweit vom Schieberegler entfernt sein, und er läßt sich immer noch bedienen). Für die Ereignisauslösung gilt das aber leider nicht. Wenn der Mauszeiger beim Loslassen der Mautaste nicht innerhalb des Schieberegler steht, dann findet kein Ereignis statt. Das Schlimme ist: man merkt das gar nicht. Die Wertänderung in der Anzeige und im HauptVI findet ja statt, nur im µP kommt nichts an.
Ich halte das für einen üblen Bug. Aber was kann man dagegen machen? Hat hat hier schon mal jemand mit dem gleichen Problem zu tun gehabt und kann mir etwas raten?
|
|
|
18.08.2018, 21:42
(Dieser Beitrag wurde zuletzt bearbeitet: 18.08.2018 21:49 von IchSelbst.)
Beitrag #2
|
IchSelbst
LVF-Guru
Beiträge: 3.696
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RE: Frage zu Ereignisknoten
(18.08.2018 18:38 )Lucki schrieb: Ich halte das für einen üblen Bug.
Das ist kein Bug. Das ist so - und das gehört auch so. Es kommt kein Event für das Schieberegler-Objekt, weil die Maus nicht im Schieberegler steht. Das ist logisch.
Zitat:Aber was kann man dagegen machen?
Nimm das Objekt, in dem sich die Maus offensichtlich befindet: also "Fensterbereich: Maustaste losgelassen". In diesem Event fragst du einfach den Schieberegler ab und leitest den Wert weiter. Wenn du auch noch eine Wertänderung programmierst (z.B. mit Rückkopplungsknoten) kannst du auch nur dann weiterleiten, wenn offensichtlich der MouseUp am Schieberegler stattfindet.
Nachtrag:
Ich glaube, das ganze liegt am Betriebssystem, nicht an LabVIEW. Nicht LabVIEW handhabt den Schieberegler während der Schieber sich bewegt, sondern das Betriebssystem. Das schließe ich auch daraus, weil sich der Schieberegler auch dann noch verschiebt, wenn die Maus sich überhaupt nicht mehr im Bereich des Fensters der Applikation befindet.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
19.08.2018, 07:45
Beitrag #3
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Frage zu Ereignisknoten
Hallo Ludwig,
ich habe das über einen QMH gelöst:
- die Eventstruktur schreibt alle Events in eine Queue
- der MH liest die Queue immer wieder komplett aus und filtert die Einträge: von Events einer Quelle wird nur der aktuellste Wert verwendet...
- das könnte man noch mit lossy queues kombinieren
|
|
|
19.08.2018, 09:37
Beitrag #4
|
|
|
19.08.2018, 16:39
(Dieser Beitrag wurde zuletzt bearbeitet: 19.08.2018 16:40 von Lucki.)
Beitrag #5
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Frage zu Ereignisknoten
(18.08.2018 21:42 )IchSelbst schrieb: [quote='Lucki' pid='192311' dateline='1534613893']Ich halte das für einen üblen Bug.
Das ist kein Bug. Das ist so - und das gehört auch so. Es kommt kein Event für das Schieberegler-Objekt, weil die Maus nicht im Schieberegler steht. Das ist logisch.
Da gebe ich Dir zwar Recht, aber genau so logisch wäre es, dass eine Wertänderung am Schieberegler nur solange stattfinden kann, solange sich der Mauszeiger im Objekt befiindet. Das ist leider nicht der Fall. Und das Ideal wäre: Wenn man im Objekt die Maustaste drückt, kommt der Mauzeiger, solange die Taste gedrückt bleibt, nicht mehr aus dem Objekt heraus. D.h. man kann dann zwar noch den Wert ändern, nicht aber mit dem Cusor in der ganzen Weltgeschichts sinnlos herumspazieren können. So weit reichen aber meine Programmierkünste nicht, es wird wahrscheinlich mit Labview auch gar nicht möglich sein.
@Gerd und Ichselbst
Vielen Dank für die Tips. Ich habe es jetz so gemacht, dass ich nicht die Queue, über die ich die neuen Daten sende, dezimiere, sondern die Ereignisqueue selbst. Anbei das VI. Kleiner Schönheitsfehler: Die Daten werden immer noch zwei Mal gesendet, aber das ist hinnehmbar.
Test.vi (Größe: 10,91 KB / Downloads: 192)
|
|
|
20.08.2018, 09:35
Beitrag #6
|
|
|
20.08.2018, 15:57
(Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2018 16:25 von Lucki.)
Beitrag #7
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Frage zu Ereignisknoten
Danke THL, das ist die Ideallösung, die wohl nicht mehr zu toppen ist. Ich frage mich nur, warum es manchmal so schwierig ist, auf so etwas Einfaches zu kommen...
Edit: Du hast vergessen, die boolsche Variable beim Loslassen der Maustaste rückzusetzen. Und ich habe mal das Boolean durch ein Shift-Register ersetzt. Das ändert aber nichts an der Exzellenz Deiner Idee.
slider_value-1.vi (Größe: 7,37 KB / Downloads: 188)
|
|
|
21.08.2018, 10:00
(Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2018 14:10 von Lucki.)
Beitrag #8
|
|
|
21.08.2018, 11:46
Beitrag #9
|
|
|
21.08.2018, 14:24
(Dieser Beitrag wurde zuletzt bearbeitet: 21.08.2018 14:26 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Frage zu Ereignisknoten
Entschuldigung, habs korrigiert. Das mit dem dynamischen Ereignis habe ich gemacht, damit man im Ereigniscase "Maustaste loslassen" nicht mehr unterscheiden muß, ob vorher auf dem Schieberegler die Maustaste gedrückt war (also das Loslassen ewas mit der Bedienung des Elementes zu tun hat) oder ob das Loslassen in keinerlei Zudammenhang mit der Bedienung dieses Elementes steht. Der dynamische Case ist überhaupt nur dann und solange aktiv, solange auf dem Element die Taste gedrückt wurde und danach gedrückt gehalten wurde. Und wenn der Case eintritt, hat das Loslassen immer etwas mit der Bedienung des Elementes zu tun.
|
|
|
| |