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!
Ich habe mein Programm jetzt soweit, dass es fertig ist, sich richtig timed und man auch alle Einstellungen, die man vornehmen kann, gleichzeitig in den Header des Messfiles geschrieben wird. Der Header ist knapp 40 Zeilen lang, sind auch einige Einstellungen. Jetzt komme ich aber auf ein Problem:
Ich würde gerne die Funktion "Einstellungen laden" einbauen: Das Programm soll den Header lesen und die Eingabefelder auf die Werte, die im Header vorliegen, setzen. Das ganze möchte ich aber falls möglich OHNE die Verwendung von Variablen machen. Ist das möglich, und wenn ja, wie?
Verstehe ich richtig, du willst (bei Bedarf oder als Default bei Programmstart) irgendwelche Settings aus einer Datei lesen und damit deine Controls im Frontpanel belegen?!
In diesem Fall ist es vollkommen legitim, eine lokale Variable des Controls anzulegen und "zu beschreiben". Sehr viel anderes bleibt auch nicht übrig auf Grund des Datenflusskonzeptes von LabVIEW, schließlich willst du noch irgendwas einstellen können im FP - das Element muss also ein Eingabeelement sein - und somit ist es im BD automatisch eine Datenquelle. Beschreiben kannst du das nur über eine lokale Variable.
(OK, man könnte noch die PropertyNode "Value" nehmen, aber das frisst mehr Resourcen).
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Spontan würde ich zu XML plädieren. Nimm deine Konfiguration, wandel diese ins XML-Format um und schreibe den XML-String als Kopf in die Datei. Das Einlesen kannst du dann umgekehrt machen. Kopf lesen und den XML-String wieder in deine Konfiguration formatieren. Das Setzen der ganzen Bedienelemente kannst du dann über zugehörige Eigenschaftsknoten der einzelnen Bedienelemente machen. Vorteil, du hast deine Konfiguration gleich wieder im korrekten Datenformat und musst eigentlich keine großen Aktionen mehr unternehmen. Falls du deine Funktion in einem SubVI implementieren willst, einfach die Referenzen der Bedienelemente als Array oder Cluster ins SubVI verdrahten. Dort kannst du diese dann verwenden um die geladenen Werte dann auf die Bedienelemente zu setzen.
' schrieb:Verstehe ich richtig, du willst (bei Bedarf oder als Default bei Programmstart) irgendwelche Settings aus einer Datei lesen und damit deine Controls im Frontpanel belegen?!
In diesem Fall ist es vollkommen legitim, eine lokale Variable des Controls anzulegen und "zu beschreiben". Sehr viel anderes bleibt auch nicht übrig auf Grund des Datenflusskonzeptes von LabVIEW, schließlich willst du noch irgendwas einstellen können im FP - das Element muss also ein Eingabeelement sein - und somit ist es im BD automatisch eine Datenquelle. Beschreiben kannst du das nur über eine lokale Variable.
(OK, man könnte noch die PropertyNode "Value" nehmen, aber das frisst mehr Resourcen).
Gruß, Jens
Es geht z.B. um das Einstellen der Parameter an einem Lock-In Verstärker. Für die Modulationsfrequenz kann sein dass einer Aus der Arbeitsgruppe eine Mod-Freq von 137 Hz braucht und einer eine Mod-Freq von 5000 Hz. Sind wie gesagt ziemlich viele Variablen.
Das Problem das ich habe ist, dass ich das FP fertig habe: In jedem Tab im FP wird ein Gerät angesteuert (Lock-In, Gasmischer, Thermostat). Die Datenfluss und -verarbeitung schaut so aus, dass ich alle Einstellungen für ein Gerät clustere und dann im BD an eine SubVI übergebe. Diese SubVI ist aber so gestaltet, dass dort wieder ein FP vorliegt, sodass man die SubVI als eingenständige VI benutzen kann. Wenn ich also nun die Eingabeelemente in der SubVI mit Variablen ersetze fehlen mir ja in der SubVI diese Elemente und ich kann die SubVI nicht mehr eigenständig verwenden.
Ich scheue mich auch ein wenig vor der Verwendung von Variablen, denn wenn ich mich richtig erinnere, hieß es in de LabVIEW CORE Kursen immer, man solle auf Variablen soweit wie möglich verzichten.
lg tobi
23.08.2010, 15:44 (Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2010 15:46 von cb.)
wenn es dir darum geht, dass du beim Programmieren nicht für jedes Control eine lokale Variable ins Block-Diagramm legen musst, dann kann man sich dadurch behelfen, in dem man programmatisch die Referenzen auf die Controls erzeugt und die Werte per Property Node schreibt:
' schrieb:Ich scheue mich auch ein wenig vor der Verwendung von Variablen, denn wenn ich mich richtig erinnere, hieß es in de LabVIEW CORE Kursen immer, man solle auf Variablen soweit wie möglich verzichten.
das ist durchaus richtig, aber: du hast ja keine andere Möglichkeit, wenn du die Controls auf einen bestimmten Wert setzen willst, als das über lokale Variablen oder Property Nodes zu erledigen, und darauf zu verzichten die Controls mit einem bestimmten Wert zu belegen, nur weil man dafür lokale Variablen oder Property Nodes braucht ist ja irgendwie auch keine Option... in diesem Fall hat mal also immer eine gute Ausrede, warum man sie doch benutzt
Hab jetzt alles umgebaut und stehe vor dem nächsten Problem. Der Programmatische Aufbau schaut jetzt so aus:
1) Man startet man das Programm, dies läuft zuerst in einer Schleife. Da wartet zB. auch eine Event-Structure, falls man was laden will. Die Event-Structure ruft eine subVI auf, die den String vom Header eines Messfiles scannt und alle gescannten Variablen auf die globale Variable überträgt.
2) Drückt man auf "Messung starten", beendet man diese Schleife, man durchläuft eine Sequenz mit der man die Werte der Eingabefelder (!) auf die globalen Variablen überträgt
und dann beginnt die Messung. (Nachdem man auf einen gemeinsamen Start-Tick gewartet hat).
Jetzt kommt das Problem: Wenn ich nun mit der Event Structure die Werte in die globalen Variablen (3 Stück, je Instrument eine) schreibe ändere ich damit aber nicht die Werte der Eingabefelder. Starte ich nun die Messprozedur werden die globalen Felder ja wieder auf die Default-Values des Front Panel gesetzt. In einem anderen Programm (nicht von mir) funktioniert da, aber da waren das lokale Variablen, und die kann ich nicht verwenden, da ich viele subVIs brauche.
Also - entweder du überträgst beim Laden von einer externen Datei die Einstellungen auf die FP-Controls (z.B durch Schreiben in eine lokale Variable) oder du merkst dir irgendwie, ob der User jetzt Einstellungen selber vorgenommen hat oder Einstellungen geladen hat. Im zweiten Fall werden halt die Werte aus deinem FP nicht in die globalen Variablen übertragen.
Ich würde lieber die Einstellungen beim Laden auch im FP anzeigen, denn dann kann der User ein Setup laden und dieses noch partiell abändern. Den Übertrag musst du dann halt programmieren, da bleibt dir nichts anderes übrig.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!