Hallo m.,
Zitat:Die Zyklusdauer meiner Mainschleife, welche die Datenerfassung abwickelt ist schnellstens 100ms lang.
Ich habe die Agilent-Funktionen nicht installiert, kann also nichts über deren interne Funktionsweise sagen.
Was mir trotzdem aufgefallen ist:
- Deine Messwertabfragen erfolgen seriell (AI & DI). Bei DAQmx erfolgt sowas üblicherweise parallel in zwei DAQmxTasks: wäre das auch bei Agilent möglich? Andererseits wird hier eine VISA-Verbindung genutzt (warscheinlich ein serieller Port?), sodass die Abfragen auch seriell durchgeführt werden müssen…
- Du machst einige Dinge recht umständlich - und das auch in jeder Iteration! Muss man wirklich Waveforms erstellen, die nur genau ein Sample enthalten (AI_Anpassen_Waveformformat)? Muss man Werte aus einem 2D-Array einzeln mit einer Schleife auslesen, wenn man auch ArraySubset nutzen könnte (gleiches VI)? Hier auch: BuildArray statt InsterIntoArray verwenden…
- Aus dem hier erzeugten Waveform-Array holst du dreimal die gleiche Waveform, um deren Avg, RMS, Peak zu bestimmen. Muss man dafür jedesmal einen eigenen Buffer anlegen? Würde nicht ein Buffer ausreichen und man macht nur die drei unterschiedlichen Berechnungen daran? Außerdem werden diese VIs mit einer Waveform gefüttert, die nur genau ein Sample enthält - sieht für mich nach Overkill aus…
- Aus Avg/RMS/Peak werden wiederum Waveforms erstellt, die nur genau ein Sample enthalten…
- Das "DI_Anpassen_Boolformat ist auch recht umständlich: ein einfaches UND mit einer passenden numerischen Konstante udn ein nachfolgender Vergleich auf <>0 reicht locker aus. Beispiel für Bit 4: Bit4 := (x AND 16) <> 0…
- Einen Peakwert könnte man auch mit ArrayMax(Abs(array)) bestimmen…
Wie (über welche Schnittstelle) ist das Messgerät angebunden? Wie hoch ist die Datenrate, wie sind die Latenzzeiten des Messgerätes? Das trägt auch zur Schleifenzeit bei…
Zitat:Liegt das an dem Waveform-Chart, der die Werte (in diesem VI testweise) anzeigen soll und dafür die stetig wachsende History speichert?
Das könnte ein Grund sein, andererseits hast du die Historie auf 1024 Werte eingestellt und deine Waveforms enthalten nur ein Sample…
Allgemeiner Tipp: Wenn es Probleme bei der Rechengeschwindigkeit gibt, hat sich die Producer-Consumer-Struktur bewährt! Man trennt Datenerfassung von Datenverarbeitung von Datenspeicherung…
P.S.: es ist immer hilfreich, das HauptVI auch entsprechend zu benennen: man findet es dann auch wesentlich leichter…