FC_DrvEncSetPosition - Allgemeine Informationen
Typ |
Funktion |
Verfügbar ab |
SystemInterface_1.32.6.0 |
Verwendet von: |
oPDL_FB_SetDriveEncoder |
Versionen: |
Aktuelle Version |
Absolute Geberposition dauerhaft ändern.
Durch diese Funktion wird die Geberposition auf einen vorgegebenen absoluten Positionswert gesetzt. Das Koordinatensystem des Gebers wird verschoben. Hierzu ist ein Schreibvorgang in den nicht flüchtigen Speicher des Gebers erforderlich. Für den Schreibzugriff werden einige Millisekunden benötigt. Mit der Funktion FC_DrvEncPositionGetState() kann festgestellt werden, ob der Schreibvorgang abgeschlossen ist.
Je nach Objektparameter EncoderMode (falls verfügbar) wird die neue Position auf den Motorgeber (EncoderMode = "Verwenden Sie nur den Motorgeber") oder den Maschinengeber (EncoderMode = "Der Maschinengeber wird nur für die Positionssteuerung verwendet.") gesetzt.
Die Position i_lrPosition muss bestimmte Kriterien erfüllen. Es wird zwischen Singleturn- und Multiturngebern unterschieden. Die Singleturngeber erkennen eine Auflösung innerhalb einer Umdrehung. Multiturngeber erweitern die Positionsgrenzen und besitzen einen ansprechbaren Bereich zwischen 0 und 4096 Umdrehungen. Innerhalb dieser definierten Grenzen (absoluter Verfahrbereich des Gebers) kann die Position gesetzt werden.
Nachden ein Antrieb mit Spannung versorgt oder zurückgesetzt wurde, wird der absolute Wert des SinCos-Gebers gelesen. Dieser Wert bildet die Istposition. Wird der Positionsbereich unter- oder überschritten, tritt für den Absolutwert des Gebers ein Positionssprung bis zum entsprechenden Bereich auf (1 Umdrehung oder 4096 Umdrehungen). Dieser Positionssprung tritt im Objektparameter MechPosition nicht auf, wenn der Antrieb bewegt wird, da der absolute Geberwert erst nach dem Einschalten oder Zurücksetzen ausgewertet wird. Danach wird der Antrieb inkrementell verfahren.
In Bezug auf virtuelle Achsen hat diese Funktion keine Auswirkungen.
Ab Version V1.50.1.x dauert der Aufruf der Funktion länger, da nun das vollständige Schreiben des neuen Werts für die Geberposition ins Motortypenschild abgewartet wird. Beim Lesen des Status mit der Funktion FC_DrvEncPositionGetState tritt deshalb der Wert 1 (= Motortypenschild wird gerade programmiert) nicht mehr auf. Der Rückgabewert gibt aber nach wie vor an, ob die Programmierung erfolgreich war.
Die Laufzeit der Funktion kann mehrere hundert Millisekunden betragen.
Eingang |
Datentyp |
Beschreibung |
---|---|---|
i_stAxisID |
ST_LogicalAddress |
Logische Adresse des Antriebs |
i_lrPosition |
LREAL |
Geberposition |
Datentyp |
Beschreibung |
---|---|
DINT |
0: Fehlerfreier Betrieb. -1: i_stAxisID falsch. -2: Ungültige Position. -3: Achse ist virtuell. -4: Achse ist deaktiviert. |
Setzen Sie die Geberposition auf 360 Einheiten.
FeedConstant = 360 Einheiten/Umdrehung
EncoderType = 16#22; d. h. SinCos-Singleturn
Die Ergebnisse in einer EncoderPosition von 0 ... 360 Einheiten.
EncoderPosition 360 entspricht EncoderPosition von 0. Die Auflösung des Gebers ist 219 Stufen pro Umdrehung. Dies führt zu einer maximalen EncoderPosition von:
FeedConstant * (Anzahl der Umdrehungen – 2-19)
Anzahl der Umdrehungen:
oSingleturn = 1
oMultiturn = 4096
Gehen Sie in diesem Fall wie folgt vor:
360 Einheiten/Umdrehung * (1 Umdrehung - 2-19 Umdrehungen) = 359.9993134 Einheiten.
FC_DrvEncSetPosition(i_stAxisID:=Axis.LogAdr, i_lrPosition:=0);