L_MC4P_MoveSplineAbsolute

Mit diesem FB kann eine Achsgruppe im spezifizierten Koordinatensystem entlang eines Splines verfahren werden. Der vollständige Spline besteht in den einzelnen Abschnitten aus Polynomen dritter Ordnung.

Die Startposition ist die Zielposition des zuletzt beauftragten FBs oder die aktuelle Position, falls die Achsgruppe im Zustand "GroupStandby" ist.

Der Spline wird über die Vorgabe von maximal neun Stützstellen ( ascIntermediatePoint ) und einem Zielpunkt ( alrEndPoint ) definiert. Die Vorgabe des Zielpunktes ist zwingend, die Anzahl der Stützpunkte muss mindestens 1 und maximal 9 sein.

Wenn keine weiteren Bewegungskommandos anstehen, befinden sich die Achsen der Gruppe nach Erreichen der Zielposition im Zustand "GroupStandby".

  • Bereits das Verändern eines Stützpunktes hat Einfluss auf die Geometrie des gesamten Splines und nicht nur auf die Geometrie des veränderten Abschnittes.
  • Doppelte identische Punkte direkt hintereinander werden zusammengefasst.
  • Doppelte Punkte, die nicht aufeinanderfolgen, sind zulässig.
  • Die Orientierung des TCPs wird während der Bewegung zwischen Start- und Endpunkt kontinuierlich interpoliert.
  • Die maximale Geschwindigkeit und Beschleunigung wird ggf. aufgrund der größten Krümmung entlang des gesamten Splines für den gesamten Spline reduziert.
Gefahr!

Alle Bahnen müssen immer erst mit Override oder im Simulationsmodus mit virtuellen Achsen getestet werden!

Hinweis!

Kartesische Bahnbewegungen (CP) lassen sich nur durchführen, wenn alle Antriebsachsen auf die im Abschnitt " Unterstützte Kinematiken " definierten Nulllagen referenziert sind.

 

 

 

L_MC4P_MoveSplineAbsolute

 

 

 

AXES_GROUP_KIN

-

AxesGroup

AxesRef

-

AXES_GROUP_KIN

BOOL

-

xExecute

xDone

-

BOOL

ARRAY [1..9] OF STRUCT

-

ascIntermediatePoint

xBusy

-

BOOL

ARRAY [1..12] OF LREAL

-

alrEndPoint

xActive

-

BOOL

LREAL

-

lrVelocity

xCommandAborted

-

BOOL

LREAL

-

lrAcceleration

xError

-

BOOL

LREAL

-

lrDeceleration

xErrorID

-

L_IE1P_Error

LREAL

-

lrJerk

iPointPassed

-

INT

L_MC4P_CoordSystem

-

eCoordSystem

MC_BUFFER_MODE

-

eBufferMode

MC_TRANSITION_MODE

-

eTransitionMode

ARRAY [ 1..12 ] OF LREAL

-

alrTransitionParameter

ARRAY [1..6] OF
L_MC4P_AuxMode

-

aeAuxMode

L_MC4P_Orientation_Mode

-

eOrientationMode

ARRAY[4..6] OF MC_DIRECTION

-

aeDirection

 

 

 

 

 

 

 

 

Eingänge

Name

Datentyp

Info/Einstellmöglichkeiten

AxesGroup

AXES_GROUP_KIN

Achsgruppenreferenz

xExecute

BOOL

FALSE ä TRUE

Ausführung des FBs starten

ascIntermediatePoint

ARRAY [1..9] OF Struktur L_MC4P_IntermediatePointSpline

  • Definierte Zwischenpunkte des Splines (x,y,z)
  • Auswahl, ob Stützstelle berücksichtigt werden soll
  • Mindestens ein Zwischenpunkt muss aktiv sein und sich von Start- und Zielpunkt unterscheiden

alrEndPoint

ARRAY [1..12] OF LREAL

Endpunkt mit Orientierung und Hilfsachsen

lrVelocity

LREAL

Maximale Geschwindigkeit in [Units/s] für das Anfahren der Zielposition

  • In Abhängigkeit der Profilparameter Position , Acceleration , Deceleration und Jerk kann es sein, dass der Antrieb die maximale Geschwindigkeit nicht erreicht.

lrAcceleration

LREAL

Maximale Beschleunigung in [Units/s 2 ]

lrDeceleration

LREAL

Maximale Verzögerung in [Units/s 2 ]

lrJerk

LREAL

Maximaler Ruck in [Units/s 3 ]

eCoordSystem

L_MC4P_CoordSystem

Auswahl des zu verwendenen Koordinatensystems:

  • WCS: World Coordinate System
  • MCS: Machine Coordinate System
  • ACS: Axes Coordinate System
  • PCS_1 ... PCS_16: Product Coordinate System (1 ... 16)

Koordinatensysteme und Transformationen

eBufferMode

MC_BUFFER_MODE

Modus für die Abarbeitung aufeinanderfolgender Bewegungskommandos

BufferMode

eTransitionMode

MC_TRANSITION_MODE

Modus für das Bahnverhalten am Bewegungsende

TransitionMode und TransitionParameter

alrTransitionParameter

ARRAY [1..12] OF LREAL

Beschreibung des Parameters alrTransitionParameter

Parameter für "Überschleifen"
Nur relevant, wenn eTransitionMode = TMCornerDistance ausgewählt wurde.

* alrTransitionParameter[1]

  • Angabe des Verschliffradius des Startpunktes bzw. zur vorherigen Bewegung als symmetrische Distanz in [mm]
  • Wert wird verwendet, wenn TransitionParameter[1] > 0 ist

* alrTransitionParameter[2]

  • Angabe des Verschliffradius des Startpunktes bzw. zur vorherigen Bewegung relativ zur halben Bahnlänge der Bewegungen in [%]
  • Wert wird verwendet, wenn alrTransitionParameter[1] = 0 und alrTransitionParameter[2] > 0 ist

* alrTransitionParameter[3..12]

  • Reserviert für zukünftige Funktionserweiterungen

aeAuxMode

ARRAY [1..6] OF L_MC4P_AuxMode

Modus für die Hilfsachsen:

  • Inactive: Hilfsachskoordinaten werden ignoriert.
  • Continuous: Verschleifen der Hilfsachse über mehrere MC_Move-Bausteine.
  • DiscreteAbsolute: Hilfsachsposition wird am Ende jedes Bewegungssegments gesetzt (ähnlich wie Hauptachsen).
  • DiscreteRelative: Hilfsachsposition wird am Ende jedes Bewegungssegments gesetzt (ähnlich wie Hauptachsen).

Hilfsachsen

eOrientationMode

L_MC4P_Orientation_Mode

Vorgabe der Orientierungsinterpolation für die WCS-Achsen

  • ShortestSpacialWay : Die Zielorientierung wird so angefahren, dass sich für die Summe der Bewegungen der kürzest mögliche Raumwinkel ergibt. Für 4D-Kinematiken ist dies gleichbedeutend mit mcShortestWay für die C-Achse. (default)
  • AxisIndividual : Die Bewegungsrichtung kann über den Eingang Direction für jede Orientierungsachse unabhängig vorgegeben werden.

Siehe auch: Richtungsvorgabe bei Modulo-Achsen

aeDirection

ARRAY[4..6] OF MC_DIRECTION

Richtungsvorgabe für als "Modulo" parametrierte Orientierungsachsen (WCS-Achsen). Der Eingang wird nur ausgewertet bei
OrientationMode:= L_MC4P_Orientation_Mode.AxisIndividual .

Index 4 ... 6: Hauptachsen A, B, C

Zulässige Auswahl:

  • mcPositiveDirection : Positive Richtung
  • mcNegativeDirection : Negative Richtung
  • mcShortestWay : Kürzester Weg (default)

Die Modi mcCurrentDirection , mcPositiveCycle und mcNegativeCycle werden nicht unterstützt.

Siehe auch: Richtungsvorgabe bei Modulo-Achsen

Ausgänge

Name

Datentyp

Wert/Bedeutung

xDone

BOOL

TRUE

Positionierung erfolgreich beendet.

xBusy

BOOL

TRUE

Abarbeitung läuft.

  • Der Ausgang Busy ist dann von Bedeutung, wenn eine Bewegungssteuerung durch mehrere FBs (BufferMode) erfolgt.

xActive

BOOL

TRUE

Das Kommando des FBs wird aktuell ausgeführt.

xCommandAborted

BOOL

TRUE

Das Kommando wurde durch einen anderen FB abgebrochen.

xError

BOOL

TRUE

Es ist ein Fehler aufgetreten. Details siehe ErrorID .

eErrorID

L_IE1P_Error

Wenn Error = TRUE: Fehlernummer zum aufgetretenen Fehler.

iPointPassed

INT

Ausgabe der zuletzt passierten Spline-Stützstelle

Struktur L_MC4P_IntermediatePointSpline

Name

Datentyp

Wert/Bedeutung

lrXPos

LREAL

TRUE

x-Position des Spline-Stützpunktes im Koordinatensystem des FBs

lrYPos

LREAL

TRUE

y-Position des Spline-Stützpunktes im Koordinatensystem des FBs

lrZPos

LREAL

TRUE

z-Position des Spline-Stützpunktes im Koordinatensystem des FBs

xUsePoint

BOOL

TRUE

FALSE

Punkt wird bei der Berechnung des Splines berücksichtigt

Punkt wird ignoriert

Programmierbeispiel

Diese Beispiel zeigt die Programmierung einer Bewegung entlang eines mit absolut vorgegeben Stützstellen definierten Splines.

X Startpunkt

X Zwischenpunkte

O Endpunkte

Die Achsgruppe steht an der Position x=50.0, y =10.0, z=20.0

Über den FB My_MoveSpline (Instanz des L_MC4P_MoveSplineAbsolute ) wird folgende Bewegung programmiert:

My_MoveSpline.alrIntermediatePoint[1].lrXPos := 5.0;
My_MoveSpline.alrIntermediatePoint[1].lrYPos := 1.0;
My_MoveSpline.alrIntermediatePoint[1].lrZpos := 5.0;
My_MoveSpline.alrIntermediatePoint[1].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[2].lrXPos := 10.0;
My_MoveSpline.alrIntermediatePoint[2].lrYPos := 2.0;
My_MoveSpline.alrIntermediatePoint[2].lrZpos := 8.0;
My_MoveSpline.alrIntermediatePoint[2].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[3].lrXPos := 20.0;
My_MoveSpline.alrIntermediatePoint[3].lrYPos := 10.0;
My_MoveSpline.alrIntermediatePoint[3].lrZpos := 0.0;
My_MoveSpline.alrIntermediatePoint[3].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[4].lrXPos := 20.0;
My_MoveSpline.alrIntermediatePoint[4].lrYPos := 20.0;
My_MoveSpline.alrIntermediatePoint[4].lrZpos := 20.0;
My_MoveSpline.alrIntermediatePoint[4].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[5].lrXPos := 50.0;
My_MoveSpline.alrIntermediatePoint[5].lrYPos := 20.0;
My_MoveSpline.alrIntermediatePoint[5].lrZpos := 40.0;
My_MoveSpline.alrIntermediatePoint[5].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[6].lrXPos := 50.0;
My_MoveSpline.alrIntermediatePoint[6].lrYPos := 60.0;
My_MoveSpline.alrIntermediatePoint[6].lrZpos := 60.0;
My_MoveSpline.alrIntermediatePoint[6].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[7].lrXPos := 60.0;
My_MoveSpline.alrIntermediatePoint[7].lrYPos := 60.0;
My_MoveSpline.alrIntermediatePoint[7].lrZpos := 50.0;
My_MoveSpline.alrIntermediatePoint[7].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[8].lrXPos := 60.0;
My_MoveSpline.alrIntermediatePoint[8].lrYPos := 20.0;
My_MoveSpline.alrIntermediatePoint[8].lrZpos := 30.0;
My_MoveSpline.alrIntermediatePoint[8].xUsePoint := TRUE;
My_MoveSpline.alrIntermediatePoint[9].lrXPos := 50.0;
My_MoveSpline.alrIntermediatePoint[9].lrYPos := 10.0;
My_MoveSpline.alrIntermediatePoint[9].lrZpos := 0.0;
My_MoveSpline.alrIntermediatePoint[9].xUsePoint := TRUE;
My_MoveSpline.alrEndPoint[1] := 35.0;
My_MoveSpline.alrEndPoint[2] := 20.0;
My_MoveSpline.alrEndPoint[3] := 10.0;