LabVIEWForum.de
Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? (/Thread-Zeitbedarf-DAQ-Sequenz-verringern-Semaphor-wirklich-notwendig)



Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? - Philipp841 - 13.06.2018 15:58

Hallo zusamm´,

beigefügtes VI (Motorcontroller.vi) enthält ein DAQ-Device mit dem u.a. Signale zur Steuerung zweier Motoren ausgegeben werden. Im Hauptprogramm läuft parallel zu dieser (I/O-)Whileschleife noch eine Main-While-Schleife in welcher zur Datenerfassung ebenfalls auf die NI-Karte zugegriffen wird (Allerdings wird in besagter Main nur auf die AI-Channels zugegriffen).

Zwischen den beiden While-Schleifen wurde eine Semaphor-Funktion integriert, die dafür sorgt, dass immer nur eine der beiden Whileschleifen zur Zeit ausgeführt wird, bzw. die eine auf die andere wartet (Vermutlich damit die Karte bzw. das Ausgeben/Einlesen von Signalen nicht durcheinander gerät. Oder wüsste jmd. einen anderen Grund?).

Zur Folge hat dies, dass die Main-While-Schleife hin und wieder auf die I/O-Schelife warten muss; und zwar ganz schön lange. Insgesamt benötigt die I/O-Whileschleife ca. 50ms. Duch eine Zeitmessung der einzelnen Frames kann ich auch sagen, wie sich diese Zeit zusammen setzt.

Frame 1 - 10ms
Frame 2 - 10ms
Frame 3 - 16ms
Frame 4 - 16ms
Frame 5 - wird nicht ausgeführt, da nicht benötigt, Fehler etc... wie auch immer

Nun zu meiner Frage:
Ich habe in der Main-While-Schlife die parallel laufende Datenerfassung bereits so umgebaut, dass selbige kontinuierlich erfolgt, sprich das Erstellen, Konfigurieren, Starten, Stoppen und Schließen des Tasks nicht in jedem Schleifendurchlauf erfolgen muss und somit unnötig Zeit kostet. Ist dies in dem beigefügten VI ebenfalls möglich? Wenn ja, worauf gilt es zu achten?
(Ich habe bedenken, dass die Motoren empfindlich darauf reagieren könnten, wenn die Ausgabe der Ansteuerungssignale kontinuierlich und nicht mehr getaktet erfolgt? Insbesonder im Hinblick auf Positions- und Geschwindigkeitsregelungen etc.)

Gibt es möglicherweise auch noch eine Alternative für mein Ziel, eine gleichbleibend schnelle Datenerfassung hinzubekommen ohne die Ansteuerung der Motoren modifizieren zu müssen?

Und zum Schluss: Wieso wird diese Semaphor-Funktion benötigt, wenn ich bei der Datenerfassung lediglich auf die AIs und zur Ansteuerung der Motoren nur auf die I/Os zugreife?

Vielen Dank,
Philipp


RE: Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? - jg - 13.06.2018 16:56

Probieren geht über Studieren. Lass ihn einfach mal weg...

Ich kann dir auch keinen wirklich vernünftigen Grund für den Semaphore nennen, außer der Ersteller des Programms hatte Angst zwecks Resourcen-Konflikten über den USB-Bus. Ab und an einen DO zu setzen (mit Software-Takt) und Counter neu zu setzen, das sollte keine großen Störungen bringen. Früher hast du aber auch dauernd den AI-Task neu angelegt, vielleicht gab es da Probleme im Zusammenspiel.

Um dein nicht funktionsfähiges Motor-Controller-VI zu verstehen, habe ich mir nochmal deinen alten Upload angeschaut.

Fehler bei Frame 5 kommt daher, dass davor versucht wird, für 3 Counter 3 Tasks anzulegen - deine 6212 hat aber nur 2 Counter. Somit Fehler beim 3. Task.

Außerdem empfehle ich dir, alle DOs zu einem Task zusammenzulegen, dann sparst du noch etwas Kommunikationsübertragung zur Karte.

Gruß, Jens


RE: Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? - Philipp841 - 20.06.2018 16:55

Hy Jens,

vielen Dank für deine Antwort. Zusammenlegen der DOs habe ich verstanden. Würde es an der Stelle auch Sinn machen ähnlich vorzugehen wie bei der Datenerfassung. Sprich den Task nur 1x außerhalb der While schleife anzulegen?

Wie sieht es mit Frame 3 und 4 aus. Gibt es hier noch Möglichkeiten Zeit zu sparen ?

Danke & Gruß,
Philipp


RE: Zeitbedarf DAQ Sequenz verringern, Semaphor wirklich notwendig? - GerdW - 20.06.2018 17:08

Hallo Philipp,

Zitat:Sprich den Task nur 1x außerhalb der While schleife anzulegen?
Ja, natürlich.
Würdest du es jemals anders machen?

(Sinn kann man nur haben, aber nicht machen. Big Grin)

Zitat:Wie sieht es mit Frame 3 und 4 aus. Gibt es hier noch Möglichkeiten Zeit zu sparen ?
- Wozu braucht man eine Schleife, die bei "i >= 0" beendet wird? Rube-Goldberg!
- Die Case-Strukturen zum Abfangen von Fehlern sind Rube-Goldberg: wenn ein Fehler aufgetreten ist, werden die DAQmx-Funktionen sowieso nicht ausgeführt…
Ansonsten nein: die DAQmx-Funktionen selbst kannst du nicht beschleunigen…