# Vorgegebene Bewegegungskurve abfahren



## Scholz (10 März 2011)

Hallo,

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

Nun soll ich damit die vorgegeben Kurve abfahren. 






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???


----------



## Larry Laffer (10 März 2011)

Was klappt denn nicht (wie du es dir vorgestellt hast) ?
Bzw. was macht es denn ?


----------



## Scholz (10 März 2011)

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.


----------



## trinitaucher (10 März 2011)

MC_MoveAbsolute bringt dir nichts. Der ist nur für Fahrten von A nach B mit einmalig festgelegten Parametern.

Wenn du Position, Geschwindigkeit und Beschleunigung hast, probier mal die externe Sollwertgenerierung:
http://infosys.beckhoff.de/index.ph.../html/tcsampleptp_extsetpointgen.htm&id=18195
(ich selsbt hab damit aber noch keine Erfahrungen)


----------



## Scholz (10 März 2011)

ah ok, das schaut schon besser aus.

danke für die info


----------



## Larry Laffer (10 März 2011)

... 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


----------



## bits'bytes (10 März 2011)

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


----------



## Chräshe (10 März 2011)

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… 

Gruß
Chräshe


----------



## Oberchefe (10 März 2011)

Elektronische Kurvenscheibe in Verbindung mit einer virtuellen Masterachse wäre eine Lösung (falls mit dieser Steuerung möglich)


----------



## trinitaucher (10 März 2011)

@ 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 



Oberchefe schrieb:


> 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.


----------



## rheumakay (11 März 2011)

bei bosch rexroth gibt es ein sogenanntes Flex Profil 
schau mal unter

http://www.boschrexroth.com/borexmv...T&pageraction=switchpage&remindCcat=on&page=2

damit ist das ganze mit Sicherheit zu realisieren

Vielleicht hat Beckhoff ja auch so etwas ...

Mit Kurvenscheibe müßte es evtl. auch gehen.
MC_MOVE_ABSOLUTE kannst du vergessen .


----------



## exeon (1 April 2011)

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.


----------

