' schrieb:Wenn ich nur jeweils an einem Platz messe, funktiniert alles. Starte ich parallel die Messungen, ergeben sich verschiedene Probleme mit der Messwerterfassung, welche ich auf Ablaufprobleme zurückführe.
Welche Probleme treten denn auf?
Zitat:Kann das Problem schon bei der Erfassung (siehe Bild) liegen, und diese durch die Schieberegister bzw. den Baustein zur Array-Erstellung liegen?
An der Erfassung, also dem DAQmx-Rd, kann es prinzipiell nicht liegen.
Zitat:Es werden etwa 15s Messwerte aufgenommen (d.h. bei 1k Abtastung ca. 15000 Werte. Dies sind doch noch nicht viel für LV, oder?
Das ist nicht viel.
Probleme machen nur Sachen wie ArrayErstellen etc.
Zitat:Die Auswertung diese Werte bzw. Aufnahme und Berechnung weiterer Werte erfolgt parallel in einer anderen While Schleife mit einer for-Schleife bzw. Sequenz.
So ist es im Prinzip richtig.
Im Prinzip kann man so vorgehen: Es gibt eine Task, die Messwerte aufnimmt (also DAQmx-Rd). Diese Task zerlegt die eingelesenen Messwerte und schickt jeder der drei parallelen Prozesse nur genau die Daten, die der Prozess verarbeiten kann (das ist das, was du jetzt mit ArrayIndizieren machst). Ich würde die Daten aber per Queue an die parallelen Prozesse weitergeben. Jeder der parallelen Prozesse kümmerst sich dann selbst darum, ob die Daten in der Queue verwendet werden sollen oder verworfen.
Zitat:In einem anderen Thema habe ich hierzu gelesen, dass man in einer Sequenz keine Wartezeit einbauen sollte, da sonst alles andere auch wartet.
Das ist prinzipiell richtig. Der betreffende Prozess (also die While-Schleife, in der sich die Sequenz befindet) stoppt. Alle anderen, parallelen While-Schleifen werden aber nicht beeinflusst.
Zitat:Versteh ich das richtig, oder wartet dann nur die eine While-Schleife?
Es wartet nur die betreffende Schleife.
Zitat:Wie kann ich noch herausfinden bzw. eingrenzen in welchem Programmteil die Ursache liegen könnte?
Was noch günstig ist, ist folgendes.
Wenn du den DAQmx-Rd ohne Zeitverzug (als z.B. im 2ms Raster) machst, bekommst du eine sehr kleine Menge an Daten, bei 2ms Abtastrate als zwei Daten. Machst du den DAQmx-Rd im 100ms Raster bekommst du 100 Daten, also 50mal mehr. Die Verarbeitungsdauer von 100 Daten ist aber um Potenzen schneller als die Verarbeitung von 50*2 Daten. Also: Die Task, die den DAQmx-Rd macht so gestalten, dass möglichst viele Daten gelesen und zwischenverarbeitet werden können.