LabVIEWForum.de - Parallele Ausführung mehrerer Sub-Vis

LabVIEWForum.de

Normale Version: Parallele Ausführung mehrerer Sub-Vis
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

also ich habe 8 Sensoren die mit der DAQ Karte NI-USB 6009 digital ausgelesen werden.
Dann habe ich noch eine DAQ-Karte NI-USB 6210 mit der ich einen Quadratur Encoder auslese.
Das funktioniert auch soweit. Jetzt muss ich aber für jeden Sensor die Position des Encoders
speichern wenn der Sensor 100mal 1 sendet. Das bedeutet ich habe 8 mal das gleiche Sub-VI welches
prüft ob 100 x 1 gesendet wurde, und dementsprechend das Signal des Encoders abspeichert.

Nun werden die VIs nacheinander ausgeführt was natürlich nicht gewollt ist, eigentlich sollen die
VIS alle parallel ausgeführt werden. Habe das VI schon auf Ablaufinvariante Ausführung eingestellt,
das ändert aber leider gar nichts.

Vielleicht könnt ihr mir ja helfen, und mir sagen wie ich es anders lösen kann, oder wie ich alle 8 VIs
gleichzeitig ausführen kann.

Vielleicht habe ich ja auch einfach nur ein Brett vorm Kopf...

Liebe Grüße

Anna
Hallo Anna,

du hast also einen (1) DAQmx-Task zum Auslesen deiner 8 digitalen Sensoren und einen (1) DAQmx-Task zum Auslesen des Encoders?

Einfache Herangehensweise: lese beide mit der gleichen Samplerate aus, dann kannst du jedem Sample deiner Sensoren ein passendes Sample des Encoders zuordnen.

Ich sehe momentan noch keinen Grund, irgendein VI 8fach parallel auszuführen… Hmm
Ich habe nicht viel Ahnung von Hardwareprogrammierung deswegen habe ich jetzt 8 Tasks,
weil ich dachte ich muss ja jeden Sensor kontrollieren und gucken ob er 100 x 1 war.
Dazu speichere ich für jeden Sensor den Wert davor und vergleiche Ihn mit dem aktuellen.
Wenn beide Werte 1 sind wird hochgezählt sonst wird der Counter auf 0 gesetzt und das bei jedem Sensor.

Ich gucke mal ob ich das mit einem task hinbekomme, weiß nur noch nicht so genau wie das gehen soll.

viele Grüße

Anna
Hallo Anna,

wenn die USB6009 das unterstützt, solltest du die 8 DI-Kanäle als "ein Port" einlesen, dann bekommst du ein U8 geliefert. Das kannst du dann direkt auswerten: jedes Bit im U8 gehört zu einem Sensor…
Die DIOs bei der 6009 kannst du eh nur im Software-Takt auslesen. Wenn du jetzt 8 DI-Tasks anlegst, dann wird alles noch langsamer, denn über die USB-Leitung muss ja alles seriell übertragen werden.

Gruß, Jens
Also ich hab das alles soweit verstanden, werde versuchen das mit einem Task
laufen zu lassen. Die Sensoren sollen erkennen ob sich noch ein Faden
darin befindet oder nicht das bedeutet sobald kein faden mehr vorhanden ist, also 100 x 1
kommt (optional auch 100 x 0 ) soll das Signal des Encoders abgespeichert werden.

Dazu muss ich doch immer das Signal jedes Sensors prüfen. Die Sensoren müssen unterschiedlich lange Garne
aufnehmen deswegen muss das unabhängig voneinander sein. Also nicht wenn der erste Sensor 100 x 0 hat
können ale abgestellt werden.
Dazu habe ich nun eine Schleife gemacht, die die Position des Encoders ausliest. Aber nun weiß ich
nicht wie ich die 8 Sensoren kontrolliere ohne 8 x das SUBvi welches für jeden Sensor
prüft ob es 100 x 0 war auszuführen.

Auch wenn ich das jetzt unter einem Task auslese habe muss ich doch für alle Sensoren prüfen oder?

Stehe irgendwie auf dem Schlauch glaube ich.... Blush

Liebe Grüße

Anna
Hallo Anna,

Zitat:Auch wenn ich das jetzt unter einem Task auslese habe muss ich doch für alle Sensoren prüfen oder?
Ja klar musst du das weiterhin…

Das DAQmxRead liefert dir entweder "Digital, Mehrere Kanäle, 1 Sample, 1D boolsch" oder "Digital, Mehrere Kanäle, 1 Sample, 1 U8 (Portformat)" und damit für jeden Sensor ein einzelnes Bit. Und das kannst du weiterhin prüfen.

Ich würde dir das U8 empfehlen, da es kompakter ist und man dank Polymorphismus trotzdem boolsche Operationen verwenden kann. Wenn es für dich "einsichtiger" ist, kannst du auch das boolsche Array verwenden…
Ich glaube ich habe das jetzt soweit verstanden... .-)

Wie ließt man den 8 Kanäle auf einmal ein? So das ich quasi
ein 2 D Array bekomme also alle Samples zu jedem Kanal?
Dann kann ich das ja dann nachher mit Software kontrollieren.

Liebe grüße

Anna
Hallo Anna,

Zitat:Wie ließt man den 8 Kanäle auf einmal ein?
Indem man einen Task mit 8 Kanälen erstellt und dann die Werte für diesen Task einliest.
Du hast die ganzen Links in meiner Signatur beachtet und gelesen?

Zitat:So das ich quasi ein 2 D Array bekomme also alle Samples zu jedem Kanal?
Erstens brauchst du nur ein 1D-Array und zweitens liefert die USB6009 Digitalwerte nur auf Anforderung: einzeln

Zitat:Dann kann ich das ja dann nachher mit Software kontrollieren.
Ja, das kannst du auch mit einem 1D-Array…
okay habe verstanden :-)

Nein hatte ich nicht gelesen und beachtet Blush

Aber ich denke jetzt bekomme ich das bestimmt hin.

LG Anna
Seiten: 1 2 3
Referenz-URLs