Skip to main content

Unterbrechen und Fortsetzen von Bewegungen

Während der Bewegung einer Achsgruppe kann es zum Stopp der Bewegung kommen. Dies kann ein beabsichtigtes Anhalten (MC_GroupHalt, MC_GroupStop) oder Pausieren auf der Bahn (MC_GroupInterrupt), oder ein Halt aufgrund einer Störung sein. In allen Fällen bietet CODESYS SoftMotion Funktionsbausteine, um die Achsgruppe zurück auf die geplante Bahn zu bewegen und diese fortzusetzen.

Bewegungsstopp durch Pausieren

Mit Hilfe der Funktionsbausteine MC_GroupInterrupt und MC_GroupInterruptAt können Sie die Ausführung der kommandierten Bewegungen pausieren. Dabei wird bei MC_GroupInterrupt ein sofortiger Halt und bei MC_GroupInterruptAt ein Halt an einer bestimmten Position ausgeführt. Die Bewegung kann dann später mit MC_GroupContinue fortgesetzt werden.

Der Funktionsbaustein MC_GroupInterruptAt stellt den Eingang SMC_GroupInterruptPositionMvtRel zur Verfügung. Dieser spezifiziert eine zur Bewegung relative Unterbrechungsposition. Die Bewegung wird durch ihre SMC_Movement_Id referenziert. Die Position innerhalb der Bewegung wird durch einen Wert (Real) zwischen 0 und 1 definiert, wobei 0 der Beginn und 1 das Ende der Bewegung ist. Eine Position zwischen den Punkten B und A wird genauso interpretiert, als wenn es kein Überschleifen gäbe. Eine Position zwischen Pstart und B oder zwischen A und Pdest wird auf die Überschleifbahn projiziert.

_sm_img_movement_interrupt_position.png
. Fehlerbehandlung bei MC_GroupInterruptAt
  • Wenn die angegebene Bewegungs-ID unbekannt ist, gibt der Funktionsbaustein einen Fehler zurück. Die laufende Bewegung wird nicht unterbrochen.

  • Wenn der aktuelle dynamische Zustand der Achsgruppe das Erreichen des Stillstands vor der angegebenen Unterbrechungsposition nicht zulässt, verhält sich SMC_GroupInterruptAt genauso wie MC_GroupInterrupt: Die Unterbrechung wird sofort ausgeführt und die Achsgruppe erreicht den Stillstand irgendwo hinter der kommandierten Unterbrechungsposition.

  • Alle anderen Fehler werden genauso behandelt wie bei MC_GroupInterrupt.

. Einschränkungen bei MC_GroupInterruptAt
  • Eine Unterbrechung an einer bestimmten Position kann mit einer anderen Bewegung abgebrochen werden, solange der Vorgang des Anhaltens an der Unterbrechungsposition noch nicht begonnen hat

  • Es kann nur eine Unterbrechung an einer bestimmten Position zur gleichen Zeit kommandiert werden. Wenn eine Unterbrechung kommandiert wurde, muss diese entweder abgeschlossen oder abgebrochen werden, damit eine weiterer Unterbrechung akzeptiert werden kann.

Wenn Sie MC_GroupInterrupt oder MC_GroupInterruptAt ausführen, wird zunächst, ähnlich wie bei einem MC_GroupHalt, ein bahntreuer Halt ausgeführt. Dann wird der Zustand der Achsgruppe („Continue-Daten“) in einer vom Anwender übergebenen Variable vom Typ SMC_AXIS_GROUP_CONTINUE_DATA gespeichert. Jetzt ist die Achsgruppe im Zustand GroupStandby und kann ganz normal verwendet werden. Typisch wäre zum Beispiel, dass die Achsgruppe gejoggt wird.

Später können Sie dann mit MC_GroupContinue die unterbrochene Ausführung wieder aufnehmen. Dazu übergeben Sie die gespeicherten „Continue-Daten“. Damit dies ohne Fehler funktioniert, muss die Position der Achsgruppe mit der Position übereinstimmen, die sie nach Ausführung von MC_GroupInterrupt hatte. (Siehe SMC_GroupGetContinuePosition.)

Wenn eine Tracking-Bewegung unterbrochen wurde (eine Bewegung, die relativ zu einem dynamischen Koordinatensystem kommandiert wurde), hält MC_GroupInterrupt nicht absolut an (wie MC_GroupHalt), sondern relativ zum dynamischen Koordinatensystem. Wenn zum Beispiel ein Werkstück auf einem Rundtisch verfolgt wird, hält MC_GroupInterrupt in Bezug auf das Werkstück an. Die Achsgruppe folgt weiterhin dem Werkstück. Die Continue-Daten müssen mit SMC_GroupUpdateContinueData aktualisiert werden, wenn die Kinematik rotierende Achsen mit mehreren Perioden hat. Danach kann die Bewegung mit MC_GroupContinue fortgesetzt werden.

Wichtig

Die Variable vom Typ SMC_AXIS_GROUP_CONTINUE_DATA darf nicht persistent gespeichert oder während eines Online-Change geändert werden.

Tipp

Mit Hilfe des Funktionsbausteins SMC_GroupWait können Sie auf der Bahn zwischen zwei Bewegungen für eine programmierbare Zeit warten.

Bewegungsstopp durch MC_GroupHalt oder MC_GroupStop

Nach einem mit MC_GroupHalt oder MC_GroupStop ausgelösten Bewegungsstopp kann die Bewegung der Achsgruppe durch Verwendung von SMC_GroupSaveContinueData und MC_GroupContinue ohne Informationsverlust fortgesetzt werden. Dieser Baustein speichert den aktuellen Status, die aktuelle Position und alle kommandierten Bewegungen. Damit kann später die Bewegung von genau dieser Position aus fortgesetzt werden.

Verhalten vor Version 4.12.0.0: Der Funktionsbaustein SMC_GroupSaveContinueData muss im selben Zyklus aufgerufen werden, in dem MC_GroupHalt oder MC_GroupStop aufgerufen wird. Dabei muss sichergestellt werden, dass SMC_GroupSaveContinueData vor MC_GroupHalt oder MC_GroupStop aufgerufen wird, da sonst die abgebrochenen Bewegungen aus der Warteschlange entfernt werden.

Verhalten ab Version 4.12.0.0: Der Funktionsbaustein SMC_GroupSaveContinueData kann zu jedem beliebigen Zeitpunkt bis zur ersten Bewegung nach dem Aufruf von MC_GroupHalt oder MC_GroupStop aufgerufen werden. Die Fortsetzungsposition ist die aktuelle Achsgruppenposition zum Zeitpunkt des ersten Aufrufs des Funktionsbausteins. Der gespeicherte Pfad besteht aus allen Bewegungen, die vor dem Halt/Stopp-Befehl akzeptiert wurden.

Um die Bahn nach einem MC_GroupHalt oder MC_GroupStop an der Position fortsetzen zu können, an der die Achsgruppe stehen geblieben ist, sollte also SMC_GroupSaveContinueData in dem Zyklus aufgerufen werden, in dem MC_GroupHalt / MC_GroupStop das Done-Signal setzt.

Pro Achsgruppe darf nur eine Instanz von SMC_GroupSaveContinueData aufgerufen werden.

Tipp

Das Speichern des aktuellen Status vor dem Halt-/Stopp-Befehl kann mehrere Zyklen dauern, aber es ist garantiert, dass die Statusinformationen im ersten Zyklus vor allen Abbruchbewegungen gespeichert werden.

Tipp

SMC_GroupSaveContinueData kann jederzeit zum Speichern des aktuellen Zustands aufgerufen werden, nicht nur in Kombination mit Aufrufen von MC_GroupHalt oder MC_GroupStop.

Bewegungsstopp durch eine Störung

Kommt es während der Bewegung aufgrund einer Störung zu einem Bewegungsstopp, werden die einzelnen Achsen einer Achsgruppe individuell angehalten und in den Fehlerzustand geschaltet. Dabei verlässt der TCP die geplante Bahn. Sie können nun den Fehler quittieren, die Achsgruppe zurücksetzen und zu der Position fahren, an der der Fehler erkannt wurde. Danach können Sie die Achsgruppe anweisen, die zuvor geplante Bewegungen fortzusetzen.

Mit dem Funktionsbaustein SMC_GroupEnableResumeAfterError schalten Sie die Funktion ein, um nach einem Fehler die programmierten Bewegungen wieder aufzunehmen. Der Baustein muss in der Buszyklustask zyklisch aufgerufen werden. Pro Achsgruppe darf nur eine Instanz dieses Funktionsbausteins aufgerufen werden.

Wenn die Achsgruppe einen Fehler erkennt und in den Zustand Errorstop wechselt, dann speichert sie die bereits akzeptierten Bewegungen sowie die notwendigen Zustandsinformationen in einer Variablen vom Typ SMC_AXIS_GROUP_CONTINUE_DATA. Diese Variable beinhaltet dann die „Continue-Daten“ und wird als Eingang von SMC_GroupEnableResumeAfterError übergeben.

So können Sie die Bewegungen unter Verwendung von MC_GroupContinue später wieder aufnehmen. Wenn die Fehler durch die kommandierten Bewegungen entstehen (Beispiel: Arbeitsraumverletzungen oder ein ungültiger Bogenradius), können sie auf diese Weise nicht beseitigt werden. Diese Fehler werden nach dem Fortsetzen der Bewegung wieder auftreten. Der Mechanismus ist eher für Einzelachsfehler und andere externe Ereignisse gedacht, die die Achsgruppe in den Fehlerstopp zwingen.

MC_GroupContinue erfordert, dass sich die Achsgruppe beim Fortsetzen der Bewegung an einer bestimmten Position befindet. Im Falle der Wiederaufnahme nach einem Fehler ist diese Position die aktuelle Position zum Zeitpunkt als der Fehler erkannt wurde. Sie können diese Position mit dem Funktionsbaustein SMC_GroupGetContinuePosition abfragen.

Wichtig

  • Wenn ein Achsgruppenfehler das Fortsetzen der Bewegung nicht zulässt (wie ein interner Fehler beim Schreiben der Continue-Daten), geben MC_GroupContinue und SMC_GroupGetContinuePosition die neue Fehler-ID SMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN zurück.

  • Wenn ein MC_GroupStop aktiv ist, wenn der Fehler auftritt, dann ist der MC_GroupStop auch nach dem Fortsetzen wieder aktiv. Die Achsgruppe wurde bereits gestoppt, und der MC_GroupStop hat alle anstehenden Bewegungen gelöscht, so dass keine Bewegung stattfindet.

  • Wenn ein Achsgruppenfehler auftritt, zeigt die Funktionsbausteininstanz der aktiven Bewegung den Fehler an (Ausgänge Active und Busy gehen auf FALSE, Ausgang Error geht auf TRUE). Die Funktionsbausteininstanzen von gepufferten oder überschliffenen Bewegungen, die noch nicht aktiv geworden sind, zeigen ebenfalls einen Fehler an. Nach dem Wiederanlauf werden alle diese Funktionsblockinstanzen wieder Busy/Active und ihre Ausgänge Error/CommandAborted werden zurückgesetzt.