# Modulo in Endlosposition rechnen



## TP-Inc (11 Dezember 2021)

Hi, ab und zu gibt es Anwendungen bei denen ich die Modulo-Position eines Drehantriebs, aber auch die „Endlos“-Position brauche. Wie zählt man vernünftig Umdrehungen mit? Übergang von 360 auf 0 erkennen erscheint mir nicht so elegant und sicher… Braucht ihr das auch ab und zu? 
Das sollte Telegramm und Antriebsunabhängig funktionieren.


----------



## de vliegende hollander (11 Dezember 2021)

Wir erfassen Drehzahl über das technologiemodul TM Count.
Sensorik von z.b. Braun oder Emerson
Auf die Welle wo wir Drehzahl messen ist aber ein ganz einfaches Polrad.

Das Impulssignal wird aber erst erfasst im Überdrehzahlschutz und dann als impuls an die SPS weitergegeben


----------



## TP-Inc (11 Dezember 2021)

Hi, das wär mit Kanonen auf Spatzen geschossen. Soll schon über die zyklische PN Verbindung zum Servo gehen.


----------



## Heinileini (11 Dezember 2021)

TP-Inc schrieb:


> Übergang von 360 auf 0 erkennen erscheint mir nicht so elegant und sicher…


Nicht sicher, weil evtl. die exakten Werte 359 und 0 "überlesen" werden?
Z.B. Wechsel von > 270 nach < 90 (vorwärts) bzw. Wechsel von < 90 nach > 270 (rückwärts) sollten gut dekodierbar sein.


```
bA := iWinkel < 90 ;
bB := iWinkel > 270 ;
IF bA AND bsB_zuvor THEN
    iZähl := iZähl + 1 ;
ELSIF bB AND bsA_zuvor THEN
    iZähl := iZähl - 1 ;
END_IF ;
bsA_zuvor := bA ;
bsB_zuvor := bB ;
```


----------



## Mirko123 (11 Dezember 2021)

... je nach Drehzahl, Abtastzeit nochmal plausibilisieren. 
Z.B. 3000rpm - würde ich maximal  alle 10ms abtasten da eine Umdrehung 20ms dauern würde.
Falls Drehzahlistwert auch bekannt ist, dann könnte man Heinileini`s Code entsprechend erweitern.


----------



## Heinileini (11 Dezember 2021)

Mirko123 schrieb:


> Falls Drehzahlistwert auch bekannt ist, dann könnte man Heinileini`s Code entsprechend erweitern.


Leider kann auch eine Erweiterung meines CodeBeispiels verlorengegangene Informationen nicht verlässlich rekonstruieren ...
Da wäre mir zu viel Plausibilität im Spiel.

PS: 
Statt - wie in meinem Beispiel - 1 zu addieren/subtrahieren, könnte man direkt 360 addieren/subtrahieren, da ergibt die Summe aus Winkel und Zähl direkt die "neue" Position in °. Für Zähl dann aber tunlichst den DatenTyp DINT wählen und prüfen, ob dies ausreicht.


----------



## TP-Inc (11 Dezember 2021)

Sieht eigentlich total simpel aus. Dankeschön 😀 muss ich mal austesten beim nächsten Drehantrieb der mir unterkommt.


----------



## maxder2te (11 Dezember 2021)

TP-Inc schrieb:


> Hi, ab und zu gibt es Anwendungen bei denen ich die Modulo-Position eines Drehantriebs, aber auch die „Endlos“-Position brauche. Wie zählt man vernünftig Umdrehungen mit? Übergang von 360 auf 0 erkennen erscheint mir nicht so elegant und sicher… Braucht ihr das auch ab und zu?
> Das sollte Telegramm und Antriebsunabhängig funktionieren.


Das selber mitzählen ist eine Variante, bei vielen Antrieben geht das aber auch einfacher. 
Wenn du das machst rate ich dir aber, den Überlaufzähler öbb einen eigenen Speicherbeteich zu legen der nie neu initialisiert wird (eigener DB mit fixer Nummer bei S7, Permanentspeicher bei B&R,...) 

Sew Movidrive B:
Wenn du die Modulopositionierung nutzt wird die Modulo Position als 0-3600 oder 0-65535 zur Steuerung geladen. In der IPOS-Variable H511 ist aber weiterhin die Geberrohposition als i32 mit Überlaufzähler verfügbar. Die kann man mittels IPOS oder anderer Wege zur Steuerung laden und muss dann nur von Inkrementen auf weg umrechnen. 

Profidrive (simatic To) 
Die Moduloumrechnung wird von der Steuerung durchgeführt. Im Profidrive - Telegramm von Antrieb selbst kommt die Geberrohposition ebenfalls als i32 herauf, somit du den gesamten Absolutbereich des Gebers zur Verfügung hast. 

Bei Inkrementalgebern stellte ich mir die Frage nach der Sinnhaftigkeit.


----------



## Heinileini (11 Dezember 2021)

Hab's mal etwas ausführlicher geschrieben (ungetestet!):

```
VAR_INPUT
    iiWinkel  : INT  ; // Winkel 0..359
END_VAR

VAR_IN_OUT
    iodZähl   : DINT ; // Position := 360 * Umdrehung + Winkel
END_VAR

VAR_STATIC // (optional IN_OUT)
    sbA_zuvor : BOOL ; // vorheriger Winkel <  90°
    sbB_zuvor : BOOL ; // vorheriger Winkel > 270°
END_VAR

VAR_TEMP
    tbA       : BOOL ; // aktueller Winkel <  90°
    tbB       : BOOL ; // aktueller Winkel > 270°
    tdWinkel  : DINT ; // Winkel 0..359
    tdZähl    : DINT ; // HilfsVariable, um in '360 * Umdrehung + Winkel' den "alten" Winkel durch den "neuen" zu ersetzen
END_VAR

tdWinkel  := INT_TO_DINT(iiWinkel) ;
tdZähl    := iodZähl / 360 ;  // zweizeilig, damit Compiler nicht / 360 * 360 "wegrationalisiert" ...
tdZähl    := tdZähl * 360 + tdWinkel ; // ... ersetzt den vorherigen Winkel durch den aktuellen
tbA       := tdWinkel <  90 ; // aktueller Winkel im Bereich 0..89
tbB       := tdWinkel > 270 ; // aktueller Winkel im Bereich 271..359
IF tbA AND sbB_zuvor THEN     // wenn Winkel 271..359 --> Winkel 0..89, dann ...
    iodZähl := tdZähl + 360 ; // ... Anzahl Umdrehungen korrigieren (inkrementieren)
ELSIF tbB AND sbA_zuvor THEN  // wenn Winkel 0..89 --> Winkel 271..359, dann ...
    iodZähl := tdZähl - 360 ; // ... Anzahl Umdrehungen korrigieren (dekrementieren)
ELSE
    iodZähl := tdZähl ;    
END_IF ;
sbA_zuvor   := tbA ; // für Auswertung im nächsten Zyklus
sbB_zuvor   := tbB ; // für Auswertung im nächsten Zyklus
```



maxder2te schrieb:


> Bei Inkrementalgebern stellte ich mir die Frage nach der Sinnhaftigkeit.


Geht mir auch so.
Wenn beides (mit und "mit ohne" Modulo) benötigt wird (warum auch immer), warum dann nicht den Wert ohne Modulo als "Leitwert" nehmen und daraus jeweils den ModuloWert berechnen?


----------



## maxder2te (11 Dezember 2021)

Heinileini schrieb:


> Wenn beides (mit und "mit ohne" Modulo) benötigt wird (warum auch immer), warum dann nicht den Wert ohne Modulo als "Leitwert" nehmen und daraus jeweils den ModuloWert berechnen?


Sobald ein bisschen Getriebe und Vorgelegte im Spiel sind, dürften die meisten Leute mit der dahinterliegenden notwendigen Ganzzahlarithmetik im 2er-System überfordert sein und sich noch nie darüber Gedanken gemacht haben was beim Überlauf passiert, oder sich vielleicht wundern warum bei ihrer Methode der Modulo-Wert Weg driftet....


----------



## Heinileini (11 Dezember 2021)

maxder2te schrieb:


> ... oder sich vielleicht wundern warum bei ihrer Methode der Modulo-Wert Weg driftet....


Ein driftender ModuloWert? Du meinst, wenn sich zwischen MessSystem und ModuloAchse ein Getriebe befindet und man auf die geniale Idee kommt, das Über- oder Unter-SetzungsVerhältnis auszurechnen und für die weitere Verwendung als (L)REAL-Zahl abzuspeichern?
Das kannte ich bisher nur von LinearAchsen. Aber, Du hast Recht, das kann man eigentlich auch bei ModuloAchsen schaffen.


----------



## TP-Inc (12 Dezember 2021)

Danke nochmal für die ausführlichen Antworten. Es geht bei mir nicht um besonders hohe Werte oder Genauigkeiten. Als Beispiel hätte ich zB eine Station die mit dem Drehteller eine bestimmte Position anfahren soll, damit sie beladen werden kann. Danach passiert eine Bearbeitung die oft auf volle Umdrehungen passieren soll. Zum anfahren der Einlegeposition ist Modulo praktisch, da man sich das zurückdrehen bzw. das Rechnen spart. Beim Fahren auf volle Umdrehungen wäre Endlos wieder praktischer, da man sich die hier gefragte Rechnerei spart. Ich weiß, bei manchen Antrieben kann man das zur Laufzeit umschalten, bei manchen kriegt man beide Positionen übers Telegramm. Ich denke die erste Lösung von Heinileini ist für mich erstmal ausreichend.


----------



## maxder2te (12 Dezember 2021)

Heinileini schrieb:


> Ein driftender ModuloWert? Du meinst, wenn sich zwischen MessSystem und ModuloAchse ein Getriebe befindet und man auf die geniale Idee kommt, das Über- oder Unter-SetzungsVerhältnis auszurechnen und für die weitere Verwendung als (L)REAL-Zahl abzuspeichern?
> Das kannte ich bisher nur von LinearAchsen. Aber, Du hast Recht, das kann man eigentlich auch bei ModuloAchsen schaffen.


Der Klassiker ist eher, dass man auf 360,00 positioniert und dann eine Geberjustage auf 0 durchführt, und das wiederkehrend.
Je nach Anwendung, Positioniergüte und Taktzeit kann das schon mal einige Wochen gut gehen 😂

An der Genauigkeit der REAL-Arithmetik bin ich bei linearen Achsen bis dato noch nie gescheitert, aber ich habe schon oft erlebt, dass Kollegen mit den auf 2 Nachkommastellen gerundeten Getriebe Übersetzungen gearbeitet haben, oder noch besser: die vom Hersteller mit 0 Nachkommastellen angegebenen Abtriebsdrehzahlen für ihre Rechnungen verwendet haben und sich dann wundern, wenn sie im einstelligen Prozent erreicht daneben sind.


----------



## rostiger Nagel (12 Dezember 2021)

maxder2te schrieb:


> Der Klassiker ist eher, dass man auf 360,00 positioniert und dann eine Geberjustage auf 0 durchführt, und das wiederkehrend.
> Je nach Anwendung, Positioniergüte und Taktzeit kann das schon mal einige Wochen gut gehen 😂
> 
> An der Genauigkeit der REAL-Arithmetik bin ich bei linearen Achsen bis dato noch nie gescheitert, aber ich habe schon oft erlebt, dass Kollegen mit den auf 2 Nachkommastellen gerundeten Getriebe Übersetzungen gearbeitet haben, oder noch besser: die vom Hersteller mit 0 Nachkommastellen angegebenen Abtriebsdrehzahlen für ihre Rechnungen verwendet haben und sich dann wundern, wenn sie im einstelligen Prozent erreicht daneben sind.


Deshalb sollte man bei Rundachsen immer beim Antriebshersteller
immer das Zähler / Nennerverhältnis des Getriebe angeben lassen.


----------



## Heinileini (12 Dezember 2021)

rostiger Nagel schrieb:


> Deshalb sollte man bei Rundachsen immer beim Antriebshersteller
> immer das Zähler / Nennerverhältnis des Getriebe angeben lassen.


 Wie meinst Du das, Helmut? Das (ausgerechnete) Verhältnis oder die separate Angabe von Zähler und Nenner?
Ich plädiere eindeutig für letzteres.


----------



## rostiger Nagel (12 Dezember 2021)

Das entspricht den wirklichen Übersetzungsverhältnis des Getriebes,
wir setzen zb SEW ein, ich frage das immer an, auf Anraten von SEW. 
Was ich nicht verstehe, warum Sie es nicht gleich auf das Typenschild
drucken.


----------



## Heinileini (12 Dezember 2021)

rostiger Nagel schrieb:


> ..., ich frage das immer an, auf Anraten von SEW.
> Was ich nicht verstehe, warum Sie es nicht gleich auf das Typenschild
> drucken.


Donnerwetter! Auf Anraten von SEW. Also bei SEW Problem zumindest erkannt, aber nicht gebannt.
Tja, ein GetriebeMotor besteht aus Getriebe und aus Motor. Zwei verschiedene Abteilungen und zwei verschiedene Zuständigkeiten.
Und je 1 TypenSchild für Getriebe und für Motor wäre wohl Luxus ... das verhindert dann die dritte (die Rotstift-) Abteilung!?

Die denken bestimmt, Du hast doch den GetriebeMotor ausgewählt und bestellt und Du weisst nicht mehr, was Du bestellt hast???


----------



## Uwe Schumann (13 Dezember 2021)

Wenn der Motor einen Geber mit elektronischem Typenschild besitzt (Hiperface-Geber), dann steht die exakte Übersetzung in diesem Typenschild unter "Getriebeübesetzung Zähler" und "Getriebeübersetzung Nenner".


----------



## rostiger Nagel (13 Dezember 2021)

Heinileini schrieb:


> Donnerwetter! Auf Anraten von SEW. Also bei SEW Problem zumindest erkannt, aber nicht gebannt.
> Tja, ein GetriebeMotor besteht aus Getriebe und aus Motor. Zwei verschiedene Abteilungen und zwei verschiedene Zuständigkeiten.
> Und je 1 TypenSchild für Getriebe und für Motor wäre wohl Luxus ... das verhindert dann die dritte (die Rotstift-) Abteilung!?
> 
> Die denken bestimmt, Du hast doch den GetriebeMotor ausgewählt und bestellt und Du weisst nicht mehr, was Du bestellt hast???


nein ein Typenschild ist bei SEW immer vorhanden, sogar zwei
eins am Motor und ein zweites das der Maschinenbauer dann
noch einmal extra anbringen kann, damit man es lesen kann wenn
der Motor verbaut ist.
Das einzige ist das da eine berechnete Getriebe übersetzung
eingestanzt ist, diese ist nicht Genau genug für eine Modulo
Positionierung.
Es gibt aber für die Getriebe aber immer ein Zähler - Nennerverhältnis
das sich aus den "Ritzeln" ergibt. Diese kann man sogar in der Parametrier
Software eingeben, leider muss man sich das immer explizit bei SEW
anfragen. Besser währe es wenn es gleich auf den Typenschild stehen
würede.


----------



## rostiger Nagel (13 Dezember 2021)

Uwe Schumann schrieb:


> Wenn der Motor einen Geber mit elektronischem Typenschild besitzt (Hiperface-Geber), dann steht die exakte Übersetzung in diesem Typenschild unter "Getriebeübesetzung Zähler" und "Getriebeübersetzung Nenner".


Da muß ich mal nachschauen.


----------



## maxder2te (13 Dezember 2021)

Kauft man einen Getriebemotor mit Hiperface-Geber, dann stehen Zähler/Nenner im elektronischen Typenschild.
Edit: die Antwort gabs schon, sorry, überlesen.

Es gibt von SEW auch PDFs, wo die gesamte Getriebepalette verzeichnet ist. Da muss man halt lästig sein dass man die bekommt.
Ich habe im Sondermaschinenbau scho Getriebehersteller erlebt, wo es Wochen dauert bis man die Infos bekommt, weil die keine Sammelinfos dazu haben, sondern sich das aus Zeichnungen und Stücklisten erst selbst herausklamösern müssen.


----------



## Uwe Schumann (13 Dezember 2021)

maxder2te schrieb:


> Kauft man einen Getriebemotor mit Hiperface-Geber, dann stehen Zähler/Nenner im elektronischen Typenschild.
> Edit: die Antwort gabs schon, sorry, überlesen.
> 
> Es gibt von SEW auch PDFs, wo die gesamte Getriebepalette verzeichnet ist. Da muss man halt lästig sein dass man die bekommt.
> Ich habe im Sondermaschinenbau scho Getriebehersteller erlebt, wo es Wochen dauert bis man die Infos bekommt, weil die keine Sammelinfos dazu haben, sondern sich das aus Zeichnungen und Stücklisten erst selbst herausklamösern müssen.


...oder einfach beim SEW-Service oder dem zuständigen Vertrieb anrufen, die geben gerne Auskunft, ohne lange Wartezeiten ;-)


----------



## TP-Inc (13 Dezember 2021)

Kommen euch so oft Getriebe unter, deren Übersetzung keine natürliche Zahl ist? Wir kaufen viel bei Neugart. Die haben immer ganze Zahlen als Übersetzung.


----------



## Heinileini (13 Dezember 2021)

TP-Inc schrieb:


> Kommen euch so oft Getriebe unter, deren Übersetzung keine natürliche Zahl ist? Wir kaufen viel bei Neugart. Die haben immer ganze Zahlen als Übersetzung.


In Hinblick auf eine möglichst gleichmässige Abnutzung der Zähne, wurden bevorzugt teilerfremde ZähneAnzahlen gewählt, möglichst PrimZahlen.
Ob diese "Kunst" noch zeitgemäss ist ... keine Ahnung. Wahrscheinlich überwiegt mittlerweile das Interesse daran, möglichst ganzzahlige Über-/UnterSetzungsVerhältnisse zu wählen (aus den Gründen, die hier im Thread bereits angesprochen wurden. Und, weil das, was nach dem Komma steht, als DezimalZahl vielleicht sehr "übersichtlich" aussieht, aber als BinärZahl dargestellt, KopfGrimmen bereiten kann).


----------



## zako (14 Dezember 2021)

... bzgl elektronischen Typenschild: Beim SIEMENS- Getriebemotor ist auch das Zähler-/Nennerverhältnis im elektronsichen Typenschild hinterlegt (angezeigt wird es dann in p544 und p545). Diese elektronischen Typenschilder haben insbesondere bei Getriebemotoren Vorteile, z.B. wird dann auch gleich das Getriebemaximaldrehzahl, -drehmoment ggf. noch Maximaldrehzahl für die Bremse usw. usw. hinterlegt. Beim SINAMICS ist es dann so, dass diese Daten gleich bei dynamischen Lastanforderung berücksichtigt werden. 
Manche Inbetriebnehmer schauen was aus der Maschine so raus zu holen ist, ohne den gesamten Antriebsstrang in Blick zu haben. Da ist es ganz gut, wenn das wenigstens der Antrieb für einen mitdenkt


----------

