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!
05.03.2015, 13:08 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2015 13:51 von Slev1n.)
Zu meinem Programm:
Es handelt sich um eine State-Machine, wo ganz billig einfach State für State nacheinander abgearbeitet wird, da ich einen Mikrocontroller Flashen will.
Bei dem Schritt, bei dem ich das HexFile sende, nutze ich ein SubVi. Wenn jetzt irgendwas mal schief läuft kann es sein, dass es im SubVi hängt und es kommt zu einer Endlosschleife. Deshalb habe ich einen StoppKnopf im MainVi der das SubVi trotzdem beenden soll (also einfach alle For- und While-Schleifen beendet).
Das Bedienungselement "Flashen Fertig" beendet die while schleife im SubVi falls alles ordnungsgemäß abgelaufen ist.
Wenn ich nun aber den Stopp Knopf im MainVi drücke passiert nichts.
Sieht einer von euch den Fehler?
Gruß Slevin
EDIT: Hab das Problem gefunden... "Flashen Fertig" war am Anfang immer sofort True...
Hallo zusammen.
Der Thread ist zwar schon etwas in die Jahre gekommen, aber er trifft mein Problem hier wohl mit am besten.
War bisher eigentlich immer der stille Mitleser, weil für meine Problemchen hier im Forum eigentlich immer schon gute Lösungsansätze zu finden waren.
Diesmal komme ich aber nicht wirklich weiter.
Eigentlich will ich nur ein Sub-Vi, in dem eine Schleife läuft, aus dem Main-VI abbrechen, was hier ja schon zur Genüge ausgeführt wurde.
Dazu hätte ich eigentlich gern die Vorlage von Jens (Beitrag #9) benutzt. Diese funktioniert bei mir auch genauso wie sie soll.
Wenn ich das Ganze allerdings selbst aufbaue bzw. in mein Projekt einbaue, geht's eben nicht mehr. Aus irgendeinem Grund kann ich am Frontpanel im Main-VI gar keine Buttons drücken, wenn das Sub-VI läuft.
Ich habe mal meine beiden Test-VIs angehängt, die im Prinzip genau der Vorlage von Jens entsprechen, nur dass meine Main-VI Frontpanel-Buttons nicht klickbar sind.
Kann mir hier jemand weiterhelfen? Habe ich nur irgendwelche VI-Einstellungen übersehen? Vermutlich ist es nur irgendein banaler Fehler, aber ich kann ihn leider nicht entdecken.
Danke schonmal für eure Hilfe.
Gruß
radi
PS: Soll ich die VIs lieber für eine ältere LV-Version hochladen oder ist 2018 OK?
Die VI-Einstellungen habe ich bereits durchgesehen, Fenstererscheinungsbild beim Sub-VI ist Standard, Verhaltensweise ebenfalls Standard und nicht modal.
Ich verwende im Haupt-VI eine Eventstruktur, weiß aber nicht, ob diese das UI blockiert. Kann man das einstellen? Wie schon erwähnt, habe ich einfach das Minimalbeispiel von Jens nachgebaut.
Seine VIs funktionieren bei mir, meine nachgebauten nicht.
EDIT: sind die VIs jetzt für 2017 gespeichert? Der Anhang sagt 2018, ich hab aber ganz normal auf "für vorige Version speichern" geklickt
Zitat:Oder verwendest du im HauptVI eine Eventstruktur, die das UI blockiert?
Antwort: JA!
Einfach mal den Dialog zum Konfigurieren der Eventcases öffnen und das Häkchen bei "lock panel…" wegmachen.
Ist aber eher eine Quick&Dirty-Lösung - besser wäre eine bessere Programmarchitektur!
aahh, vielen Dank! Genau diese Einstellung habe ich gesucht. Dachte mir schon, dass es etwas in der Art sein müsste, hab's aber nicht gefunden.
(31.07.2018 15:03 )GerdW schrieb: Ist aber eher eine Quick&Dirty-Lösung - besser wäre eine bessere Programmarchitektur!
Ja, ich hab mir schon gedacht, dass man das auch schöner lösen könnte, vorerst werde ich das aber so machen, denke ich.
Auf welche Art wäre es denn besser?
Über Queues oder Notifier im Sinne einer Erzeuger-Verbraucher-Struktur mit zwei parallelen Schleifen?
Mein Gesamtprojekt basiert derzeit auf einem einfachen Zustandsautomaten, weil der Ablauf bei mir eigentlich sehr sukzessiv ist und ich nur ein/zwei Fälle hab, wo der User eingreifen können muss, während in einem Sub-VI in einer Schleife Daten verarbeitet werden.
Grundregel bei Event-Cases: Events so schnell wie möglich abarbeiten, um das UI eben nicht zu blockieren!
Du brichst diese Regel, weil du IM Eventcase ein subVI aufrufst, welches deutlich länger als gefühlte 100ms läuft…
Mögliche Lösungen:
- QMH (Queued Message Handler), der Befehle aus der Event-Struktur abarbeitet
- das subVI über VIServer/Asynchron aufrufen, dann läuft es parallel zur Event-Struktur und blockiert diese nicht
- viele mehr…