Konvertierung über den Funktionsblock L_CamSetPosition

Betrifft welche Produkte?
ESP-SPAC-CAM1 – Software Package Cam V1.5 (Bibliothek LenzeCamControl1V0105.lib)

Wie sieht die Reaktion aus?
Bei der Konvertierung von Positionswerten in Anwendereinheiten über den FB L_CamSetPosition in inkrementelle Positionswerte ist das Konvertierungsergebnis sporadisch um 1 Inkrement zu groß.

Wann tritt das Problem auf?
Das Problem tritt auf, wenn bei der Umrechnung von Positionswerten in Anwendereinheiten in inkrementelle Positionswerte nach folgender mathematischer Formel im Ergebnis ein Nachkommateil auftritt:

s [incr.] = s [units] * Zi / Ni * 65536 [incr./rev] / FeedConstant[units/rev]

mit Zi = Getriebeübersetzung Zähler
    Ni = Getriebeübersetzung Nenner
    FeedConstant [units/rev] = Vorschubkonstante
    s [units] = Positionswert in Anwendereinheiten
    s [incr.] = Positionswert in Inkrementen

Beispiel: Ein Positionswert von 125.0000 [s_units] soll in einen inkrementellen Positionswert konvertiert werden. Die Kurvenachse hat eine Getriebeübersetzung von Zi : Ni = 1978 : 189 und eine Vorschubkonstante von 250.0000 [s_units/rev]. Nach oben angegebener Formel ergibt sich ein inkrementeller Positionswert von 342937,058201... Bei dieser Berechnung tritt ein Nachkommateil von 0,058201... auf. Da der FB L_CamSetPosition nur ganzzahlige Ergebnisse ausgeben kann, wird als inkrementelles Rechenergebnis ein Wert von 342937 oder 342938 ausgegeben.
Dabei ist der Mittelwert über die Anzahl der Taskdurchläufe wieder der mathematisch exakte Wert wie über die oben dargestellte Formel berechnet!

Diagnosemöglichkeiten?
Das Verhalten kann bei zyklischem Aufruf des FB L_CamSetPosition über Online-Monitoring im DDS erkannt werden. Das inkrementelle Rechenergebnis schwankt sporadisch um 1 Inkrement.

Kurzfristige Maßnahmen/Empfehlungen?
Setzen Sie statt des Funktionsblocks L_CamSetPosition eine Berechnung auf Basis von Gleitpunktarithmetik ein (Hinweis: Gleitpunktarithmetik darf nur in der zyklischen Task verwendet werden). Die oben dargestellte Formel dient dabei als Grundlage für die zu programmierende Umrechnung.

Bewertung:
Die Schwankungen im Konvertierungsergebnis des FB L_CamSetPosition haben in der Regel keine Auswirkungen auf das Verhalten von Maschinen, da dieser Block meist zum Umrechnen von Zielpositionen, Offsetwerten, TP-Positionen etc. verwendet wird und die Ungenauigkeit von 1 Inkrement praktisch keine Auswirkungen hat.
Bei Mehrachsanwendungen, bei denen der FB L_CamSetPosition zum Neuberechnen von kompletten Kurvenzügen in mehreren Antrieben verwendet wird (Vorgabe von inkrementellen x-/y-Positionswerten am FB L_CamEditProfileData), kann es bei der Umrechnung des letzten Stützpunktes (xmax) bei gleichen x-Eingangswerten zu unterschiedlichen inkrementellen Rechenergebnissen kommen. Da in diesem Fall die maximale x-Länge einer Kurve in zwei Antrieben unterschiedlich lang berechnet werden kann, kommt es dann zu einer x-Drift zwischen den Antrieben. In diesem Fall darf der Konvertierungsblock L_CamSetPosition nicht eingesetzt werden.

Alternativ können Sie statt des Funktionsblocks L_CamSetPosition aus der Bibliothek LenzeCamControl1V0105.lib den Funktionsblock ConvRealInc aus dem Beitrag Dok-ID 200407240 einsetzen.
Informationen aus Service Mitteilung Nr. 10/2006, Kapitel 1.3.2.

URL zur Verlinkung dieses AKB-Artikels: https://www.lenze.com/de-de/go/akb/200601003/0/
Kontaktformular