Tarea externa síncrona en tiempo real

Descripción general

La tarea externa síncrona en tiempo real es una tarea externa síncrona con el proceso en tiempo real (RTP) Sercos. La tarea externa síncrona en tiempo real se activa en el RTP y se ejecuta después de que finalice el RTP.

Un caso de uso típico para la tarea en tiempo real es la captura de posición en el rango de milisegundos sin usar sondas por contacto.

Descripción

Las tareas en tiempo real internas del controlador que se ocupan de la comunicación Sercos y de los cálculos de los ejes activan el evento AFTER_RTP en cada ciclo. Este evento se puede usar para activar una tarea de código del Motion Controller del tipo Tarea externa activada como evento externo.

Con esta parametrización, la tarea externa síncrona en tiempo real se activa lo antes posible una vez finalizada la tarea en tiempo real.

Las prioridades de las tareas de código del Motion Controller se respetan. Esto significa que, aunque el RTP ya haya activado esta tarea activada por un evento, se retarda si se activa también otra tarea de mayor prioridad.

El RTP puede interrumpir la tarea.

Configuración

Procedimiento:

Paso

Acción

1

En Dispositivos, abra la ventana Configuración de tarea.

2

En el cuadro de lista Tipo, seleccione el elemento Externo.

3

En el cuadro de lista Evento externo, seleccione el elemento DESPUÉS_DE_RTP.

4

Establezca una prioridad para la tarea y habilite un watchdog si lo requiere su aplicación.

NOTA: Consulte M262 - Guía de programación para obtener información adicional acerca de la pantalla de configuración de tarea y de las prioridades de las tareas.

Consideraciones sobre el tiempo de ciclo

El tiempo de ciclo del RTP solo se aplica a la fase de comunicación Sercos 4.

Tiempo de ciclo de la tarea externa síncrona en tiempo real en las fases de comunicación Sercos:

Fase de comunicación Sercos

Tiempo de ciclo

NRT

4 ms

0

2 ms

1

1 ms

2

1 ms

3

Tiempo de ciclo de Sercos

4

Tiempo de ciclo de Sercos

Si el tiempo de ejecución del RTP, la tarea externa síncrona en tiempo real y otras tareas de mayor prioridad supera el tiempo de ciclo de Sercos, el RTP interrumpe la tarea externa síncrona en tiempo real. En este caso, la tarea externa síncrona en tiempo real deja de ser síncrona con el RTP.

Para que la tarea externa síncrona en tiempo real siga siendo síncrona con el RTP, asegúrese de que el tiempo de ejecución de la tarea externa síncrona en tiempo real más el tiempo de ejecución del RTP no superen el tiempo de ciclo de Sercos configurado. Código de ejemplo:

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