' schrieb:Ich glaub, ich hab Dir schonmal was dazu gesagt. Ein paar allgemeine Optimierungstips von mir:
1. Überleg Dir immer, was das Konstrukt da tut, das Du programmierst. z.B.: Wenn man eine While-Schleife mti einem "Stop if true"-Abbruchknoten, an dem eine True-Konstante angeschlossen ist, laufen lässt, läuft die genau einmal durch. i ist dann genau ein einziges mal 0 und wird nie eins. Ergo, eine Case-Struktur mit einem Case 0 und einem Case 1 wird auch immer nur den Case 0 ausführen. Was auch immer im Case 1 ist, wird nie stattfinden.
Edit: Noch ein Beispiel: Eine Zahl zu Quadrieren und hinterher die Wurzel daraus zu ziehen macht was: Genau, einen Absolutbetrag berechnen. Dazu gibt's auch ein eigenes VI zu, gleiche Palette wie Quadrat und Wurzel im übrigen...
Du hast natürlich völlig recht, dass quadrieren und Wurzel ziehen hätte ich mir sparen können mit der Verwendung der richtigen VIs.
Die While-Schleife mit einem "Stop if true"-Abbruchknoten & angeschlossener True-Konstante ist hoffe nur ein weiteres Beispiel, oder habe ich dies irgendwo so verwendet? Falls ja muss ich gestehen finde ich diese Stelle nicht
' schrieb:2. Du hast in deinem VI Rampenfahrt im Prinzip eine Sequentielle berechnung (untere Sequenz), wo die tatsächliche Berechnung von den WErten einzelner Variablen abhängt. Das machst du mit sehr vielen True-False-Cases. Schon mal über einen Formelknoten nachgedacht, Cases mit mehr als True-False als Cases oder zumindest über eine kurze Textkommentierung?
Ich muss ganz ehrlich gestehen, dass ich die Funktion der Formelknoten nicht kannte. Das ist eins meiner Probleme, dass ich mich zu selten auf unbekannten Funktionspaletten umschaue. Hätte mir natürlich viel Arbeit ersparrt und werde ich in Zukunft bei Gegebenheit verwenden.
' schrieb:3. Mach Dich mal mit dem Datenflussprinzip vertraut. Ich behaupte, dass du in dem Sub-VI keine einzige lokale Variable brauchst. Deine doch exzessive Verwendung macht zwar einen halbwegs aufgeräumten eindruck, neben den von Dir angesprochenen Race-Conditions dauert der Durchlauf aber länger und Du brauchst mehr Speicher. Da du da Sollpositionen für eine Regelung berechnest, würde mich die Durchlaufzeit ärgern.
Zum Thema Datenfluss ist leider wenig zu finden. Meine beiden Grundlagenbücher biete gesamt keine drei Seiten zum Thema, wirklich Tutorials sind im Netz so recht nicht zu finden und face-to-face hab ich leider niemanden der mir weiterhelfen kann.
In welcher Form muss ich mir das vorstellen, wenn du vermutest, dass lok. Variablen in meinem Sub-VI überflüssig sind?
' schrieb:4. Was dein konkretes Problem angeht: Mach den Schreibvorgang doch außerhalb der While-Schleife. LabVIEW kann an Schleifen automatisch Arrays aus den Einzelwerten pro Durchlauf bauen und die kannst du dann nach Abschluss der Schleife mit deinem Express-VI schreiben. Alternativ: Mach's ordentlich, vor der Schleife die Datei öffnen, in der Schleife nur schreiben und nach der Schleife wieder schließen. Im Express-VI ist ein Overhead, der die Laufzeit denke ich ziemlich verlängert. (Das ist ungefähr so, wenn du jeden morgen mit dem Fahrrad zur Arbeit fährst, vorher aber immer noch alle Staumeldungen hörst, Dir drei alternative Verbindungen mit dem ÖPNV raussuchst (weil das ja auch eine Möglichkeit wäre) und zwar jeden morgen.)
Die Thematik muss ich mir noch mal genauer angucken. Wobei mir die Datenspeicherung eh noch Probleme bereitet, aber dazu gibt es von mir noch einen anderen Thread. Dein Beispiel fand ich sehr schön
' schrieb:5. Hast Du mal drüber nachgedacht, ein Timing in Deinen Case 9 einzubauen? Zumindest die maximale Samplingrate Deiner Ausgabemodule würde ich mal vorsehen...
Damit meinst du eine "Warten"-Fkt? Mit was für einer Wert?
Ich danke dir schon mal für deine Mühe, würde mich aber freuen, wenn du auf den einen oder anderen Punkt noch mal eingehen würdest.
Gruß JAN