LabVIEWForum.de
Numeric-Control Wert mit Radio-Button presetten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Numeric-Control Wert mit Radio-Button presetten (/Thread-Numeric-Control-Wert-mit-Radio-Button-presetten)



Numeric-Control Wert mit Radio-Button presetten - Tallyho - 13.08.2012 09:12

Hallo,

Ich benutze ein VI mit While-Loop um Frequenz Generator Hardware über eine serielle Schnittstelle anzusteueren. Die Schnitstelle und das eigentliche ansteuern funktionieren.

Der Ausgangsparameter wird ganz einfach berechnet: (User-Eingabe x Constant) + Offset.

User-Eingabe ist mittels Numeric Control.

Mit Radio-Buttons selektiert der User einen Frequenz Bereich. Bei anklicken eines Buttons wird einen Preset-Wert in den Numeric Control geladen, und werden Constant und Offset (neu)initialisiert. Der Preset-Wert, Constant, und Offset werden aus einer Datei eingelesen.

Und jetzt wird's (für mich) schwierig... Der Num Control sollte beim anklicken eines Buttons nur 1 mal ge-preset werden - sonnst wird die User-Eingabe dauernd überschrieben. Deshalb habe ich die Radio-Buttons und presetten vom Num Control in einer Event-Structure untergebracht, mit Time-Out Event (ohne Time-Out benimmt es sich genau so wie ohne Event Structure).

Das funktioniert - fast! Beim anklicken eines Buttons werden tatsächlich Num Control, Constant, und Offset korrekt initialisiert. Aber... bei jeder Iteration der While-Loop, in der kein Button angeklickt wird, ist der aktuelle Button-Wert ausserhalb der Event-Structure nicht verfügbar (nur der default Wert = Button 1), und werden Constant und Offset mit dem falschen Wert überschrieben.

Was sollte ich ändern, damit es richtig funktioniert?

VI anbei (einlesen der Datei und COM-Schnittstelle habe ich rausgestrippt).


RE: Numeric-Control Wert mit Radio-Button presetten - GerdW - 13.08.2012 09:53

Hallo Tallyho,

Zitat:mit Time-Out Event (ohne Time-Out benimmt es sich genau so wie ohne Event Structure). ... bei jeder Iteration der While-Loop, in der kein Button angeklickt wird, ist der aktuelle Button-Wert ausserhalb der Event-Structure nicht verfügbar (nur der default Wert = Button 1), und werden Constant und Offset mit dem falschen Wert überschrieben.
Genau dieser TimeOutEvent ist dein Problem!
1) "ohne Timeout benimmt es sich wie ohne Event-Struktur" kann ich nicht nachvollziehen. Ohne TimeOut ist es immer noch eine Eventstruktur, die auf registrierte Events reagiert...
2) Im Timeout-Event gibst du leider keinen "richtigen" Wert aus, sondern verwendest "default if unwired". Ändere dieses und dein VI wird bedienbar...
3) Statt eines TimeOut solltest du lieber ein "Stopp-Button"-Event berücksichtigen.
4) Im "Band Selection"-Event solltest du die anderen Anzeigen setzen. Und nur im Event, nicht danach!
5) Tipp: LV speichert Werte in Schieberegistern...
6) Tipp: Es gibt auch "normale" Value-Properties und es gibt auch lokale Variablen, in die man Werte schreiben kann...


RE: Numeric-Control Wert mit Radio-Button presetten - Tallyho - 13.08.2012 11:51

Hallo Gerd,

danke für die schnelle Antwort!

Deine Vorschläge 1, 2, 4 implementiert. Damit beim Time-Out die alten Werte am Ausgang der Event Structure erscheinen, habe ich dem While-Loop 2 Shift-Register hinzugefügt. Im Time-Out Fall werden die Register Ausgänge einfach 1:1 an die Event Strcuture Ausgänge weitergeleitet. Funktioniert einwandfrei. Vielleicht nicht die sauberste Lösung, aber: if it works, don't fix it!

Dein 3. Punkt verstehe ich nicht ganz. Time-Out ist hier kein Fehlerfall...

Bez. Punkt 6: anfangs habe ich versucht den Num Control mittels "Value" zu pre-setten, aber das hat irgendwie nicht funktioniert - mit "Value(Signal)" ging es dann...

Frank


RE: Numeric-Control Wert mit Radio-Button presetten - GerdW - 13.08.2012 12:03

Hallo Tallyho,

noch ein paar Anmerkungen:
[attachment=41059]
- es ist keine gute Idee, die PropertyNode des Bedienelements "Manual freq input" umzubenennen in "Dial freq input": es verwirrt den Betrachter und ich habe schlechte Erfahrungen damit gemacht (ältere LV-Versionen neigten dann zu Abstürzen)
- ich persönlich halte es für eine schlechte Idee, Zeilenumbrüche im Label eines Controls zu verwenden: der Eintrag in der Eventstruktur wird verstümmelt und man kann dafür immer die Caption verwenden
- es ist Unsinn, sowohl ein TimeOut von 200ms als auch ein zusätzliches LoopIntervall von 200ms vorzugeben. Der TimeOut reicht aus, um die Schleife warten zu lassen
- dieses Wandeln von Array nach DDT und gleich wieder zurück nach Array ist natürlich auch unnötig
- schon mal über die Verwendung von Arrays für deine Anzeigen (Pre, IF, mult, Band) nachgedacht?

Zitat:Deine Vorschläge 1, 2, 4 implementiert.
- Leider nicht. Du setzt die verschiedenen Dinge immer noch nach der Event-Struktur...
- Der Timeout ist immer noch unnötig. Diese Schleife wartet (momentan) nur auf zwei Dinge: Änderung der Bandauswahl und Stopp-Button. Falls die anderen Eingaben auch wichtig sind, mache weitere Events oder erstelle ein Event für mehrere Bedienelemente...


RE: Numeric-Control Wert mit Radio-Button presetten - Tallyho - 13.08.2012 13:57

Hallo Gerd,

"Manual freq input" gibt es nur in dem vereinfachten VI der Anlage. In dem kompletten VI ist es OK.

Die Zeilenumbrüche werde ich beseitigen.

Die Array --> DDT --> Array Umwandlungen sind da, weil ich in dem vereinfachten VI keine Init-Datei einlese (und die Datei mitschicken müsste), die einzulesenen Werte aber brauche.

Zitat:Der Timeout ist immer noch unnötig.
Timer-Constant = 0 setzten statt X mSek funktioniert. Tatsächlich den Time-Out Event Case entfernen aber nicht.

Zitat:Du setzt die verschiedenen Dinge immer noch nach der Event-Struktur...
Habe den "Manual frequency input" Num Control in einem zusätzlichen Event Case untergebracht (+ 3. Shift Register), und die Stopp-Taste ebenso in einem zusätzlichen Event Case gesteckt.

Und funktioniert immer nochMetal


RE: Numeric-Control Wert mit Radio-Button presetten - GerdW - 13.08.2012 14:12

Hallo Tallyho,

bei Eventstrukturen ist es (fast) immer schlecht, wenn man "default if unwired"-Ausgänge benutzt...
Der Timeout-Case ist und bleibt unnötig, ebenso die zusätzliche Wartezeit in der Schleife...


RE: Numeric-Control Wert mit Radio-Button presetten - Tallyho - 13.08.2012 14:55

OK, Time-Out Case jetzt auch weg; geht, kein Problem Beer.

Less is more!

Danke Gerd!


RE: Numeric-Control Wert mit Radio-Button presetten - Lucki - 13.08.2012 21:50

Kleiner Tip am Rande:
Diese vielen gleichartigen Strickmuster:
[attachment=41074]
lassen sich problemlos durch Cluster mit vordefinierten Werten ersetzen:
[attachment=41075]
was noch den Vorteil hätte, dass sich die Werte im Konfig-Tab editieren lassen.
[attachment=41086]