LabVIEWForum.de - SUBVi über Referenz anzeigen, Problem mit dem Rücklesen von Daten

LabVIEWForum.de

Normale Version: SUBVi über Referenz anzeigen, Problem mit dem Rücklesen von Daten
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Derzeit bin ich dabei eine Nutzerschnittstelle zu programmieren, die es einem Anwender über ein Touchpanel ermöglichen soll ein Array zu editieren. Quelle der Daten ist ein verteiltes I/O-System.

Nun soll der Anwender Zeilen hinzufügen können und auch wieder entfernen. Dazu möchte ich ein SubVi verwenden, dass auf die kompletten Daten zugreifen kann. Dieses soll auch wiederholt und möglichst mit kleinen Aufwand an verschiedenen Stellen im HauptVi aufgerufen werden können. Daher versuchte ich Schieberegister und Ereignisstrukturen zu vermeiden.

Die Hauptanwendung muss dabei immer weiterlaufen.

Ich verwende Referenzen zum Öffnen des Frontpanls (SubVi) und auch zu dessen Start.

Um das SubVi möglichst mit kleinem Aufwand weiter verwenden zu können benutzte ich Buttons mit dem Schaltverhalten "Latsch beim Betätigen" und einfache case strukturen, in denen das Frontpanel des SubVis geöffnet wird.

Das Problem ist nun, das ich zwei Schritte (Buttons) benötige, um eine Editieraufgabe zu lösen.

Zunächst wird das SubVI aufgerufen, eine zeile gewählt und dann per "OK" dieses wieder beendet. Schließlich brauche ich es nur zum Auswählen. danach wird der nun gewonnen Index durch einen zweiten Button im Hauptgrogramm zum eigentlichen Editieren eines Index-Arrays verwendet, durch das im Hauptprogramm die zu führende Liste wiederum erstellt wird.

Auch das Auslesen des "Stopp" Buttons des SubVis brachte mich nicht weiter. Damit konnte ich keinen sicheren Betrieb realisieren. Mehrfacheinfügen oder keine Reaktion im HauptVi waren aufgrund der unterschiedlichen Taktung der beiden Schleifen die Folge.

Die Vis habe ich in der Version 8.0 abgespeichert.

Vielleicht hat einer eine bessere Idee?

Problem mit SubVis, habe ich bisher öfter im Forum gelesen aber noch nicht den richtigen Hinsweis.

Gruß,

Peter

P.S.: alle Vis in einen Ordner kopieren
Erst mal Kritik:Grrr
Dass du hier ein VI (nämlich Variable_w_hlen.vi) hochlädst, dass
1. auf Modal
2. Auf Run when Opened
3. Ohne Windows-Bar und ohne Toolbar-Anzeige
eingestellt ist, fand ich persönlich unverschämt. Denn bei dieser Gesamtkombination musste ich erst mal ganz schön tricksen, um das VI abzubrechen, um dann in den Source-Code zu kommen. Das war echt unnötige Arbeit und hat mich sehr geärgert.

Was ich nicht verstehe, wieso du freiwillig auf Event-Strukturen verzichten willst? Aber bitteschön, ist deine Wahl.

Jetzt eine mögliche Lösung:
Stell doch in deinem Variable_w_hlen -VI den OK-Button auf "Switch when pressed". Dann bekommst du in deinem RückleseVI den Status sauber mit. Und den OK-Button setzt du über z.B. über eine lokale Variable vor der For-Schleife wieder auf FALSE zurück!?

Gruß, Jens
Hallo Jens,

danke schon mal für die Anregung.

Wahrscheinlich hast du das SubVi auch mit "STRG :" beendet?

Ist mir nicht aufgefallen, dass das Probleme machen könnte. Ich rief das SubVI immer aus dem HauptVI auf, um es dann mit dem OK Button zu beenden.

Werde in Zukunft ausschließlich Vis hochladen, die mit Windowsleiste und Funktionszeile ausgestattet sind.

Werde gleich mal testen, was du meinst. Nur mit der lokalen Variable wird das nicht gehen, da die auf ein Vi beschränkt ist, oder? Der OK-Button im SubVi müsste ja die Case-Strukturen im HauptVi eimal ansteuern, um die "2-Button Lösung" im HauptVi abzulösen.

Gruß,

Peter
' schrieb:Wahrscheinlich hast du das SubVi auch mit "STRG :" beendet?
Auch ich langjähriger LV-User muss zugeben, dass ich diese Tasten-Kombi noch nicht kannte. Dafür werde ich wohl jetzt nie wieder vergessen.
' schrieb:Werde gleich mal testen, was du meinst. Nur mit der lokalen Variable wird das nicht gehen, da die auf ein Vi beschränkt ist, oder? Der OK-Button im SubVi müsste ja die Case-Strukturen im HauptVi eimal ansteuern, um die "2-Button Lösung" im HauptVi abzulösen.
Ja und Nein. Ich sehe inzwischen, dass durch dein dauerndes Pollen meine Idee mit der lokalen Variablen wohl auch keine Lösung ist, da dies an 2 Stellen im Main-VI ausgelesen wird.
Weitere Idee: Du hast dein Auswahl-VI ja auf Modal gesetzt, d.h. es ist auf jeden Fall im Vordergrund. Muss während dieser Zeit eigentlich das Haupt-VI weiterlaufen? Wenn nein, dann verzichte doch auf die Einstellung "Wait until Done"=False, setze es auf True, und du weisst nach Beendigung des Sub-VI ganz genau, welche Instanz (also hinzufügen oder löschen) aufgerufen wurde. Entspricht dann im Endeffekt einem ganz normalem SubVI-Aufruf.

Gruß, Jens

EDIT: Habe doch noch eine Variante, die mit "lokaler Variable" oder auch InvokeNode "Reset To Default" funktioniert:
[attachment=18082]
In den nicht dargestellten Cases wird einfach durchverbunden.
EDIT 2: Und natürlich wird diese True-False Konstante per Schieberegister von einem Schleifen-Durchlauf zum nächsten weitergegeben.
Hallo Jens,

mir ist aufgefallen, dass ich den zweiten Aufruf zum Löschen einer Zeile nicht brauche, da ich hier sowieso nur die aktuelle Liste an das Listboxelemtn im SubVi übergeben habe, das ich sowieso auf dem Bildschirm sehe und auch gleich da bearbeiten kann.

Also bleibt nur die Case-Struktur um neue Variablen einzuführen.

Werde das jetzt bis morgen so lassen und einen lieben Mitmenschen auf "intiuitiv" bedienbar oder eben nicht testen lassen. Eben mit der "Zweiten Bestätigung", dass man wirklich diese Zeile einfügen will.

Das HauptVi muss deshalb weiterlaufen, da hier während der Bearbeitung von so einer einfachen Liste durchaus Grenzwertüberwachung und evtl. sogar Führungsgrößenrampen an das I/O System auf den Bus geschickt werden.

Gruß,

Peter

Edit: Da die Hauptschleife bei der Anwendung immer schneller läuft als das SubVi, hatte ich als erstes eine Lösung mit Flankenerkennung. Eben mit Schieberegister. Dabei ließ ich prüfen, ob zwischen einem und dem nächsten Durchlauf der Case-Struktur ein negativer Flankenwechsel stattgefunden hat. Damit ging es auch recht gut. Erst bei völlig ungebremsten Schleifen gings damit auch deneben. Wollte aber kein Schieberegister oder Rückkopplungknoten verwenden. Der Übersicht halber.
' schrieb:Wahrscheinlich hast du das SubVi auch mit "STRG :" beendet?
ctrl-. ist es richtig Wink

LabVIEW Quick Reference Card
Hier steht das wichtigste drinn.
' schrieb:Edit: Da die Hauptschleife bei der Anwendung immer schneller läuft als das SubVi, hatte ich als erstes eine Lösung mit Flankenerkennung. Eben mit Schieberegister. Dabei ließ ich prüfen, ob zwischen einem und dem nächsten Durchlauf der Case-Struktur ein negativer Flankenwechsel stattgefunden hat. Damit ging es auch recht gut. Erst bei völlig ungebremsten Schleifen gings damit auch deneben. Wollte aber kein Schieberegister oder Rückkopplungknoten verwenden. Der Übersicht halber.
Ja also wenn du nach Event-Struktur auch noch unbedingt auf Shift-Register (was ist daran unübersichtlich? Ich finde die mit das Beste, was es in LV gibt) unbedingt verzichten willst, dann ist dir langsam nicht mehr zu helfen. Du kannst natürlich noch mit Meldern/Notifiers oder Queues arbeiten, um ein Event aus dem SubVI an das Main-VI weiterzugeben.

Da du es dir also selber unbedingt schwer machen willst, steige ich hier erst mal aus. Vielleicht hat jemand anders eine Idee, ich sonst nicht...

Gruß, Jens
@RoLe ...."STRG ." natürlich. Zum Glück macht meine Hand das immer richtig...


Hallo Jens,

danke für die Hilfe. Gestern hatte ich zusätzlich zwei Lösungen ohne SubVi realisiert. Einmal mit Eventstruktur und einmal ohne. Werde die noch posten, da ich gerade nicht am LabVIEW Rechner bin.

Problematisch war allerdings bei dem Ereignis: Maus up, da ich die Maustaste ja auch über dem Scrollbar bediene. Evtl. gibt’s da besser geeignete Events.

Werde mich Heute Abend noch mal den Vis widmen.

Gruß,

Peter
Referenz-URLs