Hinweise zur Modulo-Positionierung
Die Modulo-Positionierung (MC_MoveModulo) ist unabhängig vom Achstyp möglich. Sie kann also bei linearen ebenso wie bei rotatorischen Achsen angewendet werden, da TwinCAT nicht zwischen diesen Typen unterscheidet. Auch eine Modulo-Achse hat eine fortlaufende absolute Position im Bereich ±∞. Die Modulo-Position der Achse ist einfach eine zusätzliche Information zur absoluten Achsposition und die Modulo-Positionierung stellt die gewünschte Zielposition auf eine andere Art dar. Im Gegensatz zur absoluten Positionierung, bei der der Benutzer das Ziel eindeutig vorgibt, birgt die Modulo‑Positionierung einige Risiken, da die gewünschte Zielposition unterschiedlich interpretiert werden kann.
Einstellungen im TwinCAT System Manager
Die Modulo-Positionierung bezieht sich grundsätzlich auf eine im TwinCAT System Manager einstellbare Modulo-Periode. In den Beispielen auf dieser Seite wird von einer rotatorischen Achse mit einer Modulo-Periode von 360 Grad ausgegangen.
Das Modulo-Toleranzfenster definiert ein Positionsfenster um die aktuelle Modulo-Sollposition der Achse herum. Die Fensterbreite entspricht dem doppelten angegebenen Wert (Sollposition ± Toleranzwert). Auf das Toleranzfenster wird im Folgenden näher eingegangen.
Besonderheiten beim Reset einer Achse
Die Positionierung einer Achse bezieht sich immer auf deren Sollposition. Die Sollposition der Achse ist im Normalfall die Position, die mit dem letzten Fahrauftrag angefahren wurde. Durch einen Achs-Reset (MC_Reset, Zuschalten der Reglerfreigabe mit MC_Power) kann sich eine vom Anwender nicht erwartete Sollposition einstellen, da in diesem Fall die aktuelle Istposition als Sollposition übernommen wird. Der Achs-Reset setzt durch diesen Vorgang einen eventuell aufgetretenen Schleppfehler zurück. Wenn dieser Umstand nicht berücksichtigt wird, kann sich eine nachfolgende Positionierung unerwartet verhalten.
Beispiel:
Eine Achse wird auf 90° positioniert, wodurch die Sollposition der Achse anschließend exakt 90° beträgt. Ein weiterer Modulo-Fahrauftrag auf 450° in positive Richtung führt zu einer vollen Umdrehung und die Modulo-Position der Achse ist anschließend wieder exakt 90°. Wird anschließend ein Achs‑Reset durchgeführt, kann die Sollposition zufällig etwas kleiner oder etwas größer als 90° sein. Der neue Wert ist abhängig vom Istwert der Achse zum Zeitpunkt des Reset. In beiden Fällen verhält sich das nächste Fahrkommando unterschiedlich. Liegt die Sollposition leicht unter 90°, führt ein neues Fahrkommando auf 90° in positive Richtung nur zu einer minimalen Bewegung. Die durch den Reset entstandene Abweichung wird ausgeglichen und die Sollposition ist anschließend wieder exakt 90°. Liegt aber die Sollposition nach dem Achs-Reset leicht über 90°, führt dasselbe Fahrkommando zu einer vollen Umdrehung, um wieder die exakte Sollposition von 90° zu erreichen. Diese Problematik tritt auf, wenn volle Umdrehungen um 360° oder ein Vielfaches von 360° beauftragt werden. Bei Positionierungen auf einen von der aktuellen Modulo-Position entfernten Winkel ist der Fahrauftrag eindeutig.
Um das Problem zu lösen, kann ein Modulo-Toleranzfenster im TwinCAT System Manager parametriert werden. Kleine Abweichungen der Position, die innerhalb des Fensters liegen, führen damit nicht mehr zu einem unterschiedlichen Verhalten der Achse. Wird beispielsweise ein Fenster von 1° parametriert, so verhält sich die Achse im oben beschriebenen Fall gleich, solange die Sollposition zwischen 89° und 91° liegt. Wenn jetzt die Sollposition weniger als 1° über 90° liegt, wird die Achse bei einem Modulo-Start in positive Richtung zurückpositioniert. Bei einer Zielposition von 90° wird also in beiden Fällen eine Minimalbewegung auf exakt 90° ausgeführt und bei einer Zielposition von 450° wird in beiden Fällen eine ganze Umdrehung gefahren.
Wirkung des Modulo-Toleranzfensters: Modulo-Zielposition 90° in positive Richtung

Das Modulo-Toleranzfenster kann also innerhalb des Fensters zu Bewegungen gegen die beauftragte Richtung führen. Bei einem kleinen Fenster ist das normalerweise unproblematisch, weil auch Regelabweichungen zwischen Soll- und Istposition in beide Richtungen ausgeglichen werden. Das Toleranzfenster lässt sich also auch bei Achsen verwenden, die konstruktionsbedingt nur in einer Richtung verfahren werden dürfen.
Modulo-Positionierung um weniger als eine Umdrehung
Die Modulo-Positionierung von einer Ausgangsposition auf eine nicht identische Zielposition ist eindeutig und birgt keine Besonderheiten. Eine Modulo-Zielposition im Bereich [0 ≤ Position < 360] führt in weniger als einer ganzen Umdrehung zum gewünschten Ziel. Ist die Zielposition mit der Ausgangsposition identisch, so wird keine Bewegung ausgeführt. Bei Zielpositionen ab 360 Grad aufwärts werden ein oder mehr vollständige Umdrehungen ausgeführt, bevor die Achse auf die gewünschte Zielposition fährt.
Für eine Bewegung von 270° auf 0° darf demnach nicht 360°, sondern muss 0° als Modulo-Zielposition angegeben werden, da 360° außerhalb des Grundbereiches liegt und zu einer zusätzlichen Umdrehung führen würde.
Die Modulo-Positionierung unterscheidet drei Richtungsvorgaben, positive Richtung, negative Richtung und auf kürzestem Weg (MC_Direction). Bei der Positionierung auf kürzestem Weg sind Zielpositionen ab 360° nicht sinnvoll, da das Ziel immer direkt angefahren wird. Im Gegensatz zur positiven oder negativen Richtung können also nicht mehrere Umdrehungen ausgeführt werden, bevor das Ziel angefahren wird.
![]() | Bei Modulo-Positionierungen mit dem Starttyp „auf kürzestem Weg“ sind nur Modulo-Zielpositionen in der Grundperiode (z. B. kleiner als 360°) erlaubt, anderenfalls wird ein Fehler zurückgegeben. |
Die folgende Tabelle zeigt einige Positionierungsbeispiele:
Richtung | Absolute Anfangsposition | Modulo-Zielposition | Relativer Verfahrweg | Absolute Endposition | Modulo-Endposition |
---|---|---|---|---|---|
Positive Richtung | 90,00 | 0,00 | 270,00 | 360,00 | 0,00 |
Positive Richtung | 90,00 | 360,00 | 630,00 | 720,00 | 0,00 |
Positive Richtung | 90,00 | 720,00 | 990,00 | 1080,00 | 0,00 |
| |||||
Negative Richtung | 90,00 | 0,00 | -90,00 | 0,00 | 0,00 |
Negative Richtung | 90,00 | 360,00 | -450,00 | -360,00 | 0,00 |
Negative Richtung | 90,00 | 720,00 | -810,00 | -720,00 | 0,00 |
| |||||
Auf kürzestem Weg | 90,00 | 0,00 | -90,00 | 0,00 | 0,00 |
Modulo-Positionierung um ganze Umdrehungen
Modulo-Positionierungen um ein oder mehrere ganze Umdrehungen verhalten sich grundsätzlich nicht anders als Positionierungen auf von der Ausgangsposition entfernt liegende Winkel. Wenn die beauftragte Zielposition gleich der Ausgangsposition ist, wird keine Bewegung ausgeführt. Für eine ganze Umdrehung muss zur Ausgangsposition 360° addiert werden.
Das weiter oben beschriebene Reset-Verhalten zeigt, dass Positionierungen mit ganzzahligen Umdrehungen besonders beachtet werden müssen. Die nachfolgende Tabelle zeigt Positionierbeispiele für eine Ausgangsposition von ungefähr 90°. Das Modulo-Toleranzfenster (TF) ist hier auf 1° eingestellt. Besondere Fälle, in denen die Ausgangsposition außerhalb dieses Fensters liegt, sind gekennzeichnet.
Richtung | Absolute Anfangsposition | Modulo-Zielposition | Relativer Verfahrweg | Absolute Endposition | Modulo-Endposition | Anmerkung |
---|---|---|---|---|---|---|
Positive Richtung | 90,00 | 90,00 | 0,00 | 90,00 | 90,00 |
|
Positive Richtung | 90,90 | 90,00 | -0,90 | 90,00 | 90,00 |
|
Positive Richtung | 91,10 | 90,00 | 358,90 | 450,00 | 90,00 | außerhalb TF |
Positive Richtung | 89,10 | 90,00 | 0,90 | 90,00 | 90,00 |
|
Positive Richtung | 88,90 | 90,00 | 1,10 | 90,00 | 90,00 | außerhalb TF |
| ||||||
Positive Richtung | 90,00 | 450,00 | 360,00 | 450,00 | 90,00 |
|
Positive Richtung | 90,90 | 450,00 | 359,10 | 450,00 | 90,00 |
|
Positive Richtung | 91,10 | 450,00 | 718,90 | 810,00 | 90,00 | außerhalb TF |
Positive Richtung | 89,10 | 450,00 | 360,90 | 450,00 | 90,00 |
|
Positive Richtung | 88,90 | 450,00 | 361,10 | 450,00 | 90,00 | außerhalb TF |
| ||||||
Positive Richtung | 90,00 | 810,00 | 720,00 | 810,00 | 90,00 |
|
Positive Richtung | 90,90 | 810,00 | 719,10 | 810,00 | 90,00 |
|
Positive Richtung | 91,10 | 810,00 | 1078,90 | 1170,00 | 90,00 | außerhalb TF |
Positive Richtung | 89,10 | 810,00 | 720,90 | 810,00 | 90,00 |
|
Positive Richtung | 88,90 | 810,00 | 721,10 | 810,00 | 90,00 | außerhalb TF |
| ||||||
Negative Richtung | 90,00 | 90,00 | 0,00 | 90,00 | 90,00 |
|
Negative Richtung | 90,90 | 90,00 | -0,90 | 90,00 | 90,00 |
|
Negative Richtung | 91,10 | 90,00 | -1,10 | 90,00 | 90,00 | außerhalb TF |
Negative Richtung | 89,10 | 90,00 | 0,90 | 90,00 | 90,00 |
|
Negative Richtung | 88,90 | 90,00 | -358,90 | -270,00 | 90,00 | außerhalb TF |
| ||||||
Negative Richtung | 90,00 | 450,00 | -360,00 | -270,00 | 90,00 |
|
Negative Richtung | 90,90 | 450,00 | -360,90 | -270,00 | 90,00 |
|
Negative Richtung | 91,10 | 450,00 | -361,10 | -270,00 | 90,00 | außerhalb TF |
Negative Richtung | 89,10 | 450,00 | -359,10 | -270,00 | 90,00 |
|
Negative Richtung | 88,90 | 450,00 | -718,90 | -630,00 | 90,00 | außerhalb TF |
| ||||||
Negative Richtung | 90,00 | 810,00 | -720,00 | -630,00 | 90,00 |
|
Negative Richtung | 90,90 | 810,00 | -720,90 | -630,00 | 90,00 |
|
Negative Richtung | 91,10 | 810,00 | -721,10 | -630,00 | 90,00 | außerhalb TF |
Negative Richtung | 89,10 | 810,00 | -719,10 | -630,00 | 90,00 |
|
Negative Richtung | 88,90 | 810,00 | -1078,90 | -990,00 | 90,00 | außerhalb TF |
Modulo-Berechnungen im SPS-Programm
Alle Positionieraufträge an eine Achse werden in TwinCAT NC auf der Basis der Sollposition durchgeführt. Die aktuelle Istposition wird nur zur Regelung herangezogen. Wenn in einem SPS‑Programm eine neue Zielposition ausgehend von der aktuellen Position berechnet werden soll, muss diese Berechnung mit der aktuellen Sollposition der Achse durchgeführt werden (Axis.NcToPlc.ModuloSetPos und Axis.NcToPlc.ModuloSetTurns).
Es ist nicht zu empfehlen, Auftragsberechnungen auf Basis der Modulo-Istposition durchzuführen, die im zyklischen Achsinterface (ModuloActPos und ModuloActTurns) zur Verfügung steht. Wegen der mehr oder weniger großen Regelabweichung der Achse könnten sich Fehler im programmierten Ablauf, wie z. B. unerwünschte Umdrehungen, ergeben.
Anwendungsbeispiel
In einer Anlage führt eine Rotationsachse einen Arbeitsschritt aus. Die Ausgangsposition für jeden Arbeitsschritt ist 90° und mit jedem Takt soll die Achse um 360° in positive Richtung positioniert werden. Eine Rückwärtspositionierung ist aus mechanischen Gründen nicht erlaubt. Kleine Rückwärtspositionierungen im Rahmen der Lageregelung sind zulässig.
Das Modulo-Toleranzfenster wird im System Manager auf 1,5° eingestellt. Damit werden unerwünschte Umdrehungen der Achse nach einem Achs-Reset vermieden. Da die Achse nur vorpositioniert werden darf, wird das Bewegungskommando MC_MoveModulo mit dem Modulo‑Starttyp „positive Richtung“ (MC_Positive_Direction) verwendet. Die Modulo-Zielposition wird mit 450° angegeben, da die Ausgangsorientierung nach einer vollen Umdrehung um 360° wieder erreicht werden soll. Eine Modulo-Zielposition von 90° würde hier keine Bewegung ausführen.
Der Ablauf startet zunächst mit einer Grundpositionierung (MC_MoveModulo), mit der die exakte Ausgangsposition sichergestellt wird. Anschließend wechselt die Schrittkette in einen Bearbeitungszyklus. Im Fehlerfall wird die Achse mit MC_Reset zurückgesetzt und anschließend, am Anfang der Schrittkette, auf ihre gültige Ausgangsposition gefahren. In diesem Fall wird 90° als Zielposition angegeben, damit diese Position schnellst möglich angefahren wird. Steht die Achse bereits an der Ausgangsposition, so wird keine Bewegung ausgeführt.
Der Reset-Schritt kann alternativ auch am Anfang der Schrittkette ausgeführt werden, um die Achse auch zu Beginn des Ablaufs zu initialisieren.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.0.0 | PC oder CX (x86 oder x64) | Tc2_MC2 |