Interruption et poursuite des mouvements
Lorsqu'un groupe d'axes est en mouvement, le mouvement peut être arrêté. Cela peut être un arrêt intentionnel (MC_GroupHalt
, MC_GroupStop
), ou une pause sur le chemin (MC_GroupInterrupt
), ou un arrêt dû à une erreur. Dans tous les cas, CODESYS SoftMotion fournit des blocs fonctionnels pour ramener le groupe d'axes à la trajectoire planifiée et la poursuivre.
Arrêter un mouvement en faisant une pause
Vous pouvez utiliser le MC_GroupInterrupt
et MC_GroupInterruptAt
blocs fonctions pour interrompre l'exécution des mouvements commandés. Pour MC_GroupInterrupt
, un arrêt immédiat est exécuté. Pour MC_GroupInterruptAt
, un arrêt est exécuté à une position spécifique. Ensuite, le mouvement peut être poursuivi plus tard avec MC_GroupContinue
.
Le bloc fonction MC_GroupInterruptAt
fournit l'entrée SMC_GroupInterruptPositionMvtRel
. Ceci spécifie une position d'interruption par rapport à un mouvement. Le mouvement est référencé par son SMC_Movement_Id
. La position dans le mouvement est définie par une valeur (réelle) comprise entre 0 et 1, où 0 est le début du mouvement et 1 est la fin. Une position entre les points B et A est interprétée exactement comme s'il n'y avait pas de fusion. Une position entre Pdébut et B ou entre A et Pdestin est projeté sur le chemin de fusion.

Lorsque l'ID de mouvement spécifié est inconnu, le bloc fonction renvoie une erreur. Le mouvement de course n'est pas interrompu.
Si l'état dynamique actuel du groupe d'axes ne permet pas d'atteindre l'arrêt avant la position d'interruption spécifiée, alors
SMC_GroupInterruptAt
se comporte exactement commeMC_GroupInterrupt
: l'interruption est exécutée immédiatement et le groupe d'axes s'arrête quelque part derrière la position d'interruption commandée.Toutes les autres erreurs sont traitées exactement comme pour
MC_GroupInterrupt
.
Une interruption à une position spécifique peut être interrompue avec un autre mouvement tant que le processus d'arrêt à la position d'interruption n'a pas encore commencé.
Une seule interruption peut être commandée à une position spécifique à la fois. Si une interruption a été commandée, elle doit être terminée ou abandonnée pour qu'une autre interruption puisse être acceptée.
Lorsque vous exécutez MC_GroupInterrupt
ou MC_GroupInterruptAt
, un arrêt invariant de chemin est exécuté dans un premier temps, semblable à un MC_GroupHalt
. Ensuite, l'état du groupe d'axes ("continue data") est stocké dans une variable transmise par l'utilisateur (type SMC_AXIS_GROUP_CONTINUE_DATA
). Maintenant, le groupe d'axes est dans l'état GroupStandby
et peut être utilisé normalement. Un exemple typique serait que le groupe d'axes est décalé.
Plus tard, vous pouvez utiliser MC_GroupContinue
pour continuer l'exécution interrompue. Pour ce faire, transférez les "données continues" enregistrées. Pour que cela fonctionne sans erreur, la position du groupe d'axes doit correspondre à la position qu'il avait après l'exécution de MC_GroupInterrupt
. (Voir SMC_GroupGetContinuePosition
.)
Lorsqu'un mouvement de poursuite a été interrompu (c'est-à-dire un mouvement qui a été commandé par rapport à un repère dynamique), MC_GroupInterrupt
ne s'arrête pas absolument (comme MC_GroupHalt
), mais relativement au repère dynamique. Par exemple, si une pièce est suivie sur une table rotative, MC_GroupInterrupt
s'arrête par rapport à la pièce. Le groupe d'axes continue à suivre la pièce. Les données continues doivent être mises à jour avec SMC_GroupUpdateContinueData
si la cinématique a des axes rotatifs à périodes multiples. Ensuite, le mouvement peut être poursuivi avec MC_GroupContinue
.
Important
La variable de type SMC_AXIS_GROUP_CONTINUE_DATA
ne doivent pas être stockés de manière persistante ou modifiés lors d'un changement en ligne.
Astuce
Utilisation du bloc fonction SMC_GroupWait
, vous pouvez attendre sur le chemin entre deux mouvements pendant un temps programmable.
Arrêt du mouvement via MC_GroupHalt ou MC_GroupStop
Après un arrêt du mouvement déclenché par MC_GroupHalt
ou MC_GroupStop
, le mouvement du groupe d'axes peut être poursuivi en utilisant SMC_GroupSaveContinueData
et MC_GroupContinue
sans aucune perte d'information. Cette POU enregistre l'état actuel, la position actuelle et tous les mouvements commandés. En conséquence, le mouvement peut être poursuivi plus tard exactement à partir de cette position.
Comportement avant la version 4.12.0.0 : Le SMC_GroupSaveContinueData
le bloc fonction doit être appelé dans le même cycle où MC_GroupHalt
ou MC_GroupStop
est appelé. A ce moment, vous devez vous assurer que SMC_GroupSaveContinueData
est appelé avant MC_GroupHalt
ou MC_GroupStop
. Sinon, les mouvements abandonnés seront supprimés de la file d'attente.
Comportement à partir de la version 4.12.0.0 : Le SMC_GroupSaveContinueData
le bloc fonctionnel peut être appelé à tout moment jusqu'au premier mouvement après l'appel MC_GroupHalt
ou MC_GroupStop
. La position de continuation est la position actuelle du groupe d'axes au moment du premier appel du bloc fonction. Le chemin enregistré se compose de tous les mouvements qui ont été acceptés avant la commande d'arrêt/d'arrêt.
Pour pouvoir continuer la trajectoire à l'endroit où le groupe d'axes s'est arrêté en raison de MC_GroupHalt
ou MC_GroupStop
, SMC_GroupSaveContinueData
doit être appelé dans le cycle où MC_GroupHalt
ou MC_GroupStop
fixe le Done
signal.
Une seule instance de SMC_GroupSaveContinueData
peut être appelé par groupe d'axes.
Astuce
L'enregistrement de l'état actuel avant la commande d'arrêt/arrêt peut prendre plusieurs cycles, mais il est garanti que les informations d'état du premier cycle seront enregistrées avant tout mouvement interrompu.
Astuce
SMC_GroupSaveContinueData
peut être appelé à tout moment pour enregistrer l'état actuel, non seulement en relation avec l'appel MC_GroupHalt
ou MC_GroupStop
.
Arrêt d'un mouvement suite à une erreur
Si un mouvement est arrêté en raison d'une erreur, les différents axes d'un groupe d'axes sont arrêtés individuellement et commutés en état d'erreur. Dans le processus, le TCP quitte le chemin prévu. Vous pouvez maintenant acquitter l'erreur, réinitialiser le groupe d'axes et vous déplacer jusqu'à la position où l'erreur a été détectée. Ensuite, vous pouvez demander au groupe d'axes de continuer les mouvements précédemment planifiés.
Vous utilisez le SMC_GroupEnableResumeAfterError
bloc fonction pour permettre à la fonction de reprendre les mouvements programmés après une erreur. Le bloc fonction doit être appelé cycliquement dans la tâche de cycle de bus. Une seule instance de ce bloc fonction peut être appelée par groupe d'axes.
Si le groupe d'axes détecte une erreur et passe à l'état Errorstop
, puis il enregistre les mouvements déjà acceptés et les informations d'état nécessaires dans une variable de type SMC_AXIS_GROUP_CONTINUE_DATA
. Ensuite, cette variable contient les "données continues" et est passée en entrée de SMC_GroupEnableResumeAfterError
.
Cela vous permet de reprendre les mouvements plus tard en utilisant MC_GroupContinue
. Si les erreurs sont causées par les mouvements commandés (par exemple, des violations de l'espace de travail ou un rayon d'arc invalide), elles ne peuvent pas être résolues de cette manière. Ces erreurs se reproduiront après la poursuite du mouvement. Le mécanisme est davantage destiné aux erreurs d'axe unique et à d'autres événements externes qui forcent le groupe d'axes à l'arrêt d'erreur.
MC_GroupContinue
nécessite que le groupe d'axes soit à une position spécifique lors de la poursuite du mouvement. En cas de reprise après une erreur, cette position est la position actuelle au moment où l'erreur a été détectée. Vous pouvez utiliser le SMC_GroupGetContinuePosition
bloc fonction pour obtenir cette position.
Important
Si une erreur de groupe d'axes ne permet pas la poursuite du mouvement (comme une erreur interne lors de l'écriture des données de poursuite), alors
MC_GroupContinue
etSMC_GroupGetContinuePosition
renvoyer le nouvel identifiant d'erreurSMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN
.Si un
MC_GroupStop
est actif lorsque l'erreur se produit, alorsMC_GroupStop
est également réactivé lorsque le mouvement se poursuit. Le groupe d'axes a déjà été arrêté et leMC_GroupStop
a supprimé tous les mouvements en attente afin qu'aucun mouvement ne se produise.Lorsqu'une erreur de groupe d'axes se produit, l'instance de bloc fonction du mouvement actif émet l'erreur (sorties
Active
etBusy
basculer versFALSE
, et sortieError
passe àTRUE
). Les instances de blocs fonctionnels de mouvements tamponnés ou mélangés, qui ne sont pas encore actives, génèrent également une erreur. Après le redémarrage, toutes ces instances de blocs fonctionnels sont réinitialisées àBusy
/Active
et leurs sorties remises àError
/CommandAborted
.