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.
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.
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. |
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