Hallo Lea,
Zitat:ich möchte mit meinem Programm mehrere Sinc-Impulse mit jeweils einer Pause dazwischen erzeugen. Diese Pulse der ersten zwei Pulse sollten eine Pause von 2,1 ms dazwischen haben und die weiteren jeweils eine Pause von 5,7 m. Ich bin mir leider nicht sicher, wie ich die Pause am besten erzeugen kann.
Dein VI hat ein paar Mängel:
- Du definierst eine Samplerate von 150S/s, damit liegt der Abstand zwischen 2 Samples bei 6.67ms. Wie willst du damit definierte Pausen von 2.1ms oder 5.7ms erreichen???
- Du legst einen Samplemodus von "Finite samples" fest, willst aber in der danach folgenden Schleife so lange Samples ausgeben, bis der User irgendwann die Schleife beendet: das passt nicht. Verwende "Continuous samples"…
- Du startest deinen AO-Task, ohne vorher eine Waveform zur Ausgabe definiert zu haben!?
- Du hast da eine Case-Struktur zum Erzeugen der Samples mit 6 Ausgangstunneln: wozu ist das hier nötig? Würde es nicht ausreichen, wenn jeder Case das Samplearray an den selben Tunnel ausgibt???
- Du verwendest in den einzelnen Cases noch diverse Wait-Funktionen, mit Zeiten von 1ms bis 6ms. Du weißt schon, dass das unter Windows nur "Wunschangaben" sind?
- Diese Waits sind außerdem sinnlos, da sie nicht einstellen, wie lang das ausgegebene Signal ist! Dies legst du über die Anzahl der Samples fest!
- Diese "delta T"-Controls legen zwar fest, wie die Sample-Werte berechnet werden - aber nicht, mit welchem dt (bzw. welcher Samplerate) dein DAQmx-Task arbeitet! Den hast du ja deutlich früher mit eben 150S/s definiert!!!
- Wozu musst du das Samplearray in einen DDT-Draht umwandeln, nur um es in einem Graph anzuzeigen???
- Dein Statemachine-Enum sollte IMMER typdefiniert sein - und alle Instanzen dieses Enums dann natürlich von dieser Typdefinition abstammen…
- Diese Statemachine ist hier IMHO unnötig, und damit auch das Enum…
Vorschläge:
- Wenn du Signale erzeugen willst, deren Samples in einem Raster von 0.1ms (=100µs) auseinander liegen, dann solltest du mit einer Samplerate von 10kS/s arbeiten.
- Wenn du einen Pause von 2.1ms haben willst, dann gibst du einfach ein Array von 21 Samples (bei 10kS/s) mit konstanten Werten aus. Bei 5.7ms wären das dann nach Adam Riese genau xxx Samples… (Wirst du sicherlich selbst ausrechnen können!)
- Schau dir die BeispielVIs zum Thema "AO-Task" und "Continuous Samples" an!
Hier mal ein paar Vroschläge für Ideen:
[
attachment=62269]
(Ich bezweifele, dass das VI so wie gezeigt fehlerfrei laufen wird…)