# T-CPU mit MC_MoveAbsolute Modulo-Achse um Modulolänge verfahren



## Sarek (15 März 2013)

Wie kann man mit einer T-CPU eine Modulo-Achse um genau eine Modulolänge VW oder RW positioninieren?

Beispiel:
Rundachse mit 360°

Achse steht auf 0° => Positionieren um eine Umdrehung vorwärts auf 360°
Wenn man diesen Befehl mit MC_MoveAbsolute ausführt, bewegt sich die Achse gar nicht da sie
ja schon auf Position steht.

Wenn man dies mit MC_MoveRelative realisieren würde, dann müßte die Achse langsam "weglaufen",
da die Istposition ja um z.B. 0,001° Schwanken kann.

Bisher habe ich dies mit 2 Fahrbefehlen gelöst.
1. Befehl: MC_MoveAbsolute auf z.B. 355° VW
sobald Achse los gelaufen ist: BUSY = 1, EXECUTE weg nehmen 
2. Befehl: MC_MoveAbsolute auf 360° VW mit MODE=0

Funktioniert zwar, aber da muß es doch noch ne andere einfachere Lösung geben.


----------



## zako (15 März 2013)

Hallo,

bist Du Dir sicher, dass die T-CPU bei einer Relativpositionierung auf dem Lageistwert aufsetzt? Eigentlich würde ich erwarten, dass mit dem Lagesollwert geschaut wird und dann losgefahren wird (so wie es der "große Bruder" SIMOTION auch tut).
Beim Positionieren über EPos (SINAMICS S120) hast Du die Wahl (Verfahrsätze setzen auf Lagesollwert auf, MDI auf Lageistwert).

Grüße
  Zako


----------



## Sarek (15 März 2013)

Nein, sicher bin ich mir nicht.
In der Hilfe kann man folgendes lesen:


```
Die Technologiefunktion "MC_MoveRelative" startet an einer Achse eine Positionierbewegung zu einer Position relativ zur Startposition. 
Befindet sich die Achse beim Auftragsstart bereits in Bewegung und wurde mit Mode = 0 eine "ablösende Bewegung" gewählt,
 so wird die Startposition verwendet, die systemintern bei Beginn der Auftragsbearbeitung vorliegt. 
Dabei ist zu berücksichtigen, dass zwischen der Bearbeitung der Technologiefunktion und der Ausführung des Auftrags eine Reaktionszeit liegt,
 die abhängig von der Auslastung und der Zykluszeit ist.
```

"relativ zur Startposition" = Istposition beim Start ?????


----------



## miami (15 März 2013)

Ohne nachgesehen zu haben denke ich eine Move_Relative mit -360° wird eine Umdrehung in neg Richtung und mit 360 in pos. Richtung macht.

Alternativ könntest Du vermutlich auch zwei Move_Relative (z.B. 240 und 120°) verwenden und den 2. mit Mode=2 aufrufen und so beide verschleifen.

Übrigens werden Fahrbefehle mit steigender Flanke an EXECUTE ausgelöst, danach entscheidet der Pegel nur noch darüber wie lange DONE, ERROR oder COMMANDABORDED angezeigt werden. Was Du mit dem Wegnehmen von EXECUTE erreichen willst ist mir daher unklar.


----------



## miami (15 März 2013)

Sarek schrieb:


> "relativ zur Startposition" = Istposition beim Start ?????


 Ja, bei der relativen Positionierung wird *um *den angegebenen Wert, bei der absoluten *auf *den angegebenen Wert positioniert. Desshalb muss zur relativen Positionierung die Achse nicht referenziert (neudeutsch: gehomed) sein.


----------



## Sarek (15 März 2013)

@miami
Du hast mich wohl mißverstanden.

Mir ist schon klar was absolutes und relatives Positionieren ist.

Sagen wir ich habe Sollposition 0°
Die Istposition des Antriebs ist auf 0° +/- 0,001° ("Zittern" um die Sollposition)

also könnte die Istpos beim starten des nächsten Fahrauftrags z.B. 359,999° sein

Wenn ich jetzt relativ positioniere, z.B. +360° wo ist dann die neue Sollposition ?
auf 360°=0° oder 359,999°

Wenn immer relativ zur Istposition verfahren wird dann wird der Antrieb mit der Zeit "weglaufen"


----------



## miami (15 März 2013)

Hallo Sarek, 
ja, so wie ich das sehe, kann der Antrieb "weglaufen", wenn sich die Tolleranzen aufsummieren.
Da hilft dann nur Referenzieren und, zumindest gelegendliche, absolute Positionierung.

Bei der realtiven Positionierung würde ich auch nicht von einer Sollposition sprechen.


----------



## zako (15 März 2013)

... es hängt einfach davon ab, ob die Relativpositionierung auf der Sollposition oder auf der Istposition aufsetzt.
Probier es einfach aus und mach einen Trace vom Positionssollwert - und istwert. Man kann ja mal den Lageregler- kv auf 0 setzen und nur mit Vorsteuerung fahren. Dann wird sich ein Schleppabstand im Laufe der Zeit einstellen. Dann wird man sehen, worauf der Interpolator aufsetzt - falls auf dem Sollwert sehe ich kein Problem. Ansonsten kann man ja mit Absolutpositionieren arbeiten,


----------



## crash (15 März 2013)

bei sich wiederholender relativer positionierung läuft der antrieb nicht weg.
hab sowas kürzlich erst gemacht.
ausgangsposition ist 0° und es wird immer wieder der move_relative mit verschiedenen sollwerten gestartet.
allerdings immer volle umdrehungen, also 360° oder ein vielfaches davon, was aber keine rolle spielt,
meistens so 7 bis 12 umdrehungen am stück.
die achse kommt dabei immer wieder exakt bei 0° zum stehen auch nach tausenden von umdrehungen.


----------



## Sarek (18 März 2013)

@crash & zako

Danke für Eure Antworten

die betreffende Anlage ist noch im Aufbau
sobald ich ran kann werde ich das takten mit MoveRelative ausprobieren
das Ergebnis werde ich hier posten


----------



## offliner (19 März 2013)

Alle Move Befehle setzen auf der Command Position auf, also auf der Sollposition und die ist stabil.
Es gab bei einer der ersten Versionen der T-CPU mal das "Problem", dass die Sollposition bei der Übergabe des Befehls von S7 -> Technologie falsch gerundet wurde.
Dazu gab es dann auch einen FAQ, wie man das verhindern konnte. Bei dem Problem wurde im Rahmen der Wegauflösung, z.B. 1000stel, also
Real Zahl mit 3 Nachkommastellen, bei der letzten Nachkommastelle falsch ab oder aufgerundet, d.h. man hat pro Positionierung in dem Fall ein 1000stel verloren. Klingt erstmal nicht viel, ist aber bei einer Rundachse bei 1000 Positionierungen bereits 1 Grad. Abhilfe war damals eine um ein halbes Inkrement höhere Position angeben als die Auflösung hergibt (z.B. 360,0005 Grad).
Soweit ich weiß besteht das Problem aber nicht mehr.


----------

