Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
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!
Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
Hallo zusammen.
Ziel: Einen Wizard für vereinfachte Steuerung eines grossen VI erstellen.
Dafür habe ich den Wizard in einer parallel zum Hauptprogramm laufenden Schleife in einem Sub-VI programmiert. Im Angang befindet sich ein Dummy mit Patientendaten (Hans Mustermann) und Grundsignal (Basic). Das Programm wird vom DummyWizardTesting gestartet und dabei das SubVi Wizard gestartet.
Die Übergabe von Messdaten habe ich mittels Queu realisiert, welches die Referenz in das Sub-VI übergibt und dort ausgelesen wird.
Nun ist es so, dass das alles funktioniert bei der ersten Ausführung. Bei der zweiten Ausführung (Nach drücken eines der Beenden Buttons) kommt eine Fehlermeldung Fehler 1 (Anhang) beim Starten. Bei einer nächsten Ausführung funktioniert es wieder. Bei jeder zweiten Ausführung erhalte ich denselben Fehler.
Wo könnte das Problem liegen?
Bin mit meinem VI-Latein am Ende und konnte via Forum Suche und google keine Antwort finden. Ich hoffe, jemand kann mir helfen
Liebe Grüsse,
LazyBoNe
Anzeige
10.07.2012, 08:06 (Dieser Beitrag wurde zuletzt bearbeitet: 10.07.2012 08:11 von GerdW.)
RE: Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
Hallo LazyBoNe,
1) ich kann das VI nicht laufen lassen, es fehlt ein subVI und ich habe SignalExpress nicht installiert...
2) Das SignalExpress-VI könnte man durch ein einfaches VI aus der SignalErzeugungs-Palette ersetzen...
3) Deine VIs nutzen VIEL ZU VIELE zu viele lokale Variablen!!!
4) Dein Wizard enthält keine Schleife, läuft also nur für ca 100ms?
5) Hast du schon mal debugged, wo der Fehler auftritt?
6) Der Wizard ließe sich wunderbar in eine Statemachine unterbringen, jeder Tab entspräche einem State...
7) Du hast viel unnützen/komplizierten Code (sogenannte RubeGoldbergs): wozu muss man einen boolschen Wert mit TRUE vergleichen? (Da ist noch vieles mehr...)
8) Zum Datenaustausch zwischen Wizard und Testing würde ich eine FGV empfehlen, die die diversen Bits/Werte speichert und zur Verfügung stellt. Zur Datenspeicherung dieser Werte würde sich ein (typdefinierter) Cluster anbieten...
9) Ich weiß ja nicht, was du für Monitore verwendest, aber eine Grundregel sagt: Ein BD sollte nie größer als die Monitorfläche sein!
10) Ebenfalls die FP-Größe: sollen deine User scrollen, wenn sie etwas sehen wollen oder eingeben müssen?
11) da käme jetzt noch vieles mehr...
12) Der Fehler dürfte ein Kombination aus Punkt 4 und der Weitergabe der Queue-Referenz sein, die du uns aber nicht zeigst! (Evtl. spielt Punkt 3 auch eine Rolle, Stichwort "RaceConditions"...)
13) Du hast echt schon 2 Jahre LabVIEW-Erfahrung?
Zitat:Das Programm wird vom DummyWizardTesting gestartet und dabei das SubVi Wizard gestartet.
RE: Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
(10.07.2012 08:06 )GerdW schrieb: Hallo LazyBoNe,
1) ich kann das VI nicht laufen lassen, es fehlt ein subVI und ich habe SignalExpress nicht installiert...
2) Das SignalExpress-VI könnte man durch ein einfaches VI aus der SignalErzeugungs-Palette ersetzen...
3) Deine VIs nutzen VIEL ZU VIELE zu viele lokale Variablen!!!
4) Dein Wizard enthält keine Schleife, läuft also nur für ca 100ms?
5) Hast du schon mal debugged, wo der Fehler auftritt?
6) Der Wizard ließe sich wunderbar in eine Statemachine unterbringen, jeder Tab entspräche einem State...
7) Du hast viel unnützen/komplizierten Code (sogenannte RubeGoldbergs): wozu muss man einen boolschen Wert mit TRUE vergleichen? (Da ist noch vieles mehr...)
8) Zum Datenaustausch zwischen Wizard und Testing würde ich eine FGV empfehlen, die die diversen Bits/Werte speichert und zur Verfügung stellt. Zur Datenspeicherung dieser Werte würde sich ein (typdefinierter) Cluster anbieten...
9) Ich weiß ja nicht, was du für Monitore verwendest, aber eine Grundregel sagt: Ein BD sollte nie größer als die Monitorfläche sein!
10) Ebenfalls die FP-Größe: sollen deine User scrollen, wenn sie etwas sehen wollen oder eingeben müssen?
11) da käme jetzt noch vieles mehr...
12) Der Fehler dürfte ein Kombination aus Punkt 4 und der Weitergabe der Queue-Referenz sein, die du uns aber nicht zeigst! (Evtl. spielt Punkt 3 auch eine Rolle, Stichwort "RaceConditions"...)
13) Du hast echt schon 2 Jahre LabVIEW-Erfahrung?
Zitat:Das Programm wird vom DummyWizardTesting gestartet und dabei das SubVi Wizard gestartet.
Echt? Wo?
Hallo Herr GerdW
1) Nun sollte es gehen, habe das VI aus der SignalExpress ersetzt. Das VI Wizard wird nun auch korrekt erkannt. (Sorry für diesen Fehler)
2) Sehen Sie 1) 3) Ich weiss, dass dies ein grosses Thema ist. Dennoch wagte ich den Versuch, den Datenaustausch damit zu machen. Was sind Funktionelle Globale Variablen? Wo ist der Unterschied zu Globalen Variablen? Ich wusste nicht, wie ich den Datenaustausch zwischen Haupt VI und Sub-VI bewerkstelligen sollte.
4) Die Schleife befindet sich auf dem Haupt VI und läuft mit 10ms takt.
5) Ja habe ich, erscheint im Sub-VI bei Queue-Status lesen. Jedoch verstehe ich nicht, WAS falsch ist.
6) Hatte ich versucht, hatte aber Probleme mit dem Datenaustausch mit Queues.
7) Ja, darum geht es aber hier nicht. Denkfehler macht jeder und dieses VI ist ein Dummy, welches in ein grosses Programm integriert wird. Deshalb auch die nichts aussagenden Messerte... 8) Genau dies war für mich die Schwierigkeit. Gibt es dazu ein gutes Beispiel?
9) Ganz normaler Full HD Monitor, wie er zur heutigen Zeit Standardmässig verwendet wird. Wie gesagt: VI ist ein Prototyp. Habs für Sie korrigiert. FrontPanel von Haupt VI ist nur begrenzt von Interesse bei meinem Problem.
10) Es geht um den Wizard, dessen FP ist genügend klein, noch nicht fertig und wird noch für user angepasst.
11) ... 12) Würde Sie sich das VI freundlicherweise noch einmal anschauen und den Fehler begutachten?
13) Ich habe mein Profil angepasst damit ich solche beleidigenden Fragen nicht nochmal lesen muss.
Das Haupt VI muss gestartet werden, Run, dann erscheint Wizard, nachdem dieser mit Beenden beendet wurde erscheint Fehler bei nächster Ausführung.
Im Angang die korrigierte Version.
Mit freundlichen Grüssen
LazyBoNe
11.07.2012, 07:48 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2012 07:49 von GerdW.)
RE: Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
Hallo LazyBoNe,
erstmal vorne weg:
Zitat:13) Ich habe mein Profil angepasst damit ich solche beleidigenden Fragen nicht nochmal lesen muss.
Die Fragen waren in keinster Weise beleidigend gemeint. Eigentlich wollte ich nur 2 oder 3 Punkte schreiben, aber der ganze Rest kam hinzu nach dem Betrachten deiner beiden VIs. Und wenn man dann noch lesen muss, derjenige hätte schon 2 Jahre mit LabVIEW gearbeitet...
Problem gefunden: RaceCondition aufgrund übermäßiger Nutzung lokaler Variablen!
Ursache: RaceCondition der lokalen Variable "Wizard beenden"...
Umfassende Lösung: Die ganzen lokale Variablen, die vom Wizard gesetzt werden, durch eine einzige FGV ersetzen.
Quick&Dirty: Die Queue erst dann löschen, wenn wirklich alle While-Schleifen beendet wurden.
Zum Thema FGVs (oder auch AE=ActionEngines oder auch LV2-StyleGlobals) findest du hier im Forum und auch im NI-Forum sehr viele gute Beiträge mit guten Erläuterungen. Einfach mal suchen!
RE: Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
(11.07.2012 07:48 )GerdW schrieb: Hallo LazyBoNe,
erstmal vorne weg:
Zitat:13) Ich habe mein Profil angepasst damit ich solche beleidigenden Fragen nicht nochmal lesen muss.
Die Fragen waren in keinster Weise beleidigend gemeint. Eigentlich wollte ich nur 2 oder 3 Punkte schreiben, aber der ganze Rest kam hinzu nach dem Betrachten deiner beiden VIs. Und wenn man dann noch lesen muss, derjenige hätte schon 2 Jahre mit LabVIEW gearbeitet...
Problem gefunden: RaceCondition aufgrund übermäßiger Nutzung lokaler Variablen!
Ursache: RaceCondition der lokalen Variable "Wizard beenden"...
Umfassende Lösung: Die ganzen lokale Variablen, die vom Wizard gesetzt werden, durch eine einzige FGV ersetzen.
Quick&Dirty: Die Queue erst dann löschen, wenn wirklich alle While-Schleifen beendet wurden.
Zum Thema FGVs (oder auch AE=ActionEngines oder auch LV2-StyleGlobals) findest du hier im Forum und auch im NI-Forum sehr viele gute Beiträge mit guten Erläuterungen. Einfach mal suchen!
Hallo,
bei der schriftlichen Kommunikation ist es nicht ausschlaggebend, wie jedmand etwas gemeint hat, sondern wie der geschriebene Text interpretiert wird. Und ich habe Ihren Beitrag in keinster weise als freundlich aufgefasst. Die hälfte der Punkte waren und für mich beleidigend aufzufassen. Der erste Eindruck des Forums war für mich somit ernüchternd. Zudem heisst es nicht, wenn ich labview seit 2010 benutze, dass ich 2 Jahre damit Erfahrung habe. Meine Aufgaben sind jeweils sehr unterschiedlich und dafür wähle ich ein geeignetes Tool aus, so siehts nunmal aus bei meinem Job.
Zurück zum Thema:
Habe die Lösung soeben gefunden, die Beenden Variable war bei einem Neustart der VI noch auf True und dies verursachte das Problem.
Lösung: Initialisieren der Beenden Variable mit False ausserhalb beider Schleifen.
Mittlerweile habe ich die Kommunikation zwischen SubVi und HauptVI mittels Globalen Variablen gelöst. RaceConditions treten dabei keine auf und der Wizard funktioniert nun einwandfrei.
Grüsse
LazyBoNe
11.07.2012, 08:21 (Dieser Beitrag wurde zuletzt bearbeitet: 11.07.2012 08:25 von GerdW.)
RE: Queue erzeugt Fehler 1 bei jeder zweiten Ausführung
Hallo LazyBoNe,
Zitat:Die hälfte der Punkte waren Offtopic und für mich beleidigend aufzufassen.
Also:
- Du hängst ein VI ran, welches nicht lauffähig ist! Man weiß nicht, was Haupt- und SubVI ist. Man muss raten, was du machst. Mindestens die Hälfte meiner Punkte beruhen auf eben diesem deinem Fehler.
- Dazu kommen die Punkte 9&10, die du mal vom Standpunkt eines handelsüblichen Laptop aus betrachten solltest: man ist nur am Scrollen in deinen VIs. Nicht gerade hilfreich für eine Fehlersuche...
- Dann noch Punkt 3 mit der Fehlerursache und Punkt 6&8 mit der möglichen Lösung (im Nachhinein betrachtet).
Tut mir leid, aber wenn du das schon als Beleidigung auffasst...
Schön, dass ich dir helfen konnte! (Sarkasmus! [Um Missverständnissen vorzubeugen!])
Zitat:Kommunikation zwischen SubVi und HauptVI mittels Globalen Variablen gelöst. RaceConditions treten dabei keine auf...
Ich glaube, wir werden uns hier wiedersehen! (Keine Beleidigung, nur eine Schlussfolgerung aus bisher gesehener Programmierung in Verbindung mit dieser Aussage...)