Abilitare JavaScript per vedere questo sito.

Introduzione

RTE è un sistema operativo multitasking.

Segnalibri

Diagramma temporale tasks

scheduler_generale

Task gestiti

Tipologia di task

Priorità

Descrizione

Task in background (Time-sharing)

7

Si tratta di 8 task scritti in linguaggio R3 a bassa priorità da utilizzare per lo svolgimento di funzioni non critiche dal punto di vista temporale (per esempio la gestione della logica macchina).

Il task 1 ($TASK1) rappresenta il punto d'entrata del programma. Sarà poi compito di questo stesso task abilitare/disabilitare la gestione degli altri (vedi istruzioni mt_en ed mt_dis).

Nota: l'architettura tipica di questi task consiste in una fase di inizializzazioni seguita da un loop infinito all'interno del quale vengono eseguite le varie gestioni della macchina controllata.

La corretta evoluzione di questi task è eseguita da RTE. In caso di anomalie viene generato l'allarme 9113 User Task(t.s.): reduced freq. <Tname>

Informazioni circa durata e frequenza sono lasciate a cura del programmatore (loop_time). Tramite i comandi dispositivo ts_per_override e ts_nst_override è possibile visualizzare/overridare le impostazioni di esecuzione di default

Ladder a bassa priorità

6

Task Ladder la cui frequenza di esecuzione viene decisa dall'utente (1Hz÷2000Hz).

La sua durata può essere visionata attraverso la variabile predefinita ltl_length

OB service

5

 

Rule_periodic

4

Particolare RULE che viene eseguita a una frequenza impostata dall'utente.

Avendo priorità inferiore alle RULES, il periodo di esecuzione è soggetto a jitter, la cui durata massima sarà pari al tempo necessario ad RTE per eseguire i task di priorità superiore (RULE + TASK LADDER SINCRONO + TASK LADDER AD ALTA PRIORITÀ + eventuale TASK SU EVENTO)

Ladder a priorità normale

3

Task scritto in linguaggio Ladder la cui frequenza di esecuzione viene decisa dall'utente (1Hz÷2000Hz).

La sua durata può essere visionata attraverso la variabile predefinita ltn_length

RULES (funzioni a frequenza fissa, interrupt)

 

RULE_INIT

2

Si tratta di Task scritti in linguaggio R3 riservati alla costruzione delle traiettorie, alla descrizione dei legami esistenti tra i vari assi ed all'eventuale esecuzione dell'algoritmo di retroazione (chiusura di anello).

RTE è in grado di eseguire contemporaneamente  fino a 32 RULES (RC) nell'interrupt di sistema.

La selezione delle RULES da eseguire avviene mediante l'istruzione group, mentre l'ordine di esecuzione può essere imposto tramite l'istruzione order.

 

La sua durata può essere visionata attraverso la variabile predefinita rule_length

 

La rule_init è una particolare RULE che viene eseguita una sola volta prima che vengano eseguite le RULES.

Essa viene eseguita la prima volta che viene invocata l'istruzione order o group.

Nota: fino a che il programma non esegue per la prima volta l'istruzione group o viene imposta la variabile predefinita rc nessuna RULE è attiva.

Nota: se si desidera attivare la rule_init ad esempio per attivare la rule_prologue o epilogue anche in assenza di rules attive, utilizzare la keyword rule_start_norc.

Ladder sincrono

2

È un task scritto in linguaggio Ladder che viene eseguito (se presente) insieme alle RULES.

La sua durata può essere visionata attraverso la variabile predefinita lts_length

Task su evento

1

Sono task particolari scritti in linguaggio R3 aventi massima priorità di sistema e che devono essere usati per risolvere particolari esigenze.

Gli eventi di abilitazione sono:

Fronte di variazione di un input digitale (int_inp)

Frequenza impostata (int_timer)

Scadere di un tempo specificato dal verificarsi di una condizione (int_after)

Nota: qualsiasi operazione in atto da RTE viene interrotta per gestire questi eventi. (La latenza tipica può essere stimata in 40us). Di conseguenza si ricorda che un uso smodato di questa prestazione può causare il degrado delle normali prestazioni del sistema. Si invitano gli utenti ad un uso assennato della prestazione, onde evitare assuefazione!

Ladder ad alta priorità

1

È un task scritto in linguaggio Ladder il cui periodo di esecuzione viene deciso dall'utente (1Hz÷2000Hz).

La sua durata può essere visionata attraverso la variabile predefinita lth_length.

Nota: qualsiasi operazione in atto da RTE viene interrotta per gestire questi eventi. (La latenza tipica può essere stimata in 40us). Di conseguenza si ricorda che un uso smodato di questa prestazione può causare il degrado delle normali prestazioni del sistema. Si invitano gli utenti ad un uso assennato della prestazione, onde evitare assuefazione!

Diagramma temporale rules

scheduler_rule

Funzione

Descrizione

OB hooking 1

Object Block agganciati hook1

REF_PROLOGUE

Funzione opzionale che, se definita, viene eseguita per prima al verificarsi dell'interrupt di sistema (essendo eseguita per prima è la funzione con meno gitter rispetto al sample interval SI)

REF

In funzione delle RULES attive, per gli assi in esse definiti, vengono eseguiti tutti i campi REF END_REF al fine di generare il riferimento di pilotaggio (risultato del loop di posizione).

RPE

Gestione gruppo di assi affidata ad RPE con selezione "prima delle rule"

OB hooking 2

Object Block agganciati hook2

RULE_PROLOGUE

Funzione opzionale che, se definita, viene eseguita subito dopo i campi REF

MOTION, AUX

MOTION: Generazione nuove variabili cinematiche degli assi (IP o IV o IA).

AUX: Esecuzione codice temporalmente critico ma che non riguarda gli assi (opzionale).

La divisione tra MOTION e AUX è solo concettuale ed è usata dai programmatori particolarmente ordinati e pignoli

RULE_EPILOGUE

Funzione opzionale che, se definita, viene eseguita subito dopo i campi MOTION AUX

LADDER SINCRONO

TASK LADDER SINCRONO. Usare il comando LAD_STATUS per avere informazioni circa le tempistiche di esecuzione

RPE

Gestione gruppo di assi affidata ad RPE con selezione "dopo le rule"

OB hooking 3

Object Block agganciati hook3

Gestione timesharing

Il tempo di esecuzione dei tasks viene deciso da RTE e viene suddiviso in maniera appropriata.

Il cambio dei task R3 viene fatto da RTE considerando 2 variabili: Minimo tempo di esecuzione e Minimo numero di passi.

Se alla fine del minimo tempo di esecuzione il minimo numero di passi non è stato fatto, RTE attende che vengano fatti il minimo numero di passi prima di cambiare task.

Nota: in caso di chiamate a istruzioni DWELL o MT_WAIT il cambio di task è fatto immediatamente.

Da RTE 34.23.2 anche alcune funzioni OB possono essere eseguite in timesharing. Il cambio di funzioni OB viene fatto da RTE considerando solamente il minimo tempo di esecuzione.

Se più di una funzione OB è presente, RTE eseguirà fino a 4 funzioni  OB per ogni "slot" di tempo, fino a un massimo di 128 funzioni OB (vedi esempi 3,4,6,7).

Da RTE 34.23.2 è inoltre possibile definire fino a 4 livelli di priorità. In questo caso RTE utilizzerà 4 differenti strategie a seconda del numero di livelli definiti.

Nota: RTE controlla run time il corretto evolvere dei task, dando allarme (9100 etc...) e togliendo potenza al Power Set se necessario.

Strategia

Numero di livelli di priorità

Sequenza di esecuzione

Tempo disponibile per eseguire i task. Ogni task ha il proprio tempo (Tt).

Strategia 1: Un livello di priorità presente

es. Priorità 4 (default, priorità più bassa)

P4

Ogni task (con priorità 4) sarà eseguito per il tempo Tt.

Vedi esempi 1-:-4

Strategia 2: Due livelli di priorità presenti

es. Priorità 4 e Priorità 2 (P4,P2)

P2 P4 P2 P4 P2

Ogni task con priorità 4 sarà eseguito per il tempo Tt/2.

Ogni task con priorità 2 sarà eseguito per il tempo Tt/3.

Vedi esempi 5-:-7

Strategia 3: Tre livelli di priorità presenti

es. Priorità 4, Priorità 2 e Priorità 1 (P4, P2, P1)

P1 P2 P4 P1 P2 P1 P4 P2 P1

Ogni task con priorità 4 sarà eseguito per il tempo Tt/2

Ogni task con priorità 2 sarà eseguito per il tempo Tt/3

Ogni task con priorità 1 sarà eseguito per il tempo Tt/4

Strategia 4: Quattro livelli di priorità presenti

es. Priorità 4, Priorità 3, Priorità 2 e Priorità 1 (P4,P3,P2,P1)

P1 P2 P3 P1 P2 P1 P3 P2 P1 P4

Ogni task con priorità 4 sarà eseguito per il tempo Tt

Ogni task con priorità 3 sarà eseguito per il tempo Tt/2

Ogni task con priorità 2 sarà eseguito per il tempo Tt/3

Ogni task con priorità 1 sarà eseguito per il tempo Tt/4

Vedi esempio 8

In pratica, l'incremento di priorità di un task porta il task ad essere eseguito più frequentemente, ma per meno tempo.

Esempio 1

Strategia 1, 8 Tasks (R3) con stesso livello di priorità.

T1

T2

T3

T4

T5

T6

T7

T8

T1

T2

T3

T4

T5

T6

T7

T8

T1

T2

T3

T4

T5

T6

Tempo = Tt

Esempio 2

Strategia 1, 2 Tasks (R3) + 1 OB con stesso livello di priorità

T1

T2

OB1

T1

T2

OB1

T1

T2

OB1

T1

T2

OB1

T1

T2

OB1

T1

T2

Tempo = Tt.

Tempo OB1 = Tt

Esempio 3

Strategia 1, 3 Tasks (R3) + 6 OB con stesso livello di priorità

T1

T2

T3

OB1

OB2

OB3

OB4

T1

T2

T3

OB5

OB6

OB1

OB2

T1

T2

T3

OB3

OB4

OB5

OB6

T1

T2

T3

OB1

OB2

OB3

OB4

T1

T2

T3

OB5

OB6

OB1

OB2

Tempo = Tt.

Tempo OB1 = Tempo OB2 = Tempo OB3 = Tempo OB4 = Tempo OB5 = Tempo OB6 = Tt/4

Esempio 4

Strategia 1, 3 Tasks (R3) + 128 OB con stesso livello di priorità

T1

T2

T3

OB1

OB2

OB3

OB4

T1

T2

T3

OB5

OB6

OB7

OB8

T1

T2

T3

OB..

OB..

OB..

OB..

...

...

...

OB127

OB128

OB1

OB2

T1

T2

Tempo = Tt.

Tempo OB1 = Tempo OB2 = Tempo OB3 = Tempo OB4... = Tempo OB128 = Tt/4

Esempio 5

Strategia 2, 8 Tasks (R3). Dall'1 al 7 con priorità P4, mentre il T8 con P3

T8

T1

T8

T2

T8

T8

T3

T8

T4

T8

T8

T5

T8

T6

T8

T8

T7

T8

T1

T8

T8

Tempo = Tt/3

Tempo = Tt/2

Esempio 6

Strategia 2, 3 Tasks (R3) + 2 OB. T1,T2 e T3 con priorità P4 mentre OB1,OB2 con priorità P3

OB1

OB2

T1

OB1

OB2

T2

OB1

OB2

OB1

OB2

T3

OB1

OB2

T1

OB1

OB2

OB1

OB2

T2

OB1

OB2

T3

OB1

OB2

Tempo = Tt/3.

Tempo OB1 = Tempo OB2 = Tt/6

Tempo = Tt/2

Esempio 7

Strategia 2, 3 Tasks (R3) + 6 OB. T1,T2, T3 con priorità P4. OB1,OB2,OB3,OB4,OB5,OB6 con priorità P3

OB1

OB2

OB3

OB4

T1

OB5

OB6

OB1

OB2

T2

OB3

OB4

OB5

OB6

OB1

OB2

OB3

OB4

T3

OB5

OB6

OB1

OB2

T1

OB3

OB4

OB5

OB6

OB1

OB2

OB3

OB4

T2

OB5

OB6

OB1

OB2

T3

OB3

OB4

OB5

OB6

Tempo = Tt/3.

Tempo OB1 = Tempo OB2 = Tempo OB3 = Tempo OB4 = Tempo OB5 = Tempo OB6 = Tt/12

Tempo = Tt/2

Esempio 8

Strategia 4, 3 Tasks (R3) + 3 OB. T1,T2,T3 con priorità P4. OB1 con priorità P3. OB2 con priorità P2. OB3 con priorità P1.

OB3

OB2

OB1

OB3

OB2

OB3

OB1

OB2

OB3

T1

                                                                                                           |

---------------------------------------------------------------------------------------

|

OB3

OB2

OB1

OB3

OB2

OB3

OB1

OB2

OB3

T2

                                                                                                           |

---------------------------------------------------------------------------------------

|

OB3

OB2

OB1

OB3

OB2

OB3

OB1

OB2

OB3

T3

                                                                                                           |

---------------------------------------------------------------------------------------

|

OB3

OB2

OB1

OB3

OB2

OB3

OB1

OB2

OB3

T4

Tempo = Tt/4

Tempo = Tt/3

Tempo = Tt/2

Tempo = Tt

Comandi dispositivo timesharing

TS_INFO

permette di visualizzare informazioni sullo stato dei task gestiti in timesharing

TS_NST_OVERRIDE

permette di settare il numero minimo di passi riservati ai task in timesharing

TS_PER_OVERRIDE

permette di settare il numero minimo tempo di esecuzione riservato ai task in timesharing

TS_PRIO

permette di impostare la priorità di esecuzione dei task in timesharing

Variabili predefinite timesharing

SYS_FLAG.29

abilita il dump dei messaggi di cambio di task in timesharing

 

  

Keyboard Navigation

F7 for caret browsing
Hold ALT and press letter

This Info: ALT+q
Page Header: ALT+h
Topic Header: ALT+t
Topic Body: ALT+b
Contents: ALT+c
Search: ALT+s
Exit Menu/Up: ESC