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