INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Sauberes und 'schlankes' Programmieren



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!

22.10.2004, 17:53
Beitrag #1

chiefwiegam Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 135
Registriert seit: Sep 2004



kA



Sauberes und 'schlankes' Programmieren
Hallo zusammen,

da schon solche Fragen augetaucht sin und dass etwas ist, dass jeder brauchen kann, starte ich mal diese Gemeinschaftstutorial.

Jeder soll doch seine Tipps posten und ich trage dann - der Übersicht halber - alles in den ersten Post.

Habt ihr Regeln für saubere Programmieren?

___

Resource Sparen

- möglichst wenig und langsames Polling.

- möglichst wenig easy VIs verwenden besonders dan wenn zum Beispiel etwas in einem Loop in eine Datei gespeichert wird. Dan nur das Lesen im Loop und Referenz öffne un dschliessen vor bzw. hinter dem Loop.

- Array-bearbeitende VIs brauchen viel Ressourcen (wenn möglich nicht in Loops)

- Bei der Bearbeitung von Arrays: For-Schleifen den While-Schleifen bevorzugen, da die For-Schleifen in vorherein wissen wieviel Speicher benötigt wird und die While-Schleife bei jeder Iteration neuen Speicher allokiert.

- SubVIs dynamisch Aufrufen, da normal aufgerufene SubVIs immer beim Starten des HauptVIs geladen werden. (In LabVIEW 8 gibt es Schleifen die dies direkt Lösen.) genaueres unter Ausfuehrungsprioritaeten/Speicherallokierung in/von LabVIEW


Sauberes und Übersichtliches

- immer von Links nach recht Coden

- in SubVIs unterteilen (wird überischtlicher und der gesammte Code muss nicht auf einmal geladen werden)

- so wenig globale Variablen wie möglich verwenden

- kein wire-crossing (wenn irgend möglich)

- Datenströme sinnvoll zusammenfassen (Cluster, Arrays). Z.B. nicht zehn Connectors an ein SubVI, wenn nur einige vom User eingegebene Strings übergeben werden.

- Größe des Block-Diagramms auf möglichst eine Seite beschränken.

- "Icons eng gruppieren, aber nicht zu eng!" - Gleiches gilt für die Verbindungen. Die Verbindungen sollten mindestens soweit auseinander liegen, dass man sie mit den Augen (statt mit dem Mauszeiger oder Finger) verfolgen kann

- SubVI-Icons sinnvoll gestalten/beschriften (gibt nix schlimmeres, als wenn alle SubVIs gleich aussehen)

- Farbwahl bei Icons möglichst konsequent

- Viel/Geschickt kommentieren, besonders bei komplexen Abläufen, das hilft später oder anderen sich schneller in den Ablauf reinzudenken




___

Es gibt noch viele mehr. Also posted,schickt PMs oder mailt mir.

g markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2005, 14:43
Beitrag #2

Wurm Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Mar 2005



kA



Sauberes und 'schlankes' Programmieren
- kein wire-crossing (wenn irgend möglich)

- Datenströme sinnvoll zusammenfassen (Cluster, Arrays). Z.B. nicht zehn Connectors an ein SubVI, wenn nur einige vom User eingegebene Strings übergeben werden.

- Größe des Block-Diagramms auf möglichst eine Seite beschränken. Icons eng gruppieren, aber nicht zu eng! Wires müssen sichtbar bleiben.

Wurm
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2005, 14:56
Beitrag #3

Björn Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 170
Registriert seit: Sep 2004

8.1?
2003
de

51107
Deutschland
Sauberes und 'schlankes' Programmieren
- SubVI-Icons sinnvoll gestalten/beschriften (gibt nix schlimmeres, als wenn alle SubVIs gleich aussehen)

- Viel/Geschickt kommentieren, besonders bei komplexen Abläufen, das hilft später oder anderen sich schneller in den Ablauf reinzudenken

- Farbwahl möglichst konsequent

- "Icons eng gruppieren, aber nicht zu eng!" - Gleiches gilt für die Verbindungen. Die Verbindungen sollten mindestens soweit auseinander liegen, dass man sie mit den Augen (statt mit dem Mauszeiger oder Finger) verfolgen kann

Die besten und schönsten Dinge auf der Welt kann man weder sehen noch hören. Man muss sie mit dem Herzen fühlen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2005, 16:37
Beitrag #4

Mario W. Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Jan 2005

4.1 -> 8.0.1
1997
kA


Oesterreich
Sauberes und 'schlankes' Programmieren
chiefwiegam schreib "-so wenig globale Variablen wie möglich verwenden (Referenzen sind besser) "

Auf Referenzen (properties) würde ich wenn möglich verzichten. Das Problem bei Referenzen ist, das die Methoden die mit der Referenze ausgeführt werden im Frontpanel Task ausgeführt werden d.h. LabVIEW muß immer einen Taskwechsel bei R|W von einer Property ausführen.
= hohe Systemauslastung

mfg

Mario
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2005, 18:10
Beitrag #5

chiefwiegam Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 135
Registriert seit: Sep 2004



kA



Sauberes und 'schlankes' Programmieren
hi mario,

das ist ein tipp den ich am basis-kurs von ni erhalten habe.
habe den eintrag mal entfernt. würde dem aber gerne weiter nachgehen.
kennt sich sonst noch jemand damit aus?

g markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.03.2005, 18:23
Beitrag #6

Mario W. Offline
LVF-Grünschnabel
*


Beiträge: 47
Registriert seit: Jan 2005

4.1 -> 8.0.1
1997
kA


Oesterreich
Sauberes und 'schlankes' Programmieren
Hallo

Du kannst es ganz leicht ausprobiern.
Eine while Schleife die in ein control den Incrementator Wert schreibt, mal über referenze Property->Value und mal über den indicator Node.

das Control wird bei jeden Wert der an das Property übergeben wird refreshed. Außerdem sind Refernzen zB. auch nicht thread safe soweit ich das weíß, Wires schon *g*


mfg

Mario
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.09.2005, 21:15
Beitrag #7

thomas.sandrisser Offline
LVF-SeniorMod


Beiträge: 1.298
Registriert seit: Sep 2005

xxxx
2005
EN

78759
United States
Sauberes und 'schlankes' Programmieren
chiefwiegam schrieb:-möglichst wenig und langsames Polling.

-Array-bearbeitende VIs brauchen viel Ressourcen (wenn möglich nicht in Loops)

-in SubVIs unterteilen (wird überischtlicher und der gesammte Code muss nicht auf einmal geladen werden)

Um Polling ganz zu vermeiden ggf Queues verwenden
Wenn ein Array verarbeitet werden soll, dann nur mit For Schleifen arbeiten (bei For Schleifen weiß LV beim Compilieren des Codes wieviel Speicher allokiert werden muss - bei einer While Schleife muss LV bei jeder Iteration neuen Speicher allokieren!)
In SubVIs aufteilen ist schoen und gut jedoch wird beim Kompilieren (sprich klick auf den Run Button) der KOMPLETTE Code kompiliert - seis in einem SubVI das bereits von vornhinein in einem Case liegt der durch die statischen Einstellungen der Parameter mit Sicherheit nicht abgearbeitet wird oder nicht!
Wenn man diesen Effekt umgehen will kommt man um den dynamischen Aufruf von SubVIs nicht herum!
(in LV 8 stehen zwei neue Schleifenarten zur Verfuegung die die Eigenschaft haben, Cases die nicht abgearbeitet werden (auf Grund von statischen Einstellungen die beim Klicken auf den Run Button gegeben sind und waehrend der Laufzeit nicht geaendert werden) außen vor zu lassen, sprich NICHT in den Speicher laden!)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.03.2006, 23:57
Beitrag #8

ChrisG Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Mar 2006



kA



Sauberes und 'schlankes' Programmieren
- Cases am besten immer mit kurzem Kommentar versehen, damit man schnell sieht welcher Fall nun vorliegt.

- Lange Verbindungen mit Beschriftung versehen, damit man weiß, ob auch die richtigen Daten ankommen.
Mein Vorschlag: 4 VIs mit jeweils einem Komentarfeld für alle vier Flußrichtungen. In der Palettenansicht noch den Haken bei "VI zusammenführen..." reinmachen und das Textfeld wird direkt eingefügt. (Frei nach dem "Kommentar-VI" von OpenG)
[Bild: 8065-44.gif]

- VIs "An linker Kante" ausrichten. Bringt Übersichtlichkeit.
- Strg+J um unwichtigere Verbindungen in den Hintergrund zu bringen
- Strg+K um wichtigere Verbindungen in den Vordergrund zu bringen Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2006, 09:25
Beitrag #9

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Sauberes und 'schlankes' Programmieren
heijeijiejieji

das stellt's mir teilweise echt die Zehennägel auf:

Arrays in while-loops:
Array von der benötigten Größe vor der while-loop initialisieren und die geänderten/einzufügenden Teile mit "replace array subset" ersetzen

sub-VIs NICHT dynamisch aufrufen!
VI-Server braucht immer mehr Ressourcen als ein normaler Call, ausserdem erzeugt man Spaghetti-Code, den keiner mehr lesen kann. Die Aussage, dass das VI nicht in den Speicher geladen wird stimmt nur zum Teil: Wenn man die "call by reference node" verwendet und eine "strictly typed refnum" verwendet wird das VI sehr wohl in den Speicher geladen. Wenn man die Referenz zum SubVI erst zur Laufzeit öffnet, muss man damit leben, dass die Runtime Engine auch Zeit zum Laden und Starten braucht!

Referenzen: Mario W hat recht ...[/quote]

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.04.2008, 20:56
Beitrag #10

tobiasf5 Offline
LabVIEW-Tutor
*


Beiträge: 40
Registriert seit: Nov 2005

Aktuell 2009; 2012. 2013 steht in den Startlöchern
2005
DE_EN

30419
Deutschland
Sauberes und 'schlankes' Programmieren
' schrieb:Mein Vorschlag: 4 VIs mit jeweils einem Komentarfeld für alle vier Flußrichtungen. In der Palettenansicht noch den Haken bei "VI zusammenführen..." reinmachen und das Textfeld wird direkt eingefügt. (Frei nach dem "Kommentar-VI" von OpenG)
[Bild: 8065-44.gif]

Hi Chris,
deinen Vorschlag verstehe ich nicht so recht. Könntest du davon wohl mal ein Beispiel machen und es hochladen? Das wäre echt klasse.
Gruß, Tobias

Also ich würd das mit LabVIEW machen......
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Tipps zum Programmieren mit LabVIEW eg 5 14.580 20.02.2008 14:57
Letzter Beitrag: Y-P

Gehe zu: