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.

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 wieMC_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
.
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
undSMC_GroupGetContinuePosition
die neue Fehler-IDSMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN
zurück.Wenn ein
MC_GroupStop
aktiv ist, wenn der Fehler auftritt, dann ist derMC_GroupStop
auch nach dem Fortsetzen wieder aktiv. Die Achsgruppe wurde bereits gestoppt, und derMC_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
undBusy
gehen aufFALSE
, AusgangError
geht aufTRUE
). 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 wiederBusy
/Active
und ihre AusgängeError
/CommandAborted
werden zurückgesetzt.