MC_MoveCircularAbsolutePreparation
TF5410 | TF5420 | |
---|---|---|
| MC Group with Pick-and-Place | MC Group Coordinated Motion |
|
Der Funktionsbaustein MC_MoveCircularAbsolutePreparation fügt der Tabelle der Segmente in der Struktur PathData eine absolute Kreisbewegung hinzu. Nach der Erstellung einer Tabelle kann er über MC_MovePath ausgeführt werden. Der Funktionsbaustein MC_MoveCircularAbsolutePreparation kann mehrmals pro Zyklus aufgerufen werden. Maximal 30 Einträge sind pro PathData-Tabelle zulässig.
Zurücksetzen einer Tabelle Eine Tabelle wird bei der Ausführung nicht zurückgesetzt. Zum Zurücksetzen muss die Methode |
Eingänge
VAR_INPUT
CircMode : MC_CIRC_MODE := mcCircModeInvalid;
AuxPoint : POINTER TO MC_LREAL;
AuxPointCount : UDINT;
EndPoint : POINTER TO MC_LREAL;
EndPointCount : UDINT;
PathChoice : MC_CIRC_PATHCHOICE := mcCircPathchoiceCounterClockwise;
Velocity : MC_LREAL := MC_INVALID;
Acceleration : MC_LREAL := MC_DEFAULT;
Deceleration : MC_LREAL := MC_DEFAULT;
Jerk : MC_LREAL := MC_DEFAULT;
BufferMode : MC_BUFFER_MODE := mcAborting;
TransitionMode : MC_TRANSITION_MODE := mcTransModeNone;
TransitionParameter : POINTER TO MC_LREAL;
TransitionParameterCount : UDINT;
InvokeId : UDINT;
DynamicConstraints : REFERENCE TO IPlcDynamicConstraint := 0;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
CircMode | MC_CIRC_MODE | Legt fest, durch welche Kreisdefinition der Kreis programmiert wird. Legt die Bedeutung des Eingangssignals "AuxPoint" fest (siehe MC_CIRC_MODE). |
AuxPoint | POINTER TO MC_LREAL | Zeiger auf ein Array [1..AuxPointCount] des AuxPoint-Vektors. Die Interpretation des AuxPoint-Vektors hängt von der Rotationskonvention ab (siehe MC Group Coordinated Motion oder MC Group with Pick-and-Place) und ist immer (x, y, z). |
AuxPointCount | UDINT | Dimension des AuxPoint-Vektors. Muss 3 sein. Wenn eine 2D-Rotationskonvention (siehe MC Group Coordinated Motion oder MC Group with Pick-and-Place) verwendet wird, muss der Eingangswert ebenfalls 3 sein. Bei einer 2D-Rotationskonvention und CircMode von mcCircModeBorder oder mcCircModeCenter muss die Komponente, die von der Arbeitsebene unabhängig ist, auf MC_Ignore gesetzt werden (siehe MC_LREAL/Spezielle Eingangswerte). |
EndPoint | POINTER TO MC_LREAL | Zeiger auf ein Array [1..EndPointCount] des Zielpositionsvektors. |
EndPointCount | UDINT | Dimension des EndPoint-Vektors. Muss der Anzahl der Achsen in der Achskonvention entsprechen (siehe MC Group Coordinated Motion oder MC Group with Pick-and-Place). |
PathChoice | MC_CIRC_PATHCHOICE | Definiert die Drehrichtung in Bezug auf den Normalvektor. Der Eingang wird ignoriert, wenn der Eingang CircMode auf mcCircModeBorder gesetzt ist (siehe MC_CIRC_PATHCHOICE). |
Velocity | MC_LREAL | Die maximale Geschwindigkeit für das programmierte Segment. Die Geschwindigkeit muss nicht immer erreicht werden. Die Geschwindigkeit muss >0 gesetzt werden. |
Acceleration | MC_LREAL | Maximale Bahnbeschleunigung für das programmierte Segment. Spezielle Eingangswerte können verwendet werden. MC_DEFAULT führt das Kommando mit Standardachsenwerten aus. MC_MAXIMUM führt das Kommando mit den Maximalwerten der Achsen aus. Die Beschleunigung muss ≥1 gesetzt werden. |
Deceleration | MC_LREAL | Maximale Bahnverzögerung für das programmierte Segment. Spezielle Eingangswerte können verwendet werden. MC_DEFAULT führt das Kommando mit Standardachsenwerten aus. MC_MAXIMUM führt das Kommando mit den Maximalwerten der Achsen aus. Die Verzögerung muss ≥1 gesetzt werden. |
Jerk | MC_LREAL | Bahnruck für das programmierte Segment. Spezielle Eingangswerte können verwendet werden. MC_DEFAULT führt das Kommando mit Standardachsenwerten aus. Der Ruck muss ≥100 gesetzt werden. |
BufferMode | MC_BUFFER_MODE | Legt fest, wie aufeinanderfolgende Fahraufträge abgearbeitet werden sollen (siehe MC_BUFFER_MODE). |
Transition Mode | MC_TRANSITION_MODE | Definiert den Blending-Modus (siehe MC_TRANSITION_MODE). |
TransitionParameter | POINTER TO MC_LREAL | Zeiger auf Array [1..TransitionParameterCount] der Blending-Parameter. Transitionsparameter definieren das Blending von der letzten programmierten Position (siehe MC_TRANSITION_MODE). |
TransitionParameterCount | UDINT | Anzahl der Blending-Parameter. |
InvokeId | UDINT | Segment-ID für Analysezwecke. |
DynamicContraints | REFERENCE TO IPlcDynamicConstraint | Ab TF5400 V3.2.27, MC Group Coordinated Motion:
|
Ein-/Ausgänge
VAR_IN_OUT
PathData : MC_PATH_DATA_REF;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
PathData | MC_PATH_DATA_REF | Tabelle, die die Segmente einer Bahn enthält. Die Tabelle wird durch MC_Move…Preparation geschrieben und durch MC_MovePath ausgeführt (siehe MC_PATH_DATA_REF). |
Ausgänge
VAR_OUTPUT
Error : BOOL;
ErrorId : UDINT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Error | BOOL | Dieser Ausgang wird TRUE, wenn bei der Ausführung des Kommandos ein Fehler aufgetreten ist. |
ErrorId | UDINT | Enthält den befehlsspezifischen Fehlercode des zuletzt ausgeführten Kommandos. Der Fehlercode kann in der ADS-Fehlerdokumentation oder in der NC-Fehlerdokumentation (Fehlercodes 0x4nnn und 0x8nnn) nachgeschlagen werden. |
Beispiel Mittelpunktprogrammierung
Angenommen, eine Bahn aus 4 Segmenten wie im Bild dargestellt soll im Modus mcCircModeCenter programmiert werden: Der Benutzer definiert den Mittelpunkt des Kreises als Hilfspunkt ("AuxPoint"). Bei Verwendung von mcCircModeCenter legt der Eingang MC_CIRC_PATHCHOICE die Drehrichtung fest. Da die Ebene durch das Kreuzprodukt definiert wird, muss für beide Kreissegmente N20 und N30 mcCircPathchoiceCounterClockwise ausgewählt werden.
VAR
Buffer : ARRAY[1..4096] OF BYTE;
Path : MC_PATH_DATA_REF (ADR(buffer), SIZEOF(buffer));
fbMoveLinPrep : MC_MoveLinearAbsolutePreparation;
fbMoveCircPrep : MC_MoveCircularAbsolutePreparation;
aTargetPos : ARRAY[1..cAxesCount] OF MC_LREAL;
aCircPos : ARRAY[1..cAxesCount] OF MC_LREAL;
aAuxPoint : ARRAY[1..3] OF MC_LREAL;
aTransitionParam : ARRAY[1..2] OF MC_LREAL;
END_VAR
VAR CONSTANT
cAxesCount : UINT:=3;
END_VAR
fbMoveLinPrep.Position := ADR(aTargetPos);
fbMoveLinPrep.PositionCount := cAxesCount;
fbMoveLinPrep.TransitionParameter := ADR(aTransitionParam);
fbMoveLinPrep.TransitionParameterCount := 2;
fbMoveLinPrep.BufferMode := mcBuffered;
fbMoveLinPrep.TransitionMode := mcTransModeNone;
fbMoveCircPrep.EndPoint := ADR(aTargetPos);
fbMoveCircPrep.EndPointCount := cAxesCount;
fbMoveCircPrep.AuxPoint := ADR(aAuxPoint);
fbMoveCircPrep.AuxPointCount := 3;
fbMoveCircPrep.CircMode := mcCircModeCenter;
fbMoveCircPrep.TransitionParameter := ADR(aTransitionParam);
fbMoveCircPrep.TransitionParameterCount := 2;
fbMoveCircPrep.BufferMode := mcBuffered;
fbMoveCircPrep.TransitionMode := mcTransModeNone;
aTargetPos[1] := 200;
aTargetPos[2] := 0;
aTargetPos[3] := 0;
aTransitionParam[1] := 0;
aTransitionParam[2] := 0;
fbMoveLinPrep(PathData:= path, Velocity:= 3000, InvokeId:= 10);
aTargetPos[1] := 300;
aTargetPos[2] := -100;
aTargetPos[3] := 0;
aAuxPoint[1] := 200;
aAuxPoint[2] := -100;
aAuxPoint[3] := 0;
aTransitionParam[1] := 0;
aTransitionParam[2] := 0;
fbMoveCircPrep(PathData:= path, PathChoice:= mcCircPathchoiceCounterClockwise, Velocity:= 1000, InvokeId:= 20);
aTargetPos[1] := 400;
aTargetPos[2] := -200;
aTargetPos[3] := 0;
aAuxPoint[1] := 400;
aAuxPoint[2] := -100;
aAuxPoint[3] := 0;
aTransitionParam[1] := 0;
aTransitionParam[2] := 0;
fbMoveCircPrep(PathData:= path, PathChoice:= mcCircPathchoiceCounterClockwise, Velocity:= 1000, InvokeId:= 30);
aTargetPos[1] := 600;
aTargetPos[2] := -200;
aTargetPos[3] := 100;
aTransitionParam[1] := 0;
aTransitionParam[2] := 0;
fbMoveLinPrep(PathData:= path, Velocity:= 3000, InvokeId:= 40);
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende |
---|---|---|
TwinCAT V3.1.4018.26 TF5400 Advanced Motion Pack V3.1.2.47 | PC oder | Tc3_McCoordinatedMotion, Tc2_MC2 |