26.07.2013, 09:21
26.07.2013, 09:33
Ok danke. Hätte ich auch eigentlich selbst draufkommen können
Kann ich mein VI durch SubVI´s in der Ausführung verschnellern?
Kann ich mein VI durch SubVI´s in der Ausführung verschnellern?
26.07.2013, 09:37
Hallo Sebo,
Dein VI ist hauptsächlich durch Wartezeiten in der Geschwindigkeit begrenzt. Entweder wartest du selbst (Wait-Funktion) oder du wartest auf neue Messwerte vom DAQ. Das bisschen Rechnen geht schnell - nur die Anzeige kann etwas Zeit benötigen, wenn zuviele Daten gesammelt werden.
Was du aber machen kannst:
Verpass dem DAQmx-Task ein SampleTiming. Stell eine vernünftige Samplerate ein (100Hz? 10Hz? Wie schnell ändern sich die Drücke?) und frage mehr als nur einen Messwert mit DAQmxRead ab. Damit verlagerst du einiges an "Rechenaufwand" in den DAQmx-Treiber, der sich dann um das korrekte Timing kümmert...
Zitat:Kann ich mein VI durch SubVI´s in der Ausführung verschnellern?Jein.
Dein VI ist hauptsächlich durch Wartezeiten in der Geschwindigkeit begrenzt. Entweder wartest du selbst (Wait-Funktion) oder du wartest auf neue Messwerte vom DAQ. Das bisschen Rechnen geht schnell - nur die Anzeige kann etwas Zeit benötigen, wenn zuviele Daten gesammelt werden.
Was du aber machen kannst:
Verpass dem DAQmx-Task ein SampleTiming. Stell eine vernünftige Samplerate ein (100Hz? 10Hz? Wie schnell ändern sich die Drücke?) und frage mehr als nur einen Messwert mit DAQmxRead ab. Damit verlagerst du einiges an "Rechenaufwand" in den DAQmx-Treiber, der sich dann um das korrekte Timing kümmert...
26.07.2013, 10:19
Wie kann ich mein Programm noch schneller ablaufen lassen, da es immer ziemlich lange braucht bis alles abläuft?
Sprich es braucht im Schnitt fast 20 Sekunden bis ein nächster Ablauf durchgeführt wird.
[attachment=45617]
Sprich es braucht im Schnitt fast 20 Sekunden bis ein nächster Ablauf durchgeführt wird.
[attachment=45617]
26.07.2013, 11:20
(26.07.2013 09:37 )GerdW schrieb: [ -> ]Hallo Sebo,
Zitat:Kann ich mein VI durch SubVI´s in der Ausführung verschnellern?Jein.
Dein VI ist hauptsächlich durch Wartezeiten in der Geschwindigkeit begrenzt. Entweder wartest du selbst (Wait-Funktion) oder du wartest auf neue Messwerte vom DAQ. Das bisschen Rechnen geht schnell - nur die Anzeige kann etwas Zeit benötigen, wenn zuviele Daten gesammelt werden.
Was du aber machen kannst:
Verpass dem DAQmx-Task ein SampleTiming. Stell eine vernünftige Samplerate ein (100Hz? 10Hz? Wie schnell ändern sich die Drücke?) und frage mehr als nur einen Messwert mit DAQmxRead ab. Damit verlagerst du einiges an "Rechenaufwand" in den DAQmx-Treiber, der sich dann um das korrekte Timing kümmert...
Kann ich z.B. auch Flache Sequenzstrukturen verwenden um mein VI schneller zu machen bzw. nützt das was?
26.07.2013, 11:27
Ohne das Programm angeschaut zu haben:
Nein, die brauchst Du höchstens mal um ein Element ohne Error-Cluster reinzuziehen und dann den Errorcluster durchzuziehen. Damit kannst Du dann nämlich den Datenfluss festlegen.
Schneller wird dadurch nichts und auch sonst nimmt man besser gleich eine State-Machine.
Gruß Markus
Nein, die brauchst Du höchstens mal um ein Element ohne Error-Cluster reinzuziehen und dann den Errorcluster durchzuziehen. Damit kannst Du dann nämlich den Datenfluss festlegen.
Schneller wird dadurch nichts und auch sonst nimmt man besser gleich eine State-Machine.
Gruß Markus
(26.07.2013 11:20 )Sebo schrieb: [ -> ]Kann ich z.B. auch Flache Sequenzstrukturen verwenden um mein VI schneller zu machen bzw. nützt das was?
26.07.2013, 11:43
Hallo Sebo,
Tipp: Wenn du eine Samplerate von 100Hz verwendest, solltest du beim DAQmxRead auch eine zu lesende Sampleanzahl vorgeben. Dann benötigst du auch keine weitere Wartefunktion mehr in der Schleife, da der DAQmxRead-Aufruf auf die zu lesenden Samples warten muss...
Tipp2: Wenn du weiterhin die Schleife im 100ms-Takt laufen lassen willst, solltest du eine Sampleanzahl von 10 vorgeben...
Klingt das für dich sinnvoll?
Zitat:Wie kann ich mein Programm noch schneller ablaufen lassen, da es immer ziemlich lange braucht bis alles abläuft?Und wo wird die Zeit "verbraucht"? Schon mal per Debugging nachgeschaut?
Sprich es braucht im Schnitt fast 20 Sekunden bis ein nächster Ablauf durchgeführt wird.
Tipp: Wenn du eine Samplerate von 100Hz verwendest, solltest du beim DAQmxRead auch eine zu lesende Sampleanzahl vorgeben. Dann benötigst du auch keine weitere Wartefunktion mehr in der Schleife, da der DAQmxRead-Aufruf auf die zu lesenden Samples warten muss...
Tipp2: Wenn du weiterhin die Schleife im 100ms-Takt laufen lassen willst, solltest du eine Sampleanzahl von 10 vorgeben...
Zitat:Kann ich z.B. auch Flache Sequenzstrukturen verwenden um mein VI schneller zu machen bzw. nützt das was?Mal überlegen: Ich habe ein Programm mit einer Menge Code "x". Jetzt füge ich noch Code "y" hinzu und erwarte, dass das Programm dadurch schneller läuft.
Klingt das für dich sinnvoll?
26.07.2013, 12:21
(26.07.2013 11:43 )GerdW schrieb: [ -> ]Hallo Sebo,
Zitat:Kann ich z.B. auch Flache Sequenzstrukturen verwenden um mein VI schneller zu machen bzw. nützt das was?Mal überlegen: Ich habe ein Programm mit einer Menge Code "x". Jetzt füge ich noch Code "y" hinzu und erwarte, dass das Programm dadurch schneller läuft.
Klingt das für dich sinnvoll?
Überzeugt
(26.07.2013 11:43 )GerdW schrieb: [ -> ]Hallo Sebo,Und wo wird die Zeit "verbraucht"? Schon mal per Debugging nachgeschaut?
[quote]Wie kann ich mein Programm noch schneller ablaufen lassen, da es immer ziemlich lange braucht bis alles abläuft?
Sprich es braucht im Schnitt fast 20 Sekunden bis ein nächster Ablauf durchgeführt wird.
Hallo Gerd,
Es dauert sehr lange bist die Signale verteilt werden, sprich zum Diagramm weiter zur Aufzeichnung bis alles abgearbeitet ist und das ganze von neuem startet.
In dem Protoll dauert es zum Beispiel 20-40 sekunden bis ein neuer Wert ankommt und das ist definitiv viel zu lange.
Auch beim Diagramm dauert es solange bis ein neuer Wert ankommt.
26.07.2013, 12:50
26.07.2013, 15:24
Hallo Sebo,
dein DAQmxRead liefert Waveforms mit je 10 Werten? Korrekt? Du hast die 10 bei "Samples to read" angeschlossen?
Du meinst wirklich, das Multiplizieren einiger Waveforms und das Bundlen (warum hier kein BuildArray?) dauert so lange?
Und du hast die Zeiten nicht etwa während des Debuggings mit Highlighting gemessen?
Ich kann's nicht glauben...
dein DAQmxRead liefert Waveforms mit je 10 Werten? Korrekt? Du hast die 10 bei "Samples to read" angeschlossen?
Du meinst wirklich, das Multiplizieren einiger Waveforms und das Bundlen (warum hier kein BuildArray?) dauert so lange?
Und du hast die Zeiten nicht etwa während des Debuggings mit Highlighting gemessen?
Ich kann's nicht glauben...