Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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?