26.02.2009, 21:47
(Dieser Beitrag wurde zuletzt bearbeitet: 26.02.2009 21:49 von Cruzaderz.)
Beitrag #1
|
Cruzaderz
LVF-Gelegenheitsschreiber
Beiträge: 81
Registriert seit: Apr 2008
2010
-
de_en
22846
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
Heyho!
Nachdem ich mit Jens' Hilfe (danke nochmal ) mein Netzteil endlich zur Kooperation bewegen konnte, hat sich beim weiteren Programmieren promt die folgende Frage aufgetan:
Wie weit bzw. was überhaupt sollte ich in sub-VIs aufdröseln???
Mal als Beispiel das Netzteil, wie es nun als Einzel-VI mittels flacher Sequenz soweit funktioniert:
- RS232 konfigurieren
- Stellwert-String berechnen
- RS232 schreiben
- 250 ms warten
- RS232 lesen
- RS232 schließen
...der Tipp von Jens lautete aber, ich solle doch alles in handliche sub-VIs packen. Also gesagt, getan: alles (bis auf die Wartezeit natürlich ) wurde in Einzel-VIs gepackt und die wieder in einer flachen Sequenz zu einem Ablauf vereint. Dann kam die Erkenntnis, daß man den RS232 ja nur einmal öffnen/schließen muß, also wurde diese wieder um ein "do/while" erweitert usw.. Aber sub-VIs erstellen, um sie dann in einem weiteren VI wieder zusammen zu fassen? Beißt sich die Katze da nicht in den Schwanz? Oder ich denke mal wieder viel zu kompliziert...
Gegen das "große" Netzteil-VI wäre eigentlich auch nichts einzuwenden, wenn nicht zwischendurch noch je ein Befehl für "ein" und einer für "aus" mit entsprechender Abfrage käme. Die hatte ich zuletzt noch versucht, mit Hilfe einer state machine den ist-Zustand mit einem evtl. Schaltbefehl (ein/aus) abzugleichen. Dann sollte alles zusammen im einzelnen VI zusammengefasst werden, das wurde aber schnell sehr unübersichtlich. Also hab' ich mich irgendwann doch für Feierabend entschieden und dachte, ich frag' - natürlich nach vorheriger Suche - lieber nochmal die Profis um Rat
Zum besseren Verständnis hier noch ein grober Überblick, was die Anlage können/machen soll:
- Die Laufzeit aufzeichnen
- Permanent eine A/D-Karte auslesen und die Werte anhand einer Kalibriergeraden umrechnen, sowie aufzeichnen
- Über RS232 einen Kryostaten steuern
- Über RS232 ein Netzteil steuern
- ...Und das ganze auch noch in unterschiedlichen Programmphasen...
|
|
|
27.02.2009, 08:10
Beitrag #2
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
Du brauchst nicht für jede VISA open, VISA write, VISA Read und VISA Close ein eigenes SubVI.
Wenn Du was zusammenpackst, dann so dass es Sinn macht.
Richtlinie: Alles was größer ist als eine Bildschirmgröße, ist zu groß und sollte durch SubVIs verhindert werden.
Ansonsten würde ich einfach größere Blöcke mit Funktionen die "zusammengehören" in ein SubVI packen.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
27.02.2009, 08:44
Beitrag #4
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
Oberstes Ziel einer Programmierung - ob LV, Delphi und naja auch C++, muss sein, alles in SubVI's zu machen. Je weniger in einem Unterprogramm steht, desto besser: Bei fast nix, kann auch nix falsch sein. Und fast nix lässt sich auch besser überblicken und damit debuggen.
Übertreiben darf man es natürlich nicht.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
27.02.2009, 09:08
Beitrag #5
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
' schrieb:Oberstes Ziel einer Programmierung - ob LV, Delphi und naja auch C++, muss sein, alles in SubVI's zu machen. Je weniger in einem Unterprogramm steht, desto besser: Bei fast nix, kann auch nix falsch sein. Und fast nix lässt sich auch besser überblicken und damit debuggen.
Übertreiben darf man es natürlich nicht.
Bei meinen Projekten achte ich darauf, SubVIs so zu erstellen, dass sie sinnvolle Aufgaben erledigen und dadurch auch in späteren bzw. anderen Projekten wieder einsetzbar sind. Man muss ja nicht jedes mal das Rad neu erfinden nur weil man grade eine Kutsche bauen möchte.
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
27.02.2009, 09:46
Beitrag #6
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
' schrieb:Mal als Beispiel das Netzteil, wie es nun als Einzel-VI mittels flacher Sequenz soweit funktioniert:
- RS232 konfigurieren
- Stellwert-String berechnen
- RS232 schreiben
- 250 ms warten
- RS232 lesen
- RS232 schließen
Hier mal ganz offen meine Meinung:
Den typischen Anfängerstil in einem LV-Programm erkennt man regelmäßig an der exzessiven Verwendung von Sequenzen. (Man will das, was man von einem textorientierten Programm her als Programmablauf gewohnt war, hinüber retten in LV, und hat sich nicht genügend mit den Vorteilen der Datenflusssteuerung vertraut gemacht). NI empfiehlt ausdrücklich die Anwendnung der Datenflusssteuerung statt Sequenzen. Schon bei der beschriebenen Abfolge wäre die Sequenzstruktur vermeidbar. Die seriellen Funktionen haben alle Error- und Task- In/Outputs, die sich miteinander verbinden lassen, wodurch die die Abfolge festgelegt würde.
Wenn Du aber das, was in den einzelnen Sequenzen steht, schön in SUB-VI packst, und dann aber, wie Du schreibst, die Sequenzstruktur immer noch beibehälst - also da fällt mir nur noch die Bezeichnung "pervers" für ein solches Programm ein.
|
|
|
27.02.2009, 10:02
Beitrag #7
|
TSC
LVF-Team
Beiträge: 1.882
Registriert seit: Sep 2008
LV 2018 SP1
2008
EN
52379
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
' schrieb:Hier mal ganz offen meine Meinung:
Den typischen Anfängerstil in einem LV-Programm erkennt man regelmäßig an der exzessiven Verwendung von Sequenzen. (Man will das, was man von einem textorientierten Programm her als Programmablauf gewohnt war, hinüber retten in LV, und hat sich nicht genügend mit den Vorteilen der Datenflusssteuerung vertraut gemacht). NI empfiehlt ausdrücklich die Anwendnung der Datenflusssteuerung statt Sequenzen. Schon bei der beschriebenen Abfolge wäre die Sequenzstruktur vermeidbar. Die seriellen Funktionen haben alle Error- und Task- In/Outputs, die sich miteinander verbinden lassen, wodurch die die Abfolge festgelegt würde.
Wenn Du aber das, was in den einzelnen Sequenzen steht, schön in SUB-VI packst, und dann aber, wie Du schreibst, die Sequenzstruktur immer noch beibehälst - also da fällt mir nur noch die Bezeichnung "pervers" für ein solches Programm ein.
Dem stimme ich grundsätzlich zu, hat ja allerdings nix mit dem Problem zu tun. Sequenzrahmen kann man mit vielen kleinen Funktionen oder eben mit einem SubVI füllen.
Sinnvoller ist es meiner Meinung nach, jedem SubVI einen ErrorIn und einen ErrorOut zu geben und durch die ErrorLine den Datenfluss zu steuern.
Meine Main-VIs sehen grundsätzlich ziemlich leer aus. Man soll auf einen Blick die Struktur erkennen können und sich nicht mit unwichtigen Einzelheiten auseinandersetzen müssen. Dann bekommen alle SubVIs noch aussagekräftige Symbole und ne gute Inline-Dokumentation und alles ist perfekt.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" ( Konrad Zuse)
|
|
|
27.02.2009, 10:38
Beitrag #8
|
|
|
27.02.2009, 10:42
Beitrag #9
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
' schrieb:Dem stimme ich grundsätzlich zu, hat ja allerdings nix mit dem Problem zu tun.
Ja, das hätte ich vielleicht noch dazu schreiben sollen, daß ich mich damit in Richtung außerhalb der eigentlichen Frage bewege.
Der ursprüngliche Sinn eines Unterprogramms war ja, nicht an verschiednen Stellen eines Programms den gleichen Code schreiben zu müssen. Später galt dann die Verwendung eines Unterprogramms auch dann als guter Programmierstil, wenn es nur ein einziges Mal verwendet wird - wegen der besseren Strukturiertheit eines solchen Programms.
Dem stimme ich zu - aber nur nicht für jedes noch so kleine Programmschnipsel, und wo hier die Grenze liegt, wird wohl jeder etwas anders entscheiden.
Ich packe auch gern mehrere Funktionen in ein einziges Sub-VI. Z.B diese Programmfolge
- RS232 konfigurieren
- Stellwert-String berechnen
- RS232 schreiben
- 250 ms warten
- RS232 lesen
- RS232 schließen
könnte man so in ein SUB-VI packen:
Das Sub-VI hat zwei boolsche Eingange "Initialisieren" und "Schließen"
Das Sub-Vi wird defaultmäßig ohne Inititalisieren und Schließen ausgeführt. Mit angeschlossenem trues werden dann die anderen Funktionen ausgeführt. (Das ist dann so eine Art Anlehnung an die objektorientierter Programmierung - das Sub-Vi macht alles, was das Objekt "RS232" betrifft.)
|
|
|
27.02.2009, 11:11
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Anlagensteuerung oder anders: Wie sehr sollte man in sub-VIs aufsplitten?
' schrieb:(Das ist dann so eine Art Anlehnung an die objektorientierter Programmierung - das Sub-Vi macht alles, was das Objekt "RS232" betrifft.)
Auch hier gilt wieder: Ein Bild sagt mehr als tausend Worte:
Wobei hier "objektorientierte Programmierung" nicht als Programmiersprache im Sinne von Delphi/C++ zu verstehen ist, sondern als "Programmiergrundsatz": Der Grundsatz heißt (weiß ich seit neuestem ) "enge, interne Bindung" und besagt genau das: Alles was ein "Objekt" betrifft, ist zusammengefasst. Und auch nur das, was das Objekt betrifft.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
| |