LabVIEWForum.de
Verbessern - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Verbessern (/Thread-Verbessern)

Seiten: 1 2


Verbessern - seitzo - 01.12.2011 13:59

Hallo, hab ein Programm geschrieben, leider sind viele Variablen vorhanden.
Ich hab gelesen, dass Variablen in Labview schlecht sind, man sollte Drähte ziehen.

Leider hab ich mehrere Schleifen und muss an unterscheidlichen Stellen in mehrere Dateien schreiben um die Daten später wieder übers Netzlaufwerk von einem anderen PC mit einem Labview-Programm abzuholen und zu beschreiben.

Grund: die Berechnungen sollen auf einem PC laufen und die Eingaben und Ausgaben sollen auf einem anderen PC laufen.

Außerdem sollten die Änderungen in Echtzeit angezeigt werden, also nicht erst wenn eine Schleife Beendet ist.

Das geht doch nur mit Variabeln oder?
Wie macht mans richtig?

Außerdem wie liest man Daten aus einem Anzeigeelement ohne Variablen?


Wie mach ich das bei meinem Programm ?

Das angehängte Programm ist für die Berechnung zuständig.


RE: Verbessern - Achim - 01.12.2011 14:45

Hi,

"Richtig" wäre erst mal, ein bisschen Platz zu sparen...und z.B. für die Wochentage nicht alles getrennt zu coden, sondern SubVI's zu erstellen...du machst ja jeden Tag das gleiche, oder?

Und "hart" vorgegebene Pfad erweisen sich früher oder später als sehr unschön für die Wartung...

Und die ganzen Eingabemasken sind auch identisch...brauchst du die wirklich so oft? Wäre es nicht einfacher, anstelle der Auswahl über das Tab-Control einfach einen Textring zu nehmen und anhand dieser Information die Eingabedaten der korrekten Verarbeitung (siehe oben, SubVI's) zuzuweisen?! Die Eingabemasken könntest du als StrictTypeDef speichern, dann wären eventuelle Änderungen gleich in allen Instanzen vorhanden.

A.


RE: Verbessern - eb - 01.12.2011 14:47

Hallo seitzo,

Dein Programm ist momentan zwar sehr "gegliedert", dennoch solltest du noch ein wenig mehr Arbeit in die Programmstruktur stecken. Am stärksten aufgefallen sind mir:
- Redundanter Code in den Cases für FS, SS, NS, sowie in den Cases für die Wochentage -> am besten nur den sich verandernden Code in Case-Strukturen packen
- deine Wochentags-Schleife ist suboptimal -> schau die evtll. mal das Prinzip einer State-Machine an.
- nicht alle "Phasen" deines Programms müssen zwingend nacheinander ausgeführt werden -> Sequenzen vereinen/weniger Sequenzen, vielleicht sogar durch eine State-Machine mit "init"- und "exit"-State überhaupt keine Sequenzen mehr
- wenn die Struktur "aufgeräumt ist, werden schon viel weniger LokaleVariablen existieren, diese können dann eventuell noch reduziert werden.

Mit hilfe sog. "Eigenschaftsknoten" kannst du auf sehr viele Eigenschaften eines Controls zugreifen, wie z.B. den Text eines String-Controls. Klicke einfach mal mit rechter Maustaste auf ein Control und wähle Erstellen->Eigenschaftsknoten und schaue dir mit aktivierter Kontexthilfe (Strg+H) die einzenen möglichen Eigenschaften an.

Bei Fragen zur State-Machine die Beispiele anschauen und Gedankenknoten posten.


Viel Glück


RE: Verbessern - Achim - 01.12.2011 14:51

(01.12.2011 14:47 )erik.brenncke schrieb:  Mit hilfe sog. "Eigenschaftsknoten" kannst du auf sehr viele Eigenschaften eines Controls zugreifen, wie z.B. den Text eines String-Controls.

Das ist aber auch nicht per se zu empfehlen! PropertyNodes und InvokeNodes bremsen die Performance...nur um den "Value" eines Controls zu kriegen, ist das m. E. auch nicht "klüger" als eine lokale Variable...

A.


RE: Verbessern - seitzo - 01.12.2011 14:53

Hier nochmal das ganze in einer älteren LABviewversion mit allen Sub-Vi's


RE: Verbessern - GerdW - 01.12.2011 15:05

Hallo seitzo,

dein ZIP enthält immer noch nur lv11_img-VIs...


RE: Verbessern - seitzo - 01.12.2011 15:07

@erik

Zitat:- Redundanter Code in den Cases für FS, SS, NS, sowie in den Cases für die Wochentage
Zitat:am besten nur den sich verandernden Code in Case-Strukturen packen

Sorry, aber wie mach ich das?, meines erachtens ändert sich alles.
Sorry, hab wohl nochmal auf speichern geklickt.


RE: Verbessern - seitzo - 02.12.2011 08:07

Wie kann ich eine State-Machine in meinem Programm einsetzen?


RE: Verbessern - GerdW - 02.12.2011 09:16

Hallo seitzo,

Tipps:
- RubeGoldbergs entfernen:
[attachment=37493]
- du liest wiederholt Dateien/Settings ein (wie z.B. SA_lesen.vi): Ändern sich diese Dateien wirklich so oft? Oder würde es nicht ausreichen, diese einmal einzulesen? Dann bräuchte man auch nicht dauernd in lokale Variablen zu schreiben...
- deine subVIs haben nur ein generisches Icon. Erstelle ein eigenes aussagekräftiges Icon und du kannst die ganzen VI-Namen wieder ausblenden -> Platz im (riesigen) BD gespart...
- Verwende ErrorCluster zum Sequenzieren von VIs -> Sequenzstruktur wird unnötig -> Platz im (riesigen) BD gespart...
- Verwende Schieberegister statt lokaler Variablen...
- Verwende (strikte!?) Typdefinitionen für deine Datentypen...
- Würde sich nicht ein Array of Cluster für deine Wochentage anbieten (statt Cluster of Cluster)?
- strikte von-links-nach-rechts-Verdrahtung macht BDs besser lesbar...
- was ich auch liebe: ungenutzte Terminals von Controls, aber lokale Variablen...

Bitte drüber nachdenken, evtl. umsetzen und dann neu hochladen...


RE: Verbessern - seitzo - 02.12.2011 11:47

Was sind ErrorCluster?

und noch ne Frage,
wieso kann ich wenn ich eine Registerkarte als Anzeigeelemt nehme keine Register anklicken, bleibt z.B immer auf Auftrag1 oder MO-FR?