Skip to main content

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.

_sm_img_movement_interrupt_position.png
. Gestion des erreurs pour MC_GroupInterruptAt
  • 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 comme MC_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.

. Limites de MC_GroupInterruptAt
  • 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 et SMC_GroupGetContinuePosition renvoyer le nouvel identifiant d'erreur SMC_AXIS_GROUP_CONTINUE_DATA_NOT_WRITTEN.

  • Si un MC_GroupStop est actif lorsque l'erreur se produit, alors MC_GroupStop est également réactivé lorsque le mouvement se poursuit. Le groupe d'axes a déjà été arrêté et le MC_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 et Busy basculer vers FALSE, et sortie Error 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.