Skip to main content

Exemple de déclencheur 1 : exemple simple

Le Robotics_Trigger.project l'exemple de projet décrit ici se trouve dans le répertoire d'installation de CODESYS sous ..\CODESYS SoftMotion\Examples.

Les déclencheurs sont utilisés pour savoir exactement quand un groupe d'axes atteint un point spécifique sur la trajectoire commandée. Ces informations peuvent être utilisées, par exemple, pour allumer ou éteindre un outil exactement au bon moment. Cet exemple montre comment un déclencheur unique est commandé sur un mouvement, puis lu de manière cyclique. Sur cette base, le Exemple de déclencheur 2 : Processus de collage projet montre un exemple d'application réaliste.

Structure de la demande

L'application se compose de deux programmes : un Main_PRG s'exécutant dans la tâche de bus et un Planning_PRG exécuté dans la tâche de planification du groupe d'axes. De plus, il y a aussi une trace.

Main_PRG:

Le Main_PRG programme contient la machine d'état principale de l'application. Les deux premiers états permettent d'initialiser et de mettre sous tension les variateurs et le groupe d'axes. Dans le STATE_COMMAND_MOVEMENT_WITH_TRIGGER état, un déclencheur est d'abord préparé à l'aide d'une instance de l'état SMC_GroupPrepareTrigger bloc fonctionnel. La position est spécifiée relativement avec une valeur de 0,6. En conséquence, le déclencheur est placé au point où 60 % du mouvement assigné est terminé. Le déclencheur préparé est affecté au prochain mouvement commandé. Dans cet exemple, un déplacement linéaire vers la position (X=20, Y=10) est commandé par un MC_MoveLinearAbsolute.

prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative;
prepTrigger.Position.MvtPosition := 0.6;
prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE);
 
moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);

Dans l'état suivant STATE_ENABLE_READ_TRIGGER, un exemple de SMC_GroupReadTrigger est lancé afin de lire l'état du déclencheur commandé. Le lien avec le déclencheur est établi au moyen de la TriggerId retourné par SMC_GroupPrepareTrigger.

readTrigger.TriggerId := prepTrigger.TriggerId;
readTrigger.Enable := TRUE;

Dans le STATE_CHECK_TRIGGER état, l'état du déclencheur est enfin vérifié cycliquement. Dès que SMC_GroupReadTrigger rapports Active en tant qu'état, la durée jusqu'à ce que le déclencheur soit atteint peut être lue. La durée se réfère toujours au début du cycle en cours. Ainsi, le déclenchement est atteint dans le cycle en cours si la durée est inférieure au temps de cycle (dans cet exemple, 0,004 s) :

IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN
    IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN
        triggerFired := TRUE;
        ...
    END_IF
END_IF

Planning_PRG

Dans le Planning_PRG programme, la durée prévisionnelle du planning est configurée au moyen du SMC_TuneCPKernel bloc fonctionnel. Le SMC_GroupReadTrigger le bloc fonctionnel peut émettre une sortie lorsqu'un déclencheur atteint la durée de prévision. Dans l'exemple, la durée de prévision est fixée à 0,1 s. Par conséquent, le statut de la SMC_GroupReadTrigger le bloc fonction passe à Active 0,1 s avant que le groupe d'axes n'atteigne le déclencheur et délivre une durée valide à partir de là.

tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);

Trace

La trace peut être utilisée pour suivre le comportement du SMC_GroupReadTrigger bloc fonctionnel.

Dans le premier diagramme, vous pouvez voir qu'un mouvement est exécuté de (X=0, Y=0) à (X=20, Y=10). La gâchette est située à la position relative 0.6 sur le mouvement, c'est-à-dire à (X=12, Y=6).

Le deuxième diagramme montre la valeur de triggerTime sortie de SMC_GroupReadTrigger. La valeur saute à 0,1 s car la durée prévue de la planification est de 0,1 s, puis chute linéairement jusqu'à ce que la valeur 0 soit atteinte à la position (X=12, Y=6).

Le troisième diagramme montre la valeur de triggerFired variable définie dans le STATE_CHECK_TRIGGER état de Main_PRG dès que le groupe d'axes est à moins de 0,004 s du déclencheur.