Beispiel „Planar-Mover mit External Setpoint Generation auf Planar-Parts verfahren"
In diesem Beispiel wird ein Planar-Mover auf zwei Planar-Parts mit der externen Sollwertgenerierung verfahren.
Ausgangspunkt
Sie starten mit einer Solution, die eine fertig konfigurierte XPlanar Processing Unit enthält. Unter der XPlanar Processing Unit sind zwei Parts, ein Koordinatensystem und ein Mover angelegt. Unter den beiden Parts ist jeweils eine Kachel angelegt.

Folgende geometrische Situation ist eingestellt: die beiden Parts liegen nebeneinander und der Mover startet in der Mitte des linken Parts (Position P1). Beide Parts sind nicht beweglich; die Konfiguration ist daher statisch.

Ausgehend von dieser Konfiguration wird das Beispiel entwickelt.
![]() | Die Erstellung der Ausgangssituation wird in der Dokumentation der XPlanar Processing Unit beschrieben. |
Planar-Mover und Planar-Environment anlegen
- 1. Legen Sie für dieses Beispiel einen Planar-Mover an, siehe Konfiguration.
- 2. Legen Sie eine Planar-Environment an, siehe Konfiguration.
- 3. Stellen Sie den Initialparameter XPlanar processing unit OID auf die Objekt Id der XPlanar Processing Unit. Damit ist das Part feature für alle MC Configuration Objekte aktiviert (besonders für den angelegten Planar-Mover).
PLC anlegen
- Siehe Vorabschritte PLC anlegen.
- 1. Legen Sie über MAIN den oder die Mover („MC_PlanarMover“) wie folgt an.
- Diese/r repräsentiert den/die Mover in der MC Configuration.

- 2. Legen Sie, wie nachfolgend gezeigt, einen Planar-Mover, eine Zustandsvariable für eine Zustandsmaschine und Variablen für den externen Sollwert an.
PROGRAM MAIN
VAR
mover : MC_PlanarMover;
state : UDINT;
p,v,a : MoverVector;
deltat : LREAL := 0.01;
refsys : OTCID := 0;
velo, acc, jerk : LREAL;
feedback : MC_PlanarFeedback;
END_VAR
- 3. Programmieren Sie anschließend in der MAIN einen Ablauf.
- Dieser Programmcode aktiviert den Mover und startet die externe Sollwertgenerierung. Dann wird ein Profil abgefahren, das mit positiver Geschwindigkeit endet. Das anschließende Stopp der externen Sollwertgenerierung sorgt dafür, dass der Mover seine Geschwindigkeit auf Null reduziert und nach dem Anhalten im Zustand FreeMovement ist (dies geschieht mit der Maximaldynamik des Movers).
CASE state OF
0:
mover.Enable(0);
state := 1;
1:
IF mover.MCTOPLC.STD.State = MC_PLANAR_STATE.Enabled THEN
state := 2;
END_IF
2:
p := mover.MCTOPLC.SET.SetPos;
v.x := 0.0; a.x := 0.0;
mover.StartExternalSetpointGeneration(0,0);
mover.SetExternalSetpointReferenceId(feedback,p,v,a,refsys);
jerk := 10;
state := 3;
3:
velo := v.x;
acc := a.x;
p.x := p.x + deltat * velo + deltat * deltat / 2 * acc + deltat * deltat * deltat / 6 * jerk;
v.x := velo + deltat * acc + deltat * deltat / 2 * jerk;
a.x := acc + deltat * jerk;
mover.SetExternalSetpointReferenceId(feedback,p,v,a,refsys);
IF a.x >= 100.0 THEN
jerk := -10;
END_IF;
IF a.x <= 0.0 THEN
state := 4;
END_IF;
4:
mover.StopExternalSetpointGeneration(0);
state := 5;
END_CASE
Befehl abschicken
- 4. Um die Kommandos zu senden, müssen Sie nach dem END_CASE die Update-Methode des Movers triggern:
mover.Update();
Durch das Bauen der PLC wird ein Symbol des „PLC-Movers" erzeugt, welches anschließend mit der Mover-Instanz im MC-Projekt verknüpft werden kann.
- 1. Verwenden Sie zum Bauen den Pfad PLC > Untitled1 > Untitled1 Project > Build.
- Anschließend kann der Planar-Mover im „MC Project“ (Doppelklick) mit dem Button Link To PLC… im Reiter Settings verknüpft werden.
- Zusätzlich muss der Planar-Mover im „MC Project“ (Doppelklick) mit dem Button Link To I/O… im Reiter Settings verknüpft werden.



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.
Der Mover steht am Ende des Zustandsautomaten (state=5) auf der gewünschten positiven x-Position. Er hat den ersten Part nicht verlassen, daher könnte man in diesem Fall als refsys auch die Objekt-ID des ersten Parts oder des Koordinatensystems angeben. Falls die Objekt-ID des ersten Parts angegeben wird und die Grenze zum zweiten Part überschritten wird, müsste die Objekt-ID des zweiten Parts genutzt werden und die x-Koordinate um 240 reduziert werden (gleichzeitig!). Die Objekt-ID des globalen Koordinatensystems funktioniert, egal auf welchem der Parts man sich befindet. Da die Konfiguration statisch ist, wird Null als Alternative für die globale Koordinatensystem-ID akzeptiert.

Bemerkungen zum Feedback:
Das Feedback wurde in diesem Beispiel nur angelegt und in den SetExternalSetpointRefSys Aufruf gegeben, ohne damit etwas zu tun. Da in diesem Beispiel keine Fehler auftreten, ist das Feedback ab state 2 busy. Ansonsten sollte man IMMER Fehlerbehandlung mit diesem Feedback implementieren, um Fehler wie z.B. eine falsche RefSysId für die Position zu behandeln.
Die Besonderheit dieses Feedbacks ist, dass es zyklisch übergeben wird und man in jedem Aufruf dasselbe Feedback übergeben muss. Treten in der Externen Sollwertgenerierung Fehler auf, dann werden diese Fehler im Feedback angezeigt, nach dem nächsten Aufruf von SetExternalSetpointRefSys mit Feedback. Ein Update Aufruf für das Feedback ist hier nicht nötig. Außerdem wird das Feedback nicht done, wenn StopExternalSetpointGeneration aufgerufen wird, oder aborted, wenn Halt aufgerufen wird.
Auch wenn die Informationen im Feedback nach dem SetExternalSetpointRefSys Aufruf zur Verfügung stehen, müssen die Fehler nicht direkt aus diesem Aufruft stammen, sondern können auch aus vorherigen Aufrufen resultieren.