Vorgegebene Bewegegungskurve abfahren

Scholz

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe einen Servoverstärker AX5000 von Beckhoff und einen Servo Motor Am3022 ebenfalls von Beckhoff.

Nun soll ich damit die vorgegeben Kurve abfahren.
beugungozlnj6f28v.jpg


Habe die Kurve analysiert und eine Tabelle mit 100 Werten erstellt.
Position in Grad, Geschwindigkeit und Beschleunigung

Benutze den Baustein MC_MoveAbolute und übergebe ihm die jeweiligen werte.
Bloß leider klappt es nicht wie ich es mir vorgestellt habe.

hat da jemand einen besseren lösungansatz???
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die positionen werden abgefahren aber nicht in einer sekunde.
dementsprechend stimmt meine kurve im scope nicht der vorgebenen überein.

da die kurve in 100 werte aufgeteilt ist muss der motor alle 10ms die neue position anfahren. da ist schon das erste problem. das zweite problem ist wenn ich dem baustein die geschwindigkeiten übergebe dauert es noch länger. da an einigen punkten die geschwindigkeit nahezu null.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... so,wie ich dein Diagramm auslege, müßte die Geschwindigkeit und die Beschleunigung für deine Achse für alle Punkte gleich (also konstant) sein. Beide sollten auch relativ hoch angesetzt sein.

Wenn deine Achse die Profilkurve abfährt dann kann deine Bausteinwahl ja wohl so schlecht nicht sein.

Was mir etwas zu denken gibt ist, dass du schreibst, dass du die Kurve korrekt abfährst, aber zu langsam. Wie lange brauchst du denn ?
Hast du schon mal darüber nachgedacht, dass der Move-Befehl vielleicht nicht in 10 ms abzuarbeiten ist und du das Raster vielleicht einfach nur vergrößern mußt.

Gruß
Larry
 
Hallo,

ich weiß aber nicht ob diese Möglichkeit bei deinem Servo besteht, kenne diesbezüglich nur LTI und da funktioniert sowas:

Variante eins
------------
Der Servo hat einen Mode, wo er bis zu acht Zielpositionen speichern kann. D.h. du könntest von deiner Applikation gleich 8 Positionen (und Geschw.) übergeben, für welche der Servo z.B. 80 ms benötigt. D.h man könnte dem Servo immer mehrere Positionen übergeben und hätte wahrscheinlich weniger Probleme bezüglich Übertragungs-Zeit usw. Dazu müsste man sich dann noch was überlegen (Handshake).

Variante zwei
-------------
Du gibst deine Positionen und Geschwindigkeiten in einer Tabelle am Servo ein (dynamisch, also mit Bussystem ?) . Wenn die Tabelle fertig ist startest du die Tabellenpositionierung und die Achse läuft autonom

bg
bb
 
Hallo Scholz,

Arbeitest du bereits mit der „MC Library 2“?
Dann könnte dein Lösungsansatz funktionieren, wenn du den richtigen BufferMode verwendest.
Wenn nicht, hilft vielleicht die Funktion MC_MoveAbsoluteOrRestart weiter.

Der Ansatz von trinitaucher sieht auch interessant aus.
Du kannst ja mal berichten, was besser klappt… :rolleyes:

Gruß
Chräshe
 
@ scholz:
Hab deine Aufgabenstellung nur überflogen.
Eigentlich sollte der Hinweis von Chräshe mit dem "Buffer Mode" der richtige Weg sein. Wenn du ohne den Buffer Mode fährst, bremst und beschleunigt die Achse immer von Punkt zu Punkt. Aber ich denke, du möchtest ohne Unterbrechung fahren. Dann musst du den BufferMode der MC2-Bausteine nutzen.
Mein Vorschlag mit der externen Sollwertgenerierung ist nur dann sinnvoll, wenn du mit dem internen Rampengenerator von TwinCAT nichts anfangen kannst.
... Aber wenn du tatsächlich zu jeder Zeit die Werte für Position, Geschwindigkeit und Beschleunigung hast... probiers mal aus :cool:

Elektronische Kurvenscheibe in Verbindung mit einer virtuellen Masterachse wäre eine Lösung (falls mit dieser Steuerung möglich)
Das hatte ich auch überlegt. Ist mit TwinCAT ohne Probleme möglich. Das ist das "Camming":
http://infosys.beckhoff.de/index.ph...mming/html/tcncslavecammingintro.htm&id=15866
http://infosys.beckhoff.de/index.ph...ng/html/tcplclibmc_camming_intro.htm&id=13551
Man baut sich eine virtuelle Achse als Master, die endlos mit fester Geschwindigkeit fährt. Der (reale) Slave folgt anhand der Positionstabelle.
Camming kostet bei TwiNCAT aber Aufpreis.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du nur vorgegebene tabellenbasierte Bewegungen abfahren willst, und Dein Servoverstärker einen positionsgesteuerten Modus (müsste der AX... auf jedenfall veherrschen) unterstützt, dann brauchst Du gar keinen NC Kernel. Du kannst die Positionen direkt an den Servoverstärker schicken.
Das mache ich übrigens bei meinen CANOpen Achsen immer (Dort heißt es interpolated positioning mode).

Die SPS schickt in jedem Zyklus eine neue Sollposition an den Verstärker. Der Regelkreis wird vollständig im Verstärker geschlossen.
 
Zurück
Oben