SPS-Trajektorienplaung für Maxon IDX Motoren im CSP-Modus

herbi01

Level-2
Beiträge
19
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen

Ich bin gerade an meiner Bachelorarbeit und die Zeit drängt. Ich programmiere ein zwei-Achsensteuerung für eine Antenne. Die Bewegung klappt problemlos, jedoch ist die Genauigkeit noch nicht in dem Bereich, welcher angestrebt wird. Ich verwende eine Beckhoff SPS mit Motion Task (2ms), jedoch übermittele ich die Positionen nur alle 10ms. Die Interpolationszeit in den Antrieben ist korrekt auf 10ms eingestellt.

Für die Übermittlung verwende ich den MC-MoveAbsolute von Twincat . Meines erachtens habe ich alle Parameter korrekt eingestellt. Jedoch entspricht die Position demand value (interpolierte Position der antriebe, welche als Sollposition interpretiert wird), nicht der Sollkurve die ich vorgebe.

Hat jemand damit auch schon Probleme gehabt, oder stelle ich es nur falsch an? Ich wäre froh wenn mir jemand helfen könnte.

Gruss Fabrice
 
Es ist immer interessant wie häufig die Glaskugel gefragt wird. Meine ist wie gäufig leider bescglagen.

Scope von Soll/Ist für pos und velo und schleppfehler angeschaut?
Welche Dynamiken...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich arbeite sehr viel mit Achsen, NCI, CNC. Maxon habe ich auch "auf dem Tisch".

Die Informationen die du Preis gibst, reichen nicht aus für eine adequate Antwort. Ganz pauschal hört es sich nach falschen Dynamik Parametern an. Wie Guga schon schrieb, mach einen scope und poste Screenshots hier.

Welches twincat nutzt du? Also auch welche Version genau.
Wie oft / schnell schickst du neue Werte?
Schickst du während der Bewegung schon einen neuen Sollwert?
Passt die Genauigkeit der einzel Achse nicht, oder das Ergebnis beider?
 
Hallo Zusammen

Ich benutze Twincat Version 3.1. Ich schicke die Befehle alle 10ms, obwohl der Motion Task auf 2ms läuft. Eventuell liegt das Problem darin, dass ich nicht abfrage ob die Bewegung beendet ist, da ich einen kontinuierliche Bahn generiere. Dies ist auch notwenig, da ich zu beginn nicht alles Werte der Sollkurve kenne. Im Screenshot unten ist der Fehler ersichtlich, welcher wie folgt berechnet wird:

Sollkurve-SPS(die Kuve die ich eigentlich will) - Sollkurve-Antriebe (Kurve die durch MoveAbsolute erzeugt wird).

Die Genauigkeit stellt kein Problem dar, wenn die Sollkurve korrekt übermittelt wird, passt die Genauigkeit. Ich bin dabei die Dynamikparameter anzupassen, ich orientiere mich dabei an einem Kompromiss. Da ich in der der späteren Anwendung die Bahn nicht kenne.

Seid ihr der Meinung, dass es daran liegt, dass ich nicht abwarte bis die Bewegung beendent wird. Denn die Ausschläge sind mir immernoch ein Dorn im Auge.

Danke für die Rückmeldungen, ich hoffe ihr könnt euch jetzt mehr darunter vorstellen.
 

Anhänge

  • Soll_SPS_vs_Soll-Antriebe.png
    Soll_SPS_vs_Soll-Antriebe.png
    80,6 KB · Aufrufe: 40
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm ich glaube eine Point to Point Bewegung ist eventuell nicht ideal für dich. Du schreibst, dass du am Anfang nicht alle Infos hast. Fehlen dir Korrekturwerte, also ist dir die grobe Bahn bekannt? Wenn ja wäre das eventuell etwas für die NCI mit R-Parameter als Offset / Korrektur.
Solltest du bei Point 2 Point bleiben dann schau mal welchen Buffer Mode du verwendest. Es ist unüblich alle 10 ms einen neuen Fahrbefehl ab zu senden.
 
Die IDX erwartet aber alle 10ms einen neuen Wert. Damit diese intern interpoliert werden kann und entsprechend an den Positionsregler übermittelt werden kann. Also muss ich dementsprechend auch in diesem Zeitraum senden. Gemäss Rückmeldung von Maxon wäre eine noch schnellere Zeit möglich. Im CSP-Betriebsmodus, arbeitet die SPS als Trajekorienplaner. Zudem soll sich dieser Betriebsmodus genau für kontinuierliche Bahnen eignen.

Mein Problem liegt darin, dass es sich um eine Antenne handelt, welche Satelitten nachgeführt werden soll. Aus diese Grund sind die Bahndaten, welche ich zurverfügung habe auf die nächsten 10s beschränkt.

In der SPS interpoliere ich aufgrund der groben Auflösung der Werte (11 Werte für die nächsten 10 sekunden) auf eine Auflösung von 10ms und übermittle diese.
 
Bislang habe ich keinen Buffermode in implementiert. Da ich aufgrund der Beschreibung von Beckhoff nicht schlüssig werde. Dort steht nämlich, dass hierzu zwei Instanzen für die Achse benötigt werden. Würde dann die Übermittlung einmal von der Instanz getätigt werden und einmal von der anderen und jenach eingestelltem Buffermode die Punkte aneinander geführt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
WArum keine Diagramme wo soll ist einhezeichnet sind??

Meine Vermutung nach solltest du dir in der SPS die Pos und Velo als Vektor für beide Achsen rechnen und als externer Sollwertgenerator an die NC schicken
 
Ich habe keine Diagramme von soll ist gezeigt, da diese nicht relevant sind. Wenn die Sollkurve nicht korrekt übergeben wird, ist die Betrachtung von Soll vs Ist sinnlos...

Darin liegt eben die Frage, ob die Geschwindigkeit für jeden Abschnitt bestimmt werden muss oder der Funktionsblock anhand von maximal Werten arbeitet. In der Dokumentation des Funktionsblocks (MoveAbsolute) Beckhoff ist beschrieben, dass entsprechend der gewünschten Position und der maximalen Geschwindigkeit, Beschleunigung, Abbremsen und Jerk die Trajektorie bestimmt wird.
 
Wenn die Sollkurve nicht korrekt übergeben wird, ist die Betrachtung von Soll vs Ist sinnlos...
Wie soll man das verstehen? Was meinst du mit "Die Sollkurve nicht korrekt übergeben wird"?
Die Sollkurve bereitest du doch in der SPS auf und schickst sie per MoveAbsolute an die Achsen.
Stimmt deine Sollwertvorgabe nicht oder folgen die Achsen deiner Sollwertvorgabe nicht korrekt?
Im 2. Fall wäre ein Soll-Ist schon interessant.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Deine NC bekommt von der SPS die soll Position. Die NC berechnet daraus eine Kurve und schickt die jeweiligen Soll-Positionen alle 2ms (oder schneller) an deine Achse. Die Abstände der der Soll-Positionen je Zyklus ergibt die Beschleunigung/Verzögerung/Geschwindigkeit
 
Wenn du den CSP-Modus (Cyclic Synchronous Position) verwendest, ist die Nutzung von MC_MoveAbsolute nicht korrekt.
Dieser Baustein ist für Einzelbewegungen mit internem Rampenprofil gedacht – nicht für kontinuierliche, zyklische Positionsvorgaben.

Im CSP-Modus musst du zyklisch über das Prozessabbild „Target position“ neue Sollwerte an den Antrieb senden.
Der Antrieb interpoliert dann zwischen diesen Punkten, je nachdem wie eng sie beieinander liegen:
  • Liegen zwei aufeinanderfolgende Positionen nah beieinander → langsame Bewegung
  • Größerer Abstand → schnellere Bewegung
Ich würde dir empfehlen, schrittweise vorzugehen:
  • Eine Achse testweise kontrolliert vor- und zurückfahren, indem du direkt den TargetPosition-Wert im Echtzeittask änderst
  • Beide Achsen synchronisieren, z. B. um einen Kreis oder eine einfache Trajektorie abzufahren
  • Deine eigentliche Anwendungskurve umsetzen, ggf. mit geglätteter Trajektorie (z. B. mit Spline oder Filter)
So kannst du sicherstellen, dass das Grundprinzip der Positionsvorgabe im CSP-Modus korrekt funktioniert, bevor du dich an die genaue Feinabstimmung der Kurven oder Dynamik machst.
 
Wenn du den CSP-Modus (Cyclic Synchronous Position) verwendest, ist die Nutzung von MC_MoveAbsolute nicht korrekt.
Dieser Baustein ist für Einzelbewegungen mit internem Rampenprofil gedacht – nicht für kontinuierliche, zyklische Positionsvorgaben.

Im CSP-Modus musst du zyklisch über das Prozessabbild „Target position“ neue Sollwerte an den Antrieb senden.
Der Antrieb interpoliert dann zwischen diesen Punkten, je nachdem wie eng sie beieinander liegen:
  • Liegen zwei aufeinanderfolgende Positionen nah beieinander → langsame Bewegung
  • Größerer Abstand → schnellere Bewegung
Ich würde dir empfehlen, schrittweise vorzugehen:
  • Eine Achse testweise kontrolliert vor- und zurückfahren, indem du direkt den TargetPosition-Wert im Echtzeittask änderst
  • Beide Achsen synchronisieren, z. B. um einen Kreis oder eine einfache Trajektorie abzufahren
  • Deine eigentliche Anwendungskurve umsetzen, ggf. mit geglätteter Trajektorie (z. B. mit Spline oder Filter)
So kannst du sicherstellen, dass das Grundprinzip der Positionsvorgabe im CSP-Modus korrekt funktioniert, bevor du dich an die genaue Feinabstimmung der Kurven oder Dynamik machst.
Das klingt plausibel und habe ich mir auch schon gedacht. Für meine Arbeit würde es aussreichen, wenn ich aufzeigen könnte das es funktioniert. Jedoch habe ich das Programm übernommen, um es zu optimieren. Das führt dazu, dass wenn ich die Übermittlung der Daten per PDO's durch führen will (Target Position), mir die Motoren in einen Fehler zustand gelangen.

Ich habe die beiden Antriebe eingebunden, jedoch sind die PDO's mit der NC-Library verkünpft, was zu besagtem Fehler führt. Diese Verknüpfung kann ich schlecht entfernen, da erstens die Zeit für die Abgabe drängt und zweitens das Programm wieder im funktionsfähigen Zustand übergeben werden muss.

DANKE für den Input, werde es nocheinmal versuchen. Ansonsten werde ich noch kleinere Anpassungen vornehmen und weiterhin den MoveAbsolute befehl verwenden. Oder gibt es in dieser Hinsicht Alternativen zu diesem Funktionsblock.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn bereits viel Zeit in den aktuellen Ansatz mit MC_MoveAbsolute geflossen ist:
Für eine echte Bahnsteuerung im CSP-Modus ist dieser Weg grundsätzlich nicht geeignet.

Man kann mit MC_MoveAbsolute zwar Achsen verfahren, aber keine präzise, kontinuierliche Trajektorie abbilden – dafür ist er nicht gemacht. Wer weiter auf diesem Weg bleibt, wird sich unweigerlich mit Ungenauigkeiten und unruhigem Verhalten herumschlagen.

Ich weiß, dass der Zeitdruck hoch ist, aber manchmal spart man am meisten Zeit, wenn man einen ungeeigneten Ansatz rechtzeitig verwirft – auch wenn das unangenehm ist. Lieber jetzt gezielt einen einfacheren, aber sauberen Weg wählen, als kurz vor Abgabe mit einem instabilen System dazustehen.
 
Macht Sinn, danke für deinen Input. Hast du dies bereits einmal gemacht und kannst mir eine Vorlage zur Verfügung stellen?

Wenn nicht keib Problem, werde mich dran halten

Gruss und gute Nacht
 
Hast du dies bereits einmal gemacht und kannst mir eine Vorlage zur Verfügung stellen?
Für Kurvenbahnen im CSP-Modus hatte ich bisher selbst kein Projekt – in den meisten Fällen konnte ich meine Aufgaben mit klassischen Punkt-zu-Punkt-Bewegungen (PtP) gut lösen.

Bevor wir jetzt tiefer in mögliche Lösungen einsteigen, wäre es vielleicht sinnvoll, nochmal kurz innezuhalten und sicherzustellen, dass wir alle vom selben Stand ausgehen. Nicht dass wir gerade aneinander vorbeireden.

Daher ein paar Rückfragen zur Klärung:
  • Was ist aktuell genau deine Aufgabe bzw. dein Ziel?
  • Was wurde bisher schon umgesetzt oder übernommen?
    Software, Hardware, Funktion…
  • Was ist dein aktueller Stand?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
-Also das Ziel welches ich verfolge, ist die Genauigkeit der Nachführung zu verbesseren. Am Anfang betrug der Fehler rund 1.5° in einer und 1° auf der anderen Achse. Diesen habe ich auf beiden Achsen um mindestens die Hälfte reduzieren können.

-Also grundsätzlich wurde ein Programm funktionsfähiges Programm inklusive Hardware übernommen. Ich habe dem MoveAbolute befehl keine Beachtung geschenkt, da ich davon ausgegangen bin, dass diese meine gewünschte Sollkurve nicht verändern. Jetzt habe ich mich weiter mit diesem beschäftig und habe germerkt, das dieser in Abhängigkeit der Dynamikparameter die Sollkurve berechnet.
-ich habe versucht, die Target-Position durch direktes über das PDO zu schreiben. Ich konnte es mappen und auch einer output variable im Programm zu weisen, jedoch führte dies zu eine Fehler der Motoren (siehe Screenshot).
-für ein komplettes Umschreiben/Werfen des Programms ist die Zeit zu knapp und habe ich definitiv zu viel investiert. Anhand deines Inputs werde ich jetzt nochmals versuchen, die Ansteuerung diretk über das PDO zu machen.
 

Anhänge

  • Fehlermeldung.png
    Fehlermeldung.png
    44,1 KB · Aufrufe: 17
Bevor wir weiter ins Detail gehen, sollten wir vielleicht nochmal einen Schritt zurück machen und ein paar grundsätzliche Punkte klären. Ich habe das Gefühl, dass da noch ein paar Unklarheiten im Raum stehen, die später über Erfolg oder Frust entscheiden könnten.

Was ist aktuell genau deine Aufgabe bzw. dein Ziel?
Das nachführen einer Antenne mithilfe zweier Antriebe.
Zwei Achsen können jeweils eine Drehbewegung ausführen und einen Bereich von A? bis B? abfahren.
Wo kommen die Daten für die Positionierung her?
Sind diese Daten zum Beginn der Positionierung bekannt?

Was wurde bisher schon umgesetzt oder übernommen?
Für die Positionierung wurden zwei MAXON IDX Motoren ausgewählt.
Welcher Typ ist das genau?
Welche Steuerung, welche Software ist im Einsatz?
Wie sind die MAXON-Motoren an diese Steuerung angebunden?
Aus welchem Grund wurde der CSP-Modus ausgewählt?

Was ist dein aktueller Stand?
Was ist bereits in Funktion?
Wo liegen die Probleme, die du beseitigen sollst?
Wie genau muss die Nachführung sein, um ein zufriedenstellendes Ergebnis zu bekommen?

Ich frage nicht aus Neugier, sondern weil ich glaube, dass du damit schneller zu einer nachhaltigen Lösung kommst. Je nachdem, ob du z. B. eine präzise Bahn mit wenigen Milligrad Abweichung brauchst oder „nur“ eine bewegte Positionierung – wären ganz andere Steuerungsmethoden sinnvoll.
 
Ich finde es gut das du so detailliert nachfragst, damit kann ich mein Vorgehen hinterfragen.

Positionen
  • Ich kenne zu beginn nicht die vollständige Kurve
  • alle 5s erhalte ich 11 Werte, welche für die Positionen in den nächsten 10s beschreiben.
  • Diese beinhalten die aktuelle bis hin zur Position in 10s.
  • Es gibt mechanische Endschalter, welche die Achsen beschränken. Bei einem beispielhaften Überflug macht die X-Achse (320° --> 140°) und die Y-Achse (35° --> 35 °). Die Werte werden vor dem Senden in die entsprechende Einheit der Motoren angepasst.
Motoren
  • Maxon IDX 70 L
  • Die Übertragung erfolgt über Ethercat, also einer Bus-Verbindung.
  • Der CSP-Modus wurde ausgewählt, da Maxon mir die Rückmeldung gab, das sich dieser Betriebsmodus am Besten für die Anwendung eignet.
Aktueller Stand
  • Die Antenne ist vollständig funktionsfähig. Es gibt verschieden States, wobei ich mich auf einen Konzentriere. Das ist der, bei dem die Positionen alle 5s an die SPS übermittelt werden und anschliessen zyklisch (10ms) an die Antriebe.
  • Es wurde zu Beginn kein konkretes Ziel definiert. Jedoch wäre es gut, wenn sich der Fehler auf 0,1° beschränkt. Natürlich mit abstrichen beim Start. Aber aufgrund des Analysierten, folgt der Motor sehr exakt der Sollposition. Deshalb ist der letzte Schritt diese korrekt zu übermitteln. Der Rest ist entsprechend korrigiert, angepasst worden.
Das Ziel ist definitiv eine präzise Bahn mit wenigen Miligrad Abweichungen. Einzelene Point 2 Point Befehle müsse aber auch möglich sein, da die Antenne für Überflüge in Position gebracht werden muss.
 
Zurück
Oben