Tâche externe synchrone en temps réel

Présentation

La tâche externe synchrone en temps réel est une tâche externe synchrone avec le processus RTP (Real-Time Process) Sercos. La tâche externe synchrone en temps réel est déclenchée dans le processus RTP et exécutée après l’exécution du processus RTP.

Cas d'utilisation courant de la tâche en temps réel : capture de position dans la plage de la milliseconde sans utilisation de sondes tactiles (TP).

Description

Les tâches en temps réel internes au contrôleur qui gèrent la communication et les calculs Sercos pour les axes déclenchent l'événement AFTER_RTP à chaque cycle. Cet événement peut être utilisé pour déclencher une tâche de code de contrôleur de mouvement de type Externe déclenchée sous forme d’événement externe.

Avec ce paramétrage, la tâche externe synchrone en temps réel est déclenchée dès que possible après la fin de la tâche en temps réel.

Les priorités des tâches de code du contrôleur de mouvement sont respectées. Par conséquent, même si cette tâche déclenchée par un événement est déjà déclenchée par le processus RTP, elle est retardée si une autre tâche de priorité supérieure est également déclenchée.

La tâche peut être interrompue par le processus RTP.

Configuration

Procédure :

Etape

Action

1

Dans l’arborescence des équipements, affichez la fenêtre Configuration de tâche.

2

Dans la boîte à liste Type, sélectionnez l’élément Externe.

3

Dans la boîte à liste Evénement externe, sélectionnez l’élément AFTER_RTP.

4

Définissez la priorité de la tâche et activez un chien de garde comme requis par votre application.

NOTE : Consultez le document M262 Logic/Motion Controller - Guide de programmation pour en savoir plus sur l'écran Configuration de tâche et sur les priorités des tâches.

Remarques sur le temps de cycle

Le temps de cycle du processus RTP s'applique uniquement à la phase de communication Sercos 4.

Temps de cycle de la tâche externe synchrone en temps réel dans les phases de communication Sercos :

Phase de communication Sercos

Durée de cycle

NRT

4 ms

0

2 ms

1

1 ms

2

1 ms

3

Durée de cycle Sercos

4

Durée de cycle Sercos

Si le temps d'exécution du processus RTP, de la tâche externe synchrone en temps réel et d'autres tâches de priorité supérieure dépasse le temps de cycle Sercos, la tâche externe synchrone en temps réel est interrompue par le RTP. Dans ce cas, la tâche externe synchrone en temps réel n'est plus synchrone avec le processus RTP.

Pour maintenir la synchronicité entre la tâche externe synchrone en temps réel synchrone et le processus RTP, veillez à ce que le temps total d'exécution de la tâche externe synchrone en temps réel et du processus RTP ne dépasse pas le temps de cycle Sercos configuré. Exemple de code :

hTask : RTS_IEC_HANDLE;
pstTaskInfo : POINTER TO CmpIecTask.Task_Info2;
udiResult : RTS_IEC_RESULT;
dwCycleTimeInUs : DWORD;
bLossOfSynchronicity : BOOL;
lrRtpCycleTimeInUs : LREAL;
lrPercentageOfRtpCycle : LREAL;

hTask := CmpIecTask.IecTaskGetCurrent(ADR(udiResult));
IF udiResult = 0 THEN
    pstTaskInfo := CmpIecTask.IecTaskGetInfo3(hTask, ADR(udiResult));
    IF udiResult = 0 THEN
        dwCycleTimeInUs := pstTaskInfo^.dwCycleTime;
    END_IF
END_IF

lrPercentageOfRtpCycle := S3M.FC_GetMotionCycleTaskLoadOfLastCycle();
lrRtpCycleTimeInUs := lrPercentageOfRtpCycle * (UDINT_TO_LREAL(SercosMaster.SercosCycletimeConfig.Cycletime) / 1E5);

IF (udiResult = 0) AND ( (lrRtpCycleTimeInUs + DWORD_TO_LREAL(dwCycleTimeInUs)) > UDINT_TO_LREAL(SercosMaster.SercosCycletimeConfig.Cycletime / 1000) ) THEN
    // loss of synchronicity
    bLossOfSynchronicity := TRUE;
    // TODO stop machine
END_IF