LabVIEWForum.de
Control aus Datei füllen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Control aus Datei füllen (/Thread-Control-aus-Datei-fuellen)



Control aus Datei füllen - cnt_10 - 17.08.2010 14:54

Hallo,
ich habe folgendes Problem. Eine Versuchsstandöberfläche besteht aus mehr als 80 Controls (STRING und DBL) und muss bei jedem Programmstart neu von Hand beschrieben werden.
Um den Zeitaufwand zu minimieren habe ich eine Excel-Konfigurationsdatei angelegt und lese jetzt jedes Feld einzeln aus dieser Datei in einen Indikator aus.
Ich habe die Version 8.6 und unten einen Ausschnitt meines VI´s angefügt.
In der Original werden diese Felder dann im weiteren Programm verwendet.

1) Wie kann ich es gestalten das SubVI nur einmal auszuführen, jedoch für jedes Feld mit einem anderen Eingangswert?
So wie es jetzt ist werden die Ressourcen meines PC voll ausgenutzt und das geht bestimmt eleganter..Smile
2) Es hat sich herausgestellt, die Editierbarkeit der Felder wäre doch weiterhin ganz hilfreich. Gibt es eine Möglichkeit die Controls zu lassen,
diese aber trotzdem aus einer Datei auszulesen?

Vielen Dank für die Hilfe!

BG Hannes

Sorry, falls ich das Thema im falschen Bereich gepostet haben sollte.


Control aus Datei füllen - TSC - 17.08.2010 15:08

Leider hast du dein SUB-VI nicht mit angehängt, daher kann ich nur beispielhaft Tipps geben:

1. Lege alle Zellen-Koordinaten (C9-C48) in ein Array. Dieses Array legst du an eine For-Schleife (autoindiziert). Dann führst du das SUB-VI in der For-Schleife einmal aus (in jedem Schleifendurchlauf wird dabei das nächste Element aus dem Array genommen). Das glecihe machst du dann für die Zellen D9-D48. Du kannst auch alles in einer Schleife machen. Damit die Schleife deine CPU nicht übermäßig belastest, solltest du eine kleine Wartezeit von wenigen ms einbauen.

2. Ersetze die 40 Anzeigeelemente durch Bedienelemente. Per Eigenschaftsknoten kannst du dort programmatisch einen Wert eintragen. Evtl. Reicht dir aber auch ein Array als Bedienelement? Das ist dann leichter zu erweitern, falls du mal mehr oder weniger als 40 Elemente verwenden möchtest.

(3.) Das ist schon der Richtige Bereich des Forums.

Grüße,
Torsten

Beispiel:
Lv86_img[attachment=28810]


Control aus Datei füllen - cnt_10 - 17.08.2010 15:54

Super Dankeschön!!Thanx

Da wäre ich alleine nicht drauf gekommen!

Beste Grüße,

Hannes


Control aus Datei füllen - TSC - 17.08.2010 15:57

Merk dir einfach: Alles was du mehrmals von Hand machst, kann eine Schleife genausogut oder besser für dich erledigen.

Grüße,
Torsten


Control aus Datei füllen - Lucki - 17.08.2010 16:36

Habe mirs auch mal angesehen, im Prinzip würde ich es genau so machen wie Tschac. Lediglich die Einführung von Bedienementen als Anzeigen und die damit verbunde Wertzuweisung über lokale Variablen kann ich nicht nachvollziehen. (Und darüber, daß die CPU "übermäßig belastet" wird, muß man sich hier wirklich keine Sorgen machen und deswegen ein Wait in die For Schleife stellen)
Mit dem 40-elementigen Array auf dem FP wirst Du nicht glücklich. Wenn man alle Elemente immer sehen soll, ist die Darstellung in Clustern sinnvoller. Habe hier als Beispiel doch das Array gelassen, aber dieses in 2 Teile zerlegt. Ansonsten ist es das VI von Tschac.

Lv86_img[attachment=28811]


Control aus Datei füllen - TSC - 17.08.2010 16:44

@lucki:
ich habe keine lokalen Variablen verwendet sondern Eigenschaftsknoten (ob das nu ein besonderer Vorteil oder Nachteil ist, sei dahingestellt). Die Anforderung Bedienelemente zu verwenden, kam von cnt_10 selbst. Ob das Programm die CPU lahmlegt oder nicht, kann ich nicht beurteilen, da ich nicht sehe, was in den SUB-VIs so alles passiert. Eine ungebremste Schleife ist allerdings immer eine Belastung für die CPU und bremst parallele Prozesse aus (40 mal Datei IO sollte allerdings schnell vorbei sein, da gebe ich dir recht).

Grüße,
Torsten


Control aus Datei füllen - Lucki - 17.08.2010 17:23

@Thorsten
die Forderung nach Editierbarkeit hatte ich glatt übersehen. Hier also schnell die Korrektur:
[attachment=28812]
Wenn eine riesengroße For-Schleife andere Prozesse blockiert, dann ist Wait schon richtig, und man muß damit nicht einmal die Geschwindigkeit ausbremsen. In der Hilfe zur Wait-Funktion steht:
Bei Wait= 0 wird der aktuelle Thread zur Abgabe der CPU-Steuerung gezwungen.


Control aus Datei füllen - cnt_10 - 17.08.2010 17:32

Danke Lucki für deine Hilfe, aber die Bedienelemente am Ende sind schon ideal.

Ich habe jetzt das SubVI integriert und es funktioniert auch wunderbar im Highlight Execution-Modus.
Wenn ich es aber normal ausführen möchte kommt die Fehlermeldung:

"Error -2147417846 occurred at Durch den Messagefilter wurde angezeigt, dass die Anwendung ausgelastet ist.
in Excel_Zelle_auslesen DBL.vi->Excel_Zelle_auslesen String&DBL.vi
This error code is undefined. No one has provided a description for this code, or you might have wired a number that is not an error code to the error code input."

Das ist übrigens die selbe Fehlermeldung wie in meinem ursprünglichen umständlichen Programm.
Ich hänge noch das SubVI an, damit ihr den vollen Einblick bekommt.
Bestimmt ist es nur ein kleiner dümmlicher Fehler, bei dem NI nicht mal dran gedacht hat einen Code zu hinterlegen. Blush

Danke für eure Hilfe!

LV-Version 8.6


Control aus Datei füllen - cnt_10 - 17.08.2010 18:48

Ich habe jetzt eine Möglichkeit gefunden wie es funktioniert. Idee

Meine Erklärung ist, das Auslesen läuft jetzt nicht mehr parallel, sondern in Reihe und
das führt nicht mehr zur Auslastung der Anwendung.

Vielleicht kann ja nochmal jemand einen Blick drauf werfen und mir sagen falls ich mich irre.

Besten Dank jedenfalls für alle Hilfe!

Grüße,

Hannes

Lv86_img