LabVIEWForum.de
Ausführungszeit DAQmx Task zu lang - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Ausführungszeit DAQmx Task zu lang (/Thread-Ausfuehrungszeit-DAQmx-Task-zu-lang)



Ausführungszeit DAQmx Task zu lang - Kiesch - 18.04.2013 15:54

Hallo,

ich benutze ein USB 6501 um verschiedene Schrittmotoren anzusteuern. Das sieht dann vom Grundsatz etwa so aus (sieht noch bisschen wild aus da ich noch am testen bin wie es am besten geht - spiele damit noch ein wenig rum bevors endgültig umgesetzt wird; das VI ist also entsprechend noch nicht perfekt; ja mir ist bewusst, dass ich die Sequenz auch rausnehmen kann - die war ursprünglich drin weil ich dachte ich brauche ne Verzögerung zwischen High und wieder Low setzen):

[attachment=44391]

Das ganze funktioniert soweit auch (es bewegt sich wie es soll; das ganze läuft über eine Steuerkarte der ich letztlich lediglich eine steigende Flanke reingeben muss über den Takteingang) und so lange ich den Rot umkreisten Teil auf deaktiviert setze auch mit einem ausreichenden Takt von 500Hz (ergo 2ms pro Schleifendurchlauf). Der würde mir ausreichen, auch wenn 1kHz schöner wäre. Nehme ich allerdings das Rot markierte auf aktiviert (Endschalterstatus lesen), dann wird mein Programm plötzlich auf ~ 10-15ms pro Schleifendurchlauf eingebremst, was ich nicht so ganz verstehe (ich würde erwarten, dass das genauso schnell liest wie schreibt).
Hat jemand eine Idee woran das liegen könnte? Oder ist das tatsächlich so Gottgegeben und ich muss mich damit abfinden? (im schlimmsten Fall habe ich schon nen Workaround dafür; macht das Kalibrieren der Endschalterposition etwas umständlicher und langwieriger)


Was ich persönlich beitragen kann: Ich hatte ich ursprünglich den Eindruck, dass auch die unteren zwei SchreibVIs genauso langsam waren bevor ich dann mal Testweise einen Signalverlauf habe ausgeben lassen bei dem ich ein dt von 1ms eingestellt hatte (einfach nen Rechtecksignal aus false - true - false - ... im Wechsel) und das lief dann auch entsprechend schnell genug. Anschließend liefen die dann auch im "Einzelner Wert" Modus auch mit ziemlich genau 1ms Takt pro Ausführung (besagte 500Hz). Ich habe daraus geschlossen, dass man in irgendeiner Form einen Hardwaretakt einstellen kann (was ich offenbar durch die 1ms dt gemacht habe), aber ich habe keine Ahnung wo das geht.
Wie aber schon gesagt: Ich bin mir nicht sicher ob es wirklich daran lag. Allerdings habe ich gerade noch einen kleinen Plausibilitätstest gemacht, indem ich das Fahrrichtung setzen (man kann den Task auch im Bild erkennen "Richtung_Motor_Z" ) auch mit in die Schleife gepackt habe. Obwohl der dabei eigentlich parralel ausgeführt werden sollte, ergibt sich für 1000 durchläufe plötzlich 95XXms statt 200X *also knapp 5 fache Ausführungszeit*. Was für mich eindeutig dafür spricht, dass man dabei irgendwas für die schnellere konfigurieren muss, allerdings kann ich absolut nicht finden wo. Weder im MAX habe ich eine geeignete Option gefunden, noch in den für die Tasks nutzbaren Eigenschaftsknoten.

Wenn jemand ne Idee hat woran das liegen kann und wie ich das schneller kriege immer raus damit. Wie gesagt: Die 500Hz kann ich verstehen. Offenbar braucht das aus irgendeinem Grund hardcoded eine ms pro Schreiboperation (vorher hab ich das ganze über den Parralel Port angesteuert, da gab es eine solche Beschränkung nicht). Zumindest konnte ich auch mit dem Signalverlauf keine schnellere Ausführung erzielen.

Falls es außerdem eine Möglichkeit gibt das Schreiben / Lesen ASAP ausführen zu lassen, wäre ich davon auch begeistert (da man dann auch an die 1kHz rankommen könnte, was das Verfahren der Motoren natürlich nochmal um nen Faktor 2 schneller machen würde und auch so ziemlich die physikalische Grenze der Motorgeschwindigkeit darstellt.

Gruß Kiesch


RE: Ausführungszeit DAQmx Task zu lang - GerdW - 18.04.2013 16:08

Hallo Kiesch,

die Spec der USB6501 sagt: "all DIO are software-timed". Also geht nur der Einzelwert-Zugriff, und das auch nur mit den Taktmöglichkeiten des PCs!

Wie schnell die USB6501 nun auf Änderungswünsche reagiert, habe ich beim schnellen Überfliegen der Specs nicht gefunden - kannst ja mal NI fragen (089-7413130)...


RE: Ausführungszeit DAQmx Task zu lang - Kiesch - 18.04.2013 16:08

GNA. Ich könnte mich in den Hintern beissen. Es scheint daran zu liegen, dass man den Task vorher starten muss (hatte gedacht, dass das nix bringt weil ich zwischenzeitlich mal beim Anschließenden stoppen des Tasks ne Fehlermeldung gekriegt hatte und das natürlich auch nicht bei allen gemacht hatte ursprünglich *gna*

Also: Vorgehensweise - Task erst starten, dann läuft der zumindest deutlich schneller.

Praktisch gesehen: Die unteren zwei Schreibvorgänge in der Sequenz sind innerhalb von Gesamt ca. 2ms ausgeführt, setze ich parrallel noch das schreiben der Richtung rein ändert sich nix (nehme mal an das braucht dann auch ~3ms), setze ich das lesen mit rein braucht die Schleife ~3,5ms pro Durchlauf (aus irgendeinem Grund wird das also durch das Lesen langsamer als vorher). Lesen alleine braucht 1ms pro Vorgang.

Zusammengefasst: Offenbar wird Hardwareseitig jede ms eine Operation durchgeführt. Diese kann entweder Lesen oder Schreiben sein. Entsprechend können mehrere Lesevorgänge auch gleichzeitig durchgeführt werden, während ein selbst wenn parrallel gesetztes Lesen intern sequentiell verarbeitet wird. Man sollte daher wohl auch auf das Timing achten und das Lesen am besten selbst in eine definierte Sequenz einordnen.

Warum allerdings jede Operation eine ms dauert erschließt sich mir nicht. Eventuell ein Hardwaretakt des USB 6501 der da dahintersteckt?
@Gerd

Ja hatte mich auch schon mit den Specs beschäftigt und da auch nix gefunden. Hatte deswegen vermutet, dass das Setzen der Kanäle ASAP passiert (ergo das VI so schnell ausgeführt wird wie möglich) und man jegliche weiteren Timings die man haben will / erwartet Softwareseitig erzwingen muss (durch entsprechende Verzögerung zwischen Setzvorgängen).
Aber wie gesagt, mittlerweile habe ich zumindest raus wie ich zumindest das 1ms Softwaretiming pro schreiben / lesen erreiche (ich hab mich da aber auch doof angestellt....). Das reicht mir ja grundsätzlich schonmal, auch wenn die Motoren natürlich noch mehr könnten.

Muss mal kucken ob ich da demnächst auch nochmal NI drauf anhaue ob das noch irgendwie schneller geht. Trotzdem danke :-)

Achja, falls noch jemand Tipps hat, oder weis das es tatsächlich nicht schneller geht aus irgendeinem mir nicht verständlichen Grund (man sieht in den VIs nirgends, dass ein Timing erzwungen wird, allerdings liegt die eigentliche Ansteuerung versteckt in einem C Programm und da drin wäre es vermutlich am sinnvollsten Timings zu erzwingen wenn man das will (wobei mir ehrlich nicht klar ist warum NI das will).


RE: Ausführungszeit DAQmx Task zu lang - Holy - 18.04.2013 20:13

(18.04.2013 16:08 )Kiesch schrieb:  ...
Warum allerdings jede Operation eine ms dauert erschließt sich mir nicht. Eventuell ein Hardwaretakt des USB 6501 der da dahintersteckt?
...
USB ist von der Spezifikation her auf 1 ms begrenzt.