Beispiel „Synchronisationsbewegung über zwei Planar-Tracks“
Dieses Beispiel stellt eine Erweiterung des Beispiels „Planar-Mover auf einem Track mit einer Achse synchronisieren“ dar, in welchem die Synchronisationsbewegung des Planar-Movers über zwei Planar-Tracks erfolgt. Das genannte Beispiel wird so abgewandelt, dass zwei Planar-Tracks in der MC Configuration angelegt werden, sodass der Solution Explorer die folgenden Einträge aufweist:
PLC Projekt anpassen
- 1. Fügen Sie dem PLC-Projekt die Bibliotheken Tc3_Mc3PlanarMotion, Tc3_Physics, und Tc2_MC2 hinzu, siehe Bibliotheken einfügen.
- 2. Deklarieren Sie in der MAIN die folgenden Variablen:
PROGRAM MAIN
VAR
mover : MC_PlanarMover;
track1 : MC_PlanarTrack;
track2 : MC_PlanarTrack;
trail : MC_PlanarTrackTrail;
axis : AXIS_REF;
power_axis : MC_Power;
move_axis : MC_MoveAbsolute;
state : UDINT;
pos1, pos2 : PositionXYC;
END_VAR
- 3. Bauen Sie die PLC, um Symbole des „PLC-Mover“, der „PLC-Tracks“ und der „PLC-Achse“ zu erzeugen.
- 4. Verlinken Sie Planar-Mover, Planar-Tracks (siehe Beispiel „Planar-Mover auf Track einkoppeln und verfahren“) und die Achse (siehe Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“).
![]() | Alle bisherigen Schritte sind, bis auf die Verdopplung der Anzahl der Planar-Tracks und den leicht modifizierten Code, identisch mit denen im Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“. |
Zustandsautomaten programmieren
Im nächsten Schritt wird der Programmcode so abgewandelt, dass dem GearInPosOnTrack
-Befehl der Planar-TrackTrail übergeben wird. Letzterer wird vorher mit beiden Planar-Tracks befüllt, die in diesem Beispiel ein einfaches Netzwerk, bestehend aus einer L-Konfiguration mit Verschleifungsstück (siehe Geometrische Definition), bilden:
CASE state OF
0:
pos1.SetValuesXYC(100, 100, 0);
pos2.SetValuesXYC(400, 100, 0);
track1.AppendLine(0, pos1, pos2);
track1.Enable(0);
state := state + 1;
1:
IF track1.MCTOPLC_STD.State = MC_PLANAR_STATE.Enabled THEN
state := state + 1;
END_IF
2:
track2.StartFromTrack(0, track1);
state := state + 1;
3:
pos1.SetValuesXYC(500, 100, 0);
pos2.SetValuesXYC(860, 100, 0);
track2.AppendLine(0, pos1, pos2);
track2.Enable(0);
state := state + 1;
4:
IF track2.MCTOPLC_STD.State = MC_PLANAR_STATE.Enabled THEN
state := state + 1;
END_IF
5:
mover.Enable(0);
state := state + 1;
6:
IF mover.MCTOPLC.STD.State = MC_PLANAR_STATE.Enabled THEN
state := state + 1;
END_IF
7:
mover.JoinTrack(0, track1, 0, 0);
state := state + 1;
8:
IF mover.MCTOPLC.STD.CommandMode =
MC_PLANAR_MOVER_COMMAND_MODE.OnTrack THEN
state := state + 1;
END_IF
9:
power_axis(Axis := axis,
Enable := TRUE,
Enable_Positive := TRUE);
IF power_axis.Status THEN
move_axis(Axis := axis, Execute := FALSE);
state := state + 1;
END_IF
10:
move_axis(Axis := axis,
Position := 700,
Velocity := 30,
Acceleration := 100,
Deceleration := 100,
Jerk := 100,
Execute := TRUE);
state := state + 1;
11:
trail.AddTrack(track1);
trail.AddTrack(track2);
mover.GearInPosOnTrack(0, axis.DriveAddress.TcAxisObjectId, trail, 100, 100, track1, 0, 0);
state := state + 1;
END_CASE
mover.Update();
track1.Update();
track2.Update();
power_axis(Axis := axis);
move_axis(Axis := axis);
axis.ReadStatus();
Die beiden Planar-Tracks werden dem Planar-TrackTrail in State 11 hinzugefügt. Die Reihenfolge ist hier entscheidend, da track2
an track1
anschließt und nicht umgekehrt. Der Planar-TrackTrail wird dem GearInPosOnTrack
-Befehl als drittes Argument übergeben.
Projekt aktivieren und starten
- 1. Aktivieren Sie die Konfiguration über den Button in der Menüleiste
.
- 2. Versetzen Sie das TwinCAT-System in den Zustand „Run“ über den Button
.
- 3. Loggen Sie die PLC über den Button in der Menüleiste ein
.
- 4. Starten Sie die PLC über den Play-Button in der Menüleiste.
Ablauf im Online-View beobachten
- 5. Beobachten Sie im Online-View, wie der Planar-Mover zunächst auf dem ersten Planar-Track in Richtung dessen Ende verfährt:
- 6. Danach sehen Sie, wie er auf den anschließenden Planar-Track wechselt (vgl. die TrackOIDs):
- 7. Abschließend sehen Sie, wie er auf dem zweiten Planar-Track zum Stillstand kommt:


- Auch in diesem Beispiel bricht der Planar-Mover seine Synchronisationsbewegung ab, falls das Verhalten der Master-Achse ein Überfahren des Endes des zweiten Planar-Tracks erfordern sollte (z. B. indem die Zielposition der Master-Achse größer als die Summe der Längen der beiden Planar-Tracks gewählt wird). In diesem Fall kommt der Planar-Mover am Ende des zweiten Tracks zum Stillstand, verliert seinen potentiellen Synchronisationsstatus und meldet einen Fehler.
In dem Fall, dass ein weiterer Planar-Track ans Ende des ersten angehängt wird, sodass an dessen Ende eine Weiche entsteht, „weiß“ der Planar-Mover durch den Planar-TrackTrail eindeutig, auf welchen der beiden Planar-Tracks er abbiegen und somit seine Synchronisationsbewegung fortsetzen soll (die Master-Achse produziert ihre Sollwerte schließlich unabhängig von Planar-Tracks). Auf diese Art und Weise kann mithilfe eines Planar-TrackTrails eine Synchronisationsbewegung durch beliebig komplizierte Tracknetzwerke auf einem eindeutigen, beliebig langen Pfad durchgeführt werden.
Da der Planar-TrackTrail ein reines PLC-Objekt ist, welches nicht über TCOM kommuniziert, sondern nur als Container fungiert, ist kein zyklisches Update, wie beispielsweise für den Planar-Mover, die Planar-Tracks, oder auch Planar-Feedbacks (die in diesem Beispiel nicht vorkommen), nötig, und eine entsprechende Methode ist nicht vorhanden.
