Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“

Anhand dieser Anleitung werden Sie ein TwinCAT-Projekt anlegen, in welchem ein Planar-Mover, der sich auf einem Track befindet, an eine Achse gekoppelt wird, deren Sollwerten er daraufhin folgt.

Hier wird der Planar-Mover nicht direkt über einen MoveOnTrack-Befehl gesteuert, bei welchem eine vorgegebene Zielposition mit anschließendem Stillstand angefahren wird, siehe Beispiel „Planar-Mover auf Track einkoppeln und verfahren“. Stattdessen bleibt der Planar-Mover so lange an eine Achse gekoppelt, bis ein Folgebefehl diese Kopplung beendet, oder ein Fehler auftritt.

Nach dem Abschicken des GearInPosOnTrack-Befehls, der die Kopplung an eine Achse initiiert, wird der Planar-Mover versuchen, an der angegebenen slaveSyncPosition zu sein, wenn die Achse, an welche er gekoppelt ist, sich an der masterSyncPosition befindet und gleichzeitig die Dynamik der Masterachse zu übernehmen. Sollte es möglich sein, schon eher synchron zu sein (d. h. der Planar-Mover hat schon bei slaveSyncPosition – x dieselbe Dynamik wie die Master-Achse, die sich zu diesem Zeitpunkt bei masterSyncPosition – x befindet), dann wird der Planar-Mover diese Konfiguration ansteuern und schon eher synchron werden. Sollte es nicht möglich sein, zum angegebenen Punkt synchron zu werden, so wird der Planar-Mover so lange versuchen mit der Master-Achse synchron zu werden, bis ein Folgebefehl empfangen wird oder ein Fehler auftritt.

Sollte der Planar-Mover seinen Synchronisationsstatus verlieren, z. B. aufgrund sich schnell ändernder Dynamik der Master-Achse, wird er versuchen, möglichst schnell wieder synchron zu werden. Der Synchronisationsstatus ist jederzeit aus der PLC über das entsprechende Feedback-Objekt zugänglich. Auch kann die Synchronisation verloren werden, wenn das Einhalten des vorgegebenen Abstands zum voranfahrenden Planar-Mover ein Abbremsen des synchronen Planar-Movers nötig macht. Auch hier gilt, dass schnellstmöglich versucht wird, die Synchronisation wiederzuerlangen, wenn das Hindernis sich entfernt hat.

Ein Beispiel für einen Fehler, der zum Abbruch des Befehls führt, ist ein Verhalten der Master-Achse, welches den Planar-Mover dazu zwingen würde, sich mit negativer Geschwindigkeit über den Start eines Planar-Tracks hinaus zu bewegen - eine solche Bewegung ist auch mit einem MoveOnTrack-Befehl nicht zulässig. In einem solchen Fall wird der Planar-Mover so lange synchron bleiben (oder versuchen es zu werden, falls er es noch nicht ist), bis er gezwungen wird, anzuhalten, sodass er am Beginn des Planar-Tracks zum Stehen kommt. Außerdem wird ein Fehler zurückgemeldet. Die genaue Position, an welcher der Planar-Mover seinen Halt einleitet, ist abhängig von den gegenwärtigen Dynamiklimits.

Wenn dem GearInPosOnTrack-Befehl Dynamiklimits mitgegeben werden, deren Geschwindigkeitslimit unterhalb der momentanen Geschwindigkeit der Master-Achse liegt, so wird der Planar-Mover nichtsdestotrotz versuchen, aufzusynchronisieren, da es nicht ausgeschlossen ist, dass die Master-Achse zu einem späteren Zeitpunkt derart abbremst, dass sie wieder erreichbar wird. Insbesondere wird in einem solchen Fall kein Fehler zurückgegeben.

Planar-Mover anlegen

Siehe Konfiguration.
1. Legen Sie einen Planar-Mover an.
2. Versetzen Sie „Parameter (Init)“ in den Simulationsmodus (TRUE). Der Parameter ist versteckt und wird nur sichbar, wenn man die Checkbox „Show Hidden Parameters“ aktiviert.

Planar-Track anlegen

3. Fügen Sie den Planar-Track über Groups > Add New Item… hinzu, siehe Konfiguration.
Der Solution Explorer weist die folgenden Einträge auf:
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 1:

Master-Achse anlegen

Um eine Master-Achse anzulegen, muss zunächst eine NC/PTP NCI Configuration angelegt werden.
1. Wählen Sie MOTION > Add New Item… aus.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 2:
2. Wählen Sie im folgenden Dialogfenster NC/PTP NCI Configuration aus und bestätigen Sie mit OK.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 3:
Sie haben ein NC/PTP NCI Project angelegt.
3. Wählen Sie per rechter Maustaste im erzeugten NC-Project Axes > Add New Item… aus.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 4:
4. Legen Sie im folgenden Dialogfenster eine (oder mehrere) Achsen an und bestätigen Sie mit OK
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 5:

PLC anlegen

Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 6:

Für dieses PLC-Projekt müssen Sie zum Steuern der Master-Achse zusätzlich „Tc2_MC2“ hinzufügen, siehe Bibliotheken einfügen.

Siehe Vorabschritte PLC anlegen.
1. Legen Sie über MAIN die gewünschte Anzahl an Movern („MC_PlanarMover“) und Tracks („MC_PlanarTrack“) an.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 7:
Diese repräsentieren Mover und Tracks in der MC Configuration.
2. Legen Sie die folgenden Variablen an.
PROGRAM MAIN
VAR
    mover      : MC_PlanarMover;
    track      : MC_PlanarTrack;
    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“, des „PLC-Track“ und der „PLC-Achse“ zu erzeugen.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 8:
4. Verlinken Sie Planar-Mover, Planar-Track (siehe Beispiel „Planar-Mover auf Track einkoppeln und verfahren“) und, wie im nächsten Abschnitt beschrieben, die Achse.

Achse verlinken

5. Doppelklicken Sie im Solution Explorer Axis 1.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 9:
6. Wechseln Sie in den Reiter Settings.
7. Klicken Sie Link to PLC… und wählen Sie im folgenden Dialog den Eintrag MAIN.axis aus und bestätigen Sie mit OK.
Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 10:

Zustandsautomaten programmieren

Mit der folgenden Zustandsmaschine, die im MAIN programmiert wird, werden der Planar-Track geometrisch definiert und aktiviert (State 0), der Planar-Mover aktiviert und auf den Planar-Track eingekoppelt (State 2 bzw. 4), die Master-Achse freigegeben (State 6) und verfahren (State 7).

Schlussendlich wird der Befehl zum Starten der Synchronisation mit der Master-Achse („GearInPosOnTrack“) an den Planar-Mover geschickt (State 8). Auch hier werden zyklisch die Planar-Objekte geupdated bzw. die Achs-FBs aufgerufen (nach END_CASE-Anweisung):

CASE state OF
  0:
    pos1.SetValuesXYC(100, 100, 0);
    pos2.SetValuesXYC(860, 100, 0);
    track.AppendLine(0, pos1, pos2);
    track.Enable(0);
    state := state + 1;
  1:
    IF track.MCTOPLC_STD.State = MC_PLANAR_STATE.Enabled THEN
      state := state + 1;
    END_IF
  2:
    mover.Enable(0);
    state := state + 1;
  3:
    IF mover.MCTOPLC.STD.State = MC_PLANAR_STATE.Enabled THEN
      state := state + 1;
    END_IF
  4:
    mover.JoinTrack(0, track, 0, 0);
    state := state + 1;
  5:
    IF mover.MCTOPLC.STD.CommandMode = MC_PLANAR_MOVER_COMMAND_MODE.OnTrack THEN
      state := state + 1;
    END_IF
  6:
    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
  7:
    move_axis(Axis := axis,
    Position := 600,
    Velocity := 30,
    Acceleration := 100,
    Deceleration := 100,
    Jerk := 100,
    Execute := TRUE);
    state := state + 1;
  8:
    mover.GearInPosOnTrack(0, axis.DriveAddress.TcAxisObjectId, 0, 100, 100, track, 0, 0);
    state := state + 1;
END_CASE

mover.Update();
track.Update();
power_axis(Axis := axis);
move_axis(Axis := axis);
axis.ReadStatus();

Projekt aktivieren und starten

1. Aktivieren Sie die Konfiguration über den Button in der Menüleiste Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 11:.
2. Versetzen Sie das TwinCAT-System in den Zustand „Run“ über den Button Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 12:.
3. Loggen Sie die PLC über den Button in der Menüleiste ein Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 13:.
4. Starten Sie die PLC über den Play-Button in der Menüleiste.

Die Master-Achse wird zur gegebenen Zielposition (hier 600) verfahren und der Planar-Mover wird ihrer Bewegung folgen. Die Position des Planar-Movers kann im Online-View (über Klicken des Buttons) verfolgt werden.

Beispiel „Planar-Mover auf einem Track mit einer Achse synchronisieren“ 14:

Der Mover kommt bei Position 600 zum Stillstand, da hier auch die Master-Achse Nulldynamik erreicht. Falls für die Zielposition der Master-Achse ein Wert größer als die Länge des Tracks (hier 760) in State 7 programmiert wird, so kommt der Planar-Mover am Ende des Planar-Tracks zum Stehen um nicht zu entgleisen und folgt der Master-Achse nicht weiter. Der Fehler in einem solchen Szenario wird zwar potentiell von der MC an die PLC zurückgegeben, von obigem PLC-Code in diesem Fall jedoch nicht angenommen. Hierfür und zur Überwachung des Synchronisationsstatus ist ein Feedback-Objekt nötig.

Im Funktionsaufruf in State 8 werden dem Planar-Mover die Syncpositionen der Master-Achse (als drittes Argument) bzw. des Slave-Planar-Movers (viertes Argument) übergeben. Dies sind die jeweiligen Positionen, an welchen der Slave synchron mit dem Master wird, also seine Dynamikwerte erreicht. Das fünfte Argument im Funktionsaufruf gibt an, auf welchen Planar-Track sich die Position im vorigen Argument bezieht. Tatsächlich ist es dem Slave hier möglich bedeutend eher mit seinem Master synchron zu werden.

Eine Synchronisationsbewegung über eine Folge von aneinander anschließenden Tracks ist durch die Verwendung eines Planar-TrackTrail-Objektes möglich. In einem solchen Fall ist ein Übergang von einem zum nächsten Planar-Track während der Phase des Aufsynchronisierens oder bei bereits bestehender Sychronizität möglich. Das Abbremsen des Planar-Movers analog zum obigen Beispiel mit nur einem Planar-Track würde erst am Ende des letzten Planar-Tracks eintreten, falls die Bewegung der Master-Achse ein Überschreiten desselben verlangen würde.