INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Ausführungszeit DAQmx Task zu lang



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!

18.04.2013, 15:54 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2013 15:55 von Kiesch.)
Beitrag #1

Kiesch Offline
LVF-Stammgast
***


Beiträge: 415
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
Ausführungszeit DAQmx Task zu lang
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):

   

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

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2013, 16:08
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Ausführungszeit DAQmx Task zu lang
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)...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2013, 16:08 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2013 16:17 von Kiesch.)
Beitrag #3

Kiesch Offline
LVF-Stammgast
***


Beiträge: 415
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Ausführungszeit DAQmx Task zu lang
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).

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2013, 20:13
Beitrag #4

Holy Offline
LVF-Stammgast
***


Beiträge: 339
Registriert seit: Sep 2008

2014
2007
EN

09XXX
Deutschland
RE: Ausführungszeit DAQmx Task zu lang
(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.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Probleme mit RPM Messung -> DAQmx task Redsheep 0 3.706 16.04.2014 15:20
Letzter Beitrag: Redsheep
  DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen cb 6 7.149 10.03.2014 14:49
Letzter Beitrag: cb
  Interrupt a Triggered DAQmx Task bundesschranzminister 1 3.504 11.11.2013 10:10
Letzter Beitrag: bundesschranzminister
  DO-Signal liegt nicht lang genug an cRio 4 4.687 12.12.2011 22:13
Letzter Beitrag: GerdW
  Create 2 Task, Fehler nach Start Task Martin Heller 1 4.940 09.09.2011 14:26
Letzter Beitrag: illuminus
  Unterschied DAQmx clear & stop Task gottfried 4 6.633 02.08.2011 08:48
Letzter Beitrag: gottfried

Gehe zu: