LabVIEWForum.de - Lokale Variablen/Programmkritik

LabVIEWForum.de

Normale Version: Lokale Variablen/Programmkritik
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich habe mir hier einen Teststand aufgebaut. Alles funktioniert mittlerweile so wie ich es mir gedacht habe....

Jetzt gehts daran ein paar Sicherheitsabschaltungen und ähnliche Features einzuprogrammieren... da werden böse Erinnerungen an den letzten Prüfstand wach, auch damals hat alles wunderbar funktioniert, allerdings war Blockdiagramm eine einzige Katastrophe. Dieses strotze nur so von lokalen Variablen .... und irgendwie hab ich noch von damals im Kopf, dass das Programmieren mit lokalen Variablen unprofessionell ist... gut ich bin kein professioneller Programmierer hätte es aber gerne optimal programmiert. Daher hab ich ein paar allgemeine Fragen an die Profis hier;

1. Wie ihr in der unteren Schleife seht, ist dort ein "Case" mit einer Sequenz und lokalen Variablen, das macht exakt das was es tun soll, nur kann ich es nachher nicht schön in ein Sub-VI verpacken... das Ergebnis ist Chaos im Blockdiagramm. Die einzige Alternative die mir dazu einfallen würde wäre ein Formelknoten... aber ich würde gerne wissen wie es ein Profi gestalten würde.

2. Gibts außer dem Chaos im Blockdiagramm sonst noch Gründe warum es Leute gibt die sagen man solle auf lokale Variablen verzichten?

3. Ist es gut mehrere Schleifen zu nutzen, so wie Ihr es auf dem Bild seht, oder ist das wieder mal ein "nogo? Es gab immer wieder Probleme wenn ich alles in eine Scheife gepackt habe.



Ok das wärs erstmal .... sollte Euch sonst noch etwas auffallen was ich verbessern könnte.... ich bin für jede Kritik dankbar.

Liebe Grüße
Hallo Titus,

Zitat:sollte Euch sonst noch etwas auffallen was ich verbessern könnte.... ich bin für jede Kritik dankbar.
- Wieso um Himmels willen muss man ein Array aus 3 Waveforms mittels SplitSignal in drei einzelne DDT-Drähte vereinzelen? Warum nicht einfach IndexArray verwenden und mit den Waveforms arbeiten!?
- Wieso gibt es einen Button "Boolesch"? Warum hat der keinen passenden Namen? Warum ist das ein Switch und kein Latch? Mit einem Latch könntest du dir die lokale Variable zum Zurücksetzen des Buttons sparen!
- Wieso laufen alle Schleifen endlos? Wird der Teststand NIE ausgeschaltet?
- Wieso ist das VI so unaufgeräumt? Styleguide…
- Warum haben alle subVIs so nichtssagende Icons? Styleguide…
- Warum steckt der PID in einer Case-Struktur? Den kann man doch zwischen "manuell" und "Automatik" umschalten!?

Zitat:2. Gibts außer dem Chaos im Blockdiagramm sonst noch Gründe warum es Leute gibt die sagen man solle auf lokale Variablen verzichten?
Man sollte auf lokale Variablen verzichten, weil sie RaceConditions-anfällig sind. Wie z.B. in deiner Schleife unten links: wer setzt den letzten Wert in "Steuerung pneumatischer Druck", der PID oder dein Case darunter?
Wenn man Daten von einer Schleife in eine andere schicken will, kann man prima Queues oder Notifier verwenden.

Zitat:1. Die einzige Alternative die mir dazu einfallen würde wäre ein Formelknoten...
Wie soll ein Formelknoten helfen, wenn du nach Erzeugen eines subVIs Control-Referenzen im BD hast? Hmm
Bei Queues/Notifier brauchst du auch keine Referenzen ans subVI geben, die kann man per Namen referenzieren!

Zitat:3. Ist es gut mehrere Schleifen zu nutzen, so wie Ihr es auf dem Bild seht,
Prinzipiell ist dagegen nichts einzuwenden, ABER:
Warum hast du eine PID-Regelschleife und eine Schleife, die die Werte dann per DAQmx ausgibt? Warum nicht beides in eine Schleife? Die laufen doch beide im 100ms-Takt!?
Warum wartet eine Schleife 100ms und die andere auf das nächste Vielfache von 100ms?
Zitat:- Wieso um Himmels willen muss man ein Array aus 3 Waveforms mittels SplitSignal in drei einzelne DDT-Drähte vereinzelen?

Denn sie wissen nicht was sie tun....Blush... ich habs geändert. Magst Du mir den Unterschied zwischen DDT und Waveforms erklären...




Also zunächst mal vielen herzlichen Dank für Deine Kritik, ich habe fast alles umgesetzt. Schaut auf jeden Fall schon deutlich besser aus als vorher. Vor allem der Tipp mit dem anderen Regler war gut. Ich hab jetzt den PID-Fortgeschritten genommen, bei dem kann man wunderbar zwischen Steuerung und Regelung hin und her schalten... da gabs bei meiner Version auch Ärger ohne Ende ... :-)
Jetzt noch eine saubere Möglichkeit programmieren, die While-Loop sauber zu beenden (so ist dein Close-VI ziemlich zwecklos - wird nie aufgerufen), und auf die lokale Variable könntest du auch noch verzichten.

Gruß, Jens
Hallo Titus,

Zitat:Magst Du mir den Unterschied zwischen DDT und Waveforms erklären...
Eigentlich "mag" ich das nicht, da es hier um ExpressVIs geht… Wink

Ein Waveform (deutsch: Signalverlauf) ist ein üblicher Datentyp in LabVIEW, der eben einen Signalverlauf (Startzeit, Sampleabstand=dt, Y-Werte) beschreibt.
Ein DDT (DynamicDataType) ist eine Chimäre, die mit den ExpressVIs eingeführt wurde: Ein DDT-Draht kann so ziemlich alles (außer Strings) enthalten, egal ob Einzelwert, Array, Waveform, etc. Dummerweise sieht man "von außen" nicht, was im DDT enthalten ist - und der LabVIEW-Einsteiger denkt, weil er den DDT so ziemlich überall anschließen kann, dass dann auch immer was sinnvolles herauskommen müsste…

Beides sollte in der LabVIEW-Hilfe erläutert sein: einfach mal nachlesen!

Noch etwas: Bilder sind immer nett. Dummerweise kann man die mit LabVIEW so schlecht editieren, da wäre ein Snippet oder ein VI-Attachment sehr viel sinnvoller!
Referenz-URLs