Zeitkritische digitale Drehzahl-Erfassung mit der PCI-6221 - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Zeitkritische digitale Drehzahl-Erfassung mit der PCI-6221 (/Thread-Zeitkritische-digitale-Drehzahl-Erfassung-mit-der-PCI-6221) |
Zeitkritische digitale Drehzahl-Erfassung mit der PCI-6221 - Met - 02.12.2005 23:55 Guten Tag, ich möchte eine digitale Drehzahlmessung durchführen, wobei die Drehzahl maximal 200Hz beträgt. Mir ist aber dabei ganz wichtig, dass die While-Schleife, in der die Messung durchgeführt wird, in konstanten Zeitabschnitten wiederholt wird. Die Dauer einer Messung soll aus zeitkritischen Gründen 6 bis 8 ms betragen. Die Schleife wiederholt sich unmittelbar nach dem Start der Messung alle 4 bis 6 ms. Da ich eine gepufferte kontinuierliche Messung durchführe und die Daten in der Schleife in das Schieberegister speichere, verlangsamert sich die While-Schleife kontinuierlich, da der Puffer sich vergrößert. Wie kann ich die Messdauer konstant halten? Ich lese mit DAQmx Read und verwende eine mit DAQ- Assistent erstellte Task. Auf eure Ratschläge würde mich sehr freuen. Ich bedanke mich im Voraus. Zeitkritische digitale Drehzahl-Erfassung mit der PCI-6221 - thomas.sandrisser - 03.12.2005 14:19 Generell ist ein Determinismus unter Windows ABSOLUT NICHT MOEGLICH bzw. gewaehrleistet! Das einzige was du versuchen kannst, ist die Messung in einer Timed Loop - diese ist "etwas" besser! Wenn du das RT (Real Time) Toolkit installiert hast, dann kannst du von diesem Toolkit das "wait until next multiple" verwenden (ist einerseits von der Funktionalitaet her das gleiche wie die "normale" Funktion, bewirkt aber eine hoehere Konsistenz unter Windows!) Eine zusaetzliche Option ist dann noch, dass du die erfassten Werte in einer eigenen While - Schleife (besser Timed Loop) laufen laesst und die Werte mittels einer Queue an eine zweite Schleife (vorzugsweise ebenfalls Timed Loop) uebergibst - somit wird erstmals die Erfassung von der Speicherung der Werte entkoppelt und LabVIEW bremst beim neu-allokieren von Speicher die andere Schleife nicht aus (sofern du Timed Loops verwendet hast :-)) Wennst das Ganze mit normalen While-Schleifen programmierst, erhaelst zwar ein zufriedenstellenderes Ergebnis, jedoch ist der Einsatz von Timed Loops die bese Moeglichkeit... Zum Abschluss kannst dann noch den Task-Manager starten (strg-alt-entf) und unter Prozesse der LabVIEW.exe mittels rechtsklick - Prioritaet den Status "Hoch" oder "Echtzeit" verpassen! Damit kannst auch noch eine Steigerung der Konsistenz der Loop gewaehrleisten... |