Hallo, Wolfgang,
' schrieb:Hallo Miteinander,
ich erstelle gerade ein VI zum Steuern eines Versuchsaufbaus für Sensoren. Ich habe auch ein VI zusammengebastelt, das bisher alle meine Anforderungen irgendwie (!) erfüllt, wobei auch noch nicht alle Geräte da sind, so dass ich einige Teile noch nicht einarbeiten konnte. Mir geht es jetzt um Hinweise, tipps und RAtschläge darüber, was ich prinzipiell an dem Programm - besser gesagt an dem Programmierstil - verbessern kann. Es geht also (noch) nicht um bessere Lösungen eines individuellen Problems, sondern um bessere Lösungen allgmein.
Um solche Hinweise zu ermöglichen, werde ich kurz beschreiben, welche Anforderungen ich erfüllen will (und von denen ich meine, dass ich sie erfüllt habe). Motiviert durch diverse Forumeinträge habe ich mir auch selbst schon überlegt was ich evtl verbessern könnte oder sollte. Diese Überlegungen werde ich ebenfalls Preis geben.
Ich habe das VI so wie es jetzt vorliegt innerhalb von 4 Wochen erstellt, wobei das mein erster Kontakt mit LV überhaupt ist. Das WIssen habe ich aus Tutorials, den LV Beispielen und der Hilfe sowie aus diesem Forum erlangt.
für 4 Wochen LV ist das doch schon mal gar nicht schlecht.
Erster Kritikpunkt: Mach die Labels bei den Terminals im BD sichtbar, das erhöht die Lesbarkeit des Codes. Das Label eines Controls ist ja sozusagen der Variablenname, und ein sinnvoller und "selbsterklärender" Variablennamen ist immer gut. Wenn dieses Label dann nicht als Beschriftung im FP taugt, dann kann man ja immer noch im FP auf die "Caption" eines Controls zurückgreifen.
Dann: Zur vollständigen Analyse fehlt die Info, wie du dein Task "Messung" genau konfiguriert hast. Am besten hier mal LV-Code erstellen und noch mal hochladen.
Zitat:Anforderungen:
- 4 AI: Sensorspannung, Sensorstrom, zwei TEmperatursensoren Pt1000
- Steuerung eines Lineartisches, d.h. Signalausgabe und Eingang der Position x
- Darstellung der Sensorspannung/Tischposition graphisch:U/t,U/x,x/t
- Anzeige der Temperaturwerte der beiden Pt1000 Sensoren numerisch und auf Knopfdruck graphischer Verlauf "langsamer" als U-x Graphen
- 1 AO: Spannungsversorgung des Sensors
- Start des Speicherns auf Knopfdruck "Messung"
- Einstellung der Messparameter, ohne die keine Speicherung stattfinden kann
- Auswahl eines beliebigen Speicherortes auf Knopfdruck; wenn keiner ausgewählt wird, wird Vorgabepfad verwendet. Wenn "Messung" gedrückt wird, soll neue Datei erzeugt werden, falls aktuelle schon existiert.
Diese Anforderungen habe ich erfüllt, wobei die Aufzeichnungen bisher alle Spannungen sind, da noch keine Sensoren angeschlossen sind. Der REst funktioniert soweit (habe PCI-6221 Karte in Verbindung mit SCC-68, LV 8.5).
Meine Fragen allgemeiner Natur sind die folgenden:
1. Was hat es mit den Timing einstellungen in einer While SChleife genau auf sich? Warum packe ich da sone Uhr rein und was genau nehme ich wann (Warten auf Vielfaches, bzw Warten) ?
Ich habe herausgefunden, dass es die CPU entlastet, aber ich will genau wissen, welches Timing SChleifen haben. Werden die beim Messen son schnell ausgeführt wie die Abtastrate es vorgibt, oder wie sieht das aus?
Eine Schleife läuft in LV immer so schnell, wie es der Code innerhalb der Schleife zulässt. Wenn dort also nichts zur "Zeitverzögerung" drin ist, wird schnell 100% CPU Belegung erzeugt. Eingaben sind dann kaum noch möglich.
Deswegen packt man gerne solche Wait-VI's in Schleifen ein. Das sind übrigens dann Software-Taktungen, man sollte sich da nicht allzu genau auf das Timing verlassen.
Das hat nichts mit der Abtastrate von Messungen zu tun.
Zum Thema kontinuierliche Datenerfassung mit Hardware-Taktung habe ich übrigens kürzlich erst hier so einige Beispiele hochgeladen:
http://www.LabVIEWforum.de/index.php?showtopic=8099&hl=. Schau dir das mal an.
Zitat:2. Sollte ich mehr SubVIs benutzen? Wenn ja, wo macht es Sinn und warum?
Ich hatte mir z.b. überlegt, dass ich das Auftrennen meines Arrays aus Singanlverläufen in ein SubVI stecken könnte und dort auch das Verzögern der Temperaturdarstellung mache. Anschließend im HauptVI nur noch die Grapohen bzw Diagramme einfügen.
Beim momentanen Stand nicht unbedingt. Was jetzt aber nicht heißen soll, das man keine SubVI'S verwenden soll, im Gegenteil! SubVI's sind immer gut, wenn man eine Aufgabe mehrfach an verschieden Stellen eine Programmes zu erledigen hat, und sie verkleinern den Platz im BD eines VIs (BD <= Bilschirmgrösse).
Zum Punkt Aufsplitten der Messwaveform, das hast du etwas umständlich gemacht. Einfacher so:
Zitat:3. Sollte ich mehrere Schleifen verwenden?
Kommt darauf an. Was man z.B. machen könnte und was wahrscheinlich auch keine schlechte Idee wäre, ist eine parallele Schleife, in der du per Event-Struktur auf das Betätigen deiner verschieden Buttons reagierst. Hier könntest du die Eigenschaftsknoten von Punkt 4 deiner Frage dann reinstecken, dann werden diese Sachen nicht bei jedem Schleifendurchlauf gesetzt. Auch das mit der Auswahl des Speicherfiles läuft aus meiner Sicht noch nicht so, wie du es willst. In jedem Schleifendurchlauf wird ja immer wieder der Datenpfad auf deinen Default-Pfad gesetzt (Timeout-Case der Event-Struktur). Und die Case-Struktur um den File-Dialog kannst du dir sparen, denn der File-Dialog wird wegen der Event-Structure nur dann aufgerufen, wenn du den Pfad-wählen Button drückst. Bei Latch-Verhalten eine Buttons sollte man auch eher beim Verhalten "Latch when released" bleiben, sonst hat man als User in der Regel keine Rückmeldung, dass man den Button betätigt hat.
Ob dein AO-Task mit einem unterschiedlichem Timing zum AI-Task laufen soll, das musst du selber wissen.
Zitat:4. Wie ist das mit den Eigenschaftsknoten, die ich verwende? Sollte ich die zu Gunsten von CAse-Strukturen rausschmeißen?
Es ist kein Problem die Eigenschaftsknoten rauszuschmeißen und Case-Struktur(en) zu verwenden. Nur weiß ich nicht genau was mehr Speicher bzw. Ressourcen frisst.
Jaja, das Thema Property-Nodes. Ja, sie sind "langsam" und haben einen gewissen "Overhead". Andererseits, wenn es nicht um extrem zeitkritische Abläufe geht, und der PC nicht gerade eine "uralte lahme Kiste" ist, dann ist meine Meinung, was solls. Bin selber häufiger und intensiver Nutzer von PropertyNodes, um das FP nach meinem Geschmack zu gestalten.
Zitat:Ok, das ist jetzt alles sehr umfangreich. Ich weise nochmals daruaf hin, dass ich mir keinesfalls erwarte, dass ihr mein Programm schreibt bzw. Mir sagt wie ich dies und das in meinem konkreten FAll löse. Vielmehr geht es mir darum prinzipielle Dinge über LV anhand meiner Probleme zu lernen und dann mein Programm so gut es geht zu erstellen. Ich will es selbst hinkriegen, nur brauche ich Tipps, in welcher Art es am besten wäre es hinzukriegen.
Ich hoffe, ihr versteht um was es mir geht.
vielen herzlichen Dank schonmal für jeglichen Tipp und Hinweis.
Viele GRüße
Wolfgang
MfG, Jens
P.S.:
Und in Zukuft bitte LV-Version bei hochgeladenen VIs angeben.