Introduzione
RTE è un sistema operativo multitasking.
Segnalibri
Diagramma temporale tasks
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
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à.
Tempo = Tt |
Esempio 2
Strategia 1, 2 Tasks (R3) + 1 OB con stesso livello di priorità
Tempo = Tt. Tempo OB1 = Tt |
Esempio 3
Strategia 1, 3 Tasks (R3) + 6 OB con stesso livello di priorità
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à
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
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
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
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.
Tempo = Tt/4 Tempo = Tt/3 Tempo = Tt/2 Tempo = Tt |
Comandi dispositivo timesharing
Permette di visualizzare informazioni sullo stato dei task gestiti in timesharing |
|
Permette di settare il numero minimo di passi riservati ai task in timesharing |
|
Permette di settare il numero minimo tempo di esecuzione riservato ai task in timesharing |
|
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 |