LabVIEWForum.de - Wie programiert man richtig?

LabVIEWForum.de

Normale Version: Wie programiert man richtig?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo

Da ich nun ein größeres Programm in angriff nehme, frage ich mich wie ich wohl richtig Anfange.

Ist es üblich eine große While-Schleife über alles zu machen?

Was ist besser eine case oder eine Ereignisstruktur.
Soll am so viel wie möglich in eine Ereignistruktur packen?
Soll man versuchen mit Sequenz-strukturen zu arbeiten oder dich lieber linear?
.
.
.


mfg
Hallo,

da gibt es so viele Dinge, auf die man achten muss / soll. Wenn Du ein großes Projekt vor Dir hast, dann würde ich mal die Lehrgänge bei NI besuchen, zumindest mal Basic 1/2 und Intermediate 1/2. Da lernst Du so zu programmieren, wie man es eigentlich soll.
Ansonsten hängt es auch von der Aufgabe des Programms ab, z.B. ist mal eher eine Event Structure besser, wann anders aber eher ein Case. So pauschal kann man das gar nicht beantworten.

Gruß Markus

' schrieb:Hallo

Da ich nun ein größeres Programm in angriff nehme, frage ich mich wie ich wohl richtig Anfange.

Ist es üblich eine große While-Schleife über alles zu machen?

Was ist besser eine case oder eine Ereignisstruktur.
Soll am so viel wie möglich in eine Ereignistruktur packen?
Soll man versuchen mit Sequenz-strukturen zu arbeiten oder dich lieber linear?
.
.
.
mfg
<div align="left">
' schrieb:Ist es üblich eine große While-Schleife über alles zu machen?

Was ist besser eine case oder eine Ereignisstruktur.
Soll am so viel wie möglich in eine Ereignistruktur packen?
Also ich fang mal an mit ein paar Hinweisen.
Ein universelle Struktur, mit der sich gut leben läßt, ist diese:
Ganz außen eine große Sequenz mit drei (übereinanderliegenden) Rahmen.
Sequenz 0: Initialisierungen
Sequenz 1: Hauptprogramm
Sequenz 2: Beendigungen, wie Files schließen, DAQ rücksetzen usw.
Die Sequenz 1, Hauptprogramm, wird ausgefüllt durch die While-Hauptschleife, dort drin ist auch die Ereignignisbehandlung.
Für die Platzierung der Ereignisstruktur gibt es zwei Möglichkeiten:
Entweder: Die Ereignisstruktur füllt die gesamte While-Schleife aus, und der Haupteil des Programms findet im Ereignisrahmen "timeout" statt.
Oder: Die Ereignisstruktur ist so klein wie möglich, und der Hauptteil des Programms findet außerhalb der Ereignisstruktur in der While-Schleife statt.
(Der timeout darf natürlich nicht auf -1 gesetzt sein)
Der Unterschied ist bei zwei gleichzeitigen Ereignissen;
Im Falle a) werden erst beide Ereignsise behandelt, bis des Hauptprogramm wieder ausgeführt wird.
Im Falle b) wird zwischen jedem Ereignis, auch wenn es gleichzeitige Ereignisse sind, das Hauptprogramm ab gearbeitet.
Da a) vom Platzbedarf und auch so günstiger ist, bevorzuge ich a)


Vorsicht bei Verwendung von Lokalen Variablen und Ereignsiknoten im zeitkritischen Tel des Programms. Das Gleiche gilt für Sequenzstrukturen. Dagegen kann zwischen den drei Hauptrahmen in schamloser Weise von lokalen Variablen usw. Gebrauch gemacht werden, so daß man u.U ohne eine einzige Verbindungsleitung zwischen diese Rahmen auskommt.



</div>
Zitat:Vorsicht bei Verwendung von Lokalen Variablen und Ereignsiknoten im zeitkritischen Tel des Programms. Das Gleiche gilt für Sequenzstrukturen. Dagegen kann zwischen den drei Hauptrahmen in schamloser Weise von lokalen Variablen usw. Gebrauch gemacht werden, so daß man u.U ohne eine einzige Verbindungsleitung zwischen diese Rahmen auskommt.

Soll das jetzt heißen das sequenzstrukturen nicht so der Bringer sind?
oder sollte man sie nur nicht verwenden wenn man Eigenschaftsknoten verwendet?
Hallo gang,

meine Vorredner haben alle recht.
Die Wahl der Ausführungsstruktur für Dein Programm würde ich von der Aufgabe abhängig machen.
Du hast jetzt schon ausführlich lesen können, welche Möglichkeiten es gibt. Die ganzen Nuancen dazwischen kann man nicht vollständig aufzählen.
Ich denke es ist erstmal wichtig zu wissen, ob Du ein Programm hast, das hauptsächlich ohne Anwenderinteraktion abläuft oder ob genau das Gegenteil der Fall ist. Daran würde ich die Programmstruktur
ausrichten.

Grüße
Andreas
Ich will auch was sagen.

1) Das Programm muss gut aufgeteilt sein, d.h. mehrere SubVIs mit nicht mehr als 800x600 Blockdiagramm.
2) Das kann man erreichen wenn deine VIs aus einer State Machine bestehen.
3) Eine State Machine (FSM genannt) ist eine While Schleife mit Case-Struktur drin.
4) Keine Nodes, Variablen und Sequenzen in VIs benutzen.
5) Für bessere Übersicht Tasks dynamisch starten und beenden (wenn du mehrere Tasks hast)
6) Tasks haben bei mir nur einen Eingang (Cluster), wo alle Referenzen auf Queues drin stehen.

Gruss, Eugen

P.S. und ganz nützliche Sache ist Type Definition, funktioniert super.
Zitat:4) Keine Nodes, Variablen und Sequenzen in VIs benutzen.




Hab schon oft gehört das Eigenschaftsknoten sehr viel Leistung verschlingen, des wegen nehme ich an, dass das auch bei einer Sequenz der Fall ist oder?

Aber warum keine Variablen...?
' schrieb:Hab schon oft gehört das Eigenschaftsknoten sehr viel Leistung verschlingen, des wegen nehme ich an, dass das auch bei einer Sequenz der Fall ist oder?

Aber warum keine Variablen...?


Du hast ja gefragt wie man richtig programmiert.

Variable kommt aus textbasierten Programmiersprachen und ist fremd für LabVIEW. Die Controls, Indicators und Verbindungsdrähte ersetzen in LabVIEW lokale Variablen und Queues, Notifiers, Semaphoren und User Events ersetzen globale Variablen.
Die Zeitsequenzen nehmen nicht viel Speicher, sind aber nicht so übersichtlich und variabel wie eine State Machine.

Gruss, Eugen
Ja Sequenzen sind einfach irrsinnig unübersichtlich, wenn man sie zu viel verwendet (als Regel statt für wenige Probleme).

Ich könnte dir Beispiele von Programmen aus unserem Institut zeigen, da schachteln sich die Sequenzen und Schleifen ineinander bis 3-5 Tiefen.
Diese Programme zu verstehen versuchen ist kaum schaffbar.
Das versteht nur mehr der Erschaffer und der auch nur, wenn er dauernd am Programm arbeitet. 2 Monate später sieht auch der nicht mehr durch.

Deswegen empfiehlt sich auch was Eugen sagt. Möglichst viele SubVi's und kein Blockdiagramm, das mehr als einen Bildschirm füllt.
<div align="left">
' schrieb:Soll das jetzt heißen das sequenzen...
oder sollte man sie nur nicht verwenden wenn man Eigenschaftsknoten verwendet?
Es gibt eine paar Vorsichtshinweise, aber der die Warnungen sind sehr milde formuliert. Und welche Anwendung ist schon so zeitkritisch, daß es auf jede µsec ankommt?
Lies selbst, was mein schlaues Buch dazu sagt und vergiß mein Geschwätz von gestern.
</div>
Seiten: 1 2
Referenz-URLs