LabVIEWForum.de - Eigenen Fehler in SubVI erzeugen

LabVIEWForum.de

Normale Version: Eigenen Fehler in SubVI erzeugen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe als Teil meines Programmes ein SubVI, welches in einer Maske (Frontpanel) den Benutzer auffordert eine Produktbezeichnung einzugeben. Die Eingabe muss dann über einen OK-Button bestätigt werden. Lässt der Benutzer das Eingabefeld leer, erscheint eine Meldung und es geht nicht weiter. Soweit so gut.

Allerdings kann der Benutzer das Frontpanel des SubVIs auch einfach über das "x" am oberen rechten Rand schließen. Dann sollte irgendwie ein Fehler ausgegeben werden, da im weiteren Verlauf ein anderes SubVI die Produktbezeichnung als Eingang erwartet und das Programm sonst nicht weiter läuft.

Hat jemand einen Tipp?

Das SubVI packe ich in den Anhang, sowie ein Sreenshot des weiteren Programms.

Grüße.
Als schnelle Lösung könntest du unter Vi-Einstellungen ja das Schließen über das "X" ausschalten....
Moin,

du hast mehrere Möglichkeiten dein Problem anzugehen.

1. Du unterbindest einfach, dass der Nutzer das "X" betätigen kann. Wäre die schnellste Variante, wenn auch nicht immer die Optimale.
Dazu gehst du mit der Rechten Maustaste auf dein VI und klickst auf "Eigenschaften für VI" -> Kategorie "Fenstererscheinungsbild" und dann auf "Anpassen".
Im Folgenden Fenster [attachment=53709] kannst du nun den Haken bei "Schließen des Fensters möglich" entfernen. Damit kann der Nutzer nicht mehr einfach das Fenster schließen.

Bessere Variante:
2.
Du beschäftigst dich ein wenig mit Ereignisstrukturen Smile Da es relativ schnell erstellt ist habe ich dir ein Beispiel VI erzeugt, in welchem die Ereignisstruktur dein Problem behandelt.
Über die verschiedenen Ereignisse, die du wie in einer Case-Struktur definierst (oder eben aus der Liste auswählst) kannst du den Ablauf für verschiedene Nutzeraktionen durchführen.

Bspw. wird er Case "Wertänderung Bestätigen_bt" durchlaufen, sobald der Nutzer auf den Button "Bestätigen" klickt. Über die While-Schleife wird garantiert, dass das Dialogfeld solange aktiv bleibt, bis der Nutzer bspw. Bestätigen oder Abbrechen klickt.

So kann man nun auch ein Ereignis auswählen, dass die Nutzeraktion behandelt, wenn dieser auf das "x" oben rechts klickt.
[attachment=53710]

Im VI selbst wird diese Aktion einfach verworfen. [attachment=53708]
Sinvoller wäre es aber, dies mit einer Aktion zu koppeln. bspw. mit dem Ereignis "Wertänderung Abbrechen_bt" und so den Dialog abzubrechen und im Hauptprogramm dann einfach in einen andern Zustand zu überführen.

(Fehler, Gramatik bitte ich zu entschuldigen, ich habe es nur auf die Schnelle gemacht Wink )
Hallo ostone,

Zitat:Dann sollte irgendwie ein Fehler ausgegeben werden, da im weiteren Verlauf ein anderes SubVI die Produktbezeichnung als Eingang erwartet und das Programm sonst nicht weiter läuft.
Um diese Frage noch zu beantworten: einfach eine passende Error-Konstante ausgeben…

Ansonsten:
Da ist jede Menge Rube-Goldberg in deinem VI:
- es gibt eine Funktion, die auf leere Strings prüft
- man kann Strings direkt an den Selektor einer Case-Struktur anschließen
- wozu ein UND mit einer TRUE-Konstanten?
- wozu eine Sequenz-Struktur?
- warum wird in jeder Iteration von der lokalen Variablen "...IN" in das Terminal "..OUT" geschrieben? Warum kein Draht?
[attachment=53713]
(28.07.2015 09:38 )GerdW schrieb: [ -> ]
Zitat:Dann sollte irgendwie ein Fehler ausgegeben werden, da im weiteren Verlauf ein anderes SubVI die Produktbezeichnung als Eingang erwartet und das Programm sonst nicht weiter läuft.
Um diese Frage noch zu beantworten: einfach eine passende Error-Konstante ausgeben…

Was meinst du mit einer passenden Error-Konstante?

Ansonsten:
Stimmt, die Squenze-Struktur ist noch ein Rudiment... Bereits gelöscht. ;-)
Ups... Habe nur die untereste Antwort gelesen... Sorry...

(28.07.2015 08:28 )Valduril schrieb: [ -> ]2. [/b]Du beschäftigst dich ein wenig mit Ereignisstrukturen Smile

Mit Ereignisstrukturen tue ich mich zugegeben noch etwas schwer... Habe eine Ereignisstruktur zur Auswahl der Zustände des Zustandsautomaten, sprich:
-> Referenzbild aufnehmen
-> Inspektion starten
-> Programm beenden.

Da aber alle Ereignisse (jedenfalls meiner bescheidenen Kenntnisse nach) in einer Warteschleife gesammelt und dann nach und nach abgearbeitet werden, kommt es manchmal zu unschönen Effekten, die ich bisher auch nicht beseitigen konnte. Klingt zum Beispiel im späteren Einsatz der Benutzer statt 1x doppelt auf den Button zum Aufnehmen des Referenzbildes, so wird der Schritt auch 2x ausgeführt...

Daher versuche ich diese Struktur bisher zu vermeiden...

Variante 1) klappt natürlich prima. ;-)
(28.07.2015 11:16 )ostone schrieb: [ -> ]Variante 1) klappt natürlich prima. ;-)



Nachtrag zur Variante 1)

In einigen Fällen sieht es eleganter aus, die gesamte Titelzeile auszublenden. Dann wird der User nicht gleich mit der Nase drauf gestoßen, dass es ihm "verboten" ist, das Fenster zu schließen.


Gruß, Marko
(28.07.2015 11:16 )ostone schrieb: [ -> ]Da aber alle Ereignisse (jedenfalls meiner bescheidenen Kenntnisse nach) in einer Warteschleife gesammelt und dann nach und nach abgearbeitet werden, kommt es manchmal zu unschönen Effekten, die ich bisher auch nicht beseitigen konnte. Klingt zum Beispiel im späteren Einsatz der Benutzer statt 1x doppelt auf den Button zum Aufnehmen des Referenzbildes, so wird der Schritt auch 2x ausgeführt...

Daher versuche ich diese Struktur bisher zu vermeiden...

Wenn der Nutzer gewisse Aktionen nicht ausführen darf muss man die Schaltflächen dann eben anpassen. Wenn das Ereignis durchgeführt wird deaktiviert man mittels Eigenschaftsknoten die Schaltfläche (und stellt sie ausgegraut dar für den Nutzer, damit dieser auch optisch die Änderung erkennt). Dann wird das Ereignis nicht durchgeführt.

Im VI unten habe ich das mal demonstriert. Selbst wenn der Nutzer doppelt auf "Inkrementieren" klickt wird es nur einmal durchgeführt und die Schaltfläche kann erst dann wieder verwendet werden, wenn der Button "Aktivieren" gedrückt wurde. (Oder aber man im Programmablauf definiert, wann der Button wieder aktiviert werden darf).

(28.07.2015 11:48 )Trinitatis schrieb: [ -> ]Nachtrag zur Variante 1)
In einigen Fällen sieht es eleganter aus, die gesamte Titelzeile auszublenden. Dann wird der User nicht gleich mit der Nase drauf gestoßen, dass es ihm "verboten" ist, das Fenster zu schließen.

Dafuer
Referenz-URLs