Task esterno sincrono in tempo reale

Panoramica

Il task esterno sincrono in tempo reale è un task esterno in sincronia con il RTP (Real-Time Process) Sercos. Il task esterno sincrono in tempo reale viene attivato nel RTP ed eseguito al termine del RTP.

Un tipico caso d'uso del task in tempo reale è la cattura della posizione nella gamma dei millisecondi senza utilizzare touch probe o tastatori.

Descrizione

I task in tempo reale interni del controller che gestiscono calcoli e comunicazione Sercos per gli assi attivano l'evento AFTER_RTP in ogni ciclo. È possibile utilizzare questo evento per attivare un task codice del controller di movimento del tipo esterno attivato come evento esterno.

Con questa parametrizzazione, il task esterno sincrono in tempo reale viene attivato non appena possibile al termine del task in tempo reale.

Le priorità dei task codice del controller di movimento sono rispettate. Perciò, questo task anche se attivato da evento è già attivato da RTP, viene ritardato se è attivato anche un altro task con priorità più alta.

Il task può essere interrotto dal RTP.

Configurazione

Procedura:

Passo

Azione

1

Nella Struttura dispositivi, visualizzare la finestra Configurazione task.

2

Dalla casella di riepilogo Tipo, selezionare l'elemento Esterno.

3

Dalla casella di riepilogo Evento esterno, selezionare l'elemento AFTER_RTP.

4

Impostare una priorità del task e attivare un watchdog come richiesto dall'applicazione.

NOTA: Consultare M262 Guida alla programmazione per ulteriori informazioni sulla schermata di configurazione task e sulle priorità del task.

Considerazioni sul tempo di ciclo

Il tempo di ciclo del RTP si applica solo alla comunicazione Sercos fase 4.

Tempo di ciclo del task esterno sincrono in tempo reale nelle fasi di comunicazione Sercos:

Fase di comunicazione Sercos

Tempo di ciclo

NRT

4 ms

0

2 ms

1

1 ms

2

1 ms

3

Tempo di ciclo Sercos

4

Tempo di ciclo Sercos

Se il tempo di esecuzione del RTP, del task esterno sincrono in tempo reale e di altri task con priorità più alta supera il tempo di ciclo Sercos, il task esterno sincrono in tempo reale viene interrotto dal RTP. In tale caso, il task esterno sincrono in tempo reale non è più in sincronia con il RTP.

Per mantenere il task esterno sincrono in tempo reale in sincronia con il RTP, verificare che il tempo di esecuzione del task esterno sincrono in tempo reale più il tempo di esecuzione del RTP non superi il tempo di ciclo Sercos configurato. Codice di esempio:

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