sisteme de timp real

156
1-2 1 INTRODUCERE ......................................................................................................................................... 1-6 1.1 Definiţii şi clasificări ........................................................................................................................... 1-6 1.2 Elementele unui SCTR ........................................................................................................................ 1-7 1.3 Tipuri de SCTR ................................................................................................................................ 1-13 1.3.1 Sisteme bazate pe ceas ............................................................................................................... 1-14 1.3.2 Sisteme bazate pe evenimente (senzori) .................................................................................... 1-14 1.3.3 Sisteme interactive ..................................................................................................................... 1-14 1.3.4 Definirea SCTR ......................................................................................................................... 1-14 1.4 Clasificarea programelor ................................................................................................................... 1-15 1.4.1 Programele secvenţiale .............................................................................................................. 1-15 1.4.2 Programe multitasking ............................................................................................................... 1-15 1.4.3 Programe timp - real .................................................................................................................. 1-16 1.5 Concluzii............................................................................................................................................ 1-16 2 SCTR PENTRU CONTROLUL PROCESELOR INDUSTRIALE .......................................................... 2-17 2.1 Tipuri de procese ............................................................................................................................... 2-17 2.2 Operaţii realizate de către sistemele pentru controlul proceselor ...................................................... 2-17 2.2.1 Controlul secvenţial al proceselor.............................................................................................. 2-17 2.2.2 Controlul în buclă (Direct Digital Control) ............................................................................... 2-18 2.2.3 Supervizarea proceselor ............................................................................................................. 2-20 2.2.4 Interfaţa om-maşină ................................................................................................................... 2-22 2.2.5 Responsabilităţile inginerului de sistem .................................................................................... 2-22 2.3 Structuri de sisteme pentru controlul proceselor industriale ............................................................. 2-23 2.3.1 Sisteme de control centralizate .................................................................................................. 2-23 2.3.2 Sisteme ierarhizate ..................................................................................................................... 2-24 2.3.3 Sisteme distribuite ..................................................................................................................... 2-26 2.3.4 Piramida automatizării ............................................................................................................... 2-28 3 STRUCTURA ECHIPAMENTELOR UTILIZATE IN SCTR ................................................................. 3-29 3.1 Structura hardware generală a calculatorului de proces..................................................................... 3-29 3.1.1 Unitatea centrală ....................................................................................................................... 3-31 3.1.2 Dispozitive de comunicaţie ........................................................................................................ 3-31 3.1.3 Dispozitive de proces................................................................................................................. 3-31 3.1.4 Dispozitivele standard ale calculatorului ................................................................................... 3-31 3.1.5 Dispozitivele operatorului de proces ......................................................................................... 3-32 3.1.6 Ceasul timp - real (Real Time Clock) ........................................................................................ 3-32 3.2 Semnale preluate/transmise de SCTR din/către lumea reală ............................................................. 3-32 3.3 Blocurile funcţionale ale unui SADC ................................................................................................ 3-33

Upload: mihai-daniel-dumitru

Post on 05-Jul-2015

662 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Sisteme de Timp Real

1-2

1 INTRODUCERE ......................................................................................................................................... 1-6

1.1 Definiţii şi clasificări ........................................................................................................................... 1-6

1.2 Elementele unui SCTR ........................................................................................................................ 1-7

1.3 Tipuri de SCTR ................................................................................................................................ 1-13

1.3.1 Sisteme bazate pe ceas ............................................................................................................... 1-14

1.3.2 Sisteme bazate pe evenimente (senzori) .................................................................................... 1-14

1.3.3 Sisteme interactive ..................................................................................................................... 1-14

1.3.4 Definirea SCTR ......................................................................................................................... 1-14

1.4 Clasificarea programelor ................................................................................................................... 1-15

1.4.1 Programele secvenţiale .............................................................................................................. 1-15

1.4.2 Programe multitasking ............................................................................................................... 1-15

1.4.3 Programe timp - real .................................................................................................................. 1-16

1.5 Concluzii ............................................................................................................................................ 1-16

2 SCTR PENTRU CONTROLUL PROCESELOR INDUSTRIALE .......................................................... 2-17

2.1 Tipuri de procese ............................................................................................................................... 2-17

2.2 Operaţii realizate de către sistemele pentru controlul proceselor ...................................................... 2-17

2.2.1 Controlul secvenţial al proceselor .............................................................................................. 2-17

2.2.2 Controlul în buclă (Direct Digital Control) ............................................................................... 2-18

2.2.3 Supervizarea proceselor ............................................................................................................. 2-20

2.2.4 Interfaţa om-maşină ................................................................................................................... 2-22

2.2.5 Responsabilităţile inginerului de sistem .................................................................................... 2-22

2.3 Structuri de sisteme pentru controlul proceselor industriale ............................................................. 2-23

2.3.1 Sisteme de control centralizate .................................................................................................. 2-23

2.3.2 Sisteme ierarhizate ..................................................................................................................... 2-24

2.3.3 Sisteme distribuite ..................................................................................................................... 2-26

2.3.4 Piramida automatizării ............................................................................................................... 2-28

3 STRUCTURA ECHIPAMENTELOR UTILIZATE IN SCTR ................................................................. 3-29

3.1 Structura hardware generală a calculatorului de proces ..................................................................... 3-29

3.1.1 Unitatea centrală ....................................................................................................................... 3-31

3.1.2 Dispozitive de comunicaţie ........................................................................................................ 3-31

3.1.3 Dispozitive de proces ................................................................................................................. 3-31

3.1.4 Dispozitivele standard ale calculatorului ................................................................................... 3-31

3.1.5 Dispozitivele operatorului de proces ......................................................................................... 3-32

3.1.6 Ceasul timp - real (Real Time Clock) ........................................................................................ 3-32

3.2 Semnale preluate/transmise de SCTR din/către lumea reală ............................................................. 3-32

3.3 Blocurile funcţionale ale unui SADC ................................................................................................ 3-33

Page 2: Sisteme de Timp Real

1-3

3.3.1 Conectarea dispozitivelor de I/E la calculatorul gazdă .............................................................. 3-33

3.3.1.1 Dispozitive pe magistrala internă ........................................................................................... 3-34

3.3.1.2 Dispozitive pe magistrala externă .......................................................................................... 3-34

3.3.2 Semnale din proces, traductoare şi condiţionarea semnalelor.................................................... 3-35

3.3.2.1 Tipuri de semnale .................................................................................................................. 3-36

3.3.2.2 Traductoare şi senzori ............................................................................................................ 3-37

3.3.2.2.1 Exemple de traductoare ................................................................................................... 3-37

3.3.3 Condiţionarea semnalelor .......................................................................................................... 3-41

3.3.3.1 Circuit tampon de intrare ....................................................................................................... 3-41

3.3.3.2 Conversia curent – tensiune ................................................................................................... 3-42

3.3.3.3 Scalarea semnalelor analogice ............................................................................................... 3-43

3.3.3.4 Filtrarea .................................................................................................................................. 3-43

3.3.3.5 Izolare analogică .................................................................................................................... 3-46

3.3.3.6 Protecţie la supratensiune ...................................................................................................... 3-47

3.3.3.7 Scalarea intrărilor/ieşirilor numerice ..................................................................................... 3-47

3.3.3.8 Izolarea numerică ................................................................................................................... 3-48

3.3.3.9 Detectarea contactelor............................................................................................................ 3-48

3.3.3.10 Comanda releelor ............................................................................................................... 3-49

3.3.4 Subsistemele de intrare/ieşire ale SADC ................................................................................... 3-49

3.3.4.1 Subsistemul de intrări analogice ............................................................................................ 3-49

3.3.4.1.1 Convertoare analog numerice (CAN) .............................................................................. 3-50

3.3.4.1.2 Amplificarea .................................................................................................................... 3-51

3.3.4.1.3 Multiplexarea analogică .................................................................................................. 3-51

3.3.4.1.4 Circuitele de eşantionare şi memorare (S/H) ................................................................... 3-52

3.3.4.1.5 Multiplexarea în timp ...................................................................................................... 3-52

3.3.4.1.6 Timpul de conversie ........................................................................................................ 3-52

3.3.4.1.7 Conectarea canalelor analogice la multiplexor ................................................................ 3-53

3.3.4.1.8 Scalarea intrărilor analogice ............................................................................................ 3-55

3.3.4.2 Subsistemul de ieşiri analogice .............................................................................................. 3-55

3.3.4.3 Subsistemul de intrări-ieşiri numerice ................................................................................... 3-56

3.3.4.4 Subsistemul de intrări-ieşiri de numărare .............................................................................. 3-56

4 PROGRAMAREA DISPOZITIVELOR I/E ÎN APLICAŢII TIMP - REAL ........................................... 4-57

4.1 Tehnici de comunicare cu dispozitivele de intrare/ieşire ................................................................... 4-57

4.1.1 Metoda Polling .......................................................................................................................... 4-57

4.1.2 Metoda întreruperilor externe .................................................................................................... 4-58

4.1.3 Metoda Intrări/iEşiri buffer-ate .................................................................................................. 4-58

4.1.4 Alegerea strategiei optime ......................................................................................................... 4-58

Page 3: Sisteme de Timp Real

1-4

4.2 Programarea utilizând întreruperile ................................................................................................... 4-60

4.2.1 Prezentarea sistemului de întreruperi la PC ............................................................................... 4-60

4.2.2 Plasarea I8259 în spaţiul de I/E la PC ........................................................................................ 4-62

4.2.3 Detalii de programare utilizând întreruperile la PC cu SO DOS ............................................... 4-63

4.2.4 Exemple de utilizare a întreruperilor ......................................................................................... 4-67

4.3 Dispozitive pentru generarea bazei de timp şi numărarea de evenimente ......................................... 4-72

4.3.1 Dispozitivul mumărător/periodizator I8254 .............................................................................. 4-72

4.3.2 Utilizarea I8254 pentru numărarea de evenimente .................................................................... 4-75

4.3.3 Utilizarea lui I8254 pentru generarea de întreruperi .................................................................. 4-76

4.3.4 Exemplu de utilizare a dispozitivului I8254 pentru generarea bazei de timp ............................ 4-79

4.3.5 Reprogramarea ceasului sistem ................................................................................................. 4-82

4.4 Exemplu de sistem de achiziţie de date ............................................................................................. 4-84

4.4.1 ADA 2100 - date generale şi prezentarea resurselor .................................................................. 4-84

4.4.2 Generalităţi ................................................................................................................................ 4-86

4.4.3 Setarea adresei de bază .............................................................................................................. 4-86

4.4.4 Harta I/E pentru ADA 2100 ....................................................................................................... 4-86

4.4.5 Modul de configurare al modulului ........................................................................................... 4-88

4.4.6 Descriere la nivel de schemă bloc .............................................................................................. 4-88

4.4.6.1 Lanţul de conversie analog-numerică .................................................................................... 4-88

4.4.6.2 Realizarea unei citiri A/N ...................................................................................................... 4-89

4.4.6.3 Circuitele de conversie numeric-analogică ............................................................................ 4-89

4.4.6.4 Interfaţa paralelă programabilă (PPI - I8255) ........................................................................ 4-90

4.4.6.5 PIT numărător/periodizator programabil (I8254) .................................................................. 4-90

4.4.7 Prezentarea comutatoarelor şi a programatoarelor hardware ..................................................... 4-90

4.4.8 Proceduri de calibrare ................................................................................................................ 4-93

4.4.9 Conectarea modulului la proces ................................................................................................. 4-95

4.4.10 Programe de test ........................................................................................................................ 4-95

4.4.11 Programarea modulului ADA 2100 ........................................................................................... 4-95

5 SISTEME DE OPERARE TIMP - REAL MULTITASKING ................................................................ 5-101

5.1 Introducere ....................................................................................................................................... 5-101

5.2 Gestiunea task-urilor în aplicaţii timp - real .................................................................................... 5-103

5.2.1 Tranziţia stărilor şi descriptori de task ..................................................................................... 5-104

5.2.2 Descriptori de task ................................................................................................................... 5-105

5.2.3 Dispecerizarea şi planificarea task-urilor ................................................................................. 5-106

5.2.4 Niveluri de prioritate................................................................................................................ 5-106

5.2.4.1 Nivelul întreruperilor ........................................................................................................... 5-108

5.2.4.2 Nivelul de ceas ..................................................................................................................... 5-108

Page 4: Sisteme de Timp Real

1-5

5.2.4.2.1 Task-uri periodice.......................................................................................................... 5-109

5.2.4.2.2 Task-uri întârziate.......................................................................................................... 5-113

5.2.4.3 Nivelul de bază .................................................................................................................... 5-113

5.2.5 Apelul la dispecer .................................................................................................................... 5-114

5.2.6 Exemplu de gestiune a task-urilor: SOTRM REX ................................................................... 5-116

5.2.6.1 Stările task-urilor ................................................................................................................. 5-116

5.2.6.2 Directivele implicate în tranziţia stărilor ............................................................................. 5-117

5.2.6.3 Descriptori de task ............................................................................................................... 5-118

5.2.6.4 Dispecerul ............................................................................................................................ 5-119

5.2.6.5 Planificatorul ....................................................................................................................... 5-121

6 ALGORITMI DE PLANIFICARE A TASK-URILOR ÎN SCTR CU CONSTRÂNGERI DE TIMP RIGIDE ........................................................................................................................................................... 6-125

6.1 Noţiuni introductive ......................................................................................................................... 6-125

6.2 Algoritmul de planificare RM ......................................................................................................... 6-128

6.2.1 Prezentarea algoritmului .......................................................................................................... 6-128

6.2.2 Extinderea algoritmului de planificare RM pentru includerea task-urilor sporadice ............... 6-134

6.2.3 Algoritmul de planificare RM în prezenţa supraîncărcării ocazionale..................................... 6-135

6.2.4 Generalizarea algoritmului de planificare RM......................................................................... 6-137

6.2.5 Considerarea întreruperilor ...................................................................................................... 6-139

6.2.6 Considerarea sincronizării task-urilor ...................................................................................... 6-141

6.3 Algoritmul de planificare EDF ........................................................................................................ 6-144

6.4 Analiza comparativă a algoritmilor RM şi EDF .............................................................................. 6-146

6.4.1 Supraîncărcarea execuţiei ........................................................................................................ 6-146

6.4.2 Supraîncărcarea de planificare ................................................................................................. 6-147

6.5 Studiu de caz: algoritm mixt de planificare RM-EDF ..................................................................... 6-148

6.5.1 Analiza performanţelor algoritmului ....................................................................................... 6-148

6.5.2 Testul de planificabilitate ........................................................................................................ 6-149

6.5.3 Localizarea Tx ......................................................................................................................... 6-150

7 COMUNICAŢIA TIMP - REAL ............................................................................................................. 7-151

7.1 Introducere ....................................................................................................................................... 7-151

7.2 Protocoale de comunicaţie timp - real ............................................................................................. 7-152

7.3 Protocoale bazate pe timpul limită ................................................................................................... 7-152

7.3.1 Constrângeri aferente nodurilor ............................................................................................... 7-153

7.3.2 Instabilitatea întârzierii ............................................................................................................ 7-156

8 BIBLIOGRAFIE ..................................................................................................................................... 8-157

Page 5: Sisteme de Timp Real

1-6

1 INTRODUCERE

1.1 Definiţii şi clasificări Aplicaţii ale sistemelor de calcul timp - real (SCTR) sunt întâlnite în toate domeniile de activitate. Cea mai mare parte dintre aceste aplicaţii se referă la sisteme informatice de supraveghere şi control în industrie (la nivel de utilaje, instalaţii, linii tehnologice, secţii, întreprinderi şi platforme industriale), în transport şi telecomunicaţii, în distribuţia energiei electrice, în automatizarea experimentărilor ştiinţifice, în activităţi de management, servicii etc.

În prezent, pot fi întâlnite pretutindeni echipamente, instalaţii, produse de larg consum etc. care au înglobate aplicaţii timp - real. În [Tur99] se arată modul de împărţire a pieţei comerciale de microprocesoare în anul 1999: mai puţin de 1% din lumea microprocesoarelor erau utilizate în sisteme cu întrebuinţare generală. Peste 99% dintre microprocesoare erau utilizate în aplicaţii timp-real. Acestea sunt omniprezente, de la telefoanele celulare, pagere, cuptoare cu microunde până la sisteme complexe de control trafic aerian, telecomunicaţii, utilităţi publice, conducerea proceselor industriale, multimedia etc.

Structura hardware şi software-ul de bază şi aplicativ prezintă trăsături specifice pentru SCTR, ceea ce face ca aceste sisteme să fie o categorie distinctă între sistemele de prelucrare a datelor.

Într-un sistem de calcul timp - real, esenţial este intervalul de timp dintre momentul introducerii datelor şi momentul obţinerii şi interpretării rezultatelor. Într-un sistem de prelucrare clasic, nu sunt impuse constrângeri pe fluxul introducere date – prelucrare date - obţinere rezultate pe când în SCTR timpul de răspuns este esenţial. Acesta este unul dintre motivele pentru care trebuie aplicate tehnici speciale pentru introducerea datelor, prelucrare şi vizualizare, respectiv aplicare a rezultatelor.

Privind dintr-un cadru mai larg, SCTR fac parte din categoria sistemelor de calcul ON LINE – în care datele de intrare sunt introduse direct de la locul unde sunt produse iar rezultatele sunt transmise direct la locul de utilizare. Datele fie sunt introduse de la terminale de către operatori umani, fie provin de la traductoare ori senzori amplasaţi în mediul extern. Rezultatele sunt transmise la ieşire la terminale pentru vizualizare de către operatorul uman sau la elemente de execuţie.

SCTR este un sistem de calcul care preia suficient de rapid datele de intrare, efectuează prelucrările necesare într-un interval de timp suficient de scurt şi transmite rezultatele la ieşire suficient de rapid pentru a mai influenţa desfăşurarea fenomenului la care se referă datele.

Timpul de răspuns al unui SCTR este timpul necesar pentru a genera o informaţie de reacţie la datele introduse.

Timpul de răspuns este o valoare absolută care diferă în funcţie de cerinţele aplicaţiei timp - real:

• sisteme de recunoaştere a vocii – [100ns – 10 ms];

• simulator de zbor –[1us-10us];

• simulare de procese şi controlul reţelelor - [10us-100us];

• control în telemetrie şi analize seismice - [100us=1ms];

• controllere pentru roboţi – [1ms-10ms];

• sisteme pentru controlul proceselor şi automatizări industriale – [100us-100ms];

• diagnosticare medicală automată şi laboratoare automate – [10ms – 100ms];

Page 6: Sisteme de Timp Real

1-7

• sisteme pentru detectare şi alarmare incendiu – [ 100ms-1s];

• sistem rezervări locuri – [2s-3s];

În funcţie de domeniul de utilizare există mai multe tipuri de sisteme de calcul ON LINE, care înglobează şi sistemele de calcul timp - real:

• Sisteme pentru controlul şi supravegherea proceselor.

• Sisteme conversaţionale – care presupun lucrul interactiv de la terminal, introducere de comenzi (date, programe etc.) şi răspuns imediat la acestea.

• Sisteme tranzacţionale – care sunt interactive de la terminal, dar numărul şi tipul de mesaje şi comenzi este limitat pentru a spori viteza de răspuns. Rezultatele se afişează în formate prestabilite la proiectarea aplicaţiei. Comenzile şi mesajele fixe se numesc tranzacţii. Exemple: sisteme bancare, rezervare de locuri, conducere de procese în regim ghid operator.

• Sisteme timp - real încorporate (Embedded Real Time Systems). Aceste sisteme fac parte integrantă dintr-un sistem tehnic ori tehnologic mai general. Exemple: un sistem pentru conducerea unui robot pe o linie de fabricaţie a unui produs, sistem de control al zborului în aviaţie, sisteme de control autovehicule.

În ceea ce priveşte SCTR, în literatura de specialitate există mai multe scheme de clasificare:

• Din punct de vedere al timpului de răspuns: pot fi Hard Real-Time systems (HRT) sau Soft Real-Time systems (STR)

� HRT = cu constrângeri de timp dure; ieşirile trebuie produse în limite de timp (deadlines) specificate, în caz contrar va apărea defect de sistem (Exemple: Sisteme de control al zborului, Sisteme de control trafic aerian, Roboti, Sisteme de control autovehicule...)

� SRT = cu constrângeri de timp flexibile; deadline-urile pot fi pierdute ocazional fără a se considera că sistemul este defect (Exemple: sisteme de comunicaţie care utilizează protocoale cu „time out”, Sisteme „casier automat”, Sisteme de rezervare a locurilor, Sisteme pentru controlul proceselor proiectate să tolereze întârzieri ...)

• Din punct de vedere al deschiderii:

� SCTR proprietar, care depind de caracteristicile sistemului de operare proprietar, arhitectura hard şi setul de instrucţiuni al calculatorului; costurile cu dezvoltările soft şi portarea spre alte platforme sunt foarte mari la aceste sisteme.

� SCTR deschise, care se bazează pe standarde industriale pentru microprocesoare, sisteme de operare timp - real, protocoale de comunicaţie, magistrale de interfaţare; costul sistemelor este mai mic, datorită disponibilităţii pachetelor de programe, uşurinţei de integrare şi utilizare, independenţa de platforme hard proprietar, etc.

• Din punct de vedere al arhitecturii:

� SCTR centralizate, în care procesoarele sunt localizate într-un singur nod din sistem iar timpul de comunicare între procese este neglijabil în raport cu timpul lor de execuţie; un sistem multiprocesor cu memorie partajată este un exemplu de sistem centralizat.

� SCTR distribuite, în care procesoarele sunt distribuite în diverse locuri din sistem iar timpul de comunicare între procesele de pe diferite procesoare nu este neglijabil comparativ cu timpul lor de execuţie; un exemplu de astfel de sistem este o reţea locală de calculatoare.

1.2 Elementele unui SCTR Se va considera ca exemplu o instalaţie pentru încălzirea aerului [Stu88] (figura 1.2-1).

Un ventilator suflă aer către un element de încălzire, dirijarea făcându-se printr-o conductă. La ieşirea din aceasta este amplasat un termistor care formează un braţ al unui circuit punte de măsură. Ieşirea amplificată a

Page 7: Sisteme de Timp Real

1-8

Ventilator

motor

Control

motor

Unitate tiristorizată

A

Punte de măsură

Man

flux aer

Element de încălzire termistor

Sens rotaţie

Motor on/off

Total deschis

Total închis

Obturator aspiraţie aer

Potenţiometru "Poziţie curentă obturator"

manual

alimentare

automat

Temperatura masurată Semnal de la 0 la 10V

Control manual aspiraţie aer

Control manual încălzire

LED Auto/Man

LED-uri stare (vent. P/O, obt. închis/deschis)

LED stare elem. încălzire ON/OFF

Panou operator

Control intrare aer Control element de încălzire

Măsurare ieşire

Fig. 1.2-1 Monitorizarea şi controlul unei instalaţii de încălzire aer

acestui circuit este proporţională cu temperatura şi este o tensiune continuă în domeniul 0..10 V care poate fi măsurată în punctul B.

Valoarea curentului electric prin elementul de încălzire poate fi modificată printr-o unitate de control tiristorizată. Comanda acestei unităţi se face cu o tensiune continuă în domeniul 0..10V în punctul A. Debitul

Page 8: Sisteme de Timp Real

1-9

aerului poate fi modificat prin intermediul unui obturator care este acţionat de un motor reversibil. Motorul lucrează la o viteză constantă iar pornirea sau oprirea sa poate fi comandată de un semnal numeric (0 sau 1) – aplicat la circuitul de control al motorului. Tot la acest circuit de control se aplică un semnal numeric pentru a comanda sensul de rotaţie. La obturator este ataşat un potenţiometru de pe care se poate culege o tensiune proporţională cu poziţia obturatorului iar poziţiile „total închis” sau „total deschis” ale acestuia sunt detectate cu două contacte. Operatorul are la dispoziţie un panou de la care controlul instalaţiei poate fi comutat pe Automat sau Manual. În modul de lucru Manual curentul de pe elementul de încălzire şi poziţia obturatorului (aspiraţie aer) pot fi modificate folosind două potenţiometre. Există de asemenea comutatoare pentru a opera asupra ventilatorului şi elementului de încălzire. Led-urile de pe panou indică ventilator pornit/oprit, element de încălzire oprit/oprit, obturator total deschis sau total închis şi stare de funcţionare (Automat sau Manual). În modul de lucru Automat prin controlul potenţiometrelor poate fi ajustată temperatura elementului de încălzire şi poziţia obturatorului.

Controlul acestui proces simplu cu ajutorul calculatorului necesită monitorizare (urmărirea stărilor şi valorilor), calcule în conformitate cu algoritmul de control şi acţionare.

În figura 1.2-2 se prezintă o schemă a sistemului de conducere cu calculator a instalaţiei de încălzire aer:

Monitorizarea presupune obţinerea informaţiilor despre starea curentă a procesului. În exemplul prezentat aceasta se realizează prin intermediul semnalelor analogice precum temperatura aerului şi poziţia obturatorului, prin intrările numerice de la poziţiile extreme ale obturatorului precum şi prin semnale de

stare – modul de lucru, motor pornit, încălzitor pornit etc..

Calculele sunt necesare pentru reglarea permanentă a temperaturii elementului de încălzire în corelaţie cu temperatura aerului la ieşire. Reglarea se poate face în funcţie de temperatura dorită prin intermediul obturatorului şi prin elementul de încălzire. Calculele se referă şi la rezolvarea unor situaţii conflictuale (interblocări):

Direcţie Total deschis

Total inchis

Termistor

On/off

Spre panou operator

CALCULATOR

Intrări numerice CAN CNA Ieşiri numerice

Intrare de la puntea de măsură

Poziţie obturator

Circuit de încălzire

Ventilator

Panou operator MAN / AUTO

motor

Control motor

Element de încălzire

Fig. 1.2-2 Sistem de conducere cu calculator a instalaţiei de încălzire aer

Page 9: Sisteme de Timp Real

1-10

CALCULATOR Dispozitive I / O

standard

Dispozitive de intrare din proces

Dispozitive de ieşire spre proces

PROCES

Fig. 1.2-3 Sistem generalizat de conducere procese

INTERFEŢE CU PROCESUL

• încălzirea rezistenţei nu se poate face dacă ventilatorul este oprit;

• comanda automată nu se poate face dacă operatorul a trecut în mod de lucru manual iar comanda manuală nu se poate face dacă modul de lucru este automat.

Acţionarea presupune:

• furnizarea unei tensiuni pentru controlul elementului de încălzire în conformitate cu temperatura necesară la ieşire;

• comanda ieşirilor numerice pentru START/STOP motor, direcţia de rotire;

• aprinderea ori stingerea ledurilor de la panou.

Programele (task-urile) de acţionare şi monitorizare programează dispozitive de interfaţă precum convertor analog-numeric (CAN), convertor numeric-analogic (CAN), intrări numerice şi ieşiri numerice.

Schema generală este prezentată în figura 1.2-3:

Fiecare dintre tipurile de dispozitive necesită soft care să opereze asupra lor. Ne vom referi la acest soft în continuare ca task-uri de intrare/ieşire (I/E). În figura 1.2-4 se prezintă un sistem de control cu calculatorul care include interfeţe hard şi soft:

Page 10: Sisteme de Timp Real

1-11

Dispozitivele de intrare şi softul aferent furnizează informaţii pentru a crea o imagine internă a intrărilor din

proces. Imaginea intrării este formată din eşantioane prelevate din semnalele din proces astfel încât fenomenul de la intrare să poate fi reconstituit fără distorsiuni. Ea este un instantaneu al stării procesului care trebuie actualizat:

• periodic (ciclic), la intervale de timp stabilite pre-execuţie sau

• sporadic, la modificarea stării unor mărimi discrete sau la modificarea valorii unor mărimi continue în afara unui interval admisibil.

Imaginea ieşirii reprezintă valori rezultate în urma aplicării algoritmului de calcul. Aceasta este actualizată periodic de către task-urile de control, intervalul de timp aferent perioadei fiind suficient de mic pentru a actualiza corect imaginea ieșirii. Task-urile de ieşire transferă datele din imaginea ieșirii către proces, sincronizat cu task-urile de control, acționând asupra acestuia astfel încât comportamentul său să corespundă imaginii ieșirii.

Fig. 1.2-4 Sistem de control generalizat care prezintă interfeţe hard şi soft

Imaginea internă a

procesului

CALCULATOR Taskuri de control

Imaginea intrării

Imaginea ieşirii

Taskuri de intrare Taskuri de ieşire

Dispozitive de intrare din proces

Dispozitive de ieşire spre proces

PROCES

Page 11: Sisteme de Timp Real

1-12

Acest model simplu de sistem de control descris împarte task-urile de realizat în trei grupe:

• task-uri de intrare in proces;

• task-uri de ieşire spre proces;

• task-uri de control.

Comunicarea cu operatorul este tratată în schemă ca parte a task-urilor de I/E. În multe aplicaţii comunicaţia reprezintă şi altceva decât achiziţie de date de la traductoare şi senzori ori acţionarea de comutatoare, valve etc. Sistemele de control pot fi distribuite pe mai multe calculatoare nu toate situate în acelaşi loc şi trebuie asigurată comunicaţia între acestea. Prin urmare, modelul prezentat anterior poate fi extins pentru a include şi task-urile de comunicaţie (figura 1.2-5).

Page 12: Sisteme de Timp Real

1-13

1.3 Tipuri de SCTR Task-urile de intrare, ieşire şi comunicaţie au o trăsătură comună: sunt conectate prin dispozitive hardware la procese care sunt externe calculatorului. Acestea au o evoluţie proprie în timp, iar calculatorul operează în timp real dacă acţiunile pe care le realizează sunt în concordanţă cu timpul de desfăşurare al proceselor externe. Relaţia poate fi definită în termeni referitori la timpul care s-a scurs sau la momentul actual din cursul unei zile în care caz se spune despre sisteme că sunt bazate pe ceas. De asemenea, relaţia se poate defini în termeni referitori la evenimente, cum ar fi, de exemplu, închiderea unui contactor, în care caz se spune despre sisteme că sunt bazate pe evenimente. Există de asemenea o a treia categorie, cea a sistemelor interactive în care relaţia dintre acţiunile din calculator şi întregul sistem este definită în termeni mult mai largi. În aceste sisteme este esenţial ca setul de acţiuni din calculator să se realizeze într-un interval de timp predeterminat. Majoritatea task-urilor de comunicare fac parte din această categorie.

Reţea comunicaţie DISPLAY Tastatură Imprimantă

INTERFEŢE

Taskuri control Taskuri comunicaţie

Imaginea intrării Imaginea ieşirii

Taskuri de intrare

Taskuri de ieşire

Dispozitive de ieşire spre proces

Dispozitive de intrare din proces

PROCES

Fig. 1.2-5 Sistem de control generalizat, cu taskuri de comunicaţie

Page 13: Sisteme de Timp Real

1-14

Task-urile de control, deşi nu sunt direct conectate la evenimente externe, trebuie să opereze de asemenea în timp real, rezultatele calculelor trebuind să respecte limite de timp impuse.

1.3.1 Sisteme bazate pe ceas

Aceste sisteme operează pe baza unor constante de timp ale procesului; valorile acestora pot fi de exemplu de ordinul orelor, pentru procese chimice sau de ordinul milisecundelor pentru aparatura de bord a avioanelor. Pentru controlul în buclă, rata de actualizare a imaginii procesului (prelevarea de eşantioane din proces) este dependentă de constantele de timp ale procesului controlat; cu cât constanta de timp este mai mică, frecvenţa de eşantionare este mai mare. Sistemul utilizat pentru control trebuie sincronizat cu timpul real sau cu timpul natural şi trebuie să fie capabil să realizeze operaţiile de măsurare, control şi acţionare periodic, intervalul de timp asociat cu perioada fiind dependent de constantele de timp ale procesului.

Sincronizarea se obţine de obicei prin adăugarea la SCTR a unui ceas denumit în mod uzual ceas timp - real (Real-Time Clock –RTC). O ieşire de la RTC se utilizează ca şi comandă pentru întreruperea operaţiilor curente ale calculatorului la intervale de timp fixate. Ca răspuns la întreruperi, sistemul planifică şi lansează în execuţie task-uri de intrare, ieşire, sau control. Task-urile pot fi grupate pentru controlarea diferitelor părţi ale procesului, pentru care constantele de timp pot fi diferite. Planificarea execuţiei task-urilor se face periodic, în funcţie de aceste constante. Cea mai mică perioadă de execuţie care poate fi planificată este egală cu rezoluţia RTC; prin numărarea întreruperilor de ceas trebuie să poată fi calculate cu precizie perioadele de lansare a tuturor task-urilor.

În mod frecvent întreruperea de la ceas este utilizată şi pentru a calcula data şi timpul (ceas şi calendar). Multe sisteme dau impresia că sunt bazate pe ceas deoarece afişează data şi ora. Acest lucru nu este relevant. Pentru ca un sistem să fie un SCTR bazat pe ceas el trebuie să se sincronizeze cu procese externe calculatorului.

1.3.2 Sisteme bazate pe evenimente (senzori)

În unele sisteme acţiunile sunt declanşate nu la anumite intervale de timp, ci ca reacţie la evenimente externe. Exemplu: pornirea unei instalaţii de încălzire ca urmare a scăderii temperaturii sub o anumită valoare.

Sistemele bazate pe evenimente sunt în multe situaţii utilizate pentru indicarea unor condiţii de semnalizare preventivă sau alarmare şi pentru startarea acţiunilor necesare de întreprins în astfel de situaţii. Exemple: oprirea încălzirii unui cazan la depăşirea pragului de alarmare asociat presiunii, declanşarea alarmei şi a instalaţiei de stins incendiu la detectarea prezenţei fumului sau la creşterea temperaturii etc.

În mod uzual, pentru sistemele bazate pe evenimente în specificaţii se include şi cerinţa referitoare la timpii de răspuns la evenimente. Astfel de sisteme utilizează de regulă întreruperile externe pentru a informa sistemul de calcul de apariţia evenimentului; în sistemele simple se utilizează de multe ori polling-ul – citirea periodică a senzorilor - pentru a detecta apariţia evenimentelor.

1.3.3 Sisteme interactive

Acoperă o gamă largă de aplicaţii precum rezervări de locuri, automate bancare etc.

Cerinţele timp - real sunt în mod uzual exprimate în termeni referitori la timpul mediu de răspuns care să nu depăşească un anumit interval (de exemplu timpul mediu de răspuns pentru un bancomat nu trebuie să depăşească 10 secunde). Răspunsul este determinat de starea internă a elementului de prelucrare, nu de procese externe acestuia.

1.3.4 Definirea SCTR

Termenul timp - real se poate aplica la sisteme în care:

1. Ordinea calculelor este determinată de trecerea timpului ori de evenimente externe calculatorului.

Page 14: Sisteme de Timp Real

1-15

2. Rezultatele obţinute depind de valoarea variabilei timp.

Cel mai frecvent sunt evocate în literatura de specialitate două categorii de sisteme:

• sistemele care pot avea un timp mediu de execuţie care este mai mic decât un interval maxim specificat - constrângerile de timp real sunt „flexibile” (Soft Real Time Systems sau SRT)

• prelucrările trebuie terminate într-un interval maxim de timp pentru fiecare situaţie în parte (sistemul trebuie să se mişte rapid) - constrângerile de timp real sunt „rigide” (Hard Real Time Systems sau HRT )

A doua categorie impune constrângeri mult mai severe asupra performanţei sistemului decât prima categorie. Din această categorie fac parte aşa numitele sisteme încorporate (“Embedded Systems”) în care sistemul constituie parte integrantă a unei maşini sau instalaţii.

1.4 Clasificarea programelor

Studii experimentale arată clar că anumite tipuri de programe, în particular acelea care realizează operaţii timp - real, sunt mult mai dificil de realizat decât programele obişnuite. Tehnicile de lucru pentru verificarea corectitudinii programelor sunt date şi de diferenţele între diferitele tipuri de programe.

Lucrări teoretice referitoare la tehnicile pentru demonstrarea corectitudinii unui program au permis identificarea a 3 tipuri de programe:

• secvenţiale;

• multitasking;

• timp - real.

1.4.1 Programele secvenţiale

Acţiunile sunt strict ordonate ca o secvenţă în timp. Comportarea unui program depinde numai de efectele instrucţiunilor individuale şi de ordinea lor. Timpul necesar pentru o anumită prelucrare este mereu acelaşi. Pentru testare se porneşte de la următoarele premise:

1. O instrucţiune practic defineşte o acţiune fixă (statică) în sistem;

2. Oricare dintre acţiunile programului produc secvenţe statice de evenimente.

1.4.2 Programe multitasking

Diferă de cele secvenţiale prin aceea că operaţiile care trebuie realizate operațiile care trebuie realizate nu sunt executate neapărat ca o secnvență continuă în timp.. Mai mult, operaţiile se pot desfăşura concurent. Astfel, un program poate fi construit dintr-un număr de părţi numite „procese” sau „task”-uri care:

• luate separat, sunt compuse din secvenţe de instrucţiuni;

• se execută concurent cu alte task-uri;

• comunică cu alte task-uri prin memorie partajată, semnale de sincronizare, mesaje, cutii poştale...

Testarea presupune aceleaşi premise ca la programele secvenţiale, cu unele deosebiri:

• Task-urile pot fi testate separat numai dacă variabilele fiecărui task sunt distincte. Dacă variabilele sunt partajate, posibila concurenţă la resurse poate suspenda execuţia până la eliberarea acestora;

• Cerinţele de sincronizare cu alte task-uri fac ca timpul de execuţie a secvenţei de instrucţiuni pentru fiecare task să nu poată fi determinat cu precizie de către procedurile de validare - timpul de execuţie a task-urilor depinde şi de modul de execuţie a procedurilor de sincronizareș

Page 15: Sisteme de Timp Real

1-16

• Prioritatea de lansare în execuție: timpul de executie al task-ului este influențat și de intervalul de timp în care execuția sa este suspendată atunci când procesorul execută alte task-uri cu prioritate mai mare.

1.4.3 Programe timp - real

Un program timp - real diferă de tipurile anterioare de programe prin aceea că pe lângă faptul că acţiunile sale nu sunt disjuncte în timp, secvenţa acţiunilor sale nu este determinată doar de proiectant, ci și de evenimentele din mediul exterior. Acestea sunt declanşate de condiţii din afara calculatorului şi nu pot fi făcute să respecte, de exemplu, regulile de sincronizare dintre task-uri!

Un program timp - real poate fi împărţit în task-uri, dar comutarea dintre acestea nu aşteaptă neapărat după un semnal intern de sincronizare, deoarece ceea ce se întâmplă în mediul extern nu poate fi întârziat. În programul timp - real, în contrast cu celelalte tipuri de programe, timpul actual asociat cu o acţiune este un factor esenţial în procesul de validare. Mijloacele de determinare a corectitudinii execuţiei diferă fundamental de mijloacele asociate programelor secvenţiale sau multitasking.

Multe limbaje de programare folosite uzual nu posedă mecanisme pentru realizarea aplicaţiilor timp - real, iar programatorul trebuie să şi le creeze singur. De asemenea, instrumentele de testare utilizate în mod curent pentru validarea programelor nu funcţionează corect în aplicaţii timp - real. Chiar dacă există limbaje de programare pentru aplicaţii timp - real, acestea sunt elaborate pentru anumite tipuri de maşini/sisteme de operare, portarea pe alte platforme hard/soft necesitând eforturi nu tocmai neglijabile. Aceasta determină un cost al aplicaţiei mult mai ridicat, iar în multe situații lipsa unor mijloace de dezvoltare și testare accesibile este în contrast evident cu necesitatea unor aplicaţii fiabile.

Au fost realizate sisteme de operare de TR, dar datorită efortului mare necesar pentru realizarea lor şi a pieţei relativ limitate, acestea au fost completate şi cu module specifice sistemelor de operare de uz general; exemple de SOTR timp - real : QNX, LYNX, VxWorks, RT Linux, eCOS.

Uneori, se obişnuieşte ca pentru aplicaţii timp - real să fie realizate de proiectanţii de aplicaţii executive de timp real dedicate, care implementează algoritmi de planificare şi sincronizare proiectați în funcţie de aplicaţie.

1.5 Concluzii

În acest capitol au fost prezentate elemente introductive referitoare la SCTR. Acestea sunt o categorie distinctă de sisteme de calcul. Pentru dezvoltarea aplicaţiilor timp - real, proiectanţii acestora trebuie să aibă cunoştinţe despre:

• procesul sau domeniul căruia i se adresează aplicaţia;

• senzori şi elemente de execuţie;

• structura şi performanţele elementelor de prelucrare;

• tehnici de interfaţare cu lumea reală;

• sistemul de comunicaţii de date;

• sisteme de operare timp-real şi algoritmi de planificare;

• proiectare software;

• limbaje de programare;

• proiectarea algoritmilor de control;

• algoritmi de prelucrare a semnalelor.

Page 16: Sisteme de Timp Real

2-17

2 SCTR PENTRU CONTROLUL PROCESELOR INDUSTRIALE

2.1 Tipuri de procese În funcţie de modul în care sunt efectuate prelucrările, procesele industriale sau de laborator pot fi de tipul:

• pe loturi (batch processes);

• continue;

• de laborator (sau de test);

Termenul de prelucrare în loturi este utilizat pentru descrierea proceselor în care o secvenţă de operaţii determină producerea unor serii rezultate şi în care secvenţa este apoi repetată pentru producerea unor alte serii de rezultate. Astfel de prelucrări se întâlnesc de exemplu în sistemele de proces care controlează laminoare. Între două lansări în producţie ale unui lot se modifică datele despre produs dar secvenţa de operaţii rămâne practic aceeaşi. Caracteristica proceselor pe loturi este timpul necesar pregătirii pentru producţie. Acesta se numeşte timp de setup şi în multe sisteme de acest gen este important raportul dintre timpul de setup şi timpul de operare efectivă.

Termenul continuu este folosit pentru procesele în care producţia este menţinută pentru o lungă perioadă de timp fără întreruperi (luni sau chiar ani). Caracteristicile produselor care trebuie obţinute în sistemele continue se schimbă din mers (exemplu: producţia de energie electrică).

Termenul de sisteme de laborator se referă la acele procese care în mod curent sunt controlate de către operator. Acestea constau în utilizarea calculatorului pentru a controla experimente complexe sau echipamente complexe supuse testării. Exemplu: standuri pentru încercarea traductoarelor, standuri pentru testarea motoarelor electrice, experimente în medicină, etc.

Indiferent de tipul procesului controlat, calculatorul de proces execută una sau mai multe dintre operaţiile:

• controlul secvenţial al proceselor;

• controlul în buclă;

• supervizarea proceselor;

• interfaţa om-maşină.

• înregistrarea datelor;

• analiza datelor.

2.2 Operaţii realizate de către sistemele pentru controlul proceselor

2.2.1 Controlul secvenţial al proceselor

Deşi controlul secvenţial apare în cea mai mare parte a proceselor, el este totuşi predominant la procesele de producţie pe loturi. Controlul secvenţial este utilizat mai mult în procesele în care operaţiile se referă la amestecul unor materii prime în anumite condiţii impuse. Pe lângă controlul secvenţial, calculatorul realizează frecvent şi controlul continuu în buclă închisă pentru reglarea unor parametri precum temperatura, presiunea, nivelul, debitul etc.

Page 17: Sisteme de Timp Real

2-18

2.2.2 Controlul în buclă (Direct Digital Control)

În astfel de sisteme calculatorul este interfaţat cu procesul ca în figura 2.2.2-1:

În aceste sisteme calculatorul este o componentă critică şi trebuie luate măsuri pentru a garanta ca în cazul unei proaste funcţionări a acestuia procesul va rămâne într-o stare stabilă.

Algoritmii de control utilizaţi depind de aplicaţie. Cei mai folosiţi sunt algoritmii care pleacă de la algoritmul analogic de control cu 3 termeni (proporţional+integral+derivativ - PID). Ecuaţia în domeniul timpului pentru controller-ul PID ideal este [Stu88]:

++= ∫ dt

tdeTdtte

TteKtm d

ic

)()(

1)()( (1)

unde e(t)=r(t)-y(t), cu y(t) – variabila măsurată la ieşire, r(t) - variabila de referinţă (set-point), e(t) - eroarea. Kc este factorul de amplificare global al controller-ului, Ti este constanta de timp de integrare iar Td constanta de timp a acţiunii derivative. Acest algoritm poate fi exprimat şi în alte forme. De exemplu, acţiunea derivativă este în mod frecvent neutilizată sau uneori de/dt este înlocuit prin dy/dt pentru a evita diferenţierea variabilei de referinţă etc.

Algoritmul poate fi implementat soft utilizând o ecuaţie echivalentă pentru (1). Astfel, dacă intervalul de eşantionare pentru calcule este T secunde, atunci pot fi utilizate aproximările

m

r

Supraveghere cu calculator şi/sau umană

Val.de referinţă Val. măsurate

Calculator de proces (controller)

Proces condus Ieşiri

y Intrări

x

Fig. 2.2.2-1 Control în buclă închisă

Page 18: Sisteme de Timp Real

2-19

T

ee

dk

de kkk

1| −−= si ∑∫

=

=n

kkTedtte

0

)(

Ecuaţia de control devine în acest caz

++

−= ∑

=

−n

kk

in

nndcn Te

Te

T

eeTKm

0

1 1 (2)

Dacă se fac înlocuirile

T

TKK

T

TKK

KK

dcd

ici

cp

=

=

=

ecuaţia (2) poate fi exprimată ca un algoritm de forma

)( 1

1

−++=+=

nndninpn

nnn

eeKsKeKm

ess (3)

unde sn este suma erorilor.

Algoritmul PID nu este singurul algoritm pentru control în buclă, dar este cel mai utilizat, datorită simplităţii şi a faptului că este adecvat pentru peste 90% dintre problemele de control.

Un controller simplu PID utilizând algoritmul dat de ecuaţiile 3 poate fi programat în C astfel:

Page 19: Sisteme de Timp Real

2-20

# define KPVAL 1.0 # define KIVAL 0.8 # define KDVAL 0.3 #define FALSE 0 #define TRUE 1 float s, kp, ki, kd, en, enold, mn; unsigned char stop; extern float can(void);/*funcţie care achizitioneaza de la convertorul

analog numeric, calculeaza si returneaza valoarea erorii e; este dependenta de hardware utilizat.*/

extern void cna(float mn);/* funcţie care primeste la intrare corectia (valoarea de actionare) si o transmite la convertorul numeric - analogic*/

void task_PID(void){ … stop = FALSE; s = 0.0; kp = KPVAL; ki = KIVAL; kd = KDVAL; enold = can(); /* bucla de control*/ while (!stop){ en = can(); /* adc returnraza valoarea erorii actuale*/ s = s+en;/* suma pentru integrala*/ mn = kp*en + ki*s + kd * (en - enold); cna(mn); enold = en; } … }

Poziţionarea variabilei stop pentru oprirea task-ului se face din exterior, de exemplu ca urmare a acţiunii operatorului.

Acest exemplu este o abordare simplificată referitoare la implementarea algoritmului. O serie de alţi factori, precum ieşirea parametrilor din limite, rata de eşantionare pentru achiziţia datelor, cadenţa în care sunt acționate ieşirile, filtrările intrărilor etc., trebuie luaţi în considerare. De asemenea, în algoritm nu se ţine cont de cerinţa obligatorie ca variabila de control mn să fie calculată sincronizat cu „timpul real”. Astfel, rata de eşantionare - vezi formula (2) – depinde de viteza de calcul a echipamentului pe care rulează programul. Pentru o operare corectă, este nevoie de mijloace de fixare a intervalului de timp pentru calcul la valoarea T. Acest lucru se face prin metode care vor fi prezentate ulterior.

2.2.3 Supervizarea proceselor

Utilizarea calculatorului pentru controlul proceselor a dus la diversificarea tipurilor de activităţi care se pot realiza, deoarece sistemele cu calculator pot să controleze operaţiile unei instalaţii şi în paralel să furnizeze informaţii pentru ingineri sau manageri în diverse moduri, prin intermediul interfeţei om-maşină.

Un exemplu de instalaţie care se pretează la supervizarea cu ajutorul calculatorului este prezentată în figura 2.2.3-1.

Page 20: Sisteme de Timp Real

2-21

Traductor presiune

TP

Fig. 2.2.3-1 Supervizarea unei instalaţii de vaporizare (reproducere din [Stu88])

Furnizare materie primă

Abur

TP

Recirculare solutie

Produs concentrat

Vaporizatoare

Page 21: Sisteme de Timp Real

2-22

În acest proces, două vaporizatoare sunt interconectate şi în fiecare se introduce o soluţie care prin evaporarea apei trebuie să îşi mărească concentraţia în substanţă utilă. Încălzirea se face la primul vaporizator cu abur care este furnizat printr-un schimbător de căldură conectat la acesta, iar la al doilea vaporizator se utilizează aburul rezultat din primul vaporizator. Pentru a realiza o evaporare maximă, presiunea în vaporizatoare trebuie să fie cât mai mare posibil, respectând însă măsurile de siguranţă în exploatare. Totuşi, este necesară o coordonare între cele două vaporizatoare: dacă primul funcţionează la capacitatea maximă, poate furniza atât de mult abur încât să depăşească limitele de siguranţă pentru al doilea. O schemă de supervizare pentru acest proces va fi proiectată să opereze asupra celor două instalaţii astfel încât să obţină rezultatele cele mai bune, în condiţii de siguranţă.

Algoritmii de supervizare vizează ansamblul procesului şi se execută în timp real, în paralel cu operaţiunile curente din proces. Cele mai multe dintre aplicaţiile de supervizare a proceselor permit inginerilor şi operatorilor să cunoască stările instalaţiilor şi să intervină în timp real. În unele sisteme complexe sunt implemenţati la acest nivel şi algoritmi de control destinaţi optimizării. Complexitatea lor depinde de tipul procesului: este o mare diferenţă de exemplu între procesul de evaporare prezentat mai sus şi supervizarea procesului într-o centrală electrică nucleară.

2.2.4 Interfaţa om-maşină

Foarte importante în SCTR pentru controlul proceselor sunt facilităţile furnizate operatorilor de proces, inginerilor şi managerilor.

Un operator de proces trebuie să aibă la dispoziţie mijloace simple şi clare pentru intervenţia în instalaţii sau echipamente. El trebuie să poată schimba valorile variabilelor de referinţă, să fie informat rapid despre condiţiile de alarmare, să poată acţiona asupra elementelor de execuţie direct de la dispozitivul de intrare.

Operatorii utilizează console dedicate, care au de obicei o tastatură specială, unul sau mai multe monitoare şi imprimantă. Pe monitoare se prezintă funcţionarea instalaţiilor prin intermediul schemelor sinoptice, sunt afişate evenimentele legate de proces şi de funcţionarea sistemului, se prezintă informaţii despre modul de funcţionare al buclelor de reglare etc.

O mare parte din eforturile de proiectare şi programare este dedicată dezvoltării de aplicaţii destinate operării cu mare uşurinţă şi prezentării cât mai sugestive a informaţiilor (prin scheme sinoptice, instrumente vizuale etc).

2.2.5 Responsabilităţile inginerului de sistem

Inginerul de sistem are ca responsabilitate configurarea aplicaţiei pentru a controla procesul, pentru a oferi operatorilor informaţiile necesare şi pentru a crea şi actualiza în timp real baze de date cu informaţii necesare analizei ulterioare, cu evenimentele care au apărut în instalaţii etc.

Cu alte cuvinte, inginerul responsabil de sistem trebuie să aibă posibilitatea:

• să definească modul de achiziţie de date şi de acţiune în proces;

• să seteze constantele pentru scanare, filtrare, limite de alarmare şi acţionare etc.;

• să definească buclele de reglare, eventual modul de cascadare a controller-elor destinate reglării şi de conectare cu alte elemente din schema de control;

• să poată să regleze modul de achiziţie şi control prin selectarea amplificărilor celor mai potrivite;

• să definească şi să programeze procedurile de control necesare pentru operarea automată;

• să determine şi să implementeze schemele de supraveghere.

Page 22: Sisteme de Timp Real

2-23

Software-ul trebuie să pună la dispoziţia inginerului mijloacele necesare pentru a face aceste lucruri. În acest scop, au fost realizate medii de dezvoltare a aplicaţiilor de proces precum: WinCC, Monitor PRO, Genesys, InTouch, SL/GMS, PVSS II, ActivWare, MicroSCADA etc.

2.3 Structuri de sisteme pentru controlul proceselor industriale

2.3.1 Sisteme de control centralizate

Odată cu reducerea costurilor calculatoarelor s-a extins utilizarea sistemelor de control cu calculator.

Primele sisteme (anii 1960...1970) constau dintr-un singur calculator cu o capacitate suficientă pentru a îndeplini toate funcţiile unui proces. Acesta era conectat la un set de interfeţe cu procesul. Semnalele de la traductoare în astfel de sisteme sunt aduse într-un singur loc (o cameră) pentru a fi conectate la interfeţe.

Dezavantajul unei astfel de soluţii, pe lângă consumul mare de cabluri, este că defectarea calculatorului afectează întregul sistem. Implementarea buclelor de control în sistemele centralizate pune probleme legate de disponibilitatea calculatorului central – nefuncţionarea acestuia era echivalentă cu blocarea întregului proces. În anii '70 s-a trecut la implementarea buclelor de reglare cu regulatoare analogice, care primeau valorile de setpoint de la calculatorul central. În cazul defectării calculatorului, regulatoarele continuau funcţionarea în regim de lucru local.

În anii '70-80, ca urmare a scăderii preţului calculatoarelor, pentru creşterea toleranţei la defecte în aplicaţiile industriale critice erau frecvent utilizate sisteme de calculatoare duble ( figura 2.3.1-1).

Comutarea între cele două calculatoare poate fi manuală sau automată. Când este necesară comutarea automată comutatorul devine o componentă critică. De asemenea, programarea şi problemele de testare şi control sunt foarte complicate.

Periferice standard Management

Calculator A Calculator B

Comutator Bloc de control

Interfeţe

Proces

Fig. 2.3.1-1 Sistem cu calculatoar dublu

Page 23: Sisteme de Timp Real

2-24

2.3.2 Sisteme ierarhizate

Au o largă răspândire în domeniile unde se iau decizii centralizat. Într-un sistem ierarhizat o celulă este implicată în luarea deciziei în felul următor (Fig. 2.3.2-1):

Fiecare element de decizie presupune recepţionarea unor comenzi de la nivelul superior şi transmiterea informaţiilor înapoi la acest nivel. Pe baza informaţiei recepţionate de la elementele de pe nivelul inferior precum şi pe baza corecţiilor sau constrângerilor impuse de elementele de pe acelaşi nivel se transmit comenzi la elementele de pe nivel inferior.

O structură ierarhică cu mai multe celule poate fi asimilată cu o piramidă ca în figura 2.3.2-2:

La baza piramidei este necesar un timp de răspuns mic, de ordinul msec sau sec. Pe măsură ce se avansează spre vârful piramidei timpul de răspuns creşte.

Luarea deciziei

Informaţii Comenzi Nivel superior

Constrângeri

Informaţii

Constrângeri

Informaţii

Acelaşi nivel

Informaţii

(provenite de la nivelul inferor)

Comenzi Nivel inferior

Fig. 2.3.2-1 Funcţia de fabricare ierarhică a deciziilor

Fig. 2.3.2-2 Structura ierarhică de luare a deciziilor

Page 24: Sisteme de Timp Real

2-25

Un exemplu tipic de sistem ierarhizat este sistemul de producţie automată a unor loturi de produse (figura 2.3.2-3).

Acest sistem are 3 niveluri pe care le vom denumi:

• manager;

• supervizor;

• unitate de control.

Se utilizează calculatoare separate pentru funcţiile de manageri, supervizori şi pentru controlul procesului.

La nivelul de manager funcţiile principale sunt:

• gestiunea resurselor;

• programarea producţiei;

Manager

Supervizor

Gestionare resurse

Planificare producţie

Evaluare

Elaborare reţete

Secvenţe de operaţii

Coordonare

Magistrala de date

Unitate de control Unitate de control

PROCES

Fig. 2.3.2-3 Prelucrarea în loturi utilizând un sistem ierarhic

Page 25: Sisteme de Timp Real

2-26

• evaluarea producţiei.

Informaţiile referitoare la programarea producţiei sunt transferate la nivelul supervizor. Acest nivel are implementate reţetele de producţie şi secvenţele de operaţii pentru obţinerea produselor. Informaţiile despre proces se încarcă la iniţiativa supervizorului în unităţile de control care execută operaţiile individuale. În timpul execuţiei, supervizorul va primi informaţii despre modul de derulare a fiecărui proces şi va rezolva orice conflict în disputa asupra resurselor; de asemenea informează managerul despre rezultat.

La nivelul inferior, unităţile de control sunt responsabile de operaţiile de proces (închiderea – deschiderea de vane, comutatoare, control de temperaturi, viteze, debite, monitorizarea alarmelor) şi de informarea nivelului supervizor despre proces.

Cele mai multe sisteme ierarhizate necesită reţele de calculatoare distribuite, în practică cel mai des întâlnite sisteme de proces fiind cele distribuite (fizic şi logic) şi ierarhizate (în procesul de luare a deciziilor).

2.3.3 Sisteme distribuite

Caracteristicile unui sistem distribuit sunt:

• fiecare unitate poate executa task-uri similare cu celelalte unităţi de calcul;

• în caz de defectare a unei unităţi, atributele acesteia pot fi realizate de altă unitate.

În sistemele distribuite, munca e divizată şi executată de mai multe calculatoare. Aceasta implică dificultăţi în realizarea modulelor hard şi a pachetelor soft pentru că task-urile trebuie alocate mai multor procesoare, care partajează sau nu anumite resurse.

În realitate, cele mai multe sisteme moderne utilizează structuri distribuite şi ierarhizate. În acestea, task-urile de măsură, acţionare, control în buclă, comunicare cu operatorul, supervizare etc. sunt distribuite între mai multe calculatoare. Acestea sunt interconectate printr-un canal de comunicare de mare viteză (FIELDBUS sau LAN), de-a lungul căruia calculatoarele sunt interconectate într-o structură ierarhică de comandă (figura 2.3.3-1).

Sistemele distribuite şi ierarhizate au următoarele avantaje:

• Capacitatea de calcul creşte prin partajarea task-urilor între diferite procesoare. De exemplu, la nivelul 1 se pot face mult mai bine filtrări, scalări, măsurări, acţionări, nu pentru că acestea sunt operaţii foarte complicate, ci mai ales pentru că se aplică unui număr mare de mărimi. De asemenea, calculele complicate pentru control în buclă se fac de către procesoare separate, crescând viteza de lucru şi fiabilitatea. Nivelul 2 preia datele şi trimite concluziile prin intermediul mediului de comunicaţie.

• Sistemul este mai flexibil decât cu un singur procesor; se pot face mai uşor modificări prin adăugarea de noi module. De asemenea, se pot utiliza standardizările specifice comunicaţiilor de date în reţea.

• Defectarea unui modul nu afectează întreg sistemul. Pentru izolarea defecţiunii se poate trece uşor în alt mod de lucru (manual de exemplu) apoi se face înlocuirea.

• Se pot face uşor modificări hard şi soft deoarece este mai uşor să modifici un singur modul decât întreg sistemul.

• Calea de comunicare serială permite ca echipamentele să fie distribuite pe o arie geografică mai mare, nemaifiind astfel necesare cabluri care să aducă semnalele într-o singură încăpere.

Page 26: Sisteme de Timp Real

2-27

Microcomputer

Microcomputer

Microcomputer

Microcomputer

Controller Controller Controller

PROCES

Nivel 1

Achiziţie/acţionare

Nivel 2

Control în buclă

Nivel 3

Control secvenţial al proceselor

Nivel 4

Comunicaţie operator

Nivel 5

Supervizor

Nivel 6

Management

Fig. 2.3.2-1 Sistem distribuit şi ierarhizat

Page 27: Sisteme de Timp Real

2-28

2.3.4 Piramida automatizării

SCTR distribuite şi ierarhizate înlocuiesc tot mai frecvent sistemele clasice de automatizare. Nivelurile ierarhice de automatizare pot fi reprezentare prin piramida automatizării (figura 2.3.4-1).

Parametrii luaţi în considerare sunt: nivelul ierarhic, cerinţele timp - real, volumul de date gestionat de elementele de prelucrare şi cerinţele de sincronizare.

msec

Control procese

Celula de bază

Supervizare

Timp real Volum de date

Sincronizare

Lent (min sau ore)

f. mare NU

mare NU

mediu NU

mare

mediu DA/NU

mic DA Achiziție date și acționare

Management

Nivel ierarhic Nivel ierarhic

Fig. 2.3.4-1 Piramida automatizării

Page 28: Sisteme de Timp Real

3-29

3 STRUCTURA ECHIPAMENTELOR UTILIZATE IN SCTR

3.1 Structura hardware generală a calculatorului de proces Deşi cele mai multe calculatoare pot fi utilizate pentru aplicaţii timp - real, nu toate sunt adaptate pentru a răspunde cerinţelor acestora. Cerinţele se referă în mod uzual la necesitatea ataşării la calculator a unor dispozitive care să permită comunicarea în timp real cu mediul exterior şi cu utilizatorii.

Pentru calculatoarele dotate cu dispozitivele necesare în aplicaţiile timp - real pentru controlul proceselor se foloseşte în mod curent denumirea de calculatoare de proces. O caracteristică a acestora este concepţia modulară: ele permit adăugarea la elementul de prelucrare a unor module externe, în particular dispozitive specializate de intrare/ieşire. Dispozitivele tipice de interfaţare ale unui calculator sunt prezentate în figura 3.1-1

Page 29: Sisteme de Timp Real

3-30

Memorie UC

Interfeţe de Intrare/iEşire

HDD

Streamer

Imprimantă

Display, tastatură

Panou operator

Display

Alarmare

Imprimantă

Dispozitive standard

Dispozitive operator proces

Dispozitive de comunicaţii

PROCES

Întreruperi, RTC

Dispozitive de proces

Canale de telemetrie

CAN

CNA

In

Out

Semnale în impulsuri

In

Out

Semnale numerice

1

6

3

2

5

4

Fig. 3.1-1 Dispozitive de interfaţare tipice

Page 30: Sisteme de Timp Real

3-31

3.1.1 Unitatea centrală

Unităţi centrale similare cu ale sistemelor de uz general (de ex. PC cu 80x86), de cele mai multe ori în construcţie industrială, sunt utilizate frecvent în calculatoarele de proces. În sistemele încorporate sau în sistemele distribuite pentru controlul proceselor sunt disponibile echipamente numite PLC (Programable Logic Controller) sau RTU (Remote Terminal Unit). Astfel de echipamente sunt produse de firme precum SIEMENS, SCHNEIDER Electric, GENERAL ELECTRIC FANUC, ABB s.a. Unităţile centrale ale acestor echipamente sunt realizate cu microprocesoare de diverse tipuri: procesoare de uz general - 80x86, Motorola 68xxx (16/32 biţi); controllere programabile (calculatoare într-un singur cip) - 8051, 8048, HC11, 80C552 (8 biţi); 80C166 (16 biţi) etc.

3.1.2 Dispozitive de comunicaţie

Dispozitivele de comunicaţie interfaţează calculatorul de proces cu mediile de comunicaţie în reţele industriale sau în reţele de uz general. Există o mare varietate de dispozitive şi medii de comunicaţie, selectate în funcţie de aplicaţie, condiţii tehnice existente, cerinţe de performanţă etc.:

• dispozitive pentru comunicaţie serială RS232, RS485, RS422;

• dispozitive pentru comunicaţie în LAN;

• dispozitive de comunicaţie prin microunde;

• dispozitive de comunicaţie în infraroşu, etc.

3.1.3 Dispozitive de proces

Dispozitivele de proces sunt de diverse tipuri, în funcţie de mărimile achiziţionate ori comandate. Aceste dispozitive tratează:

• I/E numerice – valori binare (0 sau 1 logic) pentru fiecare semnal. Se referă la mărimi de genul pornire/oprire, deschidere/închidere etc.

• I/E analogice – interfeţe care primesc sau generează semnale analogice continue în curent sau tensiune. Valorile de curent sau tensiune se convertesc în/din unităţi inginereşti prin module soft care ţin cont de relaţia dintre domeniul semnalului de I/E în/din calculator şi domeniul mărimii fizice. Semnalele analogice de intrare provin de la senzori sau traductoare iar cele de ieşire se aplică la elemente de acţionare, instrumente de măsură analogice etc.

• I/E în impulsuri – o serie de instrumente de măsură (contoare de energie, integratoare de debit etc.) oferă la ieşire impulsuri proporţionale cu mărimile măsurate. De asemenea, unele elemente de execuţie (motoare pas cu pas) necesită comanda în impulsuri. Calculatorul trebuie să dispună în aceste cazuri de interfeţe de numărare a impulsurilor şi respectiv de comandă în impulsuri.

• Canale de telemetrie – se utilizează pentru conectarea unor instrumente specializate pentru măsură şi control, aflate la distanţă.

În funcţie de locul de amplasare, dispozitivele de interfaţare cu procesul pot fi pe magistrala internă (PLUG- IN) sau pe magistrala externă (conectate la calculator prin intermediul reţelelor de comunicaţie serială sau interfeţelor paralele).

3.1.4 Dispozitivele standard ale calculatorului

Calculatoarele de proces în multe cazuri au în configurare şi dispozitive standard uzuale precum discuri, benzi, display, tastatură, mouse etc.

Page 31: Sisteme de Timp Real

3-32

3.1.5 Dispozitivele operatorului de proces

Operatorul de proces poate utiliza chiar dispozitivele calculatorului. În unele situaţii se utilizează însă console speciale ale operatorului de proces care conţin dispozitive de afişare (de obicei display color de mari dimensiuni), de comandă în proces (panouri de comandă), de alarmare (HUPA), respectiv pentru listarea unor jurnale de evenimente (imprimante de panou).

3.1.6 Ceasul timp - real (Real Time Clock)

RTC este un dispozitiv auxiliar, vital pentru SCTR. În funcţie de tipul aplicaţiei, RTC poate fi un ceas electronic, un ceas generat soft sau un simplu generator de impulsuri cu frecvenţa precis controlată care dă întreruperi la intervale de timp programabile.

Orice SCTR utilizează RTC pentru a genera întreruperi la anumite intervale de timp (de exemplu la PC de aproximativ 18,2 ori pe secundă). În sistemele în care timpul este foarte important se utilizează ceasuri digitale care generează întreruperi la anumite frecvenţe, pot întreţine automat data şi ora, alimentarea făcându-se de la o sursă de alimentare auxiliară.

În SCTR, RTC este folosit pentru: întreţinere dată şi oră, stabilire intervale de eşantioane a procesului, intervale de comunicaţii, timeout, memorare date pe disc, afişare pe display a curbelor y(t), elaborare de rapoarte la imprimantă etc..

Uzual, întreruperea de la RTC este folosită şi de către sistemul de operare timp - real pentru planificarea şi dispecerizarea task-urilor.

3.2 Semnale preluate/transmise de SCTR din/către lumea reală

În mod uzual, calculatorul de proces conţine dispozitive pentru 3 tipuri de semnale în tensiune: analogice, numerice şi în impulsuri.

Semnalele analogice se deosebesc de celelalte prin aceea că amplitudinea lor variază în timp, iar cele numerice sau în impulsuri pot lua numai valori 0 şi 1.

Distincţia între semnalele numerice şi cele în impulsuri constă în modul de tratare a informaţiei şi în tipul interfeţelor hard utilizate pentru achiziţie. Unui semnal numeric ataşat unui canal i se asociază un bit la nivelul interfeţei de achiziţie. Starea de 0 sau 1 a semnalelor numerice este memorată static într-un bit sau într-o grupă de biţi care se schimbă în funcţie de evoluţia semnalului din lumea reală. Semnalele în impulsuri sunt memorate sub forma unui număr de tranziţii care au apărut pe semnalul de intrare sau care trebuie generate la ieşire într-un interval de timp dat.

Semnalele analogice sunt transformate în reprezentare numerică prin intermediul CAN (Convertor Analog Numeric). Semnalele analogice de ieşire sunt generate pornind de la valorile numerice prin intermediul CNA (Convertor Numeric Analog).

Cele mai multe interfeţe de proces acceptă la intrare semnale în domenii unificate de curent sau tensiune:

• ~0 V pentru 0 logic şi ~5V pentru 1 logic la semnalele numerice sau în impulsuri;

• intrare în curent continuu 4-20mA (uneori şi 2 –10 mA, 0 – 10 mA ) sau în tensiune continuă 0 –10 V, 0-5V, +/-10V, +/-5 V pentru semnalele analogice.

Semnalele unificate în curenţi sau tensiune au amplitudini suficiente pentru interfeţele din calculator. Uneori însă, traductoarele sau senzorii oferă la ieşire semnale care nu sunt în curent sau tensiune sau semnale în curent sau tensiune care nu se încadrează în domeniile unificate. Din acest motiv, sunt necesare module de

Page 32: Sisteme de Timp Real

3-33

condiţionare semnale care adaptează semnalele la cerinţele interfeţei din calculator. Acest fel de module sunt utilizate de asemenea şi pentru izolarea calculatorului faţă de tensiunile înalte, pentru filtrarea zgomotelor etc.

Semnalele numerice sau analogice de ieşire sunt oferite de interfeţele de ieşire din calculator în domeniile unificate de curent sau tensiune specificate mai sus.

În paragraful următor sunt prezentate detalii referitoare la blocurile funcţionale care efectuează transformarea semnalelor din mediul extern în format recunoscut de către calculator şi respectiv transformă datele din format calculator în semnale către mediul extern. Pentru sistemele care conţin astfel de blocuri funcţionale, interconectate între ele şi cu calculatorul, se va utiliza în continuare denumirea de Sistem de Achiziţie de Date şi Control (SADC).

3.3 Blocurile funcţionale ale unui SADC

Schema bloc şi funcţiile generale ale unui SADC sunt sintetizate în figura 3.3-1

3.3.1 Conectarea dispozitivelor de I/E la calculatorul gazdă

O parte importantă a oricărui SADC este calculatorul gazdă (host computer). Există multe tipuri de dispozitive (numite uneori „module”) specializate pentru achiziţie de date şi control, care se pot conecta la calculatorul gazdă în unul dintre următoarele moduri:

• direct pe magistralele de date/adrese/comenzi ale calculatorului - conectare pe magistrala internă sau PLUG-IN;

• prin intermediul canalelor de comunicaţie seriale sau paralele - conectare pe magistrala externă.

Mediul exterrn

Mediul extern Traductoare

Senzori Condiţionare

semnale

Dispozitive de Intrare pentru conversie semnale în format acceptat de calculator

Analiza

Decizii

Afişare, înregistrare

Dispozitive de iEşire pentru conversie date către proces

Elemente de execuţie

Fig. 3.3-1 Sistem de achiziţie de date şi control – schema bloc

Page 33: Sisteme de Timp Real

3-34

În continuare, termenul „sistem” va fi utilizat în diverse moduri: un sistem poate include tot ceea ce este necesar pentru achiziţie de date şi control, inclusiv calculatorul gazdă; de asemenea, termenul sistem poate fi utilizat şi pentru descrierea unor dispozitive sau subansamble ale unui astfel de sistem, cu toate că acestea ar putea fi denumite mai corect subsisteme.

3.3.1.1 Dispozitive pe magistrala internă

Principalele avantaje ale conectării directe pe magistrala calculatorului gazdă (de exemplu la PC) sunt:

• viteza mare de achiziţie şi comandă;

• costul scăzut;

• dimensiuni mai mici.

La aceste sisteme costul este mai redus pentru că nu mai este nevoie de incinte şi surse de alimentare separate, alimentarea făcându-se din sursa internă a calculatorului gazdă. Vitezele mari se obţin datorită eliminării protocolului de comunicaţie şi a căilor de comunicaţie care fac ca transmisia datelor să fie lentă.

Exemplu: Rata de achiziţie a unui SADC folosind interfaţa RS 232 la viteza de 9600 bauds este limitată la zeci de eşantioane / sec. În contrast, SADC ce conţin dispozitive pe magistrala internă pot achiziţiona sute de mii de eşantioane pe secundă.

În figura 3.3.1.1-1 se prezintă schema bloc simplificată a unui sistem cu dispozitive pe magistrala internă.

SADC pe magistrala internă conţin dispozitive (module) de interfaţare ce se conectează direct pe sloturile

disponibile din calculator. Mai mult, există sisteme ce permit ca un singur modul să conecteze la calculator mai multe tipuri de semnale de I/E, în mod selectiv. Sistemele moderne includ procesoare de semnal şi oferă funcţii de achiziţie, prelucrare primară a datelor, transmisii de date etc.

În unele aplicaţii un calculator ce dispune de suficiente resurse poate conţine module de achiziţie pe magistrala internă şi în acelaşi timp poate fi conectat prin canale de comunicaţie seriale sau paralele cu alte SADC sau calculatoare gazdă. Acelaşi calculator, pe care se execută software de bază şi de aplicaţie adecvate, poate executa concurent funcţii de achiziţie, control, analiza datelor, grafică, etc.

3.3.1.2 Dispozitive pe magistrala externă

Acestea sunt de obicei echipamente inteligente, capabile să îndeplinească sarcini de achiziţie de date şi control şi sarcini de comunicaţie. La nivel fizic, comunicaţia este realizată prin interfeţe standardizate cablate (RS 232, RS 422, RS 485, IEEE 802.3, IEE 488 (GPIB)...) sau wireless (microunde, infraroşu...)

Dispozitivele inteligente pe magistrala externă sunt la rândul lor SADC-uri cu module conectate pe magistrala internă sau externă.

BUS

Dispozitive ADC + calculator gazdă

Dispozitive

I/E

µC

(PC) Proces

mag. internă

Fig. 3.3.1.1-1 Sistem ADC pe magistrală internă

Page 34: Sisteme de Timp Real

3-35

Exemple de dispozitive conectate pe magistrala externă:

• calculatoare de proces cu UC compatibilă IBM PC (cunoscute sub denumirea „IPC” – Industrial PC);

• echipamente PLC sau RTU cu UC realizate cu microcontrollere (precum cele din familia I80C51, 80C166, MOTOROLA 68000, ZILOG 180) sau microprocesoare de uz general;

• traductoare/senzori şi elemente de execuţie inteligente, realizate cu microcontrollere sau procesoare de semnal.

În figura 3.3.1.2-1 se prezintă schema bloc a sistemelor conectate pe magistrala externă:

Posibilitatea de a avea la distanţă SADC permite realizarea unor SCTR distribuite. Reţelele care interconectează mai multe dispozitive pe magistrala externă şi calculatoare gazdă se numesc reţele industriale. Pentru reţelele industriale cablate, în literatura de specialitate se mai utilizează şi denumirea de fieldbus (magistrala/bus de teren).

Exemplu de reţea industrială: SADC-urile din staţiile de transformare ale unei companii sunt conectate prin fieldbus-uri RS485 la un dispecerat energetic amplasat în clădirea administrativă. Aceasta permite ca prin intermediul unor calculatoare gazdă din reţeaua locală de la dispecerat să fie efectuate activităţi de monitorizare/calcule/acţionare şi supervizare a întregului proces de gestiune energetică.

Avantaje ale conectării pe magistrala externă:

• teoretic se poate configura orice sistem, oricât de mare ar fi distribuirea sa în spaţiu;

• SADC pot fi la mare distanţă faţă de calculatorul gazdă (sute de m, km...), permiţând astfel amplasarea în apropierea zonei în care se găsesc senzorii şi elementele de execuţie;

• SADC degrevează calculatorul gazdă de sarcinile specifice de achiziţie de date şi control;

• SADC se poate conecta la orice tip de calculator care dispune de interfeţe de comunicaţie corespunzătoare.

3.3.2 Semnale din proces, traductoare şi condiţionarea semnalelor

Deoarece semnalele din lumea reală sunt de o foarte mare diversitate, sunt necesare dispozitive care să simplifice tratarea acestora de către dispozitivele de conversie în/din format numeric acceptat de către calculator. Acest lucru se realizează prin intermediul traductoarelor (senzori), elementelor de execuţie si circuitelor de condiţionare semnale.

Dispozitiv I/E pe mag. externă

Dispozitive I/E pe mag. internă

µC

Calculator gazdă

RS 232

RS 422

RS 485

IEEE 488

LAN

Proces

Fig. 3.3.1.2-1 – SADC cu dispozitive pe magistrala externă

Page 35: Sisteme de Timp Real

3-36

În continuare se prezintă cele mai comune semnale din proces şi modul în care acestea sunt prelucrate.

3.3.2.1 Tipuri de semnale

În general, un SADC acceptă 3 tipuri de semnale în tensiune:

• analogice;

• binare (numite uneori şi numerice);

• în impulsuri.

Unele traductoare oferă semnale în curent, care se convertesc în tensiune pentru a fi măsurate de sistemul de achiziţie.

Deşi toate semnalele din proces sunt variabile în timp, numai cele analogice îşi modifică amplitudinea proporţional cu valoarea mărimii de intrare. Semnalele numerice şi cele în impulsuri sunt similare din mai mai multe puncte de vedere: ambele au amplitudine constantă şi sunt reprezentate prin cele 2 valori posibile, High şi Low.

H → 2 -:-5V;

L → 0 -:- 0,8V.

Totuşi, în proces pot fi semnale numerice de valori mai mari (110V, 220V) şi acestea trebuie adaptate la nivelurile TTL precizate mai sus.

Distincţia între semnalele numerice şi cele de impulsuri constă în modul de tratare a informaţiei şi în tipurile de interfeţe utilizate. Unui semnal numeric ataşat unui SADC i se asociază un bit la nivelul calculatorului. Deoarece semnalele numerice îşi pot schimba starea cu mare viteză, informaţia se păstrează static într-un bit sau un grup de biţi, citiţi de pe interfaţă la un anumit moment de timp.

În contrast, informaţia în impulsuri se memorează sub formă de număr de tranziţii ale stării sau sub forma de rată de tranziţie (Ex.: impulsuri / sec).

Semnalele analogice sunt convertite în format calculator prin intermediul convertoarelor analog-numerice (CAN).

0

5V

Semnal numeric

-10V

+10V

Semnal analogic

Fig. 3.3.2.1-1 Semnale numerice vs. semnale analogice

Page 36: Sisteme de Timp Real

3-37

De obicei, semnalele analogice oferite de traductoare sunt:

• semnalele unificate în tensiune:

� 0 ÷10 V;

� 0-:-5V;

� ± 5V;

� ± 10V.

• semnalele unificate în curent:

� 4 – 20 mA – se lucrează cu „0 viu” (de exemplu 0mA poate indica fir rupt );

� 2 – 10 mA – se lucrează cu „0 viu”;

� 0 – 20 mA;

� 0 – 10 mA;

Semnalele unificate în tensiune şi curent au amplitudinea suficient de mare pentru a permite o interpretare bună a fenomenelor. Există totuşi şi senzori şi traductoare precum:

• termocuple;

• celule fotoelectrice;

• senzori piezoelectrici;

• senzori biomedicali,

ce produc semnale mici, de ordinul mV sau mai mici. SADC trebuie să fie capabil să amplifice aceste semnale de nivel scăzut astfel încât să le trateze cu aceeaşi acurateţe precum tratează semnalele unificate.

3.3.2.2 Traductoare şi senzori

Indiferent de fenomenele urmărite sau de dispozitivele controlate, traductoarele joacă un rol vital în SADC. Traductorul asigură conexiunea între lumea reală şi cea electrică.

Semnalele de intrare din lumea reală pot reprezenta temperaturi, debite, deplasări, forţe, viteze etc. Semnalele de ieşire spre lumea reală pot controla valve, relee, vane, lămpi, motoare etc. Semnalele produse de traductoare sunt cel mai adesea sub formă de tensiune, curent, rezistenţă sau capacitate.

Indiferent de tipul semnalelor produse de traductoare, prin procesul de adaptare (condiţionare) a semnalelor, ele vor fi convertite în semnale de tensiune deoarece, după cum se va vedea ulterior, intrările în SADC sunt intrări în tensiune.

3.3.2.2.1 Exemple de traductoare

Termocupluri (TC)

Acestea sunt cele mai utilizate pentru măsurarea temperaturii. Un TC este o joncţiune între 2 metale diferite. Aceasta produce o tensiune electromotoare proporţională cu temperatura joncţiunii ⇒ efectul Seebeck sau efectul termoelectric.

Pot fi măsurate temperaturi de la –200° C la 4000° C. Tensiunea de ieşire a unui TC este în mod uzual, între –10mV şi +50mV şi are o sensibilitate medie de 10 până la 50 µV / °C în funcţie de termocuplul utilizat. Există mai multe tipuri de TC ce utilizează o mare varietate de metale. Următoarele tipuri sunt cele mai utilizate:

Page 37: Sisteme de Timp Real

3-38

• Tip J → combinaţie Fe – C (Fier – Constantan)

• Tip K → combinaţie Ch – A l (Crom – Aluminiu)

• Tip T → combinaţie Cu – C (Cupru – Constantan)

TC au preţ scăzut şi volum mic, cu precizie limitată, în general în gama 1 ÷ 3% indiferent de material sau modul de utilizare. Timpul de răspuns este de ordinul a câtorva secunde şi este necesară compensarea fenomenelor de neliniaritate şi de joncţiuni multiple.

Legea joncţiunii - joncţiunea unui TC generează o tensiune electromotoare proporţională cu temperatura (efectul Seebeck):

K = coeficient Seebeck definit pe o joncţiune particulară metal – metal

t = temperatura exprimată în °C

Această tensiune nu se poate măsura direct pentru că atunci când se conectează un TC la un dispozitiv de măsură conexiunile ce se fac între aparatul de măsură şi traductor creează un nou circuit termoelectric.

Ex.: - să conectăm un voltmetru la un TC tip T (Cu – C) (figura 3.3.2.2.1-1)

Ji = joncţiunea i, i = [1,3].

Pentru determinarea temperaturii, se doreşte măsurarea tensiunii V1 în J1 (care este amplasată în mediul a cărui temperatură trebuie măsurată). Dar, prin conectarea voltmetrului s-au format încă 2 joncţiuni J2 şi J3.

Joncţiunea J3 este o joncţiune Cu – Cu şi nu se creează o tensiune termoelectromotoare ⇒ V3 = 0.

J2 este o joncţiune Cu – C ⇒ tensiunea V2 opusă ca semn tensiunii V1 (pentru că avem Cu-C şi nu C-Cu). Ca rezultat pe voltmetru se va citi o tensiune Vv proporţională cu diferenţa temperaturilor din punctele J1 şi J2. Prin urmare nu putem cunoaşte temperatura în J1 fără ca în prealabil să cunoaştem temperatura din J2. O modalitate este aceea de a pune J2 într-o baie de gheaţă forţând temperatura la 0°C. Aceasta defineşte pe J2

ca pe o joncţiune de referinţă, putând astfel considera t2 ca o temperatură de referinţă tref .

⇒ Vv = V1 – Vref = K(t1 – tref) (2)

De notat că Vref ≠ 0V pentru că relaţia Seebeck se bazează pe scara Kelvin (zero absolut). De asemenea coeficientul K depinde şi el de temperatură. Există tabele care conţin nu numai Vref la orice temperatură ci chiar Vv când tref=0°C.

TC Cu-C este un caz special pentru că unul dintre fire, cel de Cu, este din acelaşi metal cu bornele voltmetrului (Cu). Să considerăm un caz mai general utilizând un TC Fe-C ⇒ J3 devine joncţiune Cu-Fe. Se poate arăta că dacă joncţiunea Cu-Fe şi Cu-C sunt la aceeaşi temperatură, rezultanta de tensiune este echivalentă cu a unei singure joncţiuni Fe-C. Aceasta ne permite să utilizăm relaţia (2) pentru ca ambele

V=K(t) (1)

Voltmetru

Cu

Cu

J3 Cu

J2 Constantan

J1

V1

Fig. 3.3.2.2.1-1 Măsurarea temperaturii cu un termocuplu

Page 38: Sisteme de Timp Real

3-39

joncţiuni sunt din acelaşi material (Fe-C în acest caz). Este important ca ambele joncţiuni parazite să fie la aceeaşi temperatură de referinţă.

Revenind la (2) trebuie arătat că tref trebuie cunoscut cu precizie pentru calculul lui t1. Se pot utiliza în acest scop alte dispozitive de măsurare ale temperaturii precum:

• termistoare;

• senzori semiconductori;

• termorezistente.

Aşadar, sub controlul unui calculator operaţiile de măsurare a unui TC devin:

1. măsurarea lui tref şi determinarea (din tabele) a tensiunii echivalente Vref a TC pentru joncţiunea parazită;

2. măsurarea Vv şi determinarea V1 (scăzând Vref din Vv);

3. conversia tensiunii V1 în temperatura căutată t1.

Această procedură este cunoscută sub numele de „compensarea de joncţiune”. Se pune problema de ce se utilizează TC ce necesită compensarea de joncţiune în timp ce există dispozitive care nu necesită compensare?

Răspunsul este:

1. TC pot fi utilizate pentru măsurarea unui interval mare de temperaturi

2. Exista avantaje constructive, TC putând fi construit la dimensiunile dorite, fie prin sudare, fie prin încapsulare, pentru protecţie folosindu-se diverse tipuri de învelişuri (teci, carcase, etc).

La alegerea unui TC se va ţine cont de următorii factori:

• preţ;

• precizie;

• posibilităţi de măsurare.

Exemplu:

• Tip J

� Preţ scăzut

� Sensibilitate mare

� Precizie moderată (nu pot fi utilizate peste 760 °C pentru că se decalibrează)

• Tip K

� preţ moderat;

� sensibilitate moderată;

� precizie scăzută şi domeniul de măsură ridicat (pot să măsoare max. 1370 °C).

• Tip T

� preţ moderat;

� sensibilitate moderată;

� precizie înaltă (utilizat pentru măsurarea temperaturilor scăzute).

Page 39: Sisteme de Timp Real

3-40

Toate TC pot fi utilizate pe baza unor curbe sau tabele standard publicate în cataloage în care există corespondenţă între temperatură şi tensiunea electromotoare generată.

Termistoare

Termistorul este un dispozitiv din oxid metalic sau semiconductor ce îşi modifică rezistenţa cu temperatura. Are un coeficient de temperatură negativ ce ajunge la -4 –:- - 8% / °C. Există şi termistoare cu coeficient pozitiv de temperatură. Coeficientul de temperatură fiind de câteva % pe °C, face posibilă sesizarea unor variaţii mici de temperatură (0,01 °C) faţă de alte dispozitive. Precizia termistoarelor este de 10 ori mai bună ca TC, variind între +/-0.1°C. Dimensiunile mici şi Rnominală mare constituie avantaje semnificative pentru termistoare. Sunt confecţionate din amestec de Ni, Mn, Co, Fe, Mg, Ti, etc, sintetizate la temperaturi de 1000 °C, se încapsulează în plastic, metal sau sticlă.

Se pot face măsurători în intervalul –100 ÷ +300 °C. Pe lângă intervalul limitat de măsurare trebuie mare atenţie în montarea şi mânuirea lor, deoarece sunt foarte fragile.

Termorezistente metalice (RTD)

Ca şi termistoarele RTD se bazează pe variaţia rezistenţei cu temperatura. Pentru confecţionare se utilizează Pt, Ni, Wo, Cu, Rd, Ag, etc.

Exemplu: Pt100 → RTD platină 100 (100 este rezistenţa firului în ohmi)

Intervalul util de temperatură pentru RTD cu Pt este –180 °C ÷ + 680 °C.

De fapt platina este cea mai utilizată. RTD au un coeficient de temperatură pozitiv şi prezintă o anumită neliniaritate. Pentru acurateţea măsurătorii se pot aplica corecţii. (ex.: polinoame de gradul 3 pornind de la tabele de corecţie).

Termorezistenţele sunt construite fie cu fir metalic fie cu peliculă. Cele cu peliculă oferă un trăspuns mic, preţ scăzut şi o valoare mare a rezistenţei, însă faţă de cele cu fir metalic sunt mai puţin stabile în timp.

Construcţia RTD depinde de destinaţia lor. Se utilizează în special în fluide conductoare (apă, ulei). Cele mai multe termorezistenţe cu Pt au 100 sau 200 ohmi. RTD cu peliculă Pt 100 sunt cele mai larg răspândite. Acestea au sensibilitate de 0,4 ohmi / °C şi pot fi utilizate la măsurători între -180°C ÷ 1000°C cu precizie de 0,1 ÷ 1 °C, dar la unele traductoare speciale se poate ajunge până la 0,01 °C.

Sunt interschimbabile şi au timp de răspuns relativ mic.

Senzori de temperatură joncţiune semiconductor

Se mai numesc şi senzori cu siliciu (Si). Este format dintr-un circuit electronic care exploatează comportamentul jonctiunii active semiconductoare la variatia temperaturii. Există joncţiuni cu ieşiri în curent sau tensiune. În ambele cazuri ieşirile sunt direct proporţionale cu temperatura. Ieşirea liniară este de nivel relativ înalt, ceea ce face interpretarea foarte uşoară. Cele mai cunoscute tipuri generează 1µA/°K (298µA la 25°C). Acesta poate fi convertit extern într-o tensiune utilizând o rezistenţă cunoscută.

Dispozitivele semiconductoare se utilizează pentru măsurarea temperaturii în intervalul -50°C ÷ +150 °C.

Precizii de 0,5 °C sunt comune, dar se pot obţine şi precizii de 0,1 °C.

Traductoare de presiune, forţă, deformare, poziţie, deplasare, nivel

Deşi fiecare din aceşti senzori sunt bazaţi pe principii diferite, semnalele lor de ieşire sunt tensiuni, curenţi, impedanţe. Aceste semnale se convertesc direct sau indirect în niveluri de tensiune analogice.

• Traductoarele de presiune: - se împart în 3 categorii:

Page 40: Sisteme de Timp Real

3-41

� pentru măsurarea vacuumului (vidului);

� pentru măsurarea presiunii medii;

� pentru măsurarea presiunii mari.

• Vacuummetrele – traductoare cu ionizare care pot fi:

� pentru presiuni medii – traductoare tensometrice, inductive, capacitive sau piezoelectrice;

� pentru presiuni mari – traductoare de presiune cu manganină.

• Traductoarele de forţă – pot fi mărci tensometrice, traductoare piezoelectrice (bazate pe efectul piezoelectric al cristalului de cuartz – aplicarea unei forţe generează o tensiune electrică proporţională cu aceasta).

• Măsurarea deformaţiei se face cu traductoare rezistive.

• Măsurarea deplasării se face cu traductoare rezistive, capacitive sau inductive.

• Măsurarea nivelului se face cu traductoare rezistive, capacitive, etc.

3.3.3 Condiţionarea semnalelor

Aşa cum s-a arătat anterior traductorul este considerat ca sursă de semnal care este trecut printr-o interfaţă de condiţionare a semnalelor, amplasată între traductor şi sistemul de achiziţie date şi control. Deoarece condiţionarea semnalelor are efect asupra calităţii semnalului de intrare, performanţele sistemului pot fi în mare măsură influenţate de tipul condiţionării utilizate.

Condiţionarea semnalelor include:

• conversii curent – tensiune;

• scalări;

• filtrări;

• izolări;

• amplificări.

Fizic, modulele de condiţionare pot fi instalate în diverse locuri, inclusiv lângă sursa de semnal, pe panouri speciale de borne sau pe modulul de achiziţie de date.

Cea mai uzuală şi convenabilă este instalarea în panou de borne. Pentru diverse aplicaţii sunt necesare fie condiţionări active, fie condiţionări pasive ale semnalelor. Toate panourile de borne se conectează la proces prin intermediul unor reglete de semnal. Panourile pasive conţin scheme comune cu rezistenţe, inductanţe, condensatoare, diode. Cu acestea se pot configura divizoare de tensiune, filtre, protecţii la supratensiune. Există de asemenea, elemente active pentru filtrare, amplificări diferenţiale programabile, compensări, izolări, etc.

Pentru cuplarea panourilor de borne la SADC se utilizează cabluri ecranate, torsadate sau cabluri panglică.

Sunt prezentate în continuare tipurile de condiţionări cel mai des întâlnite.

3.3.3.1 Circuit tampon de intrare

Page 41: Sisteme de Timp Real

3-42

Caracteristicile de intrare (curent bias, impedanţă, tensiunea de offset, lărgimea de bandă etc.) SADC implică

anumite limitări referitoare la plaja semnalelor care pot fi măsurate cu acurateţe. Unele traductoare (exemplu: de pH, piezoelectrice etc.) au o impedanţă de ieşire foarte mare. Conectarea acestora direct la SADC (care în mod normal are o impedanţă de intrare moderată) poate să ducă la erori de măsurare. La aceste tipuri de semnale se intercalează între traductor şi SADC un amplificator operaţional cu impedanţă de intrare mare, cu rol de circuit tampon între semnal şi dispozitivul de măsurare.

3.3.3.2 Conversia curent – tensiune

Semnalele de ieşire ale senzorilor sunt adesea în curent de 4 ÷ 20 mA. Înainte de a intra în SADC acestea se convertesc în tensiune printr-un rezistor.

Se utilizează R=250 sau 500 ohmi pentru a se face conversia în 1 ÷ 5 V sau 2 ÷ 10 V. Important este nu valoarea rezistenţei ci stabilitatea acesteia (cu temperatura în special).

Tehnica ce utilizează numai rezistenţe pentru a face conversia curent – tensiune are limitări. Dacă de exemplu se doreşte utilizarea unui curent de 1uA, este necesară o rezistenţă de aproximativ 5 Mohmi. În acest caz apar însă

Vout

-

+

+

OPA 104

R1*

* R1 până la 109 ohmi

Fig. 3.3.3.1-1 Circuit tampon de intrare

+

Vout

250 ohmi Tin

Fig. 3.3.3.2-1 Conversia curent-tensiune (4-20mA)

Vout=-Iin*R1 -

+

+

OPA 111

R1

Fig. 3.3.3.2-2 Conversie curent-tensiune pentru curenţi foarte mici

Iin ->

Page 42: Sisteme de Timp Real

3-43

erori foarte mari datorate zgomotului şi încărcării sistemului de măsurare. Etajele de intrare în SADC conţin dispozitive electronice care creează curenţi mici dar finiţi (curenţi de polarizare = „bias”). Aceşti curenţi sunt absorbiţi de sursa de semnal. De asemenea, ei sunt debitaţi prin rezistenţa de conversie curent – tensiune afectând semnalul ce vine din proces. Acestea sunt motivele pentru care pentru măsurare nu se mai foloseşte o singură rezistenţă, ci o schemă inversoare cu AO.

Cu astfel de scheme pot fi măsuraţi curenţi începând de la 10 pA.

3.3.3.3 Scalarea semnalelor analogice

În mod obişnuit intrările CAN sunt la 0 ÷ 10 V; 0-5V;+/-5 V; +/-10 V. Dacă semnalul de intrare este mai mic decât 1 V, rezoluţia şi precizia sunt afectate. În aceste situaţii, este bine să se amplifice semnalul înaintea CAN. În funcţie de caracterul semnalului, în mod uzual se utilizează amplificări (gain) de 2, 4, 8, 16, 100 şi 1000. Multe dintre circuitele ce înglobează CAN au amplificatoare încorporate.

În alte situaţii este necesar să se măsoare semnale de intrare de 12, 48 sau 100 V. Pentru a aduce aceste semnale în domeniul de intrare al SADC se utilizează divizoare de tensiune.

În cazul divizoarelor este important modul de selectare a rezistoarelor R1 şi R2. Alegerea lui R1 mare poate

introduce limitări de lăţimi de bandă a semnalului datorită filtrului trece – jos produs de R1 şi de o capacitate parazită Cp în paralel cu R2. Lăţimea benzii poate fi extinsă introducând un condensator Cs în paralel cu R1. Valoarea sa trebuie selectată astfel încât R1Cs = R2Cp. În plus ecuaţia presupune ca impedanţa sursei de semnal să fie mică în comparaţie cu R1 + R2, iar R1 şi R2 cât mai mari posibil.

3.3.3.4 Filtrarea

Are ca scop eliminarea din mărimea măsurată a zgomotelor care o însoţesc şi care sunt periodice sau neperiodice.

Zgomotele provin de obicei din:

• inducţia semnalelor de frecvenţă industrială (50Hz, 60Hz, 300Hz) ca urmare a unei vecinătăţi între cablul de forţă şi cel de măsură;

• inducţia unor impulsuri provenite din regimuri tranzitorii pe cabluri de forţă.

O metodă de filtrare este medierea datelor achiziţionate, care creşte raportul dintre semnal şi zgomot. Datorită vitezei şi facilităţilor oferite de SADC moderne, medierea este uşor de implementat. Medierea este cea mai eficientă pentru reducerea zgomotelor aleatoare periodice (50Hz, 60Hz, etc).

Toate tehnicile de filtrare, fie că sunt software, fie că sunt hardware, sunt create să filtreze unele tipuri de zgomote specifice.

Firmele de specialitate oferă module de condiţionare a semnalelor prevăzute cu diverse tipuri de filtre. Cele mai comune tipuri sunt reprezentate prin filtre pasive cu 1 şi 2 poli , ca în figura 3.3.3.4-1:

R1

+

Vout

R2

Vout = Vin * R 2 / (R 1 + R 2) Vin

Fig. 3.3.3.3-1 Divizor de tensiune pentru a reduce semnalale de intrare sub 10V

Page 43: Sisteme de Timp Real

3-44

Figura B este un exemplu de circuit bipolar de filtrare pentru mod comun care atenuează zgomote de 60-80 Hz.

Figura 3.3.3.4-2 sugerează un filtru trece jos diferenţial cu 2 poli.

* reprezintă rezistenţele de retur pentru curenţii de polarizare (bias) ai amplificatoarelor din SADC.

Rezistenţele şi condensatoarele pentru filtrul prezentat trebuie alese cu atenţie, orice neadaptare a atenuării putând aduce la degradarea rejecţiei de mod comun a sistemului.

SADC utilizează tehnici de eşantionare a datelor, ceea ce înseamnă că, deşi semnalele de intrare sunt continue, citirea lor de către SADC nu este continuă (există „gap-uri” între eşantioane). La refacerea semnalelor se fac unele „presupuneri” asupra datelor care există între punctele cunoscute. De obicei se foloseşte interpolarea liniară, care trasează linii drepte între punctele date (cunoscute). Dacă interpolarea liniară nu este suficient de precisă, se recurge în mod logic la creşterea ratei de eşantionare care are ca efect micşorarea gap-urilor dintre eşantioane prin adăugarea de date citite. Nyquist a fundamentat foarte solid din punct de vedere teoretic aspectele legate de eşantionarea datelor. În termeni simpli, criteriul lui Nyquist referitor la eşantionare se formulează astfel:

C

R

C

R

*

C

R

C

R

*

Semnal intrare Spre SADC

Fig. 3.3.3.4-2 Filtru trece jos cu 2 poli diferenţial

+

C1

R1 +

C1

2,7µF

R1

C2

2,7µF

R2

A B

Fig. 3.3.3.4-1 Filtru trece jos cu 1 (A) sau 2 (B) poli

10K 10K

Page 44: Sisteme de Timp Real

3-45

Dacă un semnal continuu cu banda limitată de frecvenţă nu conţine componente de frecvenţă mai mare decât o frecvenţă maximă specificată, semnalul original poate fi reconstituit fără distorsiuni din eşantionare dacă este eşantionat la o rată mai mare de cel puţin 2 ori frecvenţa maximă specificată.

Dacă rata de eşantionare este mai mică decât cea specificată în teorema lui Nyquist, pot fi trase concluzii eronate despre semnalul de intrare.

Exemplu:

În figura 3.3.3.4-3, la A se prezintă un semnal variabil în timp; dacă acesta este eşantionat cu o frecvenţă mai mică decât este necesar (momentele eşantionării sunt sugerate cu linie întreruptă) se obţine semnalul de la B care are o variaţie în timp mult mai lentă decât a semnalului iniţial supus eşantionării, deci reprezintă un semnal de frecvenţă diferită faţă de cea iniţială. Acest al doilea semnal reprezintă un aşa-zis semnal „alias” al semnalului iniţial. În acest fel se obţine prin refacere o informaţie falsă.

Utilizarea unei rate de eşantionare care nu ţine cont de frecvenţa cea mai mare care are semnificaţie în semnalul de intrare denaturează datele de intrare. Dacă semnalul de intrare conţine zgomot de frecvenţe mai mari decât ale semnalului, eşantionarea sa cu o frecvenţă determinată de frecvenţa sa maximă (şi nu a zgomotului), duce la crearea unui „alias” al zgomotului care nu mai poate fi eliminat printr-o filtrare ulterioară.

De exemplu, eşantionarea la o secundă a unui semnal peste care se modulează zgomotul de 50 Hz face imposibilă înlăturarea zgomotului - pentru înlăturarea acestui zgomot prin filtrare ulterioară, eşantionarea ar trebui făcută la o frecvenţă de cel puţin 100 HZ (eşantionare la max. 10 ms).

Soluţia pentru înlăturarea acestui fenomen este eşantionarea la o rată corespunzătoare. Dacă nu se cunosc componentele de frecvenţă care pot cauza violarea criteriului lui Nyquist, trebuie amplasate filtre de intrare „anti-aliasing” pentru a limita frecvenţele înalte datorate zgomotelor. La alegerea filtrelor se va ţine cont ca acestea să nu atenueze semnalul util sau, în alte cazuri, să nu facă filtrare parţială (să lase anumite zgomote

Fig. 3.3.3.4-3 Alias datorat unei rate mici de eşantionare

A

B

Page 45: Sisteme de Timp Real

3-46

să treacă). Există publicaţii de specialitate care fundamentează matematic diverse tipuri de filtrări şi prezintă algoritmii de calcul.

În aplicaţii pentru controlul proceselor, filtrarea zgomotelor provenite de la frecvenţele industriale (inducerea unor semnale de 50Hz de exemplu) în timp real se poate face utilizând filtrare soft prin algoritm de mediere de tip „fereastră glisantă”; numărul de eşantioane din fereastra pe care se face medierea depinde de frecvenţa semnalului de zgomot ce trebuie filtrat (vezi criteriul lui Nyquist) şi trebuie să conţină eşantioane aferente cel puţin unei perioade. Algoritmul gestionează un buffer circular cu valorile ce intră în medie, la fiecare eşantionare eliminând cea mai veche valoare şi introducând în buffer pe cea mai nouă. Făcând media eşantioanelor din buffer, se obţine valoarea mărimii de intrare neafectată de zgomotul industrial.

Dacă se doreşte o refacere cât mai fidelă a semnalului util de la intrare, este bine ca eşantionarea să fie la o frecvenţă de 5 – 10 ori mai mare decât cea mai mare componentă de frecvenţă din semnalul achiziţionat.

3.3.3.5 Izolare analogică

Este utilizată în unele aplicaţii pentru a proteja oamenii şi echipamentele de contactele cu tensiunea înaltă.

Alte aplicaţii necesită întreruperea buclelor de masă sau îndepărtarea semnalelor mari de mod comun.

Exemplu:

Dacă un termocuplu este conectat pe rotorul unui motor, el poate fi la 240V faţă de masă. Totuşi tensiunea de ieşire a TC poate fi numai de 30 mV. Cei 30 mV reprezintă un semnal diferenţial, deoarece se aplică la intrările + şi - ale canalului de achiziţie. Pe de altă parte, cei 240 V apar nu ca un semnal diferenţial ci ca un

semnal comun la ambele intrări + şi – ale SADC. Tensiunea de mod comun este referită la masa sursei de alimentare a sistemului. Canalele standard de intrări analogice pot accepta numai până la 10 V semnal de mod comun pentru a rămâne liniare. De asemenea, tensiuni mai mari de 30 V pot distruge componentele etajelor de intrare. În exemplul dat cei 240 V reprezintă un real pericol. De aceea, trebuie să fie utilizat un izolator analogic care să separe semnalul diferenţial util de tensiunea de mod comun nedorită.

Pentru izolare se utilizează 3 tipuri de module de condiţionare: cuplare capacitivă, cuplare prin transformator şi cuplare optică.

• Cuplare capacitivă – se utilizează izolatorul denumit capacitate flotanta (“flying capacitor"). Acesta utilizează un releu mecanic, comandat de SADC, care pune un condensator succesiv în paralel cu procesul, respectiv cu intrarea SADC. Are preţ scăzut dar este mai puţin fiabil datorită releului mecanic utilizat.

• Cuplare prin transformator – este cea mai performantă. Asigură precizii ridicate şi tensiuni mari de străpungere. Are preţ ridicat şi se utilizează acolo unde se justifică precizie mare. În aplicaţiile medicale această cuplare este cea mai folosită, deoarece asigură cea mai bună protecţie.

• Cuplare optică – este cea mai des folosită în sistemele industriale de achiziţie. Izolatorii optici oferă performanţe ridicate la preţ scăzut. Firmele de specialitate oferă o gamă largă de module pentru izolare,

K

C Spre SADC

Fig. 3.3.3.5-1 Cuplare capacitivă – condensator flotant

Page 46: Sisteme de Timp Real

3-47

fie individual pentru fiecare canal, fie prin „panouri de borne” utilizate pentru mai multe canale simultan.

3.3.3.6 Protecţie la supratensiune

Când un sistem poate fi obiectul unei intrări de înaltă tensiune accidentală, este necesară protejarea echipamentului pentru a nu fi distrus. Intrările de înaltă tensiune pot fi produse de fulgere, câmpuri magnetice, electricitate statică, contact electric cu linii de tensiune înaltă, etc.

Firmele care produc module de condiţionare oferă reţele de protecţie dintre care în figura 3.3.3.6-1 se dau schemele a două tipuri.

MOV = metal oxid varistor (în loc de MOV se pot utiliza 2 diode Zenner)

Circuitul A poate tolera intrări continue până la 45V. Când suprasarcina dispare, calea de semnal revine automat la normal.

Circuitul B este utilizat pentru supratensiuni continue, până la 280V. Dacă supratensiunea se menţine, se arde siguranţa pentru a proteja circuitul de protecţie.

Rezistenţa (sau siguranţa la B) şi MOV formează un limitator de tensiune pentru a asigura ca supratensiunea să nu ajungă la intrările SADC. MOV reacţionează foarte rapid pentru a absorbi impulsurile rapide de energie înaltă. Condensatoarele ajută la suprimarea tranziţiilor de înaltă frecvenţă. Valorile condensatoarelor vor fi cât mai mari, deoarece zgomotele pot depăşi 1kV. De asemenea condensatoarele se vor poziţiona cât mai aproape posibil de punctul de intrare a semnalului în sistem.

3.3.3.7 Scalarea intrărilor/ieşirilor numerice

15V MOV

1K, 1W

A

15V MOV

B ∼ ¼ A

Fig. 3.3.3.6-1 Reţele reprezentative de protecţie a intrării

Page 47: Sisteme de Timp Real

3-48

Pentru semnale numerice se poate utiliza circuitul următor pentru a produce semnale TTL.

Condensatorul de 10pF este inclus pentru a ajuta la menţinerea componentelor de înaltă frecvenţă prezente

în semnalul de intrare.

Sistemele de achiziţie necesită tranziţia rapidă a frontului semnalului de intrare pentru a asigura o operaţie sigură (de obicei tranziţii ≤ 10 microsecunde). Dacă o anumită intrare nu este suficient de rapidă (tranziţia sa), se utilizează circuite cu triggere Schmidt în etajul dinaintea SADC.

Când ieşirile numerice comandă sarcini mai mari decât TTL, acestea sunt convertite prin tranzistoare de putere şi triacuri pentru a comanda curenţi sau tensiuni înalte (alternative sau continui).

3.3.3.8 Izolarea numerică

Pentru intrările / ieşirile numerice este necesară izolarea între SADC şi proces. Uzual, modulele pentru mărimi numerice se separă de semnalele din câmp, prin izolare optică (cu optocuploare).

Firmele de specialitate oferă panouri de condiţionare pentru un număr de intrări şi / sau ieşiri, care asigură atât izolarea cât şi conversia semnalelor în nivel TTL.

3.3.3.9 Detectarea contactelor

Când se face interfaţa cu relee sau contactoare care au contacte mecanice, trebuie ţinut cont de faptul că datorită oxidării contactelor sau altor imperfecţiuni, pot apare niveluri TTL parazite care pot fi interpretate eronat. Pentru reducerea oxidării contactelor este necesară trecerea unui curent prin contactele de releu. De asemenea, pentru obţinerea nivelurilor TTL la intrarea SADC atunci când se închid/deschid contactele, trebuie ca prin circuit să fie injectat un curent (numit şi curent „pull-up”). Schema din fig. 3.3.3-11 poate fi utilizată atât pentru curentul „pull-up” cât şi pentru reducerea efectelor oxidării.

Pentru un curent de 20 mA, R1 = 250 ohmi iar R2C1 este un filtru pentru eliminarea oscilaţiilor eronate.

4,7 V

Zenner

10K

TTL

C

10 pF

Vin=(10-50)V

Fig. 3.3.3.7-1 – Circuit de conversie semnale numerice mari în TTL

R2

+5V

Spre SADC

contacte externe

C1

R1

Fig. 3.3.3-11 Detectarea contactelor

Page 48: Sisteme de Timp Real

3-49

Când contactul este deschis, tensiunea la intrarea SADC este 5V iar când contactul este închis tensiunea este 0V.

3.3.3.10 Comanda releelor

Se face un circuit de forma prezentată în figura 3.3.3.10-1:

D1 protejează circuitul intern faţă de curenţii inductivi de revenire de la releu, care produc vârfuri de înaltă tensiune. Dioda se alege astfel încât să răspundă rapid.

3.3.4 Subsistemele de intrare/ieşire ale SADC

După cum am văzut, majoritatea semnalelor din lumea reală nu pot fi citite direct de calculator. Conversia semnalelor într-un format recunoscut de acesta se realizează de către SADC prin intermediul unei varietăţi de dispozitive ce include convertoare analog numerice (CAN), multiplexoare, circuite de eşantionare-memorare (Sample and Hold - S/H), amplificatoare, circuite de numărare şi temporizare precum şi alte funcţii specializate. Caracteristica cea mai importantă a SADC este aceea că integrează funcţii diferite principal într-un sistem unitar. Un SADC poate să conţină unul sau mai multe tipuri de subsisteme:

• intrări analogice;

• ieşiri analogice;

• intrări numerice;

• ieşiri numerice;

• intrări de numărare;

• ieşiri de numărare.

3.3.4.1 Subsistemul de intrări analogice

Funcţia de bază a unui astfel de subsistem este conversia analog-numerică a semnalelor. Aceasta este realizată de CAN care transformă informaţiile analogice în cod binar. Pe lângă CAN mai sunt necesare:

• circuite de amplificare;

• circuite de eşantionare-memorare (S/H);

• multiplexoare analogice (MUX-AN);

+5V

De la ieşirea TTL a

SADC Releu exterior

D1

Fig. 3.3.3.10-1 Circuit de comandă a unui releu

Page 49: Sisteme de Timp Real

3-50

• circuite de condiţionare a semnalelor .

3.3.4.1.1 Convertoare analog numerice (CAN)

Cele mai utilizate sunt:

• cu aproximaţii succesive (SAR);

• cu integrare (DUAL SLOPE);

• paralele (FLASH);

• conversie tensiune-frecvenţă (V/F counting).

Convertoarele paralele sunt cele mai rapide, dar şi cele mai scumpe, iar convertoarele cu integrare sunt cele mai lente şi mai ieftine.

Rezoluţia CAN se exprimă ca 1/2N, unde N este numărul de biţi ai codului generat de CAN. Uneori, se indică mai simplu pentru a exprima rezoluţia, numărul de biţi ai convertorului. Se poate spune astfel că rezoluţia este de 8, 10, 12, 14, 16 biţi. De asemenea, rezoluţia se mai poate exprima şi în mV – câţi milivolti din domeniul de intrare se asociază la cea mai mică valoare dată de CAN (valoarea LSB). Astfel, pentru un convertor de 12 biţi şi un domeniu de intrare de 0-10V rezoluţia este de 10/212 = 2,44 mV acesta fiind cel mai mic nivel detectabil de către un CAN pe 12 biţi.

Precizia este un parametru important pentru măsurarea intrărilor analogice. Acesta defineşte eroarea totală la o anumită citire. De exemplu, la un SADC pentru care se specifică precizia 0,05% pe domeniu de 10 V va genera o eroare în cazul cel mai defavorabil de ±5 mV (10V*0.0005V). Trebuie să ne asigurăm că precizia dată se referă la domeniul de lucru care ne interesează. De asemenea, în prezentarea sistemelor de achiziţie precizia se poate referi la întregul lanţ de măsură (traductor + condiţionare semnale + multiplexor + S/H + CAN) sau la componente de pe lanţ. Prin urmare, în realizarea aplicaţiilor trebuie avut în vedere şi la ce se referă precizia specificată de fabricant.

Cu cât rezoluţia convertoarelor este mai bună, cu atât ele sunt mai scumpe şi mai lente. Pentru o aplicaţie dată trebuie definite cât mai precis cerinţele şi criteriile de performanţă înainte de a decide asupra rezoluţiei necesară pentru convertor, deoarece aceasta are influenţă asupra costului şi vitezei de conversie.

Punctul de pornire pentru selectarea convertorului este dinamica traductoarelor utilizate. Dinamica traductorului se referă la relaţia dintre nivelul maxim al semnalului de intrare la capăt de scală şi cel mai mic nivel detectabil de către traductor.

Nu există neapărat o corelare între dinamica şi precizia traductorului. Exemplu: pentru un traductor cu precizie 0,5% dinamica poate fi mai mare de 80 dB. Această dinamică cere în schimb un sistem cu o rezoluţie de cel puţin 12 biţi.

Pentru corelarea cu dinamica maximă, unele aplicaţii cer la CAN rezoluţii mari, de 14 sau 16 biţi. În astfel de situaţii, prin amplificarea semnalelor de nivel scăzut poate fi mărită rezoluţia. Exemplu: la o amplificare de 10 sau 100 de ori, rezoluţia creşte cu mai mult de 3 respectiv 6 biţi. Aceasta înseamnă că dacă se utilizează un convertor pe 12 biţi, utilizarea amplificării (corelat cu o dinamică corespunzătoare a traductorului) echivalează cu o rezoluţie de 15 respectiv 18 biţi.

Pentru un convertor pe 12 biţi o parte (rezoluţia) reprezintă 1/4096 sau aproximativ 0,025% din întregul domeniu de lucru. La un convertor pe 16 biţi o parte reprezintă 1/65536 sau aproximativ 0,0015% din domeniu. Prin urmare, rezoluţia oferă informaţia necesară pentru a stabili care sunt dinamica şi precizia utile pentru un sistem dat. Pe de altă parte, mărind rezoluţia nu putem beneficia de acest avantaj decât dacă şi celelalte componente din sistem (traductorul, amplificatorul, circuitele de eşantionare-memorie, condiţionări semnale etc.) nu acţionează ca factori limitatori în sistem. Dacă variaţia unui semnal de intrare este mai mică decât rezoluţia sistemului, această variaţie trece neobservată. De exemplu, la folosirea unui CAN pe 12

Page 50: Sisteme de Timp Real

3-51

biţi fără nici o amplificare prealabilă, orice variaţie de semnal care nu depăşeşte 2,44 mV în domeniul de lucru 0÷10 V nu va putea fi detectată. Dacă semnalul este amplificat, de exemplu, de 1000 de ori înainte de conversie, rezoluţia, în absenţa zgomotului, poate fi crescută la 2,44 µV.

La viteza mai mare de 100 eşantioane/sec, cel mai indicat este convertorul cu aproximări succesive. Cu acesta pot fi atinse viteze de achiziţie de peste 100.000 eşantioane/sec. La acest convertor, semnalul de intrare se compară cu semnale generate prin „ghiciri” ponderate liniare, până când cele 2 semnale devin identice. Semnalul de intrare trebuie să rămână neschimbat în timpul comparărilor, în acest scop folosindu-se circuite de eşantioane/memorare (Sample and Hold - S/H).

Dacă nu este nevoie de viteze mari de eşantionare, se pot utiliza convertoare cu integrare, ce pot oferi rezoluţii de 12, 14, 16 biţi la o viteză maximă 3-50 eşantioane/sec. Acest convertor mediază pe timpul conversiei, filtrând în acest fel zgomotul de intrare. De asemenea, liniaritatea şi precizia sa sunt mai bune decât la celelalte tipuri de convertoare.

3.3.4.1.2 Amplificarea

Ca să funcţioneze optim, un CAN necesită la intrare un semnal cu amplitudine mare. Pentru a creşte amplitudinea semnalelor mici se utilizează amplificatoarele. Acestea trebuie să aibă mai multe trepte de câştig (GAIN) selectabile prin soft. Trepte uzuale sunt 2, 4, 8, 16, 100, 1000. Dispozitivul de selectare a treptelor de câştig este cunoscut sub numele de amplificator cu câştig programabil (PROGRAMABLE GAIN AMPLIFIER – PGA). De multe ori pentru a reduce costul se utilizează PGA cu câştig reglabil manual (selecţia se face cu strapuri sau selectând anumite rezistenţe). De reţinut că amplificatorul nu este necesar în orice aplicaţie.

3.3.4.1.3 Multiplexarea analogică

Multiplexorul analogic (MUX-AN) este o structură de comutatoare electronice ce permite ca un număr mare de canale analogice de intrare să poată fi prelucrate folosind un singur amplificator, un singur circuit de eşantionare memorare şi un singur CAN.

Schema bloc a unui subsistem cu multiplexare analogică este prezentată în figura 3.3.4.1-1.

Page 51: Sisteme de Timp Real

3-52

Prin soft se poate controla orice canal pentru a fi achiziţionat la un anumit moment de timp. Această metodă reduce considerabil costul faţă de utilizarea amplificatorului şi CAN separat pe fiecare canal. Deoarece amplificatorul şi convertorul sunt folosite în comun, viteza de achiziţie se reduce. Aproximativ, viteza de achiziţie se divizează la numărul de canale gestionate. Pentru astfel de sisteme, randamentul eşantionării se defineşte ca produsul dintre viteza de achiziţie pe un canal şi numărul de canale.

3.3.4.1.4 Circuitele de eşantionare şi memorare (S/H)

CAN bazate pe aproximări succesive necesită ca semnalul de intrare să nu se modifice pe perioada ciclului de conversie. Funcţia circuitului S/H este de a eşantiona şi memora valoarea prezentă la intrare înainte de începerea fiecărei conversii.

Nivelul eşantionat şi memorat este menţinut constant chiar dacă semnalul de la intrare se modifică, până când conversia analog - numerică se termină.

Memorarea se face de regulă cu un circuit capacitiv care este comutat electronic între circuitul de intrare şi amplificator.

3.3.4.1.5 Multiplexarea în timp

Canalele de intrări analogice folosesc în comun amplificatorul, circuitele S/H şi CAN. Utilizatorul selectează rata de eşantionare dorită în funcţie de aplicaţia dată. Dacă fiecare canal trebuie citit de r ori pe secundă, atunci MUX AN trebuie să fie comandat de n*r ori pe secundă (unde n este numărul canalelor citite).

MUX AN, circuitele S/H, CAN şi amplificatorul trebuie să fie atât de rapide încât să se execute un ciclu de conversie într-un timp mai mic decât 1/(n*r) secunde.

3.3.4.1.6 Timpul de conversie

Timpul de conversie defineşte viteza CAN, care însă reprezintă numai o parte din timpul total necesar pentru a măsura un canal dat. Ideal, toate canalele de intrare ar trebui citite în acelaşi moment de timp, adică la fiecare 1/r secunde. În realitate, multiplexarea în timp generează o asimetrie (jitter), care se datorează diferenţei de timp între citirile canalelor multiplexate.

MUX AN

1

2

n

Condiţionare semnale

Amplificator

S/H

CAN

Cod ieşire (numeric)

Convertor analog numeric

Eşantionare - memorare

Fig. 3.3.4.1-1 – Sistem complet de intrări analogice

Page 52: Sisteme de Timp Real

3-53

Dacă MUX, S/H şi CAN sunt suficient de rapide, putem avea impresia că citirile se fac simultan. Unele aplicaţii însă sunt foarte sensibile la asimetria faţă de timp. De exemplu, măsurarea puterii electrice instantanee (P = U*I*coϕ) sau poziţiile relative ale componentelor mecanice într-o instalaţie robot. Chiar dacă folosim cele mai rapide CAN există multe aplicaţii ce nu pot tolera diferenţele de timp dintre citiri. De exemplu, dacă se eşantionează 4 intrări analogice cu un randament de 89.000 eşantioane pe secundă, timpul mort între 2 conversii ar fi de 11,25 µsec.. Este nevoie deci de 45 µsec pentru a citi cele 4 canale. La o frecvenţă a semnalelor de intrare de 10 kHz (o perioadă durează 100usec), va exista o diferenţă de fază de 121.5° între primul şi al patrulea canal ( 33.75us / 100us * 360°).

În aplicaţii critice, se utilizează tehnica circuitelor de eşantionare-memorare simultane (figura 3.3.4.1-2) ce poate reduce asimetria de timp de 100 până la 1000 ori.

Pentru exemplul dat anterior, diferenţa de fază între primul şi al patrulea canal dacă se utilizează această tehnică, ar fi mai mică de 0,04° (dependent de caracteristicile S/H).

3.3.4.1.7 Conectarea canalelor analogice la multiplexor

Canalele analogice pot fi configurate ca intrări asimetrice (single-ended) sau diferenţiale.

Într-o configuraţie single-ended, canalele se raportează toate la o singură masă comună. Numai „firul cald” al semnalului este conectat prin intermediul MUX AN la amplificator. Returul este comun pentru toate semnalele şi se face prin intermediul cablărilor de împământare. Astfel, atât sursa de semnal cât şi intrările în amplificator sunt referite la o masă comună. Acest mod de configurare se poate utiliza doar în cazul în care căderea de tensiune pe traseul de masă este mică. Problemele apar când această cădere de tensiune este mare. Aceasta generează bucle de masă (curenţi prin conductorul de masă), ceea ce poate genera tensiuni eronate la intrările CAN. Avantajul configurării single-ended este preţul scăzut pe canal, atât ca număr de cabluri utilizate cât şi ca număr de intrări în MUX AN (practic pe fiecare intrare a MUX AN este conectat un canal). Modul de conexiune single-ended este dat de figura 3.3.4.1-3:

MUX AN

S/H 1

2

n

Amplificator CAN

S/H

S/H

Fig. 3.3.4.1-2 Sistem cu circuite S/H multiple

Page 53: Sisteme de Timp Real

3-54

Eroarea de măsură este DV=VG1-VG2, care reprezintă căderea de potenţial pe traseul de masă.

Intrările diferenţiale folosesc două fire pentru conectarea la amplificator (intrarea inversoare şi intrarea neinversoare).

Ambele fire se conectează şi la sursa de semnal. Orice semnal indus prin bucla de masă va apare ca semnal de mod comun şi va fi rejectat de proprietăţile diferenţiale ale amplificatorului. În figura 3.3.4.1-4 este prezentată conexiunea diferenţială.

∼ Es Es - DV

Rez.firului

Tur (fir cald)

Retur (fir rece)

VG2

Masa calculatorului

VG1

Masa sursei

Amplificator de instrumentaţie

Fig. 3.3.4.1-3 Conexiune single-ended

∼ Es Es

Rez.firului VG2

Masa calculatorului

VG1

Masa sursei

Amplificator de instrumentaţie

VCM

Fig. 3.3.4.1-4 Conexiunea diferenţială

Page 54: Sisteme de Timp Real

3-55

Tensiune de mod comun este VCM=VG1-VG2.

Eroarea cauzată de tensiunea de mod comun (VCM) este redusă prin rejecţia de mod comun a amplificatorului de instrumentaţie (tipic 80 dB sau mai mare). Conexiunile diferenţiale reduc considerabil efectele buclelor de masă, dar utilizează fiecare două intrări la MUX-AN şi două cabluri de legatură. Astfel, un sistem de 16 canale de multiplexare va permite conectarea a 16 semnale pe conexiune single-ended, respectiv numai 8 canale pe conexiune diferenţială. În unele aplicaţii se utilizează aşa numitele conexiuni pseudo-diferenţiale. Conexiunile se fac de fapt single-ended, dar una dintre intrări este conectată pentru a măsura tensiunea indusă în bucla de masă, urmând a se face apoi corecţia soft. Această tehnică se poate utiliza acolo unde toate semnalele de intrare folosesc ca referinţă acelaşi potenţial de masă.

3.3.4.1.8 Scalarea intrărilor analogice

Traductoarele prezintă la intrarea în sistemul de intrări analogice semnale direct proporţionale cu evoluţia mărimii măsurate (intrări analogice liniare) sau semnale care au o corespondenţă cu mărimea conform specificaţiilor fabricantului (intrări analogice neliniare). La acestea din urma fie se specifică o relaţie matematică de corespondenţă, fie sunt date tabele de corespondenţă (în acest caz punctele neincluse în tabele se calculează prin interpolare liniară).

Conversia din valori exprimate în coduri CAN (de exemplu pentru convertoare de 12 biţi acestea variază în domeniul 0-4095) sau valori de tensiune/curent prezente la intrarea CAN în valori inginereşti se face cu formula

Y=aX+b

unde Y este mărimea exprimată în unităţi inginereşti, X valoarea CAN (sau curent/tensiune corespunzătoare) iar a şi b coeficienţi de scalare.

a se calculează ca raport între domeniul de variaţie al mărimii fizice (în unităţi inginereşti) care corespunde semnalului de intrare şi domeniul de variaţie al semmnalului de intrare în CAN.

b este limita minimă a domeniului de măsură exprimată în unităţi de măsură inginereşti

Exemplu: dacă 0 CAN corespunde la –100°C iar 4095 corespunde la +100°C, atunci:

a = (100-(-100))/(4095-0)) = 0.04884;

b = -100.

La valoarea CAN 1024 va corespunde 0.04884*1024-100= -50°C.

3.3.4.2 Subsistemul de ieşiri analogice

Ieşirile analogice sunt utilizate pentru a genera tensiune de excitaţie, forme de undă, simulări de ieşire de la alte dispozitive, etc. Specificaţiile ieşirilor analogice sunt similare cu ale intrărilor analogice:

• rezoluţia se dă în biţi, mV sau %;

• rata de actualizare a ieşirii se dă în eşantioane/secundă;

• domeniul de variaţie al semnalului de ieşire este ±5 V, ±10 V, 0 ÷ 10 V, 0-5V, respectiv 4 – 20 mA.

În cazul în care se comandă sarcini cu impedanţă de valori mici (motoare electrice) se utilizează ca tampon între CNA şi proces amplificatoare de putere sau generatoare de curent de valori mari.

Dacă acelaşi CAN este utilizat pentru a comanda mai multe ieşiri analogice, se utilizează scheme cu demultiplexoare analogice şi elemente analogice de memorare.

Page 55: Sisteme de Timp Real

3-56

Semnalul reconstituit la ieşirea CNA este dependent de rata cu care eşantioanele sunt trimise. Rata de actualizare a CNA trebuie să ţină cont de semnalul care trebuie obţinut la ieşire.

3.3.4.3 Subsistemul de intrări-ieşiri numerice

Intrările numerice sunt utilizate pentru a detecta starea contactelor de releu, condiţii de pornit/oprit, pentru a citi ieşirile numerice paralele de la diverse dispozitive etc.

Ieşirile numerice sunt utilizate pentru a porni/opri diverse dispozitive, pentru a aprinde lămpi, leduri, declanşarea releelor sau contactoarelor, scrierea de date la dispozitive care au intrări numerice paralele etc. De asemenea, interfeţele numerice sunt utilizate pentru comunicaţii de mare viteză între diverse dispozitive. Cele mai multe sisteme de achiziţie de date şi control pot accepta şi genera semnale TTL 0 ÷ 5 V.

3.3.4.4 Subsistemul de intrări-ieşiri de numărare

Exista o varietate mare de aplicaţii ce utilizează numărarea. Exemple: contorizarea energiei electrice, contorizarea energiei termice. Alte aplicaţii cer ca anumite dispozitive să fie pornite sau oprite la momente de timp foarte precise. Toate aceste funcţii pot fi rezolvate cu circuite de tip numărător / periodizator (counter/timer) care sunt destinate pentru aplicaţii de numărare, măsurare de frecvenţă, generarea de baze de timp etc. Se pot utiliza circuite counter/timer precum I8253, I8254, AMD 9513 etc. Numărătoarele din aceste circuite se caracterizează prin capacitatea maximă de numărare şi prin frcvenţa maximă a tactului la intrare.

Majoritatea sistemelor folosesc numărătoare de 16 biţi ce pot înregistra impulsuri la frecvenţa maximă de 8 MHz. Numărătoarele sunt independente unele faţă de celelalte şi pot fi utilizate în diverse moduri de lucru (numărare elementară, numărare şi divizare de frecvenţă, generare de impulsuri).

Generatoarele de impulsuri permit programarea prin soft atât a duratei (factor de umplere) cât şi a frecvenţei impulsurilor. Un astfel de generator se foloseşte de exemplu pentru a genera o bază de timp impusă pentru achiziţia datelor.

Pentru măsurarea frecvenţei folosind numărătoarele se pot utiliza două metode ce depind de tipul aplicaţiei:

• Determinarea perioadei semnalului necunoscut comparându-l cu perioada cunoscută a semnalului unui generator de tact. Avantajul acestei metode este că permite o măsurare a semnalelor de joasă frecvenţă cu o rezoluţie mare, frecvenţa măsurată putând fi sub 10Hz.

• Numărarea perioadelor semnalului necunoscut într-un interval de timp fixat. Cu această tehnică se pot măsura semnale de frecvenţe mari, de ordinul MHz.

Page 56: Sisteme de Timp Real

4-57

4 PROGRAMAREA DISPOZITIVELOR I/E ÎN APLICAŢII TIMP - REAL

4.1 Tehnici de comunicare cu dispozitivele de intrare/ieşire

Gestiunea comunicării aplicaţiei timp-real cu dispozitivele I/E presupune utilizarea unor tehnici de programare specifice, destinate să sincronizeze operaţiile de I/E cu prelucrările interne. Dacă de exemplu datele sunt citite înainte ca un dispozitiv să le poată furniza, atunci rezultatul este eronat. De asemenea, dacă aplicaţia nu preia datele suficient de rapid, dispozitivul periferic poate să le înlocuiască cu altele noi fără ca acest lucru să poată fi depistat. Prin urmare, este necesar ca în fluxul prelucrărilor să existe secvenţe de program care să realizeze sincronizarea operaţiilor de I/E cu programele de aplicaţie (detectarea dacă un periferic este gata să furnizeze/primească date şi să realizeze transferul acestora).

Pentru sincronizarea comunicării între aplicaţie şi echipamentele periferice există 2 tehnici de bază:

• aplicaţia interoghează periodic dispozitivele (polling) citind registrele de stare pentru a determina când se poate comunica cu acesta;

• dispozitivele periferice întrerup procesorul pentru execuţia unor proceduri specifice de comunicare.

4.1.1 Metoda Polling

Procesorul interoghează dispozitivele periodic, citind unul sau mai multe registre de stare a căror valoare permite procesorului să decidă când dispozitivul este pregătit pentru comunicare. Dacă dispozitivul solicită serviciile procesorului, este apelată o rutină de tratare specifică, în caz contrar procesorul fie continuă interogarea fie execută alte prelucrări.

Bucla de polling poate să fie implementată în două moduri:

1. Aşteptare în bucla de test până când dispozitivul este gata şi apoi transfer de date.

2. Dacă dispozitivul nu este gata în momentul interogării se continuă cu alte prelucrări (inclusiv interogarea altor dispozitive), iar când este gata se face transferul de date.

Deşi polling este cea mai simplă metodă de comunicare, prezinta unele dezavantaje:

• Aplicaţia trebuie să fie capabilă să execute întreaga buclă suficient de rapid pentru a putea ţine cont de toate cerinţele perifericelor.

• În funcţie de încărcarea sistemului, o buclă polling poate fi suficient de rapidă în anumite condiţii de funcţionare a dispozitivelor, iar în alte condiţii poate fi extrem de lentă (de exemplu dacă se execută multe sarcini într-un anumit pas al buclei sau dacă sunt interogate mai multe dispozitive şi toate cer servicii simultan).

• Când complexitatea programului creşte ca urmare a introducerii de noi prelucrări, o buclă polling, care la origine lucra bine, poate deveni prea lungă.

• Dacă se cere executarea unor acţiuni cu o bază de timp prestabilită, o buclă polling nu permite întotdeauna ca aceasta să fie controlată pentru a asigura precizia adecvată. Dacă baza de timp se calculează ţinând cont de durata de execuţie a instrucţiunilor maşină, schimbarea tactului procesorului implică modificarea programului.

Page 57: Sisteme de Timp Real

4-58

4.1.2 Metoda întreruperilor externe

Prin această metodă dispozitivul atenţionează aplicaţia generând întreruperi externe. Tratarea promptă a întreruperilor de la toate dispozitivele este posibilă atât timp cât cererile către procesor sunt rezonabile, acesta este capabil să lanseze rapid procedurile (rutinele) de tratare iar timpul de execuţie al acestora este suficient de mic. În particular, metoda întreruperilor externe este de preferat în aplicaţii care cer precizie pentru timpul de achiziţie de date şi control, în timp ce procesorul execută şi alte sarcini. De asemenea, este utilă dacă mai multe dispozitive solicită asincron servicii, la intervale de timp nepredictibile.

Pentru programarea întreruperilor sunt necesare cunoaşterea sistemului de întreruperi al calculatorului şi modul de programare al acestuia. De asemenea, este necesară cunoaşterea limbajului de asamblare al procesorului sau cel puţin cuvintele cheie şi procedurile speciale pentru întreruperi furnizate de anumite medii de dezvoltare pentru limbaje evoluate. (Unele limbaje precum C/C++, PASCAL, ADA furnizează mijloace de tratare a întreruperilor cu proceduri care realizează citirea/scrierea prin adresarea absolută a locaţiilor de memorie, operaţii de intrare/ieşire la nivel fizic prin programarea porturilor sau locaţiilor de memorie, secvenţe de intrare şi de ieşire din procedurile de tratare a întreruperilor). Succesiunea execuţiei instrucţiunilor de către procesor depinde de apariţia evenimentelor care declanşează proceduri de tratare a întreruperilor. Greşelile în tratarea sistemului de întreruperi al calculatorului provoacă erori grave în execuţia programului şi afectează negativ funcţionarea sistemului, ceea ce face ca programele care utilizează întreruperile să fie greu de depanat.

4.1.3 Metoda Intrări/iEşiri buffer-ate

Această metodă îmbină avantajele polling-ului cu avantajele întreruperilor. Este utilizată în aplicaţii precum bucle de control sau în aplicaţii de supraveghere, unde datele sunt prelucrate şi afişate în paralel cu achiziţia lor.

Implementarea uzuală a intrărilor bufferate constă în:

• o rutină de tratare a întreruperilor care citeşte (achiziţionează de la un dispozitiv extern) datele şi le memorează într-un buffer circular;

• un task scris ca o buclă polling în care aplicaţia aşteaptă datele iar atunci când sunt în memorie le prelucrează.

Contorul de inserare în buffer este gestionat de rutina de tratare a întreruperilor şi indică mereu următoarea locaţie în care trebuie depuse datele achiziţionate. Contorul este incrementat circular. Contorul de extragere este gestionat de task-ul care efectuează în polling prelucrarea datelor din buffer. Permanent, task-ul principal compară cele doua contoare: dacă acestea sunt diferite, există date noi între locaţiile indicate de contorul de extragere (care indică cea mai veche dată depusă în buffer şi netratată) şi contorul de inserare – 1. dacă nu există date noi procedura polling fie aşteaptă date, fie efectuează alte prelucrări. Trebuie să existe un echilibru între rata de achiziţie şi viteza de prelucrare astfel încât buffer-ul să nu conţină mai mult decât câteva intrări noi, iar contorul de inserare să nu depăşească pe cel de extragere (circular).

Ieşirile buffer-ate pot fi tratate similar. Task-ul principal depune datele într-un buffer circular (container), pe măsură ce ele sunt prelucrate, iar rutinele de tratare a întreruperilor le extrag şi le trimit către dispozitivul de ieşire. În acest caz, contorul de inserare este menţinut de task-ul principal, iar cel de extragere de rutina de tratare a întreruperii. Dacă datele trebuie transferate către dispozitivul extern la intervale de timp egale (de exemplu pentru generarea unor forme de undă), task-ul trebuie să fie capabil să depună date suficient de rapid în buffer, pentru ca acesta să nu fie vid atunci când se execută rutina care transferă o nouă dată către dispozitiv.

4.1.4 Alegerea strategiei optime

Trebuie subliniat că utilizarea întreruperilor nu este întotdeauna mai bună decât polling-ul, acesta oferind avantaje semnificative în cazul anumitor aplicaţii.

Cea mai bună strategie pentru achiziţie foarte rapidă de date (fără alte prelucrări în paralel) este utilizarea polling-ului cu bucle scurte scrise în limbaj de asamblare, care testează continuu un registru de stare al

Page 58: Sisteme de Timp Real

4-59

perifericului. Perifericul este servit imediat ce condiţia este îndeplinită îi testarea începe din nou. Spre deosebire de bucla generală polling descrisă anterior, această buclă nu execută şi alte operaţii. Dacă precizia timpului de transfer este considerată de mare importanţă şi dacă bucla polling scurtă nu permite controlul acestuia, atunci acesta trebuie controlat de o bază de timp externă. Aceasta se poate realiza prin impulsuri generate de un numărător programabil sau un generator de frecvenţă (realizat de exemplu cu I8254, AMD 9513 etc. - vezi 4.3).

Pe de altă parte, întreruperile sunt o bună modalitate de a controla achiziţia de date atunci când rata de achiziţie este suficient de scăzută şi există timp disponibil suficient între întreruperi. De asemenea întreruperile sunt mai avantajoase decât polling-ul dacă programul trebuie să comunice asincron cu mai multe dispozitive sau dacă programul trebuie să execute mai multe task-uri în paralel cu sarcinile de achiziţie de date şi comenzi. Multe din aplicaţiile în întreruperi sunt cel mai bine tratate dacă se utilizează I/E buffer-ate. Utilizarea întreruperilor permite procesorului să execute task-uri precum înregistrarea datelor pe disc, citirea datelor de pe disc, execuţia funcţiilor de control, afişarea pe display şi / sau la imprimantă, dialogul cu operatorul etc. concurent cu achiziţia de date şi comenzi.

Alegerea strategiei optime este determinată prin urmare de cerinţele aplicaţiei şi de resursele hard/soft disponibile. Înainte de a decide dacă se utilizează întreruperi sau polling, trebuie să se estimeze supraîncărcarea întreruperilor (salvarea/restaurarea registrelor alterabile) care depinde printre altele şi de procesor şi de frecvenţa tactului folosit de calculator. Pentru un PC limitele practice în utilizarea întreruperilor pentru transferuri de date cu dispozitive CAN / CNA poate varia între câteva eşantioane/sec. până la mii de eşantioane/sec., depinzând de strategia aleasă şi de celelalte task-uri pe care sistemul trebuie să le execute în paralel.

Page 59: Sisteme de Timp Real

4-60

4.2 Programarea utilizând întreruperile Tehnica programării în întreruperi presupune în primul rând cunoaşterea sistemului de întreruperi al calculatorului utilizat. În cele ce urmează se reamintesc unele noţiuni referitoare la sistemul de întreruperi al PC şi se prezintă detalii privind modul de programare al acestuia în modul real al procesoarelor x86.

4.2.1 Prezentarea sistemului de întreruperi la PC

Pentru tratarea întreruperilor, programul trebuie să conţină rutine speciale de tratare a acestora (interrupt handlers). Adresele acestor rutine se plasează în locaţii speciale ale memoriei, astfel încât ele să poată fi

IF=1

Nivel demascat ?

Eveniment extern

DA

NU

NU

Procesorul tratează altă IT ?

DA

Prioritatea este mai mare ?

NU

Start rutină de tratare întrerupere

DA

DA

Aşteaptă întrerupere

NU

Fig. 4.2.1-1Automatul de lansare IT externe la I8259A

Page 60: Sisteme de Timp Real

4-61

executate la apariţia întreruperilor.

La PC, gestiunea întreruperilor externe mascabile (vezi şi 4.2.3) este realizată de către două dispozitive I8259A, cascadate. Caracteristicile de bază ale I8259A sunt:

• gestionează 8 niveluri de întreruperi, fiecare având asociat un nivel de prioritate (0 cel mai prioritar, 7 cel mai puţin prioritar);

• întreruperile cu prioritate mai mare pot întrerupe execuţia rutinelor de tratare a unor întreruperi mai puţin prioritare;

• fiecare nivel de întrerupere poate să fie mascat sau demascat;

• I8259 pot fi cascadate pentru a creşte numărul de întreruperi.

Întreruperile externe mascabile pot fi dezactivate prin program executând instrucţiunea disable interrupt (cli), care resetează Interrupt Flag (IF) din PSW. Dacă procesorul primeşte întreruperi când acestea sunt dezactivate, nu va răspunde până când prin program nu se execută instrucţiunea enable interrupt (sti), care setează IF. Dacă o întrerupere exista memorată în momentul execuţiei sti, procesorul efectuează operaţiile pentru lansarea rutinei de tratare a întreruperii.

I8259A identifică automat sursa de întrerupere externă şi dacă nivelul pe care este conectată aceasta nu este inhibat (nu este mascată sau nu este în curs de execuţie o rutină de tratare întrerupere mai prioritară) activează semnalul Interrupt Request de la procesor. Procesorul, dacă IF este setat (întreruperile sunt autorizate) memorează starea întreruperii, termină normal instrucţiunea în curs de execuţie la apariţia întreruperii (procesorul răspunde la întreruperi între instrucţiuni) şi activează semnalul de acceptare a întreruperii (interrupt acknowledge). La detectarea acestui semnal, controllerul comunică procesorului numărul vectorului de întrerupere asociat întreruperii (pe 8 biţi), pe baza căruia procesorul identifică adresa primei instrucţiuni executabile din rutina de tratare şi o încarcă în CS:IP. Algoritmul clasic de lansare a unei rutine de tratare, implementat în controllerele care gestionează întreruperile externe la PC, este prezentat în figura 4.2.1-1.

Adresa primei instrucţiuni executabile a rutinei de tratare a întreruperii este memorată în prealabil (prin programul utilizator sau de către sistemul de operare) în tabela vectorilor de întrerupere, în locaţiile rezervate pentru intrările de întrerupere ale controllerelor I8259A.

Tabela vectorilor de întrerupere este zona de memorie dintre adresele fizice [0,3ffh] şi conţine 256 de vectori a 4 octeţi fiecare. În fiecare vector se memorează valorile care trebuie încărcate în registrele IP şi CS pentru a adresa prima instrucţiune a rutinei de tratare. Primii 2 octeţi din vector sunt pentru IP (în ordinea low - high) iar următorii 2 pentru CS (ordinea low - high).

Pentru lansarea în execuţie a rutinei de tratare a întreruperii, procesorul efectuează următoarele operaţiuni:

• salvează în stivă (vârful stivei este indicat de SS:SP) conţinutul registrelor care indică adresa instrucţiunii următoare (CS şi IP) şi cuvântul de stare al procesorului (PSW);

• activează semnalul de acceptare a întreruperii (interrupt acknowledge);

• încarcă în registrele de adresă (CS şi IP) adresa rutinei de tratare a întreruperii din tabela vectorilor de întrerupere.

La lansarea rutinei de tratare a întreruperii, procesorul resetează IF, ceea ce înseamnă că în timpul execuţiei acesteia întreruperile mascabile sunt dezactivate. Totuşi, IF poate fi setat prin program în rutina de tratare.

Ultima instrucţiune din rutina de tratare a întreruperii este interrupt return (iret), care este similară cu instrucţiunea ret. Adresa instrucţiunii următoare şi starea originale sunt restaurate (în CS:IP şi respectiv PSW) şi procesorul continuă cu execuţia instrucţiunii următoare celei la care a fost întrerupt.

Page 61: Sisteme de Timp Real

4-62

Ori de câte ori controllerul generează o întrerupere, întreruperile de prioritate mai mică sunt automat inhibate până când prin program este achitată întreruperea (vezi 4.2.3) a cărei rutină este în curs de execuţie. Cererile de întreruperi pe niveluri de prioritate mai mică sunt totuşi memorate de controller şi se declanşează mecanismul de cerere de întrerupere la procesor atunci când sunt îndeplinite condiţiile de prioritate. Întreruperile cu prioritate mai mare pot întrerupe rutinele de tratare a întreruperilor cu prioritate mai mică dacă acestea din urmă au executat instrucţiunea sti (au activat sistemul de întreruperi externe mascabile). Dacă acestea nu au executat instrucţiunea sti ele nu pot fi întrerupte deoarece, după cum s-a arătat, la lansare în execuţie a rutinei de tratare se dezactivează automat sistemul de întreruperi.

La PC (sub DOS), BIOS iniţializează la startare controllerele I8259 şi completează o parte dintre vectorii din tabela de întreruperi cu adresele rutinelor de tratare; este indicat ca programele de sistem şi utilizator să ţină cont de această iniţializare. Sistemul de întreruperi externe este programat astfel încât pentru întreruperile de la 0 la 7 (de la controllerul 1) să fie lansate în execuţie rutinele ale căror adrese de start se găsesc în vectorii de la 08h la 0fh, iar pentru întreruperile de la 8 la 0fh (de la controllerul 2) să fie lansate în execuţie rutinele ale căror adrese de start se găsesc în vectorii de la 70h la 77h. Adresa fizică de memorie pentru adresa memorată în vectorul de întrerupere n este n*4. (Ex: pentru vectorul 8 adresa de memorie este 20h).

O rutină de tratare a unei întreruperi externe poate fi lansată (de obicei pentru testare sau simulare) şi prin program, cu instrucţiunea int n..

Exemple (vezi si 4.2.2):

• int 9 – lansează în execuţie rutina de tratare a întreruperii pentru tastatură;

• int 8 – lansează în execuţie rutina de tratare a întreruperii pentru ceasul de timp real;

• int 0BH - lansează în execuţie rutina de tratare a întreruperii pentru COM2.

4.2.2 Plasarea I8259 în spaţiul de I/E la PC

La PC, porturile de I/E de la 0 la OFFH sunt rezervate pentru a fi utilizate pe placa de bază a calculatorului. Porturile de la 100h până la 3FFH sunt utilizate de către dispozitivele conectate pe magistrala I/E a calculatorului. Porturile cu adrese mai mari de 400h nu sunt disponibile pe placa de bază în sistem.

Asignarea uzuală a porturilor la dispozitive este următoarea:

• de la 0 la 0Fh - porturile pentru controller-ul DMA1, 4 canale I8237;

• de la 20h la 21h - primul controller I8259A pentru întreruperi, la care sunt asignate următoarele întreruperi externe mascabile:

� pe canalul 0 - întreruperea de la ceasul de timp real;

� pe canalul 1 - întreruperea de la tastatură;

� pe canalul 2 - la AT cascadare către al doilea controller I8259;

� pe canalul 3 - întrerupere de la COM2;

� pe canalul 4 - întrerupere de la COM1;

� pe canalul 5 - întrerupere de la a doua imprimantă LPT2 sau placa de reţea;

� pe canalul 6 - întrerupere de la controller-ul floppy discului;

� pe canalul 7 - întrerupere de la prima imprimantă LPT1.

• de la 40h la 43h - porturile pentru dispozitivul numărător/periodizator I8254; un registru de control şi 3 numărătoare de 16 biţi sunt disponibile pe acest dispozitiv:

� Numărătorul 0 - ceasul de timp real;

Page 62: Sisteme de Timp Real

4-63

� Numărătorul 1 - este utilizat pentru reîmprospătarea memoriei;

� Numărătorul 2 - este utilizat pentru difuzor.

• de la 60h la 64h la AT - controller-ul pentru tastatură;

• de la 70h la 71h - pentru accesul la CMOS şi ceasul de timp real din CMOS;

• de la 80h la 8Fh - regiunea de pagină DMA;

• de la A0h la A1h - adresele pentru al 2-lea controller de întreruperi I8259 la AT; la acest controller, sunt asignate următoarele întreruperi externe mascabile:

� pe canalul 0 - întreruperea de la ceasul de timp real din CMOS (utilizată de sistemul de operare OS/2);

� pe canalul 1 - rezervat, la AT preia funcţia canalului 2 de la primul controller care este utilizat pentru cascadare;

� canalele 2,3,4 - disponibile pentru întreruperi de la alte dispozitive decât cele sistem;

� canalul 5 - rezervat pentru coprocesorul matematic;

� canalul 6 - rezervat pentru controller-ul de hard disc;

� canalul 7 - disponibil;

• C0h-CFh - al doilea controller DMA;

• F0h-F1h - coprocesor matematic;

• 170h-177h - al 2-lea hard disc;

• 1F0h-1F7h - primul hard disc;

• 200h-207h - games;

• 278h-27Fh - interfaţă paralela pentru LPT2;

• 2E8h-2EFh - porturi pentru COM4;

• 2F8h-2FFh - porturi pentru COM2;

• 370h-377h - al doilea controller al floppy discului;

• 378h-37Fh - porturi pentru LPT1;

• 3E8h-3EFh - porturi pentru COM3;

• 3F0h-3F7h - primul controller floppy;

• 3F8h-3FFh -porturi pentru COM1;

4.2.3 Detalii de programare utilizând întreruperile la PC cu SO DOS

Se reaminteşte faptul că la microprocesoarele din familia 80x86 întreruperile pot fi interne sau externe.

Întreruperile interne sunt generate fie de instrucţiunile software (int n), fie de procesor în anumite situaţii (depăşire aritmetică, TF poziţionat etc).

Întreruperile externe sunt generate de hardware şi pot fi:

• nemascabile (pe intrarea NMI la procesor), sau

• mascabile (prin intermediul controller-elor I8259);

Întreruperile nemascabile întrerup secvenţa curentă de instrucţiuni indiferent de situaţie.

Page 63: Sisteme de Timp Real

4-64

Întreruperile mascabile întrerup secvenţa curentă de instrucţiuni numai dacă IF=1, dacă bitul asociat în registrul mască al I8259 (vezi mai jos) este pus la 0 şi dacă nu este în curs de tratare o altă întrerupere externă mai prioritară.

În continuare sunt prezentate aspecte practice de utilizare a sistemului de întreruperi externe la PC, după ce BIOS a executat procedura de iniţializare.

În practică, se întâlnesc două modalităţi de utilizare a întreruperilor:

1. apelarea procedurilor pe care BIOS-ul sau alte programe/drivere/TSR-uri le pun la dispoziţie;

2. capturarea vectorului de întrerupere şi depunerea în tabela vectorilor de întrerupere a adresei unei rutine de tratare utilizator.

Lansarea în execuţie a rutinelor de tratare, în ambele cazuri, se face în funcţie de tipul întreruperii:

• prin program cu instrucţiunile int pentru întreruperi software;

• declanşat de către semnale externe/interne cablate pe nivelurile întreruperilor externe;

Rutinele de tratare asociate întreruperilor externe pot fi apelate şi cu instrucţiuni int, de obicei pentru testare şi depanare.

Apelul prin program cu instrucţiunea int presupune următorii paşi:

1. salvarea registrelor procesorului (dacă este cazul);

2. încărcarea în registrele procesorului sau în anumite locaţii de memorie a unor valori solicitate de rutina de tratare a întreruperii;

3. executarea instrucţiunii int (int n);

4. tratarea ieşirilor (dacă există) din rutina de tratare a întreruperii;

5. refacerea registrelor salvate la primul pas.

În funcţie de specificul rutinei de tratare a întreruperilor anumiţi paşi pot fi omişi (de exemplu pentru rutinele care nu afectează registrele sau indicatorii de condiţii nu sunt neapărat necesari paşii privind salvarea şi restaurarea registrelor şi indicatorilor). În cazul în care programul apelează propria rutină de tratare a întreruperii este necesar să fie tratate toate aspectele referitoare la salvarea şi restaurarea registrelor şi indicatorilor, pentru a nu provoca efecte colaterale dezastruoase pentru funcţionarea sistemului.

Pentru capturarea unui vector de întrerupere, în program trebuie să apară următoarele secvenţe:

• salvarea în memorie (de obicei în segmentul curent de date sau cod) a adreselor rutinelor de tratare curente, care urmează a fi înlocuite cu rutine utilizator ;

• depunerea în tabela vectorilor de întreruperi a adresei rutinei de tratare utilizator;

Observaţii:

1. Există situaţii în care rutina de tratare a întreruperii utilizator, înainte sau după efectuarea unor prelucrări specifice aplicaţiei, trebuie să apeleze şi rutina iniţială de tratare a întreruperii (dacă de exemplu în BIOS este prevăzută o astfel de rutină) – vezi şi exemplul de la 4.2.4.

2. La sfârşitul programului scris de utilizator trebuie ca adresele originale ale rutinelor de tratare utilizate în program să fie refăcute în tabela vectorilor de întrerupere, în caz contrar apărând efecte imprevizibile în funcţionarea sistemului.

Atunci când utilizează întreruperile mascabile externe, programatorul trebuie să trateze în mod adecvat următoarele:

• activarea/dezactivarea sistemului de întreruperi mascabile;

• mascarea/demascarea nivelurilor de întrerupere la controllerul I8259;

Page 64: Sisteme de Timp Real

4-65

• registrele procesorului trebuie salvate la începutul execuţiei rutinei de tratare şi restaurate la sfârşitul acesteia;

• achitarea întreruperii externe în curs de execuţie;

• comunicarea (sincronizarea) cu programul/programele utilizator pe care rutina îl/le deserveşte.

Sistemul de întreruperi mascabile se activează după execuţia instrucţiunii sti sau după execuţia unei instrucţiuni popf în care indicatorul IF din cuvântul extras din stiva este 1 şi se dezactivează cu instrucţiunea cli sau dacă se execută instrucţiunea popf în care indicatorului IF în cuvântul extras din stivă este 0.

Cât timp sistemul de întreruperi este activat, pot avea acces la procesor numai întreruperile care nu sunt mascate în octetul de măşti din controllerul I8259. La primul controller de întreruperi registrul de mascare este la adresa 21h, iar la cel de-al 2-lea la adresa 0A1h. În aceste registre, pentru fiecare întrerupere există câte un bit de mascare.

Registrul mască de la adresa 21h:

bit: 7 6 5 4 3 2 1 0

| …… | | |

IRQ7 IRQ2 IRQ1 IRQ0

Registrul mască de la adresa 0A1h :

bit: 7 6 5 4 3 2 1 0

| ….. | | |

IRQF IRQA IRQ9 IRQ8

Dacă bitul corespunzător IRQn este egal cu 0, nivelul de întrerupere este demascat; dacă este egal cu 1, nivelul de întrerupere este mascat şi întreruperea asociată nu este tratată de către controller.

Exemplu: Mascarea/demascarea unei întreruperi pe nivelul 1 (pentru IRQ1 )

IRQ1-demascare:

in al,21h mov oldmask1,al and al,0FDh out 21h,al

IRQ1-mascare:

in al,21h mov oldmask1,al or al,2 out 21h,al

Refacerea măştii iniţiale se face cu secvenţa de instrucţiuni:

mov al,oldmask1 out 21h,al

Exemplu: Mascarea/demascarea unei întreruperi pe nivelul 9 (pentru IRQ9 )

IRQ9-demascare:

in al,a1h mov oldmask2,al and al,0FDh out a1h,al

IRQ9-mascare:

Page 65: Sisteme de Timp Real

4-66

in al,a1h mov oldmask2,al or al,2 out a1h,al

Refacerea măştii iniţiale se face cu secvenţa de instrucţiuni:

mov al,oldmask2 out a1h,al

Atunci când prin hardware se lansează în execuţie o rutină de tratare a întreruperii, se salvează automat în stivă (în această ordine): IP, CS si PSW ; structura PSW pentru modul de lucru real al procesorului este următoarea:

15 …………. 0

| |

x x x x O D I T S Z x A x P x C

unde: x nu contează iar O, D, I,T,S,Z, A, P, C sunt indicatorii; I este Interrupt Flag. Prin program, trebuie salvaţi (cu instrucţiuni push) regiştrii procesor care sunt utilizaţi în rutină - pentru siguranţă, este bine să fie salvaţi toţi.

La terminarea rutinei de tratare, se restaurează toţi regiştrii salvaţi la început (cu instrucţiuni pop, în ordinea inversă salvării) apoi se execută iret. Când se execută instrucţiunea iret, se refac automat PSW,CS,IP.

• În timpul execuţiei rutinei de tratare, după efectuarea prelucrărilor specifice pentru nivelul de prioritate al întreruperii, trebuie făcută achitarea întreruperii externe, cu următoarele secvenţe de instrucţiuni:

; pentru primul I8259: mov al,20h out 20h,al ; pentru la 2-lea I8259: mov al,20h out 0a0h,al

Dacă întreruperea nu este achitată, nu vor mai putea fi lansate ulterior rutinele de tratare cu prioritate mai mică sau egală cu a întreruperii neachitate.

Deoarece programul în curs de execuţie nu cunoaşte când apar întreruperile, este necesar ca rutina de tratare şi acesta să comunice/să se sincronizeze; de regulă comunicarea/sincronizarea se realizează prin intermediul unor zone comune de memorie (memorie partajată). Accesul la aceste zone trebuie făcut cu interblocare, pentru a evita erorile.

Exemplu: un program pe 16 biţi, modul real partajează cu o rutină de tratare a întreruperii un întreg long (pe 4 octeţi), a cărui scriere/citire se face prin două instrucţiuni procesor. Atunci când programul utilizator citeşte întregul fără interblocare, există pericolul ca între cele două instrucţiuni de citire să se declanşeze rutina de tratare care modifică valoarea; în această situaţie, programul utilizator va citi partea low din vechea valoare şi partea high din noua valoare. Evitarea acestei situaţii se face utilizând mecanisme de interblocare puse la dispoziţie de către sistemul de operare sau implementate în program. Cea mai simplă metodă, este ca accesul în scriere/citire din programul utilizator la zonele comune să se facă cu secvenţa:

cli ; dezactivează întreruperi … Acces la zona comună … sti ; activează întreruperi

În general, în rutina de tratare nu trebuie să fie executate apeluri sistem sau subprograme comune cu programele utilizator, dacă acestea nu sunt reentrante. De asemenea, accesul la porturi, zone comune de memorie sau alte resurse comune cu sistemul de operare sau programele utilizator trebuie să se facă cu interblocare.

Page 66: Sisteme de Timp Real

4-67

4.2.4 Exemple de utilizare a întreruperilor

Având ca sistem de operare MS DOS, să se elaboreze un program în limbaj de asamblare care la fiecare 10 întreruperi de la ceasul de timp real să afişeze pe monitor caracterul ‘A’. O întrerupere de la ceasul de timp real al PC apare de aproximativ 18.2 ori pe secundă (la aprox. 55 ms) – vezi şi 4.3.4. Oprirea programului să se poată face fie la acţionarea tastelor CTRL+BREAK, fie după ce s-a afişat de 1000 ori caracterul ‘A’.

Pentru a scrie acest program este necesar să fie capturaţi vectorii de întrerupere de pe nivelul 8, unde este depusă adresa rutinei de tratare pentru IRQ0 şi de pe nivelul 23h asociat instrucţiunii int 23, unde este depusă adresa rutinei de tratare pentru CTRL+BREAK. Pentru afişarea pe monitor a caracterului ‘A’ se va folosi funcţia DOS 09h iar pentru oprirea normală a programului se va folosi funcţia DOS 4ch a întreruperii software int 21h.

Detalii privind funcţiile DOS/BIOS utilizatepot fi furnizate de programul « Help » disponibil la laborator.

dosseg .model small .stack 200h .data int_8_ip dw ? int_8_cs dw ? int_23_ip dw ? int_23_cs dw ? msg db 'A$' timer dw 0 ;contor zece dw 10 old_mask db ? .code save_ds dw ? program_ceas proc near mov ax,@data mov ds,ax mov cs:save_ds,ax ; salvare ds xor ax,ax mov es,ax ;salvare adresele BIOS pentru rutinele de tratare pentru nivelurile 8h si ;23h mov ax,es:(8*4) mov int_8_ip,ax mov ax,es: (8*4+2) mov int_8_cs,ax mov ax,es: ( 23h*4 ) mov int_23_ip, ax mov ax,es: ( 23h*4+2 ) mov int_23_cs , ax ;Se dezactiveaza sistemul de întreruperi pentru a nu apare ;accidental întreruperi in timp ce se fac modificări in tabela ;vectorilor de întreruperi cli ;Depune in tabela adresele rutinelor de tratare utilizator mov word ptr es: ( 8*4 ) , offset it_ceas mov word ptr es: ( 8*4+2 ) , cs mov word ptr es: ( 23h*4 ) , offset ctrl_break mov word ptr es: ( 23h*4+2 ) , cs ;demascare nivelul 0 la primul I8259 in al,21h mov old_mask , al

Page 67: Sisteme de Timp Real

4-68

and al, 0FEh out 21h, al ; demascare nivel 0. ; activeaza sistemul de întreruperi mascabile sti ;aici incepe bucla de prelucrare in programul utilizator mov si,timer repeta: mov dx, 0 mov ax, timer cmp ax, si jz repeta ;daca nu s-a modificat contorul, repeta mov si,ax div zece cmp dx, 0 jnz repeta; numai la 10 tick-uri se face afisarea mov dx,offset msg mov ah,9 ; functia DOS de afisare sir de caractere terminat cu ‘$’

int 21h ; afiseaza ‘A’ mov ax,timer cmp ax, 1000 jc repeta call far ptr restore_vect ;restaureaza vectorii initiali mov ah,4ch ;termina programul int 21h program_ceas endp it_ceas proc far ; rutina de tratare I.T ceas push ax push ds

push bx push cx push dx push si push di push bp push es mov ax,cs:save_ds mov ds,ax ;reface ds al programului asociat rutinei inc timer pop es pop bp pop di pop si pop dx pop cx pop bx pop ds pop ax jmp dword ptr int_8_ip it_ceas endp ctrl_brk proc far ; rutina de tratare CTRL+BREAK push ax push ds push bx push cx push dx

Page 68: Sisteme de Timp Real

4-69

push si push di push bp push es mov ax,cs:save_ds mov ds,ax xor ax,ax mov es,ax call far ptr restore_vect pop es pop bp pop di pop si pop dx pop cx pop bx pop ds pop ax jmp dword ptr int_23_ip ctrl_brk endp restore_vect proc far ; restaurare vectori initiali si masca la ieşirea din program… cli mov ax,int_8_ip mov es:(8*4),ax mov ax,int_8_cs mov es:(8*4+2),ax mov ax,int_23_ip mov es:(23h*4),ax mov ax,int_23_cs mov es:(23h*4+2),ax mov al,old_mask out 21h,al sti ret restore_vect endp end program_ceas

Observaţii:

1. Rutinele de tratare pentru întreruperea de la ceas (it_ceas) şi pentru tratarea acţionării tastelor ctrl_break (ctrl_brk) se termină cu instrucţiunea jmp la adresa vectorului originar de tratare a întreruperii, salvat în programul utilizator. Acest lucru este necesar deoarece există în sistemul de operare rutine care tratează aceste întreruperi, în cadrul tratării efectuându-se operaţii absolut necesare pentru sistem – de exemplu oprirea motorului de la floppy disc este gestionată în rutina de ceas originală. Nu toate întreruperile au proceduri de tratare în cadrul BIOS sau sistemului de operare. În astfel de situaţii modul de terminare depinde de tipul întreruperii: dacă întreruperile sunt externe şi mascabile, atunci înainte de terminare se face achitarea întreruperii în curs de tratare şi apoi se execută instrucţiunea iret; pentru celelalte tipuri de întreruperi terminarea se face pur şi simplu cu iret; În cazul de faţă dacă sistemul de operare nu ar avea rutina pentru întreruperea de la ceas instrucţiunile:

pop ax jmp dword ptr int_8_ip

ar trebui înlocuite cu:

mov al,20h;

Page 69: Sisteme de Timp Real

4-70

out 20h,al pop ax iret

Pentru rutina de tratare acţionarea CTRL+BREAK terminarea s-ar putea face înlocuind

jmp dword ptr int_23_ip

cu

iret.

2. Întreruperea unui program DOS din execuţie se poate face utilizând CTRL+C sau CTRL+BREAK. Prin utilizarea comenzii BREAK în CONFIG.SYS sau ca o comandă obişnuită DOS, sistemul de operare poate fi determinat să verifice acţionarea tastelor respective în timpul oricărui apel sistem (BREAK=ON) sau să facă verificarea numai în timpul apelurilor sistemului pentru operaţiile de I/E cu echipamente periferice standard (BREAK=OFF). În program se foloseşte astfel apelul sistem 09H pentru afişarea unui şir de caractere iar în timpul execuţiei acestui apel se face testul de acţionare CTRL+BREAK.

Programul de mai sus se poate scrie şi în limbajul C/C++, PASCAL etc. fie prin utilizarea funcţiilor speciale pentru întreruperi, existente în bibliotecile mediilor de dezvoltare, fie prin utilizarea programării mixte limbaj evoluat / limbaj de asamblare. O versiune a programului scrisă în Borland C/C++ este următoarea:

#include <stdio.h> #include <dos.h> #include <conio.h> #define INTR_8 0X08 /* Întreruperea de la ceas, la aprox. 55ms*/ #define INTR_23 0X23 /* Întreruperea CTRL_BREAK */ #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif unsigned char oldmask_1=0; void interrupt ( *oldint8)(__CPPARGS); void interrupt ( *oldint23)(__CPPARGS); int count=0,oldcount=0,ctrl_bk=0; void interrupt ceas(__CPPARGS){ /* incrementeaza contorul */ count++; /* achitarea întreruperii */ outportb(0x20,0x20); } void interrupt ctrl_brk(__CPPARGS){ ctrl_bk=1; } void main(void){ /* salveaza vechii vectori de întrerupere */ oldint8 = getvect(INTR_8); oldint23 = getvect(INTR_23);

Page 70: Sisteme de Timp Real

4-71

/* dezactiveaza sistemul de întreruperi mascabile */

asm cli; /* seteaza noii vectori de întrerupere */ setvect(INTR_8, ceas); setvect(INTR_23,ctrl_brk); /*salveaza masca pentru primul 8259*/ oldmask_1=inportb(0x21); /*demascheaza întreruperea 0*/ outportb(0x21,oldmask_1 & 0x0fe); /* activeaza sistemul de întreruperi mascabile */

asm sti; /* bucla de prelucrare a programului principal */ clrscr(); while ((count<1000)&&(!ctrl_bk)){ if(count!=oldcount) if((count % 10)==0) { printf("A”); oldcount=count; } } /* dezactiveaza sistemul de întreruperi mascabile */

asm cli; /* seteaza vechii vectori de întrerupere */ setvect(INTR_8, oldint8); setvect(INTR_23,oldint23); /*seteaza vechea masca pentru primul 8259*/ outportb(0x21,oldmask_1); /* activeaza sistemul de întreruperi mascabile */

asm sti; }

Se remarcă:

• utilizarea cuvântului cheie interrupt, care indică compilatorului să genereze automat secvenţe de salvare/restaurare registre şi execuţie iret la ieşire;

• utilizare funcţii getvect/setvect pentru salvare/capturare vector de întrerupere;

• utilizare funcţii inportb/outportb pentru citire/scriere din/în porturi pe un octet;

• pentru activarea/dezactivarea sistemului de întreruperi s-au utilizat instrucţiuni în limbajul de asamblare (asamblare in line); se pot însă folosi în acest scop şi funcţiile enable() pentru activare şi disable() pentru dezactivare întreruperi.

Page 71: Sisteme de Timp Real

4-72

Probleme propuse

1. Să se modifice programul program_ceas astfel încât oprirea să se realizeze după 1000000 de întreruperi de la ceas (timer pe 4 octeţi).

2. Să se modifice programul program_ceas şi rutina it_ceas astfel încât la fiecare 10 întreruperi de la ceasul de timp real programul să afişeze „tack” iar rutina de tratare a întreruperii de la ceas să afişeze la fiecare apel „tick”.

Indicaţie: În programul utilizator se va folosi pentru afişarea şirului „tack” apelul sistem 9 al int21h, iar în rutina de tratare a întreruperii de la ceas se va folosi subfuncţia 0eh de la int 10h (BIOS) pentru afişarea caracterelor din şirul „tick”. Aceasta, deoarece apelul la sistem prin int 21h nu este reentrant, utilizarea unor astfel de apeluri în rutinele de tratare a întreruperilor putând duce la blocarea calculatorului!

3. Să se rezolve problema utilizând pentru întreruperea de la ceas vectorul 1ch (int 1ch) – detalii despre int 1ch se găsesc în programul HELP disponibil la laborator.

4. Program care implementează intrări bufferate cu funcţiile:

• Rutina de tratare a întreruperii de la ceas generează într-un buffer de 1000 octeţi (coadă circulară) o secvenţă de caractere ASCII 1,2,…,9 formată dintr-un număr de caractere egal cu modulo 10 al numărului de întreruperi care au apărut de la lansarea programului.

• Programul utilizator afişează pe monitor caracterele noi, însoţite de nr. de întreruperi memorate în contor.

• Programul utilizator şi rutina de tratare a întreruperii trebuie să detecteze eventualele umpleri de buffer respectiv golire de buffer, în vederea sincronizării.

5. Program pentru ieşiri bufferate (buffer circular de 1000 octeţi). Programul utilizator pune în buffer date citite dintr-un fişier text linie cu linie, la intervale multiplu de aproximativ 0,1 sec. specificate interactiv de utilizator. Rutina de întrerupere de la ceas afişează liniile nou introduse. Programul utilizator trebuie să detecteze umplerea de buffer şi să atenţioneze printr-un mesaj afişat pe ecran, iar rutina de întrerupere trebuie să detecteze golirea buffer-ului şi să atenţioneze sonor (beep).

6. Dezasamblaţi programul scris în limbajul C/C++; ce remarcaţi?

4.3 Dispozitive pentru generarea bazei de timp şi numărarea de evenimente

4.3.1 Dispozitivul mumărător/periodizator I8254

I8254 conţine (figura 4.3.1-1):

• Magistrala de date bidirecţională, tree-state pe 8 biţi.;

• Logica de citire/scriere (semnale: RD, WR, A0, A1, CS);

• Registru de control (numai de ieşire);

• 3 numărătoare pe 16 biţi programabile să funcţioneze independent. Numărarea se face descrescător. Oricare numărător poate fi programat să lucreze în unul dintre cele 6 moduri de lucru disponibile. Transferurile de date între dispozitiv şi magistrala calculatorului se fac pe 8 biţi şi depind de modul în care se face comanda scrierilor sau citirilor prin intermediul registrelor de control.

• Intrările/ieşirile asociate numărătoarelor sunt:

Page 72: Sisteme de Timp Real

4-73

• intrări de tact (clock) (CLKi , i ε [0,2]); pe fiecare intrare de tact pot fi impulsuri cu frecvenţa maximă de 8MHz;

• intrări de poartă GATEi , i ε [0,2], utilizate pentru triggerarea intrărilor de clock;

• ieşiri OUTi , i ε [0,2].

În figura 4.3.1-2 se prezintă schema bloc internă a unui numărător. Intern, dispozitivul conţine pentru fiecare

numărător 3 regiştri:

• registrul CR (Count Register) pe 16 biţi – la programare datele sunt înscrise în acest registru, iar la startarea numărării ele sunt încărcate în registrul CE în care efectuează numărarea. CRM este pentru octetul MSB, iar CRL pentru octetul LSB;

• registrul CE (Counting Element) – registrul de numărare;

• OL (Output Latch) – "Latch" în care se memorează la o anumită comandă valoarea curentă instantanee conţinută în registrul CE. Datele memorate pot fi citite ulterior. OLM este pentru octetul cel mai semnificativ, iar OLL pentru octetul cel mai puţin semnificativ.

Fiecare numărător se încarcă iniţial, iar după startarea numărării se decrementează pe frontul descrescător al impulsului de tact.

Triggerarea se face astfel:

• GATEi =1 ⇒ numărarea autorizată

INT

ER

NA

L B

US

CNT0 CLK0

GATE0

OUT0

CNT1 CLK1

GATE1

OUT1

CNT2 CLK2

GATE2

OUT2

DATA BUS BUFFER

RD

WR

A0

A1

CS

R/W

LOGIC

CONTROL WORD

REGISTER

Fig. 4.3.1 – 1 Schema bloc a dispozitivului I8254 (conform catalog Intel)

Page 73: Sisteme de Timp Real

4-74

• GATEi =0 ⇒ numărarea inhibată

Nivelul logic al ieşirii OUT i depinde de modul de lucru ales.

Formatul cuvântului de control este:

Unde:

BCD = 0 ⇒ numărare binară pe 16 biţi (0-65535 evenimente)

= 1 ⇒ numărare BCD (0 – 9999 evenimente)

M2 M1 M0 - selecţie mod de lucru:

0 0 0 ⇒ Mod 0 - oprire la sfârşitul numărării

0 0 1 ⇒ Mod 1 - monostabil programabil

x 1 0 ⇒ Mod 2 - generator de impulsuri divizate cu N

x 1 1 ⇒ Mod 3 - generator de impulsuri dreptunghiulare

1 0 0 ⇒ Mod 4 - strob comandat software

1 0 1 ⇒ Mod 5 - strob comandat hardware

CLK GATE OUT

CRM CRL

CE

OLM OLL

CWR

Status Latch

Status

Control

Logic

Fig. 4.2.1-2 – Schema bloc internă a unui numărător (conform catalog Intel)

SC1 SC0 RW1 RW0 M2 M1 M0 BCD

Page 74: Sisteme de Timp Real

4-75

RW1 RW0 - comandă citire / scriere

0 0 ⇒ buffer-are numărătoare pentru citire

0 1 ⇒ R/W numai octetul LSB

1 0 ⇒ R/W numai octetul MSB

1 1 ⇒ R/W întâi octetul LSB şi apoi imediat octetul MSB

SC1 SC0 – selecţie numărător

0 0 ⇒ selecţie numărător 0

0 1 ⇒ selecţie numărător 1

1 0 ⇒ selecţie numărător 2

1 1 ⇒ comandă de citire înapoi (readback command)

Programarea şi apoi operarea se face independent pentru fiecare numărător.

Valorile oricărui numărător pot fi citite „din mers” (caz în care pot apare erori la tranziţiile de stare ale numărătorului) sau pot fi buffer-ate şi apoi citite.

Operaţii de scriere: - se menţionează următoarele convenţii:

1. Pentru oricare numărător cuvântul de control trebuie scris înaintea scrierii valorii iniţiale a numărătorului.

2. Valoarea iniţială a numărătorului se înscrie în conformitate cu combinaţia RW1 RW0.

În cazul în care RW1 RW0 = 11, în program nu trebuie să se mai facă altă operaţie cu I8254 între cele două operaţii de scriere succesive.

Dacă există acest pericol (datorită apariţiei întreruperilor de exemplu), atunci operaţiile de scriere se vor face încadrate de cli şi sti.

Operaţiile de citire:

1. Numărătoarele pot fi citite fără a afecta numărarea; citirea directă poate fi eronată dacă CE este în tranziţie de stare. De aceea, este de preferat ca înainte de citire să se scrie un cuvânt de control corespunzător numărătorului care urmează a fi citit în care RW1 RW0=00. După această comandă, valoarea buffer-ată poate fi citită în orice moment; dacă se reprogramează numărătorul, valoarea memorată este pierdută.

2. Citirea înapoi – permite să se citească valoarea simultană a tuturor numărătoarelor, modul de lucru programat, starea curentă a ieşirii OUTi etc.

Alte detalii se găsesc în filele de catalog ale I8254.

4.3.2 Utilizarea I8254 pentru numărarea de evenimente

Oricare din cele 3 numărătoare pe 16 biţi operează prin numărarea impulsurilor de la intrare. Numărătoarele numără prin decrementare pornind de la o valoare iniţială încărcată prin software.

Page 75: Sisteme de Timp Real

4-76

Utilizând modul de lucru 0 în care valoarea iniţială din numărător este 0, oricare numărător poate număra 65536 evenimente.

Intrarea CLK a numărătorului se conectează la un generator de tact extern.

Intrarea GATE a numărătorului este utilizată pentru a autoriza sau stopa numărarea. Dacă nu se doreşte utilizarea acestei facilităţi, atunci intrarea GATE se pune la +5V, caz în care se face permanent numărarea.

Pentru modul de lucru 0, ieşirea OUTi nu este utilizată.

După ce un numărător a fost iniţializat prin software, orice impuls de pe intrarea de tact decrementează numărătorul cu 1 pe front descrescător. Primul impuls totuşi nu decrementează numărătorul, el fiind utilizat pentru a încărca valoarea din CR in CE.

Exemplu: dacă în numărător se încarcă valoarea iniţială 0, numărul evenimentelor numărate este determinat scăzând valoarea curentă pe 16 biţi, citită din numărător, din 65536 şi apoi adunând 1 la rezultat pentru a considera impulsul de încărcare a valorii iniţiale.

Următorul subprogram exemplifică modul de utilizare a numărătorului 0 pentru numărarea de evenimente. În acest exemplu, intrarea GATE se presupune a fi la 5V, iar CA se consideră a fi adresa de bază a dispozitivului.

COUNT DW ? . . MOV DX,CA+3 MOV AL,30H;pentru NUM 0 citeste/scrie LSB urmat de MSB, mod lucru 0 OUT DX,AL NOP ;introduce o “intarziere” MOV DX,CA XOR AL,AL OUT DX,AL ; scrie 0 in LSB (valoare initiala) NOP OUT DX,AL ; scrie 0 in MSB . . ; in orice moment se poate citi numarul curent de evenimente astfel: MOV DX,CA+3 XOR AL,AL OUT DX,AL ; buffer-area numaratorului pentru a putea fi citit NOP MOV DX,CA IN AL,DX MOV BYTE PTR COUNT,AL ; memoreaza LSB IN AL,DX MOV BYTE PTR COUNT +1, AL ;memoreaza MSB

4.3.3 Utilizarea lui I8254 pentru generarea de întreruperi

Modurile de lucru 2 şi 3 ale lui I8254A pot fi utilizate pentru generarea bazei de timp în cadrul sistemelor de achiziţie de date şi control. În astfel de aplicaţii, întreruperea de la I8254 va apărea periodic, în funcţie de intrarea CLK şi de programarea numărătorului, iar în cadrul rutinei de tratare a întreruperii se va face achiziţia efectivă a datelor utilizând tehnicile cunoscute (de obicei, tehnica intrări buffer-ate).

Astfel, se cunoaşte cu o bună precizie intervalul de timp dintre două eşantioane succesive din buffer-ul de achiziţie.

Page 76: Sisteme de Timp Real

4-77

În modul de lucru 2, oricare numărător operează ca generator de impulsuri divizate cu N. Când numărătorul trece prin 0, ieşirea OUT trece în starea 0, pentru o perioadă a impulsului de pe intrarea CLK şi apoi revine în starea 1. Numărătorul este reîncărcat automat cu valoarea programată iniţial şi continuă decrementarea (Fig.

4.3.3-1).

Operaţia se reia periodic, generând întreruperi la intervale de timp egale cu perioada întreruperii. Se pot utiliza 2-3 numărătoare cascadate, în funcţie de frecvenţa minimă cerută pentru întrerupere şi de intrarea CLK a primului numărător (intrarea CLKi a numărătorului următor este legată la ieşirea OUTi-1 a numărătorului anterior).

Pentru exemplificare, se presupune intrarea CLK0 la 5MHZ (perioada pentru un impuls este de 200 ns). În acest caz, dacă iniţial numărătorul se încarcă cu 0, deci se numără 65536 evenimente, atunci perioada impulsurilor de ieşire va fi 65536 x 200ns = 13,1072 ms, sau 76 Hz. Cascadând numărătoarele, perioada impulsurilor pentru ultimul numărător din cascadă se determină înmulţind valorile din numărătoarele cascadate şi înmulţind apoi numărul obţinut cu perioada impulsului de la intrarea primului numărător. Pentru 2 numărătoare cascadate, perioada maximă este 65536 x 65536 x 200 ns = 859,99 secunde iar pentru 3 numărătoare cascadate rezultă perioada maximă 65536 x 65536 x 65536 x 200 ns = 1,7851 ani.

Evident, nu este nevoie ca în toate numărătoarele să se depună valoarea maximă.

Se poate utiliza GATE pentru a controla din exterior generarea întreruperilor. Dacă nu se doreşte acest lucru, GATE se pune la 5V.

În continuare se prezintă exemple de programarea I8254 pentru generarea de întreruperi pentru achiziţii de date utilizând modulul de achiziţie data existent în laborator (vezi şi 4.4).

Exemplul 1: Generare de întreruperi pentru perioade mai mici decât 13,1072 ms (76 Hz ≤ frecvenţă ≤ 2,5 MHz).

Se poate utiliza oricare dintre cele 3 numărătoare în modul de lucru 2 sau 3. Se poate utiliza poarta GATE pentru a inhiba generarea de întreruperi din exterior. Ca suport hardware pentru acest exemplu se pot utiliza modulele de achiziţie ADA 2100 sau ADA 3100 de la laborator, modul în care se fac conexiunile fiind prezentat în cartea tehnică a fiecărui modul.

5 4 3 2 1 5 4 3 2 1 5

Perioada dintre întreruperi

Incărcare numărător cu 5 în modul 2

CLKn

Gate

OUTn

Fig. 4.3.3-1 – Generarea de intreruperi in modul 2 de lucru

Page 77: Sisteme de Timp Real

4-78

Ca intrare CLKi (i=0,2) se utilizează semnalul XTAL de 5 MHz sau se poate utiliza o intrare de tact externă. Dacă GATE nu se utilizează pentru triggerare, atunci se pune la +5 V. Ieşirea OUT se poate conecta prin jump-eri la un nivel de întrerupere (IRQ 2 ÷ IRQ 7) al calculatorului.

Programarea numărătorului şi startarea generării de întreruperi se face astfel:

1. Se calculează numărul ce trebuie încărcat în numărător

2. Se încarcă cuvântul de control pentru numărătorul selectat (modul 2 de lucru)

3. Se încarcă numărul în numărător

4. Numărarea evenimentelor se startează automat la primul impuls pe intrarea clock de după încărcarea numărului în numărător. Oprirea se poate face trecând intrarea GATE la 0 sau reprogramând numărătorul sau oprind calculatorul.

Următoarea secvenţă de program programează numărătorul 0 să genereze întreruperi la 51 µs, considerând intrarea de clock la 5 MHz, adresa de bază CA iar GATE este pusă la +5 V.

Numărul care se încarcă în contor este 51/0.2 = 255.

MOV DX,CA+3 MOV AL,14H ; numărător 0, MOD 2, R/W numai LSB OUT DX,AL MOV AL,0FFH MOV DX,CA OUT DX,AL ; încarcă nr. 255 în numărătorul 0

Frecvenţa întreruperii este 1/51µs = 19,5 KHz.

Exemplul 2: Generarea de întreruperi cu perioade mai mari ca 13,1072 ms (frecvenţa< 76 Hz).

Se cascadează 2 sau 3 numărătoare, toate programate în modul 2. Ieşirea OUTi-1 se leagă la intrarea CLKi, i=1,2. Se folosesc cele 3 numărătoare cascadate pentru ADA2100, unde:

CLK0 → 5 MHz

OUT0 → CLK1

OUT1 → CLK2

OUT2 → IRQn (n ∈ {2, 3, …, 7})

Programarea numărătoarelor şi startarea generării de întreruperi se face astfel:

1. Se calculează valoarea ce se depune în fiecare numărător.

2. Se programează numărătoarele în modul 2.

3. Se încarcă succesiv numărătoarele începând cu ultimul din cascadă şi terminând cu primul din cascadă.

În aceste condiţii startarea se va face după încărcarea primului numărător, ce are intrarea CLK activă. Intrările GATE ale fiecărui numărător sunt puse la +5 V.

În exemplul de mai jos, se doreşte generarea de întreruperi la 1s, utilizând cele 3 numărătoare ale I8254, intrarea CLK0 a primului numărător este la 5Mhz

Mod de calcul :

1s = 109 ns;

Page 78: Sisteme de Timp Real

4-79

o perioadă a intrării CLK este = 200 ns=0.200µs

Numărul de impulsuri CLK necesare este 109 ns/ 200ns = 5 x 106 = 5.000.000.

Se distribuie de exemplu acest număr pe cele 3 numărătoare astfel:

1000 în NUM2

1000 în NUM1

5 în NUM0

Programul este următorul:

MOV DX, CA+3 MOV AL, 34H ; NUM0, MOD2, R/W LSB apoi MSB OUT DX, AL NOP MOV AL, 74H ; NUM1, MOD2, R/W LSB apoi MSB OUT DX, AL NOP MOV AL, 0B4H ; NUM2, MOD2, R/W apoi MSB OUT DX, AL DEC DX ; adresa NUM2 MOV AL, 0E8h ;1000 OUT DX, AL MOV AL, 03H OUT DX, AL DEC DX ; adresa NUM1 MOV AL, 0E8H ;1000 OUT DX, AL MOV AL, 03H OUT DX, AL DEC DX ;adresa NUM0 MOV AL, 5H ;5 OUT DX, AL XOR AL, AL OUT DX, AL . . . .

4.3.4 Exemplu de utilizare a dispozitivului I8254 pentru generarea bazei de timp

Se cere implementarea controller-ului simplu PID prezentat la 2.2.2, considerând rata de eşantionare pentru calcule de 0.01 secunde (10 ms).

Pentru generarea bazei de timp se va utiliza un I8254 cu spaţiul de adresare între 214h – 217h, intrarea GATE0 este la +5 V, intrarea de ceas de la NUM0 este conectată la un generator de impulsuri cu frecvenţa 5MHz iar ieşirea OUT0 este conectată la intrarea IRQ5 de la primul controller I8259A al PC. Modul de lucru pentru numărătorul 0 va fi 2 iar valoarea iniţială care se va încărca în numărător este 10 000 000ns /200ns = 50 000 = c350h.

În programul prezentat în continuare, comunicaţia între rutina de tratare şi programul utilizator se face prin variabila partajată contor:

Page 79: Sisteme de Timp Real

4-80

• rutina de tratare a întreruperii incrementează variabila;

• programul utilizator, aşteaptă ca variabila să fie diferită de 0:

� dacă este 1 efectuează calculele (a trecut perioada T) şi îi atribuie valoarea 0;

� dacă este mai mare decât 1 afişează eroare şi termină programul deoarece programul principal nu se execută suficient de rapid pentru a se sincroniza cu dispozitivul extern.

#include <stdio.h> #include <dos.h> #include <conio.h> #define INTR_0d 0x0d/*Întreruperea IRQ5 de la I8254*/ #define CA 0x214 # define KPVAL 1.0 # define KIVAL 0.8 # define KDVAL 0.3 #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif unsigned char oldmask_1=0; int count=0,oldcount=0; float s, kp, ki, kd, en, enold, mn;

/*functia can achizitioneaza de la convertorul analog numeric, calculeaza si returneaza valoarea erorii e; este dependenta de hardware utilizat – de exemplu poate fi scrisa pentru ADA2100*/

extern float can(void); /*functia cna care primeste la intrare corectia (valoarea de actionare) si o transmite la convertorul numeric – analogic; este dependenta de hardware utilizat – de exemplu poate fi scrisa pentru ADA2100 */

extern void cna(float mn); void interrupt ( *oldint0d)(__CPPARGS); void InitNum0 (void){

outportb (CA+3, 0x34); outportb (CA,0x50); outportb (CA,0xc3);

} /* rutina de tratare a întreruperii de la contorul 0 al I8254*/

void interrupt irq5(__CPPARGS){ /* incrementeaza contorul */ count++; /* achitarea întreruperii */ outportb(0x20,0x20); } void main(void){

s = 0.0; kp = KPVAL; ki = KIVAL; kd = KDVAL; /* salveaza vechiul vector de întrerupere */

oldint0d = getvect(INTR_0d);

Page 80: Sisteme de Timp Real

4-81

/* dezactiveaza sistemul de întreruperi mascabile*/ disable();

/* seteaza noul vector de întrerupere */ setvect(INTR_0d, irq5); /*salveaza masca pentru primul 8259*/ oldmask_1=inportb(0x21); /*demascheaza întreruperea 0*/ outportb(0x21,oldmask_1 & 0x0df); /* activeaza sistemul de întreruperi mascabile */

enable(); clrscr(); enold = can(); InitNum0(); /* bucla de prelucrare a programului principal */ while (!kbhit()){/*se opreste la apasarea oricareai taste*/ if(count){ disable(); oldcount = count; count = 0; enable(); if (oldcount == 1){

en = can(); s = s+en; mn = kp*en + ki*s + kd * (en - enold); cna(mn); enold = en;

} else{ printf (“Eroare, lipsa sincronizare”); break; }

} } /* dezactiveaza sistemul de întreruperi mascabile */

disable(); /* seteaza vechii vectori de întrerupere */ setvect(INTR_0d, oldint0d); /*seteaza vechea masca pentru primul 8259*/ outportb(0x21,oldmask_1); /* activeaza sistemul de întreruperi mascabile*/

enable(); }

Probleme propuse:

1. I8254 are spaţiul de adresare între 214h si 217h. Intrarea GATE0 este la +5 V, iar intrarea de CLK0 este legată la un circuit formator de impulsuri de la un comutator acţionat manual. Să se elaboreze un program care să afişeze pe display un mesaj la fiecare zece acţionări ale comutatorului şi care să se oprească după 200 acţionări ale acestuia. Programul se va scrie astfel încât numărarea impulsurilor să

Page 81: Sisteme de Timp Real

4-82

se facă de către o rutină de tratare a întreruperilor de la ceasul sistem, iar afişarea mesajului să se facă în programul principal.

2. I8254 are spaţiul de adresare între 214h – 217h. Intrările GATE pentru numărătoare sunt la +5 V iar intrarea de ceas de la NUM0 este legată la un generator de impulsuri cu frecvenţa 5MHz. Presupunem că orice ieşire OUTi poate fi conectată la oricare dintre canalele de întreruperi ale circuitului I8259 şi de asemenea la intrarea CLK a următorului numărător. Într-o aplicaţie de achiziţie de date este necesar ca o intrare analogică să fie eşantionată la 10ms, a doua intrare analogică la aproximativ 200 ms iar a treia la 1000s. Să se elaboreze un program care programează I8254 astfel încât să genereze întreruperi pe nivelurile 10, 11 şi 15 (al doilea circuit I8259 de la un calculator compatibil IBM PC/AT), fiecărui numărător corespunzându-i una din întreruperile de mai sus. Simularea achiziţiei de date la intervalele specificate se va face afişând caracterul * la primul interval de timp, $ la al doilea interval de timp şi @ la al treilea interval de timp. Programul poate fi oprit prin CTRL-BREAK. Să se deseneze schema de cascadare a numărătoarelor şi de conectare la canalele de întrerupere.

3. Elaboraţi o schemă bloc de măsură şi un program pentru determinarea şi afişarea vitezei de rotaţie instantanee a unui motor care are max. 3000 rot/min, utilizând I8254. Pe axul motorului există un disc cu 10 fante echidistante şi un dispozitiv optic care generează un impuls către calculator la trecerea unei fante prin dreptul său.

4.3.5 Reprogramarea ceasului sistem

Placa de bază a calculatorului PC conţine un dispozitiv I8254A, care ocupă spaţiul de adrese de I/E de la 40h la 43h. Intrarea CLK0 este la 1,193187 MHz iar ieşirea OUT0 este conectată la intrarea IRQ0 a primului controller I8259A. BIOS programează NUM0 în modul de lucru 3 şi cu valoarea 0, generându-se astfel întreruperi cu o perioadă de timp de aprox. 54.92517 ms (aprox. 18.206588 Hz). Această întrerupere este utilizată de SO DOS pentru ceasul sistem şi alte operaţii (precum oprirea motorului discului flexibil atunci când acesta nu mai este utilizat). În tabela vectorilor de întrerupere, adresa rutinei de tratare a IRQ0 se găseşte la adresa 20H (corespunde la int 8).

Dacă aplicaţia necesită întreruperi cu frecvenţă diferită de aprox. 18,2 Hz şi dacă în calculator nu există un dispozitiv suplimentar I8254, se poate utiliza numărătorul 0 al circuitului I8254 de pe placa de bază. Următoarea secvenţă va reprograma ceasul pentru a da întreruperi la o nouă perioadă de timp:

MOV AL, 36H ; MOD3, R/W MSB apoi LSB binar pentru NUM0 OUT 43H,AL MOV AX, timer_count ; in AX noua valoare a NUM OUT 40H, AL MOV AL,AH OUT 40H, AL

La sfârşitul programului utilizator este necesar să se restaureze ceasul sistem la rata de întrerupere iniţială astfel:

MOV AL, 36H OUT 43H, AL XOR AL, AL OUT 40H, AL OUT 40H, AL

Valoarea care se scrie în NUM0 se calculează astfel:

Timer_count = Ti * F0

Unde F0 este frecvenţa în Hz a semnalului de tact pentru numărător (1.193.187 Hz) iar Ti este perioada întreruperilor (intervalul de timp dintre două întreruperi succesive).

Exemplu: pentru generarea de întreruperi la 10 ms rezultă timer_count = 10/1000 * 1.193.187 ≈ 11932.

Page 82: Sisteme de Timp Real

4-83

După cum se ştie in numărător se pot depune valori între 0 si 65535, 0 corespunzând la 65536 de impulsuri.

Dacă se doreşte o valoare mai mare, atunci se împarte valoarea respectivă printr-un număr astfel încât valoarea care se introduce în numărător să fie între 0 şi 65535. Notăm acest număr NDIV. Rutina de tratare a întreruperilor va gestiona un numărător soft într-o locaţie de memorie, ce este încărcată iniţial cu NDIV şi care se decrementează prin program cu 1 la fiecare întrerupere. Când ajunge la 0, rutina de tratare a întreruperii îl reîncarcă cu NDIV şi apoi apelează rutina de achiziţie.

Exemplu: dacă se doreşte achiziţie la fiecare secundă, atunci timer_count = 1 * 1.193.187 ≈ 20 x 59659 rezultă că NDIV = 20 şi timer_count = 59659.

Dacă se doreşte menţinerea datei şi orei sistem, care în mod curent sunt gestionate de rutina de tratare BIOS pentru int 8, trebuie să se apeleze din rutina de tratare utilizator, atunci când este cazul (la perioade de timp de aprox. 55ms), rutina BIOS de pe nivelul 8 din tabela vectorilor de întreruperi.

Următoarea rutină poate fi considerată ca o schiţă pentru o rutină de tratare a întreruperii prin reprogramarea ceasului sistem.

PC_INT8 Label DWORD PC_OFF8 DW ? ; IP PC_SEG8 DW ? ; CS DSEG DW ? ; rezervat pentru memorarea reg. DS MY_INT8:

PUSH DS PUSH AX ; …… eventual alte salvari MOV AX, CS:DSEG ;incarca ds cu valoarea corecta MOV DS,AX ;Urmatoarea secventa este ceruta numai dacă se utilizeaza numaratoare mai ;mari decât 65536: DEC NDIV_CT;decrementare contor soft JNZ NOT_ZERO MOV AX,NDIV MOV NDIV_CT,AX CALL achizitie ;apelare rutina ce face efectiv achizitia : NOT-ZERO: ;….. eventual alte restaurari

POP AX POP DS

Se poate insera în acest loc instrucţiunea

JMP CS: PC _INT8

pentru apelul rutinei originale de tratare a întreruperilor de ceas la 18,2 Hz; dacă nu execută saltul prin JMP la rutina de ceas, în acest loc trebuie să existe instrucţiunea iret.

Problemă propusă

Scrieţi funcţia delay_ms(unsigned int t) care realizează o întârziere de aproximativ t milisecunde, indiferent de procesorul PC-ului, fără a reprograma ceasul sistem. Indicaţie: se va utiliza numărătorul 0, care este preprogramat de către BIOS, citind periodic valoarea din contor, făcând diferenţele între citiri succesive şi calculând numărul de milisecunde.

Page 83: Sisteme de Timp Real

4-84

4.4 Exemplu de sistem de achiziţie de date Notă :

Paragraful 4.4 conţine detalii tehnice necesare pentru instalarea, calibrarea şi programarea achiziţiei de date cu modulul ADA2100.

Pentru rezolvarea problemelor la examen, se va studia 4.4.11.

Ca alternativă pentru rezolvarea problemelor la examen, informaţiile din curs pot fi completate cu documentaţiile tehnice ale modulelor PCM 3718, PCM 3780 şi PCM 3712 precum şi ale dispozitivelor I8254 şi I8255 studiate la laborator:

• "PCM-3718 Series, PC/104 12-bit DAS Module with Programmable Gain - User Manual", prezentat in documentul PCM-3718-Ed3.pdf , .

• "PCM-3780, 2-ch Counter/Timer with 24-ch TTL DIO Module - User Manual" prezentat în documentul PCM-3780_Manual_Ed1.1.pdf

• Subsistemul ieşirilor analogice pentru sistemul PC104 de la laborator, prezentat în documentul PCM-3712-ed1.pdf

• 8255_datasheet.pdf - capitolele "Functional description", "Operational description" şi "Operating modes".

• I8254_data_sheet.pdf - capitolele "Functional description", "Operational description".

4.4.1 ADA 2100 - date generale şi prezentarea resurselor

Interfaţa:

• compatibil IBM PC /XT/AT

• adresa de bază selectabilă prin jumper, mapată I/E

• întreruperi selectabile prin jumperi

Intrări analogice:

• 4 intrări diferenţiale sau 8 simple, selectabile prin switch

• impedanţa de intrare: >10 Mohmi

• câştig, selectiv soft: 1,2,4,8,16

• eroare câştig.: 0,5% tipic, max. 1%

• opţiuni intrare:

� domeniu 10V: bipolar+/-5V; liniaritate garantată -5V...+5V

� domeniu 10V: unipolar 0-10V; liniaritate garantată 0...9,5V

� domeniu 20V . . bipolar +/-10V; liniaritate garantată -9,5V...+9,5V

• Domeniul: selectabil cu jumper

• Polaritatea: selectabilă cu switch

• timp de stabilizare: max 3 µs

• tensiune de intrare mod comun : +/-10V

• protecţie la supratensiuni +/-35Vdc

Page 84: Sisteme de Timp Real

4-85

Convertor A/N

• tip: aprox. succesive

• rezoluţie: 12 biţi (domeniul 10V -2.44mV/bit, domeniul 20 V - 4.88 mV/bit)

• viteza de conversie . tipic 20 usec

• liniaritate : +/-1 bit

• timp total de răspuns S/H: max 6 usec

• rata maxima de eşantionare: 38 KHz

Convertor N/A

• ieşiri analogice: 2

• rezoluţie: 12 biţi

• precizie relativă: +/-1 bit max

• precizie capăt de scală: +/-3 bit max

• neliniaritate: +/-1 bit max

• izolare canal-la-canal: tipic 84 dB

Ieşirea analogică

• gama de ieşire, chip selectabilă:

� opţiunea 1: 0 la +5V selectabilă cu jumper +/-5V

� opţiunea 2: 0 la 10 V selectabilă cu jumper la +/-10V

• timp de stabilizare la 0,01%FSR: 1.8ms tipic; 3.3 ms max

• eroare de zero: +/-1/2 bit

• crosstalk....................90 dB tipic

Alimentări: +/- 12V,+5V de la PC, masă de la PC

Contor/Periodizator: -3 numărătoare de 8 MHz, pe 16 biţi fiecare

Linii I/E numerice:16 compatibile TTL/CMOS, porturile A şi C de la I8255

Cerinţe de alimentare

• +5V: 240 mA

• +12V: 30 mA

• -12V: 35 mA

Conectori I/E conector frontal de 40 pini

Condiţii de mediu

• temp. de lucru : 0 ... +70 grd C

• temp. înmagazinare : -40 ... +85 grd C

• umiditate : 0 ... 90 %

Dimensiuni:

Page 85: Sisteme de Timp Real

4-86

• înălţime : 99 mm

• lăţime: 165 mm

4.4.2 Generalităţi

ADA 2100 reprezintă un modul complex compatibil IBM PC-Bus, "Short-Size" ce poate fi introdus direct în orice slot neutilizat dintr-un calculator compatibil PC/XT/AT.

Este compus din următoarele blocuri:

• convertor analog-numeric (de 12 biţi) de înaltă rezoluţie;

• convertor numeric-analogic (12 biţi) dublu;

• circuit interfaţă paralelă (PPI - I8255);

• circuit numărător/periodizator (PIT - I8254);

toate asigurând flexibilitatea interfeţei pentru multe aplicaţii.

Se caracterizează printr-o construcţie în 6 planuri (straturi) incluzând planuri separate pentru masă şi alimentare ceea ce conduce la caracteristici de zgomot redus.

ADA 2100 asigură o conversie pe 12 biţi analog-numerică multicanal atât pentru semnale diferenţiale cât şi SE (single - ended). Această facilitate conferă calculatorului compatibil IBM PC/XT/AT „gazdă” posibilitatea achiziţiei de date şi controlul în timp real putând genera şi analiza semnale analogice numerice.

Viteza şi rezoluţia sunt caracteristicile principale luate în calcul la un convertor A/N. Pentru majoritatea aplicaţiilor o rezoluţie de 12 biţi este suficientă. Aceasta asigură incremenţi de tensiune de 1.22 mV pentru o gamă de 5 V, 2.44 mV pentru o gamă de 10 V şi 4.88 mV pentru o gamă de 20 V.

O conversie pe 8 biţi este mai puţin precisă dar mai rapidă. Prin programare (S) şi/sau setare de switch-uri (H) de pe placă se pot:

• selecta adresa I/E de baza (H);

• alege 4 canale de intrare analogice diferenţiale sau 8 simple (SE) (H);

• selecta canalul activ (S);

• selecta câştigul canalului (S);

• selecta gama şi polaritatea tensiunii analogice de intrare (H);

• selecta polaritatea tensiunilor analogice de ieşire (H);

• controla 16 linii I/E TTL/CMOS (S);

• controla 3 circuite numărător/periodizator pe 16 biţi de 8 MHz (S);

• monitoriza conversia A/N folosind semnalul EOC (End-Of-Convert) (S,H);

• genera semnale de întrerupere (H).

4.4.3 Setarea adresei de bază

Interfaţa fiind introdusă în canalul I/E adresa sa va fi configurată în spaţiul 200H...3FFH.

Notăm cu BA adresa de bază a modulului.

ADA 2100 utilizează 24 locaţii de adresă în spaţiul I/E al calculatorului începând cu BA.

4.4.4 Harta I/E pentru ADA 2100

Page 86: Sisteme de Timp Real

4-87

Funcţie A4 A3 A2 A1 A0 R/W BA+Hex

1. PPI 8255

Port A 0 0 0 0 0 R/W 0

Port B (sel.canal+câştig) 0 0 0 0 1 W 1

Port C 0 0 0 1 0 R/W 2

Cuvânt de control 0 0 0 1 1 W 3

2. Circuit conversie A/N

Start conversie 12 biţi 0 0 1 x 0 W 4 sau 6

Start conversie 8 biţi 0 0 1 x 1 W 5 sau 7

Citire MSB 0 0 1 x 0 R 4 sau 6

Citire LSB 0 0 1 x 1 R 5 sau 7

3. Circuit conversie N/A

Program AOUT1 LSB 0 1 0 0 0 W 8

Program AOUT1 MSB 0 1 0 0 1 W 9

Program AOUT2 LSB 0 1 0 1 0 W A

Program AOUT2 MSB 0 1 0 1 1 W B

Conversie/actualizare

AOUT1/AOUT 0 1 1 x x W C, D, E sau F

Clear AOUT1/AOUT2 1 0 0 x x W 10,11,12 sau 13

4.PIT 8254

NUM 0 1 0 1 0 0 R/W 14

NUM 1 1 0 1 0 1 R/W 15

NUM 2 1 0 1 1 0 R/W 16

Cuvânt de control 1 0 1 1 1 W 17

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

cu x s-a notat un bit a cărui valoare nu contează pentru respectiva combinaţie.

Este important de subliniat că unele din locaţiile de adresă din spaţiul I/E al calculatorului sunt deja ocupate de porturile interne şi alte periferice. Dacă modulul ADA 2100 încearcă să utilizeze locaţiile de adresă I/E deja folosite de un alt dispozitiv din sistem va rezulta un conflict de adresare. De aceea modulul nu va mai fi operaţional sau va opera defectuos.

Pentru a evita această situaţie se foloseşte un circuit de selecţie a adresei de bază cu „jumper”. Prin schimbarea poziţiei acestuia la conectorul notat P2, se poate selecta adresa de bază I/E (BA) la oricare din cele 8 locaţii de mai jos:

200 240 280 2C0 300 340 380 3C0

Page 87: Sisteme de Timp Real

4-88

Modulele livrate de firma sunt selectate de la adresa de bază 200H.

4.4.5 Modul de configurare al modulului

În tabelul de mai jos se prezintă funcţiile configurabile ale modulului şi modul cum sunt setate de firmă:

Funcţie | Setare de firma

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

1.Adresa de bază I/E | 200 hex

2.Tip canal de intrare analogic | 4 canale diferenţiale

3.Selecţia canalului analogic

de intrare | Controlabilă prin software

4.Selecţia câştigului intrării

analogice | Controlabilă prin software

5.Domeniul şi polaritatea tensi | Este specificată de utilizator

unii analogice de intrare | la comandarea interfeţei

6.Monitorizarea semnalului EOC | Conectat la bit A7 PPI

7. Polaritatea tensiunilor ana | Domeniu unipolar pozitiv

logice de ieşire

8.16 linii I/E de la PPI şi circu

it numărător/periodizator pro

gramabil (PIT) | Controlabile prin software

9.Moduri de lucru | Controlabile prin software

10.Configuraţie I/E PIT | Intrare ceas: 5 MHz

| Intrare GATE: +5 V

11.Întreruperi | Dezactivate

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

4.4.6 Descriere la nivel de schemă bloc

Modulul ADA 2100 are 4 blocuri mari funcţionale:

• lanţul de conversie analog-numerică (A/N)

• lanţul de conversie numeric-analogică (N/A)

• circuitul interfaţă paralelă programabilă (PPI)

• circuitul numărător/periodizator programabil (PIT)

4.4.6.1 Lanţul de conversie analog-numerică

Principala funcţie a modulului ADA 2100 este de a asigura facilităţi de conversie analog-numerică de mare viteză pentru achiziţia de date.

Circuitele de conversie analog-numerice primesc intrări de la 4 canale analogice diferenţiale sau 8 canale simple, selectează un canal activ şi realizează conversia analog-numerică a valorii tensiunii citite pe acel canal. Viteza de conversie este tipic de 38 KHz.

Multiplexoarele

Este folosit un multiplexor analogic de 8 biţi pentru a conecta fie unul din cele 8 canale SE fie unul din cele 4

Page 88: Sisteme de Timp Real

4-89

diferenţiale la circuitul de câştig. Cele 3 comutatoare S1 cele mai din stânga modulului programează multiplexorul să primească intrări diferenţiale sau SE aşa cum a fost descris anterior. Selecţia unuia din canale se face prin program scriind numărul de canal (0,1,2 3…) în cei 4 biţi LSB ai portului B al PPI (BA+1).

Când cele 3 switch-uri sunt sus, multiplexorul este programat SE, iar când sunt jos, este configurat diferenţial.

Circuitele de control al câştigului (amplificarea)

Circuitele de control al câştigului programabil pot oferi un factor de câştig de 1, 2, 4, 8 sau 16. Selecţia câştigului se face prin scrierea în registrul B al PPI (adresa BA + 1), tetrada MSB (tetrada are valorile 0 câştig 1, 1 câştig 2, 2 câştig 4, 4 câştig 8, 8 câştig 16). Factorul de câştig este controlat prin setarea a 4 comutatoare analogice. Pentru un câştig de 2, 4, 8 sau 16 această operaţie de scriere va închide unul din cele 4 comutatoare; în cazul câştigului unitar toate comutatoarele sunt deschise. Nu se recomandă programarea altor factori de câştig decât cei 5 arătaţi mai sus.

Circuitele de eşantionare-memorare (S/H)

Un circuit de eşantionare şi memorare (S/H - sample and hold) este folosit între ieşirea circuitelor de control al câştigului şi intrarea A/N pentru a asigura ca semnalele analogice dinamice să fie digitizate precis de către convertorul A/N. Se foloseşte un condensator de 0.001 mF ce minimizează timpul de achiziţie (6 microsec. tipic). Timpul şi viteza de eşantionare şi memorare sunt determinate de semnalul EOC generat de convertorul A/N. Când EOC este 1, logic amplificatorul eşantionează intrarea analogică; când EOC este 0 amplificatorul memorează intrarea.

Convertorul A/N (HI 574)

Convertorul A/N este un circuit integrat ce realizează o conversie de mare viteză pe 12 biţi căruia îi corespunde o conversie în aproximativ 20 microsec. Se pot efectua de asemenea conversii pe 8 biţi în aplicaţiile în care viteza este mai critică decât rezoluţia. Conversiile pe 8 biţi durează aproximativ 13 microsec., permiţând conversii rapide a intrărilor analogice dinamice. Convertorul suportă semnale de intrare analogice de 10 sau 20 V; însă nu poate suporta domeniu de intrare unipolar de 20 V deoarece tensiunea de alimentare în aplicaţiile cu ADA 2100 este de numai +12 V.

O conversie pe 8 sau 12 biţi este iniţiată printr-o operaţie de scriere la adresa I/E corespunzătoare. O dată ce o conversie a început, starea acesteia poate fi urmărită prin citirea semnalului de stare al convertorului A/N (STS) care este o ieşire a circuitului convertor A/N şi inversat înainte de a fi folosit de alte circuite de pe interfaţă ca semnal EOC (End-Of-Convert). Semnalul EOC este 0 logic în timpul unei conversii.

4.4.6.2 Realizarea unei citiri A/N

După ce s-a selectat o intrare analogică şi s-a setat câştigul, se poate efectua o citire A/N. De notat că odată câştigul şi canalul setate, ele rămân la aceste valori până ce utilizatorul le modifică. Deci nu trebuie setate la fiecare citire A/N.

De fiecare dată când se termină o conversie A/N, se generează un semnal EOC.

Se poate monitoriza starea conversiei A/N cu acest semnal prin configurarea bit 7 al port A sau port C ca linii de intrare şi conectarea semnalului EOC pe această linie. Pentru o conversie pe 12 biţi, data A/N citită este aliniată la stânga într-un cuvânt pe 16 biţi cu cei mai puţin semnificativi 4 biţi egali cu 0 aşa cum se observă mai jos:

MSB

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 0 0 0 0

4.4.6.3 Circuitele de conversie numeric-analogică

Două ieşiri analogice obţinute de către un convertor N/A pe 12 biţi sunt disponibile în conectorul de I/E .

Tensiunea de referinţă (de 10 V) se obţine cu ajutorul circuitului integrat REF01.

Conversia numeric-analogică (N/A) de 12 biţi este realizată cu ajutorul convertorului dublu de tip AD 7537.

Tensiunile de ieşire sunt disponibile prin intermediul unor amplificatoare operaţionale de tip AD 712, care

Page 89: Sisteme de Timp Real

4-90

realizează scalarea semnalelor.

4.4.6.4 Interfaţa paralelă programabilă (PPI - I8255)

PPI oferă 16 linii numerice I/E TTL/CMOS care pot fi configurate în funcţie de necesităţi. Liniile disponibile pentru intrări/ieşiri numerice sunt porturile A şi C. PPI 8255 are în total 24 linii I/E numerice, dintre care 8 sunt folosite pentru a controla selecţia canalului A/N şi circuitul de câştig (port B). Celelalte 16 linii sunt disponibile pentru exterior la conectorul P15. Portul C este subdivizat în 2 porturi de 4 biţi port C low (CL) (PC0-PC3) şi port C high (CH) (PC4-PC7). Portul B este întotdeauna în mod 0 ieşire, fiind rezervat. Foile de catalog pentru PPI 8255 prezintă detaliile necesare pentru programare.

4.4.6.5 PIT numărător/periodizator programabil (I8254)

Acest circuit integrat conţine 3 numărătoare/periodizatoare pe 16 biţi independente TC0, TC1, TC2 care realizează funcţia de numărare înapoi. Aceste numărătoare pot lucra cu incremenţi de timp până la 125 nsec. Cea mai uzuală folosire este de a programa intervale de timp precise. Cele 3 circuite numărător/periodizator sunt independente, ele putând fi cascadate pentru numărări inverse mai mari decât capacitatea de 16 biţi. De exemplu semnalul OUT al TC0 se poate conecta la CLK pentru TC1 şi OUT de la TC1 la CLK de la TC2.

Oricare din ieşirile OUT0 - OUT2 poate fi utilizată la întrerupere pentru PC.

Foile de catalog pentru 8254 prezintă detaliile necesare pentru programare.

4.4.7 Prezentarea comutatoarelor şi a programatoarelor hardware

S1 - selecţie tip semnal de intrare analogic

S1 reprezintă un set de 4 comutatoare (switch-uri) ce au rolul de a configura multiplexoarele pentru intrări SE sau diferenţiale şi selectează o gamă de tensiuni de intrare unipolare sau bipolare. Primele 3 comutatoare ale lui S1 operează ca un grup. Când ele sunt în poziţia superioară multiplexoarele sunt configurate pentru intrări simple. Când toate sunt în poziţie inferioară multiplexoarele sunt configurate pentru intrări diferenţiale. Pentru ca multiplexoarele să funcţioneze corect este obligatoriu ca toate comutatoarele 1...3 să fie în aceeaşi poziţie. Cel de-al patrulea controlează polaritatea tensiunii de intrare. Când switch-ul e în poziţie superioară gama tensiunii de intrare este unipolară; poziţiei sale inferioare îi corespunde o gamă bipolară.

Acest comutator, în conjuncţie cu selecţia gamei tensiunii, setată la conectorul P9, determină tensiunile de intrare analogice suportate de convertorul A/N. De subliniat că în cazul oricărei schimbări a polarităţii, trebuie calibrat circuitul de conversie A/N.

P2 - conector pentru fixarea adresei de bază

Modul de selectare a adresei de bază a fost prezentat anterior.

P3 - conector I/E pentru circuitul numărător/periodizator (PIT)

PIT conţine 3 circuite numărător/periodizator independente de 16 biţi fiind un modul de tip I8254. Fiecare din aceste circuite are 3 semnale I/E asociate cu: ceas (CLK), poartă (GATE) şi ieşire (OUT). Fiecare dintre numărătoare este setat de firmă astfel:

- intrare ceas (CLKi) - XTAL (generator intern de 5 MHz)

- poartă (GTi) - la +5V

- ieşire (OUTi) - COi

unde i = 0, 1, 2

Conectorul P3 este poziţionat în 3 grupuri funcţionale TC0, TC1 şi TC2 ce corespund celor 3 timere. Pentru TC0 corespund semnalele CK0, GT0 şi OUT0 în dreapta P3 cele 3 corespunzând numărătorului 0 şi în stânga XTAL, ECO, +5 V, EG0, CO0 şi CO0 negat;

unde: EC0 = External Clock - ceas extern

EG0 = External Gate

Page 90: Sisteme de Timp Real

4-91

CO0, CO0 negat = Clock Output - ieşire numărător

Deci ceasul poate fi conectat la XTAL sau EC0 (sursa externă), validarea numărătorului (prin intrarea GATE) la +5V sau EG0 (validare externă) oferindu-se şi ieşirea negată (CO0 negat).

Analog pentru TC1 si TC2 în cazul celorlalte timere.

Se pot cascada cele 3 timere prin legarea ieşirii unuia la intrarea celuilalt. ECi sunt legate împreună la pinul 33 al conectorului P8 de I/E, EGi sunt legate la pinul 35 al conectorului P8, iar una dintre cele 3 ieşiri OUTi se poate lega prin jumper la pinul 36 din conectorul P8.

P5, P7 - conectori pentru întreruperi

Conectorii P5, P7 sunt utilizaţi pentru a conecta diversele semnale generate de ADA2100 la canalele de întreruperi ale calculatorului. Canalele de întrerupere disponibile pe modul sunt IRQ2...IRQ7. De notat că la un moment dat în calculator o singură întrerupere poate fi conectată la un canal de întrerupere.

Trebuie evitate conflictele la selectarea canalelor de întrerupere atât cu semnalele ADA 2100 cât şi cu alte dispozitive din calculator.

Sursele de întrerupere la ADA2100 sunt ieşiri de tip TTL totem-pole şi nu open-collector, deci nu se vor conecta împreună 2 astfel de surse de întrerupere.

P5 - întreruperile de la ieşirile PIT

Conectorul P5 prezentat în figura de mai jos este folosit pentru a conecta una din ieşirile OUT0, OUT1 sau OUT2 la unul din canalele de întrerupere IRQ2...IRQ7 ale calculatorului. Selecţia se face tot cu 2 jumperi (unul selectează întreruperea, celălalt ieşirea). În figura de mai jos se arată modul de plasare al jumperilor astfel încât OUT2 să fie conectat la IRQ3.

P5 |---- |

| | IRQ7

| | IRQ6

| | IRQ5

| | IRQ4

| - - | IRQ3

| | IRQ2

| | OUT0

| | OUT1

| - - | OUT2

|---- |

P7 - întrerupere generată de A/N End-Of-Convert (EOC)

Conectorul P7 prezentat mai jos este folosit pentru a conecta semnalul Sfârşit de Conversie (EOC) al convertorului A/N la una din liniile de întrerupere IRQ2...IRQ7. Semnalul EOC este conectat la canalul IRQ prin instalarea unui singur jumper orizontal peste pinii canalului IRQ selectat. În exemplul de mai jos se arată modul de conectare al semnalului EOC la IRQ4.

P7 |----|

| | IRQ7

| | IRQ6

| | IRQ5

| -- | IRQ4

| | IRQ3

| | IRQ2

Page 91: Sisteme de Timp Real

4-92

|--- |

P6 - conector pentru monitorizarea EOC

Aşa cum s-a amintit mai sus, semnalul EOC poate fi utilizat pentru a genera o întrerupere. Dacă acest semnal nu este utilizat ca o întrerupere, el poate fi utilizat pentru urmărirea prin polling a stării procesului de conversie A/N. Conectorul P6 oferă 2 linii prin care EOC poate fi monitorizat de la PPI, PA7 sau PC7. Una din aceste 2 linii I/E digitale este selectată pentru monitorizarea EOC prin instalarea unui jumper orizontal peste perechea de pini corespunzătoare.

Linia numerică I/E selectată, PA7 sau PC7, trebuie să fie configurată ca intrare în mod 0 la programarea PPI.

În figura de mai jos se prezintă P6 cu un jumper instalat în poziţia setată de firmă pentru monitorizarea EOC prin PA7:

P6 |----|

| | PC7

| -- | PA7

|----|

P9 - Conector pentru selecţia domeniului tensiunii convertorului A/N

Conectorul P9 ilustrat în figura de mai jos este folosit pentru a selecta tensiuni de intrare analogice a convertorului analog-numeric.

Un jumper este instalat vertical peste pinii marcaţi „10V” pentru a suporta un domeniu de 10 V (0 la 10 V, fie -5 la +5 V) sau peste pinii marcaţi 20 V pentru a suporta un domeniu de 20 V (-10 la +10 V). Fixarea acestui jumper în conjuncţie cu fixarea comutatorului DIP S1-4 care selectează un domeniu unipolar sau bipolar, determină domeniul tensiunii de intrare al convertorului A/N. P9 este configurat de firmă în concordanţă cu specificaţiile clientului pentru domeniul tensiunii de intrare.

Combinaţiile valide ale P9 şi S1-4 sunt ilustrate mai jos:

Domeniu Setare P9 Setare S1-4

-5 V la +5 V 10 V (dreapta) jos (bipolar)

0 V la +10 V 10 V (dreapta) sus (unipolar)

-10 V la +10 V 20 V (stânga) jos (bipolar)

|-----|

P9 20 V| | | 10 V

|-----|

P10 - conector pentru fixarea polarităţii tensiunilor de ieşire

Este utilizat pentru a selecta polaritatea tensiunilor de ieşire pe cele două ieşiri analogice AOUT1 şi AOUT2. Fiecare canal poate fi ieşire unipolară (+) sau bipolară (-/+). Selecţia se face cu jumpere instalate vertical ca în figura de mai jos.

AOUT1 AOUT2

----- -----

----------- P10

| |

| | | |

| |

-----------

+ + + +

/ /

- -

Page 92: Sisteme de Timp Real

4-93

Asignarea pinilor la conectorul P8

Nr. pin Nume semnal Nr. pin Nume semnal SE/DIFF

1 AN1/AN1+ 2 GND

3 AN5/AN1- 4 GND

5 AN2/AN2+ 6 GND

7 AN6/AN1- 8 GND

9 AN3/AN3+ 10 GND

11 AN7/AN1- 12 GND

13 AN4/AN4+ 14 GND

15 AN8/AN1- 16 GND

17 GND 18 GND

19 AOUT1 20 GND

21 AOUT2 22 GND

23 GND 24 GND

25 PC7 26 PC6

27 PC5 28 PC4

29 PC3 30 PC2

31 PC1 22 PC0

33 EXTCLK 34 GND

35 EXTGATE 36 CLKOUT

37 +12V 38 +5V

39 -12V 40 GND

4.4.8 Proceduri de calibrare

Se prezintă procedurile de calibrare pentru domeniul tensiunii de intrare a convertorului A/N şi câştigul acestuia. În funcţie de comanda specifică a utilizatorului performanţele ADA2100: offsetul şi capătul de scală pentru convertor sunt calibrate de firmă. Circuitul de câştig este de asemenea calibrat înainte de trimitere. Următoarea procedură permite o verificare rapidă a preciziei acestor circuite.

După calibrare se alimentează calculatorul şi se permite ADA2100 un interval de 15 min. pentru stabilizare.

Echipament necesar pentru calibrare

- surse de tensiune de precizie: 0 - +(-)10 V

- voltmetru digital: 5 - 1/2 digiţi

- şurubelniţă mică (pentru ajustare potenţiometre)

Calibrarea A/N

În timpul acestei proceduri trebuie făcute conexiuni la câteva din intrările analogice pe conectorul I/E extern P8.

Sunt necesare 2 ajustări pentru a calibra complet convertorul A/N pentru operaţii unipolare sau bipolare. Acestea afectează offset-ul şi capătul de scală. Ambii paşi ai calibrării se efectuează folosind potenţiometrele TR5 şi TR6 sau TR6 şi TR7. TR5 sau TR7 se folosesc pentru a aduce la zero eroarea de offset a convertorului A/N şi TR6 se foloseşte pentru ajustarea capătului de scală. În următoarea procedură se foloseşte canalul analogic 1 de intrare şi se alege câştigul 1 pentru el. Aceasta se realizează prin scrierea de zerouri la locaţia de adresă I/E BA+1. Trebuie să vă asiguraţi că secţiunea 4 a comutatorului S1 este setată pentru polaritatea dorită şi jumperul de pe conectorul P9 este în poziţia 10V.

Calibrarea unipolară

Page 93: Sisteme de Timp Real

4-94

Sunt necesare două ajustări pentru a calibra convertorul A/N pentru domeniul unipolar de 0...+10V, una pentru offset şi cealaltă pentru capătul de scală. Pentru a ajusta offset-ul, o tensiune analogică de intrare foarte mică, arătată sub rubrica „Offset” în tabelul de mai jos, este aplicată la canalul 1 al multiplexorului (P8-1). La P8-2 se conectează referinţa pentru masă. Afişând continuu conversiile analog/digitale se ajustează TR7 până când datele oscilează între cele două valori specificate în tabel la rubrica „Offset”.

După aceea se foloseşte TR6 pentru ajustarea valorii capătului de scală. Deşi tensiunile de intrare pentru capătul de scală specificate în tabel nu reprezintă de fapt capătul de scală pentru un domeniu ideal de 0...+10V, ele reprezintă tensiunile maxime pentru care conversia analog digitală este garantată a fi liniară. Orice valoare peste această limită depăşeşte domeniul liniar şi afectează calibrarea corectă. După conectarea tensiunii de capăt de scală la canalul 1 de intrare, se ajustează TR6 până când datele vor oscila între cele două valori din rubrica „Cap de scală”.

Calibrare unipolară ( domeniul 0...+10V )

| Offset ( TR7 ) | Cap de scală ( TR6 )

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

Tensiune de | |

intrare | +1,22070 mV | +9,49829

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

Date A/N | 0000 0000 0000 | 1111 0011 0010

| 0000 0000 0001 | 1111 0011 0011

Calibrare bipolară

Dacă se selectează un domeniu de intrare pentru tensiuni de la -5V la +5V sau -10V la +10V procedura de calibrare este aceeaşi. Deci jumperul pe conectorul P9 va fi instalat în poziţia 10V. Dacă se lucrează cu gama de tensiuni -10V...+10V, se va repoziţiona jumperul pe poziţia 20V numai după efectuarea procedurilor de calibrare de mai jos.

Sunt necesare două ajustări pentru a calibra convertorul, una pentru offset iar cealaltă pentru capăt de scală. Pentru a ajusta offsetul se conectează o tensiune ca cea afişată în rubrica „Offset” din tabelul de mai jos la canalul 1 al multiplexorului. În timp ce se afişează rezultatul conversiei pe 12 biţi, se ajustează TR5 până când data va lua una din valorile din rubrica „Offset”. După aceea se conectează tensiunea de capăt de scală din tabel la canalul 1 şi se ajustează TR6 până când data ia valoare între cele două limite din tabel în rubrica „Capăt de scală”.

Calibrare bipolara ( domeniul -5V...+5V sau -10V...+10V )

| Offset ( TR5 ) | Cap de scala ( TR6 )

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

Tensiune de | |

intrare | -4,99878 V | +4,99634 V

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

Date A/N | 0000 0000 0000 | 1111 1111 1110

| 0000 0000 0001 | 1111 1111 1111

Tabelul de mai jos oferă o referinţă pentru tensiunea de intrare ideală pentru convertorul A/N pentru ponderea fiecărui bit în fiecare domeniu de tensiuni.

Tabelul arată capătul ideal de scală (toate poziţiile 1) în prima linie şi apoi câte un zero în liniile următoare corespunzător unor biţi. Valorile tensiunilor sunt date în mV.

Page 94: Sisteme de Timp Real

4-95

Ponderea biţilor pentru convertorul A/N

Pondere bit | Tensiune de intrare ideala (mV)

A/N | -----------------------------------------------

| -5V...+5V | -10V...+10V | 0...+10V

--------------------|-----------------|-------------------|----------------

4095-Cap scală | +4997,6 | +9995,1 | +9997,6

2048 | 0000,0 | 0000,0 | +5000,0

256 | -4375,0 | -8750,0 | +625,0

32 | -4921,9 | -9843,8 | +78,125

4 | -4990,2 | -9980,5 | +9,7656

0 | -5000,0 | -10000,0 | 0,0000

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

Calibrarea circuitului de câştig

Pentru ajustarea circuitului de câştig se folosesc potenţiometrele TR1-TR4, câte unul pentru câştigurile de 2, 4, 8 şi respectiv 16. Pentru a calibra acest circuit se aplică o tensiune de 39,063 mV la intrarea canalului 1. După aceea, prin scrierea cuvântului corect la locaţia BA+1, se setează câştigul la 2 şi se ajustează potenţiometrul TR1 pentru a obţine ieşirea convertorului A/N pe 12 biţi pentru gama tensiunilor pe modul aşa cum se prezintă în tabelul de mai jos. Se repetă după aceea procedura pentru celelalte 3 câştiguri ajustând potenţiometrul corespunzător până se ating valorile corecte din tabelul de mai jos:

Câştig | Potenţi- | Domeniul tensiunii de intrare

| ometrul | -5V...+5V | -10V...+10V | 0...+10V

----------|------------|--------------------|----------------------|-------------

2 | TR1 | 100000100000 | 100000010000 | 000000100000

4 | TR2 | 100001000000 | 100000100000 | 000001000000

8 | TR3 | 100010000000 | 100001000000 | 000010000000

16 | TR4 | 100100000000 | 100010000000 | 000100000000

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

4.4.9 Conectarea modulului la proces

Legarea la proces se face prin intermediul unui conector de 40 de pini montat pe modul (P8). În conector se introduc panglicile cu conectoare pereche ale celor de pe modul, acestea fiind livrate o dată cu modulul şi etichetate la capătul dinspre proces. Panglica pentru semnale analogice este realizată într-un mod adecvat semnalelor analogice, având fiecare intrare torsadată cu câte un fir de masa. Legarea efectivă la proces se face prin intermediul conectoarelor originale ale panglicilor.

4.4.10 Programe de test

Există programe de test pe disc flexibil realizate de firma "RTD" Inc – vezi laborator.

4.4.11 Programarea modulului ADA 2100

În acest paragraf se prezintă modul de programare a modulului ADA2100 pentru achiziţia pe canalele analogice de intrare; programarea interfeţelor PPI I8255 şi PIT I8254 este prezentată în foile de catalog.

Iniţializarea ADA2100

Înainte de a utiliza în program ADA2100, modulul trebuie iniţializat. Acest lucru trebuie făcut ori de câte ori calculatorul este pornit sau resetat. Prin iniţializare se programează PPI astfel încât să comunice cu circuitele de conversie analog/numerică. Dacă nu se face iniţializarea, modulul nu va răspunde corect la comenzi, iar

Page 95: Sisteme de Timp Real

4-96

efectele sunt imprevizibile.

Aşa cum s-a arătat anterior, ADA2100 ocupă în spaţiul de I/E al calculatorului 17h locaţii de adresă, începând cu o locaţie care constituie baza; se va utiliza pentru această locaţie denumirea simbolică BA. Deci spaţiul I/E pentru ADA2100 este între BA şi BA+17h.

Iniţializarea modulului se face simplu, scriind cuvântul de control pentru PPI la locaţia BA+3.

Cuvântul de control pentru PPI I8255 este:

Page 96: Sisteme de Timp Real

4-97

D7 D6 D5 D4 D3 D2 D1 D0

| | | | | | | | __________________

| - | | | | | | GROUP B |

| | | | | | | ----------------------------

| | | | | | |->| PORT C (LOWER) |

| | | | | | |1=INPUT,0=OUTPUT|

| | | | | | ----------------------------

| | | | | |-------> | PORT B |

| | | | | |1=INPUT,0=OUTPUT|

| | | | | -----------------------------

| | | | |-------------> | MODE SELECTION |

| | | | | 0=MODE 0 |

| | | | | 1=MODE 1 |

| | | | ----------------------------

| | | | __________________

| | | | | GROUP A |

| | | | -----------------------------

| | | |-------------------> | PORT C (UPPER) |

| | | | 1=INPUT,0=OUTPUT|

| | | -----------------------------

| | |-----------------------> | PORT A |

| | | 1=INPUT,0=OUTPUT |

| | ------------------------------

| |---------------------------> | MODE SELECTION |

| | 00=MODE 0 |

| | 01=MODE 1 |

| | 1x=MODE 2 |

| ------------------------------

| __________________

|-----------------------------------> | MODE SET FLAG |

| 1=ACTIVE |

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

Cuvântul de control pentru iniţializarea ADA2100 trebuie să aibă forma generală

1xxxx00x, unde x poate lua orice valoare 1 sau 0.

Acest cuvânt de control asigură că cele 8 linii ale portului B să fie programate ca ieşiri, pentru a fi utilizate să controleze multiplexorul analogic şi circuitele de amplificare (gain). Prin biţii care sunt simbolizaţi cu x în cuvântul de control, se poate face programarea celorlalte 16 canale binare de I/E (porturile A şi C) în orice mod de lucru posibil.

De exemplu pentru cuvântul de control 10000000 (128 în zecimal) iniţializarea se face cu instrucţiunile în asamblare

mov dx,BA+3 mov al,128 out dx,al

Page 97: Sisteme de Timp Real

4-98

În acest caz, şi porturile C şi A sunt programate ca ieşiri, putând fi disponibile pentru comenzi în proces la conectorul P8.

Dacă iniţializarea se face cu 10001001 (137 zecimal), portul C este programat ca intrări numerice.

De notat că portul A bitul 7 (PA7), poate fi configurat să permită monitorizarea semnalului EOC de la convertorul analog-numeric. În acest caz, trebuie ca portul A să fie programat ca intrări numerice, cuvântul de control având forma generală 1xx1x00x.

Portul B este dedicat pentru selecţia canalului analogic de intrare şi a amplificării. Cei mai puţin semnificativi 4 biţi ai portului B (PB0-:-PB3) controlează selecţia canalului, iar cei mai semnificativi 4 biţi controlează selecţia amplificării.

Asignarea biţilor în port este:

MSBs LSBs

7 6 5 4 3 2 1 0 PPI port B (BA + 1)

\___^____/ \___^____/

gain select channel select

0000 = 1x 0000=channel 1

0001 = 2x 0001=channel 2

0010 = 4x 0010=channel 3

0100 = 8x 0011=channel 4

1000 = 16x 0100=channel 5

0101=channel 6

0110=channel 7

0111=channel 8

Imediat după iniţializare, portul B se încarcă cu valoarea 0, corespunzător canal 1, amplificare 1x. Pentru a schimba această programare, de exemplu pentru canal 8 amplificare 2x, se scrie secvenţa de program

mov dx,BA+1 mov al,00010111b out dx,al

Selectarea unui canal analogic de intrare

Canalul analogic de intrare se selectează cu cei mai puţin semnificativi 4 biţi din portul B al PPI, care se găseşte la adresa BA+1.

Algoritmul general de selectare a canalului este:

1. Citeşte starea curentă a portului B

2. Reţine cei mai semnificativi 4 biţi, pentru a păstra amplificarea

3. Depune numărul de canal în cei mai puţin semnificativi biţi

4. Scrie noua valoare în portul B.

O secvenţă de program în asamblare pentru selecţia canalului 6 (de exemplu) este:

mov dx,BA+1 in al,dx and al,0f0h or al,6-1 out dx,al

Page 98: Sisteme de Timp Real

4-99

Setarea amplificării pe intrările analogice

Configuraţia celor mai semnificativi 4 biţi ai portului B pentru setarea amplificării a fost prezentată mai sus.

Algoritmul general pentru setarea amplificării este:

1. Citeşte starea curentă a portului B

2. Păstrează cei mai puţin semnificativi 4 biţi, pentru a nu schimba canalul

3. Setează noua amplificare cu una din valorile (în zecimal):

pentru 1x ---- 0

pentru 2x ---- 16

pentru 4x ---- 32

pentru 8x ---- 64

pentru 16x ---- 128

4. Scrie noua valoare în portul B. Secvenţa de program în asamblare pentru setarea amplificării 8x (de exemplu) este:

mov dx,BA+1 in al,dx and al,0fh or al,64 out dx,al

Programarea şi citirea convertorului analog-numeric

După ce s-a făcut selecţia canalului şi setarea amplificării, se poate face citirea valorii convertită, ori de câte ori este nevoie. Schimbarea canalului şi/sau amplificării se face numai atunci când este nevoie de alte valori pentru ele, nu la fiecare citire din convertor.

Ori de câte ori o conversie analog-numerică este completă, se generează semnalul end-of-convert (EOC) pentru a specifica sfârşitul conversiei. Acest semnal poate fi utilizat în mai multe feluri:

• conectat la bitul 7 din portul A al PPI (PA7)

• conectat la bitul 7 din portul C al PPI (PC7)

• conectat la una din întreruperile IRQ2-:-IRQ7.

Conectarea la PA7 sau PC7 se face în conectorul P6, iar la una dintre întreruperi în conectorul P7.

Algoritmul general pentru controlul conversiei analog-numerice pe 12 biţi şi citirea valorii convertite este:

1. Startează o conversie pe 12 biţi, executând o instrucţiune OUT la BA+4 (sau BA+6); nu contează valoarea care se scrie în port

2. Aşteaptă 20 microsecunde sau testează prin polling starea semnalului EOC pe PA7 (sau PC7)

3. Citeşte octetul cel mai puţin semnificativ al valorii convertite, de la BA+5 (sau BA+7)

4. Citeşte octetul cel mai semnificativ al valorii convertite, de la BA+4 (sau BA+6)

5. Combină cei doi octeţi într-o valoare pe 12 biţi, utilizând relaţia:

rezultat=(MSB*16)+(LSB div 16)

Este nevoie de ajustarea valorii citite (pasul 5), deoarece modulul oferă o valoare pe 12 biţi prin intermediul a două porturi pe 8 biţi; acestea constituie un cuvânt pe 16 biţi, în care cei 12 biţi ai valorii convertite sunt cadrari la stânga, ca în figura de mai jos:

MSB LSB

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

Page 99: Sisteme de Timp Real

4-100

DB12 DB11 DB10 DB9 DB8 DB7 DB6 DB5 DB4 DB3 DB2 DB1 0 0 0 0

Formatul cuvântului de conversie A/N

După ce se citeşte şi ajustează valoarea, aceasta trebuie scalată în funcţie de domeniul şi polaritatea tensiunii de intrare:

Domeniu de intrare Factor de scalare Greutatea pe bit

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

+/- 5V Scade 2048 2.4414 mV

+/- 10V Scade 2048 4.8828 mV

0 la 10V NU 2.4414 mV

De exemplu, dacă valoarea citită este 1024 iar domeniul de intrare este +/-5V, tensiunea analogică de intrare este calculată astfel:

(1024-2048)*2.4414mV/bit=-2.49999 V.

Pentru +/-10V la intrare, această tensiune se calculează astfel:

(1024-2048)*4.8828mV/bit=-4.9999V.

Pentru 0 -:- 10V la intrare, nu se face scalare, şi tensiunea se calculează astfel:

1024*2.4414mV/bit=2.49999 V.

Pentru conversia din volţi în unităţi inginereşti corespunzătoare mărimii achiziţionate (atm, bari, Amperi, m/s etc), se ţine cont dacă traductorul de intrare are sau nu caracteristica de intrare/ieşire liniară. Dacă da, se poate face translatarea de domeniu din volţi în valori inginereşti, în caz contrar urmând a se consulta cartea tehnică a traductorului.

De notat că ADA2100 efectuează şi conversii pe 8 biţi. Startul conversiei se dă cu o instrucţiune OUT la adresa BA+5 (sau BA+7). Deşi are o rezoluţie mai proastă, conversia pe 8 biţi este uneori preferată, datorită vitezei mai mari a ciclului de conversie (13µs în loc de 20µs cât este la conversia pe 20biţi).

Observaţii:

1. În aplicaţii, este bine ca chiar dacă programarea conversiei şi citirea datelor se fac în limbaj de asamblare, conversia în volţi şi în unităţi inginereşti să se facă în limbaj evoluat (C, PASCAL, BASIC etc.). Limbajele evoluate conţin de regulă şi funcţii de I/E care permit programarea porturilor.

2. Pentru aprofundarea modului de programare a modulului ADA2100 în diverse limbaje, se vor studia programele sursa livrate de firma producătoare. Acestea conţin exemple care prezintă diverse moduri de utilizare a modulului ADA2100 pentru achiziţia de date.

Problemă propusă

Să se adapteze programul de prezentat la 4.3.4 şi să se scrie funcţiile can()şi cna()pentru cazul în care sistemul de achiziţie de date şi control este realizat cu ADA2100.

Page 100: Sisteme de Timp Real

5-101

5 SISTEME DE OPERARE TIMP - REAL MULTITASKING

5.1 Introducere O metodă uzuală de a structura o aplicaţie timp - real este aceea de a realiza un număr de task-uri cooperante care se execută concurent (pentru task vezi şi 6.1). În mod uzual, proiectarea şi implementarea aplicaţiei timp - real se poate face mai uşor dacă sistemul de operare (SO) utilizat suportă prelucrări multitasking.

Este cunoscut că SO tradiţionale se bazează pe aceea că toate aplicaţiile sau task-urile din sistem sunt executate concurent pe o singură UC cu un singur procesor. În contrast, procesarea paralelă presupune ca mai multe procesoare să lucreze în paralel, fiecare dintre ele executând concurent task-uri. Sistemele cu procesare paralelă au un cost ridicat şi în majoritatea aplicaţiilor timp - real raportul performanţă/cost determină utilizarea unui sistem cu un singur procesor şi cu SO adecvat pentru execuţia concurentă a task-urilor.

Pentru începători, o confuzie poate apărea între proprietăţile multiuser şi multitasking ale SO.

Proprietatea multiuser a SO asigură că fiecare utilizator execută propria aplicaţie ca şi când ar avea la dispoziţie toate resursele calculatorului:

Utilizator 1 Utilizator i

Program 1

Date 1

Program i

Date i

SO

Hardware

Fig. 5.1-1 Execuţia multiuser

Page 101: Sisteme de Timp Real

5-102

Fiecare program (aplicaţie) rulează în propriul mediu, protejat faţă de celelalte aplicaţii.

Proprietatea multitasking a SO se referă la faptul că acesta gestionează mai multe task-uri care cooperează în cadrul unei aplicaţii, în vederea realizării funcţiilor pentru care aceasta a fost proiectată. Cooperarea presupune că task-urile comunică între ele prin mesaje şi că partajează date comune.

În aplicaţiile multitasking comunicarea între task-uri şi partajarea datelor se face prin intermediul unor primitive iar SO previne accesele nepermise la datele partajate. De asemenea, se asigură protecţia datelor private task-urilor. (De notat însă că interferenţele voite sau care sunt recunoscute ca voite de SO nu pot fi prevenite – SO presupune că task-urile cooperează).

Uzual, în sistemele timp - real încorporate (Embedded Real-Time Systems), aplicaţia timp - real care rulează pe suportul hardware este alcătuită din Sistemul de Operare Timp - Real Multitasking (SOTRM) şi task-urile care implementează funcţiile aplicaţiei sau funcţii de sistem. Principalele atribuţii ale SOTRM se referă la:

Alocarea resurselor: O cerinţă importantă la un SO este alocarea resurselor calculatorului la diverse task-uri. În cadrul aplicaţiilor timp - real procedura de alocare este mai complicată pentru că unele dintre activităţi sunt critice în raport cu timpul. Prin urmare, trebuie să existe modalităţi şi discipline foarte riguroase de asignare a priorităţilor la task-uri şi de alocare a timpului UC în concordanţă cu o anumită schemă de prioritate.

Comunicare între task-uri: Un task poate utiliza servicii furnizate de către alte task-uri şi de asemenea serviciile oferite de el pot fi utilizate de alte task-uri. Prin urmare, SO trebuie să dispună de mecanisme pentru a permite task-urilor să comunice între ele (zone de memorie partajată, mesaje, cutii poştale etc). În plus, task-urile pot fi activate de către evenimente externe, SO trebuind astfel să sesizeze evenimentele din mediul extern (de exemplu prin utilizarea întreruperilor) şi să transfere tratarea lor către task-urile asociate.

Gestiunea secţiunilor critice: Este frecvent întâlnită situaţia în care mai multe task-uri trebuie să acceseze resurse comune, atât hardware cât şi software. De aceea, SO trebuie să aibă posibilitatea de a preveni ca 2 sau mai multe task-uri să utilizeze în acelaşi timp aceste resurse.

Task n

Date n

Utilizatori

Task i

Date i

Date comune

SO

Hardware

Task 1

Date 1

Fig. 5.1-2 – Execuţia multitasking

Page 102: Sisteme de Timp Real

5-103

În concluzie, SOTRM trebuie să gestioneze partajarea resurselor, comunicarea, sincronizarea şi să planifice şi să dispecerizeze execuţia task-urilor conform cerinţelor de timp real ale acestora (vezi şi capitolul 6). Funcţiile SOTRM pot fi repartizate astfel:

• gestiunea task-urilor (planificare, dispecerizare);

• comunicarea şi sincronizarea între task-uri;

• tratarea evenimentelor externe (uzual, întreruperi externe);

• gestiunea memoriei;

• partajarea codului;

• partajarea dispozitivelor;

• partajarea datelor.

Suplimentar, unele SOTRM au funcţii de comunicaţii de date, gestiune fişiere sau conţin programe utilitare pentru mentenanţă, depanare, etc.

Există SOTRM care coabitează cu un SO gazdă de uz general precum MS-DOS, Windows, Linux etc. şi utilizează ca suport pentru dispozitivele de I/E, gestiunea de fişiere şi programe utilitare mijloacele existente în sistemul de operare gazdă. În literatura de specialitate aceste arhitecturi de SO sunt referite ca arhitecturi de tip "kernel dual".

În continuarea capitolului 5 se prezintă noţiuni introductive legate de planificarea şi dispecerizarea task-urilor iar în capitolul 6 sunt prezentaţi algoritmii clasici de planificare a task-urilor în prezenţa constrângerilor de timp rigide.

5.2 Gestiunea task-urilor în aplicaţii timp - real Gestiunea task-urilor este făcută de către două module: planificatorul de task-uri, care gestionează stările task-urilor şi listele asociate acestora şi dispecerul care este responsabil de alocarea UC la task-ul care intră în execuţie. Aceste module constituie nucleul (kernelul) SO. De asemenea, pe lângă nucleu există şi task-uri sistem care rulează după regulile task-urilor utilizator şi asigură servicii la nivel de sistem.

Taskuri sistem Taskuri aplicaţie

Alocare şi gestiune resurse

Interpretor comenzi

Subsistem de I/E Gestiune fişiere

Nivel utilizator

Planificare şi dispecerizare task-uri

Ceas de TR Rutine de tratare a întreruperilor

Fig. 5.2-1 Structura generală a unei aplicaţii timp - real

Nivel SO

Page 103: Sisteme de Timp Real

5-104

5.2.1 Tranziţia stărilor şi descriptori de task

Pe un calculator cu un singur procesor numai un task poate rula la un moment de timp dat şi din acest motiv celelalte task-uri trebuie să fie în altă stare decât activ (în execuţie). O diagramă tipică de tranziţie a stărilor este prezentată în figura 5.2.1-1.

1. În starea activ (sau în execuţie engl. running) este un singur task care deţine controlul procesorului la un moment de timp dat. Acesta are în mod normal cea mai mare prioritate dintre task-urile care erau gata de execuţie în momentul dispecerizării.

2. În starea gata de execuţie (engl. ready) pot fi mai multe task-uri. Resursele cerute de către task trebuie să fie disponibile pentru ca acesta să poată fi trecut în starea gata de execuţie.

3. În starea suspendat, un task poate fi în aşteptare (engl. waiting), blocat (engl. locked out) respectiv întârziat (engl. delayed). Execuţia oricărui task aflat în această stare a fost suspendată anterior deoarece task-ul respectiv solicită resurse care nu erau disponibile sau task-ul aşteaptă apariţia unui eveniment sau pentru ca task-ul aşteaptă să treacă un interval de timp.

4. Starea inactiv (engl. idle). SOTRM este conştient de existenţa acestui task, dar task-ul nu are alocată prioritate şi nu este încă gata de execuţie.

5. Starea inexistent (engl. non-existing). SOTRM nu este conştient de existenţa acestui task, deşi el poate fi rezident în memoria calculatorului.

Gata de execuţie

Activ

Lansare în execuţie

Suspendat

Suspendare Sus

pend

are

Act

ivar

e

Inactiv

Pornire iniţială

Terminare

Oprire

Oprire

Inexistent

Cer

are

Dis

trug

e

Fig. 5.2.1-1 – Tranziţii de stări ale taskurilor

Page 104: Sisteme de Timp Real

5-105

Stările task-ului pot fi modificate prin acţiuni ale SOTRM. De exemplu, dacă o resursă devine disponibilă / nedisponibilă SOTRM modifică starea task-ului care are nevoie de resursa respectivă. De asemenea, stările unor task-uri pot fi modificate la iniţiativa altor task-uri ale aplicaţiei.

5.2.2 Descriptori de task

Din prezentarea referitoare la stările task-urilor şi din cea referitoare la mecanismul întreruperilor (capitolul 4) este evidentă necesitatea ca SOTRM să păstreze informaţii de stare despre fiecare task din sistem. Aceste informaţii sunt memorate în descriptori de task (DT). Un DT este o zonă de memorie asociată unui task care conţine cel puţin următoarele informaţii:

• identificator de task (ID);

• prioritatea task-ului;

• starea curentă;

• zona de memorare a mediului volatil.

Dacă SOTRM permite ca task-ul să fie transferat între memoria internă şi memoria externă, în DT trebuie de asemenea păstrate informaţii referitoare la localizarea imaginii task-ului în memoria externă şi dimensiunea memoriei interne necesară. De asemenea, în DT se pot memora informaţii referitore la blocurile de control pentru fişierele utilizate etc.

În mod uzual, descriptorii sunt memoraţi într-un tablou. Pentru gestiunea task-urilor bazata pe priorităţi, fiecare descriptor conţine câmpuri utilizate de către planificator şi dispecer pentru înlănţuirea task-urilor, după prioritate, în liste asociate stărilor. Acest lucru este ilustrat în figura 5.2.1 – 2.

Fig. 5.2.1 – 2 Structura listelor de task-uri conform stărilor

activ Cap

Coadă DT

gata de execuţie

Cap

Coadă

DT DT

suspendat Cap

Coadă

DT DT

inactiv Cap

Coadă

DT DT

Page 105: Sisteme de Timp Real

5-106

5.2.3 Dispecerizarea şi planificarea task-urilor

Funcţia principală a segmentului din SO care se ocupă de planificarea şi dispecerizarea task-urilor este aceea de alocare a timpului procesorului la diverse task-uri, care pot fi periodice, sporadice sau aperiodice (vezi şi capitolul 6).

Planificatorul se ocupă de deciziile de alocare de nivel înalt precum cele legate de funcţionarea dispozitivelor de I/E. El recepţionează informaţia despre disponibilitatea resurselor din sistem şi trece task-urile din starea suspendat în starea gata de execuţie. De asemenea, poate avea ca sarcină să urmărească dacă task-urile de prioritate mai mică au aşteptat prea mult şi să le schimbe prioritatea pentru a se asigura că şi ele vor fi lansate în execuţie.

Dispecerul de task-uri este numit şi planificator de “nivel scăzut” atunci când este apelat comută task-urile salvând mediul volatil de execuţie al task-ului curent şi lansând în execuţie taskul gata de execuţie care are cea mai mare prioritate. De asemenea dispecerul ia decizii imediate de comutare a task-urilor declanşat de către evenimente externe (de exemplu ca răspuns la întreruperea de la un dispozitiv I/E, de la ceasul de timp real etc).

5.2.4 Niveluri de prioritate

Alocarea priorităţilor task-urilor în aplicaţiile de TR se face fie pre-execuţie, în faza de proiectare, fie dinamic, în timpul execuţiei. Prioritatea alocată este în funcţie de criteriile luate în considerare de către algoritmul de planificare (vezi şi capitolul 6): perioada de lansare în execuţie, timpul limită de răspuns etc. Task-urile periodice sunt trecute în starea gata de execuţie la începutul perioadei de timp asociată fiecărui task. Task-urile sporadice sau aperiodice sunt trecute în starea gata de execuţie la apariţia unor evenimente care trebuie tratate. Un eveniment poate fi generat:

• de fenomene care se petrec în mediul extern;

• de trecerea unui interval de timp;

• de prelucrări interne aplicaţiei.

Un criteriu de la care se porneşte în gestiunea priorităţilor este arhitectura aplicaţiei timp - real. Cel mai frecvent aplicaţia este structurată pe mai multe niveluri: rutine de tratare întreruperi, task-uri periodice (bazate pe ceas) cu constrângeri de timp rigide şi task-uri de bază, fără constrângeri rigide de timp. Priorităţile pot fi grupate pe 3 niveluri mai largi, ca în figura 5.2.3-1:

Page 106: Sisteme de Timp Real

5-107

Nivelul întreruperilor (cel mai prioritar): La acest nivel sunt rutinele de serviciu pentru tratarea întreruperilor pentru task-urile şi dispozitivele care cer un timp de răspuns foarte rapid (uzual de ordinul microsecundelor sau milisecundelor). Una dintre aceste rutine va trata întreruperea de la ceasul de timp real şi va declanşa dispecerizarea task-urilor.

Nivelul de ceas: Conţine task-urile periodice, bazate pe ceas. La acest nivel sunt task-urile care cer prelucrare repetată (periodic), precum task-urile de achiziţie şi control procese. În unele aplicaţii, task-ul cel mai puţin prioritar la acest nivel este planificatorul pentru task-urile la nivelul de bază.

Nivelul de bază – task-urile de prioritate mai scăzută, care nu au de respectat timpi limită de prelucrare sau care acceptă anumite plaje de eroare de timp. Ele pot avea toate aceeaşi prioritate sau li se pot aloca priorităţi diferite.

Prin urmare, arhitectura unei aplicaţii timp - real bazată pe nivelurile de prioritate prezentate mai sus poate fi modelată pe nivelele:

• Rutine de tratare a evenimentelor externe (întreruperi externe), cu execuţie foarte rapidă.

• Drivere de control dispozitive, control în proces, achiziţie date, cu execuţie preponderant periodică.

• Task-uri de prelucrare, memorare pe suport magnetic, vizualizare pe display etc. pentru care constrângerile de timp real sunt mai relaxate.

Priorităţi

întreruperi externe

(Nivelul întrerupe-rilor)

IRQ0

IRQi

IRQn

Ceas de TR

şi dispecer

Priorităţi

taskuri

bazate pe ceas

(Nivelul

ceas TR)

Prioritate 1

Prioritate m

Planificator pentru nivelul de bază

Priorităţi

taskuri de baza

(Nivelul

de bază)

Prioritate 1

Prioritate k

Fig. 5.2.3-1 Niveluri de prioritati în SOTRM

Page 107: Sisteme de Timp Real

5-108

Existenţa nivelului de întreruperi şi a nivelului task-urilor bazate pe ceas implică utilizarea unei strategii de planificare preemptivă. Aceasta se referă la faptul că atunci când un task trece în starea gata de execuţie şi el are o prioritate mai mare decât task-ul în curs de execuţie, atunci task-ul curent va fi trecut în starea gata de execuţie iar task-ul cu prioritate mai mare va fi lansat în execuţie. În contrast, o strategie nepreemptivă de planificare presupune ca orice task în curs de execuţie, indiferent de prioritate, nu este suspendat decât dacă într-o formă sau alta el cedează controlul procesorului sau dacă timpul alocat pentru execuţia sa a expirat.

Exemplu: planificare preemptivă vs. planificare nepreemptivă

Fie un sistem care recepţionează un semnal de întrerupere de alarmă de la un proces iar ca răspuns la alarmă trebuie să activeze un task care controlează un dispozitiv de alertare (hupa). Acesta este un task de prioritate mare la nivelul de bază. Ca răspuns la întreruperea de alarmare, rutina de tratare a întreruperii va face ca task-ul de alarmare să fie plasat în lista task-urilor gata de execuţie. După plasarea în listă, rutina de tratare poate lua una din următoarele decizii:

• reîntoarcere în task-ul întrerupt;

• salt la dispecer.

Dacă controlul este dat task-ului întrerupt, atunci task-ul de alarmare nu va fi lansat în execuţie până când nu se declanşează replanificarea în sistem la intervalul de timp stabilit pentru aceasta sau până când task-ul curent nu cedează controlul. Aceasta este o strategie nepreemptivă.

Dacă însă din rutina de tratare se face salt la dispecer iar task-ul de alertare are prioritatea cea mai mare dintre task-urile existente în lista gata de execuţie, acesta va fi imediat lansat în execuţie după ce task-ul întrerupt este trecut de către dispecer în starea gata de execuţie.

5.2.4.1 Nivelul întreruperilor

La 4.2 s-a arătat că o întrerupere poate forţa alocarea unităţii centrale la o rutină de tratare, iar sistemul nu are control asupra timpului cât durează execuţia acesteia. Deoarece acest mod de alocare a unităţii centrale este asincron, este necesar ca timpul afectat prelucrărilor în cadrul rutinelor de tratare să fie redus la minim. Se obişnuieşte ca în cadrul acestor rutine să se memoreze informaţiile strict necesare asociate evenimentelor şi să se paseze aceste informaţii către un task care le va prelucra ulterior. Task-ul respectiv va rula pe un nivel de prioritate mai scăzută (la nivel de ceas sau la nivel de bază).

Rutinele de tratare trebuie să asigure mijloacele de comutare a task-urilor în primul rând salvând mediul volatil al acestora (regiştrii, stiva, starea coprocesorului matematic, etc). La terminarea sa, fie restaurează mediul volatil salvat la început şi dă controlul task-ului întrerupt, fie face salt la dispecer, lăsând mediul volatil salvat. Regăsirea informaţiei despre mediul volatil se va face ulterior prin intermediul descriptorului de task.

În cadrul nivelului întreruperilor pot fi mai multe priorităţi în funcţie de maşină. Uneori partea hardware rezolvă problema priorităţilor, alteori SO trebuie să asigure ca întreruperile cu prioritate mai mică să nu întrerupă pe cele de prioritate mai mare.

5.2.4.2 Nivelul de ceas

Unul dintre nivelurile de întrerupere este destinat pentru întreruperea de ceas de timp real. Rutina de tratare asociată este lansată în execuţie la un anumit interval care în mod uzual este determinat de rata de activare a task-ului care necesită cea mai mare frecvenţă de apelare. Valorile tipice sunt între 20 ÷200 msec.

Vom denumi în continuare fiecare întrerupere de ceas „tick”, care este cel mai mic interval de timp cunoscut de sistem. Funcţiile de bază ale rutinei de tratare a întreruperii de la ceas sunt legate de obicei de actualizarea orei şi datei sistem şi de transferul controlului către dispecer. Acesta din urmă, va selecta care task se va lansa la un tick particular din sistem. Task-urile la nivelul de ceas sunt de două tipuri:

Page 108: Sisteme de Timp Real

5-109

• Periodice (ciclice) – care cer o sincronizare precisă cu mediul extern;

• întârziate (cu aşteptare) – care necesită întârzieri fixe între lansări succesive în execuţie sau întârzierea activităţii lor pe o perioadă de timp dată.

5.2.4.2.1 Task-uri periodice

Pentru aceste task-uri se specifică: perioada de execuţie, timpul (durata) de execuţie, timpul de lansare în

execuţie în raport cu începutul perioadei şi limita de timp la care trebuie să-şi termine execuţia. Task-urile de prioritate mai mică în cadrul nivelului de ceas se vor executa cu o anumită instabilitate în timp, pentru că aşteaptă terminarea execuţiei task-urilor cu prioritate mai mare.

Exemplu

Fie 3 task-uri A, B, C. Se cere să se lanseze în execuţie periodică: A are perioada la 20 msec, B la 40 msec şi C la 80 msec. Dacă tick-ul este la 20 msec, task-ul A se va lansa la 1 tick, B la 2 tick-uri şi C la 4 tick-uri. Dacă ordinea priorităţilor este A, B, C (A cea mai mare prioritate) şi suma timpilor de execuţie a task-urilor e mai mică de 20 ms, atunci procesele se vor executa ca în figura 5.2.3.2.-1, task-urile executându-se la intervale de

Task

C

B

A

Tick

1 2 3 4 5 6

Figura 5.2.3.2.-1 Diagrama de activare a task-urilor, ordinea priorităţilor A, B, C

Task

C

B

A

Tick

1 2 3 4 5 6

Figura 5.2.3.2.-2 - Diagrama de activare a task-urilor, ordinea priorităţilor C, A, B

Page 109: Sisteme de Timp Real

5-110

timp egale. Chiar dacă task-urile sunt întârziate faţă de apariţia întreruperii de ceas, intervalele de timp între task-uri sunt constante. Dacă însă prioritatea task-urilor ar fi C, A, B (C ar fi mai prioritar) atunci la fiecare 4 tick-uri task-urile A şi B vor fi întârziate, deci nu se vor mai executa la intervale egale de timp (figura 5.2.3.2-2).

În practică metoda de rezolvare a situaţiei din exemplu este de a da task-ului cu cea mai mare frecvenţă de execuţie prioritatea cea mai mare.

O altă problemă apare atunci când task-urile care lucrează la nivel de ceas au suma timpilor de execuţie a task-urilor executate la un anumit tick mai mare decât intervalul dintre 2 întreruperi de la ceas. Presupunem ca în exemplul anterior task-ul C are nevoie de 24 msec pentru a-şi termina prelucrarea, task-ul A de 1 msec şi B de 6 msec. Dacă sistemul ar permite ca task-ul C să-şi termine execuţia atunci diagrama de timp ar arăta ca în figura 5.2.3.2.-3. Deci task-ul A va fi întârziat 11 msec la fiecare a 4-a execuţie a task-ului C.

Pentru a rezolva această situaţie se obişnuieşte ca task-urile periodice să fie divizate în task-uri de prioritate

mare, a căror execuţie cumulată să se completeze în interiorul unui interval de ceas şi în task-uri de prioritate scăzută care pot fi întrerupte de următoarele întreruperi de ceas dar a căror execuţie în cazul cel mai defavorabil să nu depăşească perioada alocată (în exemplu, execuţia task-ului C să nu depăşească 80 ms).

De asemenea trebuie acordată atenţie şi timpului necesar dispecerului pentru a selecta task-ul ce urmează a se executa (supraîncărcarea execuţiei ca urmare a timpului de comutare a task-urilor). Timpul de comutare este un parametru al SOTRM care trebuie să fie este garantat de către furnizor.

Dacă numărul de task-uri ce trebuie testate pentru a fi lansate în execuţie este mare, supraîncărcarea în raport cu timpul în cadrul dispecerului poate deveni semnificativă, afectând timpul de răspuns. Există mai mulţi algoritmi optimali de planificare a task-urilor periodice, în capitolul 6 fiind prezentaţi algoritmii RM şi EDF.

Pentru planificarea task-urilor periodice există diferite tehnici, o tehnică simplă de planificare pre-execuţie fiind prezentată în continuare.

Se întocmeşte un tablou în care sunt memorate cuvinte care conţin în poziţii fixe câte un bit pentru fiecare task. Dacă în momentul dispecerizării bitul este “1”, atunci task-ul este activat. Tabela are atâtea intrări câte tick-uri sunt necesare pentru invocarea tuturor task-urilor. Acest număr N corespunde celui mai mic multiplu comun între numărul de tickuri solicitate de către fiecare task. Un numărător modulo N este utilizat pentru a selecta cuvântul în tabelă pentru un tick dat, iar biţii care sunt “1” in cuvânt indică task-urile ce trebuie activate la acel tick. De asemenea tabelului i se asociază o mască de activare. Această mască de regulă are toţi biţii “1”, dar

Task

C

B

A

Tick

1 2 3 4 5

Figura 5.2.3.2.-3 -

11ms

Page 110: Sisteme de Timp Real

5-111

atunci când din diferite motive un task nu se poate executa (exemplu: suspendat pe o resursă critică) chiar dacă a trecut numărul de tick-uri, bitul corespunzător în mască se setează la “0”. Se face „şi logic” între cuvântul extras din tabelă şi mască, iar task-urile în a căror poziţie în cuvânt este “1” sunt trecute în lista task-urilor gata de execuţie. Ele vor fi apoi lansate în execuţie în conformitate cu prioritatea, care poate fi asociată cu poziţia bitului asociat task-ului în cuvânt.

Pentru exemplificarea modului în care funcţionează tehnica descrisă anterior, presupunem 6 task-uri la nivel de ceas cu intervale de invocare la 1, 2, 4, 5, 10, 20 de tick-uri. Cel mai mic multiplu comun este 20 şi prin urmare este necesară o tabelă cu 20 de intrări. Se presupune că s-a cerut ca toate task-urile să se poată executa la tick-ul 0 (task-urile sunt fazate, care este cel mai defavorabil caz), deci în primul cuvânt toţi biţii sunt setaţi.

Determinarea task-urilor ce urmează a fi trecute în starea gata de execuţie precum şi modul de planificare pentru cazul în care numărătorul de tick-uri are la un moment dat valoarea 4, este prezentată în figura 5.2.3.2.-4.

Page 111: Sisteme de Timp Real

5-112

Task

Tick

A B C D E F

0 1 1 1 1 1 1

1 1 0 0 0 0 0

2 1 1 0 0 0 0

3 1 0 0 0 0 0

4 1 1 1 0 0 0

5 1 0 0 1 0 0

6 1 1 0 0 0 0

7 1 0 0 0 0 0

8 1 1 1 0 0 0

9 1 0 0 0 0 0

10 1 1 0 1 1 0

11 1 0 0 0 0 0

12 1 1 1 0 0 0

13 1 0 0 0 0 0

14 1 1 0 0 0 0

15 1 0 0 1 0 0

16 1 1 1 0 0 0

17 1 0 0 0 0 0

18 1 1 1 0 0 0

19 1 0 0 0 0 0

Numărătorul modulo 20 este incrementat la fiecare tick. Valoarea sa este utilizată ca index în tabelă. De exemplu, la tick-ul al patrulea se selectează cuvântul 4 care are marcate pentru execuţie task-urile A, B, C; totuşi pentru că task-ul C are bitul 0 în mască (este suspendat) numai task-urile A şi B vor putea fi trecute în starea gata de execuţie.

1 1 0 1 1 1

Masca de activare

Cuvântul de control al execuţiei

1 1 0 0 0 0

Figura 5.2.3.2.-4 Tabela de planificare la nivel de ceas

Page 112: Sisteme de Timp Real

5-113

Avantajul este acela că metoda este mai rapidă deoarece numărătorul selectează direct task-urile ce trebuie lansate la un anumit tick. Un dezavantaj este acela că în anumite cazuri este necesară o tabelă prea mare (dacă c.m.m.m.c. este mare). De exemplu dacă task-ul C trebuie executat la 3 tick-uri în loc de 4, atunci c.m.m.m.c.=60, deci vor fi necesare 60 intrări în tabelă şi un numărător modulo 60. De asemenea metoda se complică dacă numărul de task-uri la nivel de ceas depăşeşte lungimea cuvântului calculatorului.

Problemă propusă

Să se realizeze un program de simulare a dispecerului de task-uri la nivel de ceas, având ca date iniţiale:

• 8 task-uri A…H ce trebuie lansate la 4, 4, 5, 5, 8, 8, 10 şi 20 de tick-uri de ceas ale calculatorului PC, sub sistemul de operare MS DOS;

• toate task-urile trebuie lansate în execuţie la primul tick (sunt fazate);

• fiecare task va fi implementat ca o procedură care afişează pe display numele task-ului, intervalul (în tick-uri) la care a fost lansat, data şi ora sistem.

Indicaţie: Se va utiliza tehnica prezentată mai sus. Rutina de tratare a întreruperii de ceas trebuie să comunice cu programul utilizator (dispecer de lansare a celorlalte task-uri) printr-un cuvânt care indică ce task-uri trebuie lansate. Programul utilizator va lansa rutinele asociate task-urilor în ordinea priorităţilor.

5.2.4.2.2 Task-uri întârziate

Aceste task-uri îşi întârzie execuţia pentru perioade fixe de timp, de exemplu pentru a permite completarea unor evenimente externe (exemplu: aşteaptă 100 msec pentru închiderea unui contactor apoi startează prelucrările). Aceste task-uri utilizează informaţia de la ceasul de timp real, dar de cele mai multe ori se execută la nivel de bază. Când un task cere o întârziere el trece din starea în execuţie în suspendat şi rămâne aşa până când trece perioada de întârziere.

O metodă de implementare a funcţiei de întârziere este de a realiza o listă de descriptori de task-uri, ordonată după numărul de tick-uri pentru întârziere. Primul task din listă este cel care trebuie să aştepte cel mai puţin faţă de tick-ul curent. Când un task solicită o întârziere, descriptorul de task este plasat în lista de task-uri în aşteptare (delay). Inserarea în lista delay se face calculând numărul de tick-uri necesare din momentul apelului solicitării. Controlul listei delay se face de către un task care realizează planificarea la nivel de bază. Acesta este activat periodic şi controlează lista task-urilor întârziate pentru a vedea dacă un task urmează a fi lansat. Dacă da, este trecut din lista task-urilor întârziate în lista celor gata de execuţie.

Multe sisteme de operare nu dispun de algoritmi de operare periodică iar utilizatorul trebuie să implementeze un timer suficient de precis (utilizând de exemplu funcţii sistem sau programând ceasul şi capturând întreruperile de la acesta) pe baza căruia să apeleze periodic planificatorul la nivel de bază.

Problemă propusă

Implementarea algoritmului de creare a listei task-urilor întârziate şi de gestiune a lansării lor în execuţie; tick-urile vor fi gestionate prin capturarea întreruperii de la ceasul de timp real al PC.

5.2.4.3 Nivelul de bază

Task-urile la nivelul de bază au constrângeri de timp flexibile. Felul în care task-urile la nivel de bază sunt planificate variază de la un sistem la altul. Un algoritm de planificare poate fi Round-Robin: fiecare task din lista de task-uri gata de execuţie (ready) este selectat şi i se permite execuţia până când task-ul ce se execută se autosuspendă sau până când se startează planificatorul de la nivelul de bază.

Prioritatea poate fi fixă sau alocată dinamic. Alocarea dinamică a priorităţilor se poate face fie de către un planificator de nivel înalt, fie de către task-uri, ad-hoc.

Page 113: Sisteme de Timp Real

5-114

Exemplu: prioritatea unui task poate creşte în funcţie de timpul cât stă în lista ready fără a fi lansat (are prioritate mai mică decât altele şi dacă nu-i creşte prioritatea este posibil să nu mai fie lansat niciodată în execuţie). O alternativă de ajustare a priorităţilor este răspunsul la evenimente particulare sub controlul operatorului (exemplu: dacă apare o alarmă şi este necesară o afişare rapidă la imprimantă a stării sistemului, poate fi crescută temporar prioritatea task-ului de imprimantă în cazul în care datele ce trebuie afişate sunt stocate în memorie şi este pericol să fie înlocuite cu altele înainte de afişare).

5.2.5 Apelul la dispecer

Dispecerul are două condiţii de intrare:

1. Întrerupere de la ceasul de timp real sau orice întrerupere care semnalează completarea unei cereri de I/E.

2. Suspendarea unui task datorată solicitării unei întârzieri sau completării ori cererii unui transfer de I/E.

Întotdeauna se lansează în execuţie task-ul cu cea mai mare prioritate. În primul caz (condiţia 1), dacă task-ul întrerupt nu va fi continuat la revenirea din întrerupere (alt task este mai prioritar), este trecut în starea gata de execuţie. În al doilea caz (condiţia 2) căutarea se startează de la task-ul următor cu prioritate imediat mai mică care este în lista ready, deoarece nu poate fi în lista ready un task de prioritate mai mare ca a task-ului curent.

În figura 5.2.4.-1 este prezentată o schemă logică a modulului de dispecerizare. Se presupune că fiecare task are prioritate distinctă (nu sunt mai multe task-uri cu aceeaşi prioritate).

Problemă propusă

Implementarea unui dispecer utilizând modelul descris în figura 5.2.4-1.

Page 114: Sisteme de Timp Real

5-115

Salvare stare task activ

A

Intrarea A: IRQ ceas TR IRQ I/E

Salvare stare task activ

B

Intrarea B:

Suspendare pt. întârziere, aşteptare transfer

Nivel prioritate

= -1

Nivel prioritate

= prioritatea curentă

Incrementarea niv.de prioritate

DA Nivel prioritate > max

(a ieşit din domeniul priorităţilor alocate)

Task în lista ready ?

Task în memorie ?

NU

DA

NU

Restaurare stare task

Ieşire în task

DA

Cerere de transfer în memorie

NU

Fig. 5.2.4-1 - Apelul la dispecer

Page 115: Sisteme de Timp Real

5-116

5.2.6 Exemplu de gestiune a task-urilor: SOTRM REX

Notă:

Acest paragraf nu este inclus în programa pentru examen.

REX (Real time EXecutive) este un SOTRM utilizat pentru gestiunea task-urilor în aplicaţiile încorporate de achiziţie de date, control şi comunicaţie [Gro02]. Rulează pe UC cu procesor 80x86 sau microcontrollere 80C552. La lansarea în execuţie, REX preia controlul şi gestionează lansarea în execuţie a task-urilor aplicaţiei.

5.2.6.1 Stările task-urilor

Un task poate fi într-una dintre următoarele stări:

• Nonexistent: task-ul nu are descriptor, REX nu ştie de existenţa sa.

• Idle: task-ul are descriptor, REX ştie de existenţa sa, dar task-ul nu a fost activat explicit şi nu este luat în considerare la planificare.

• Iready: este gata de lansare în execuţie pentru prima oară (tranziţie din starea idle).

• Ready: gata de execuţie.

• Preempted: este gata de reluarea execuţiei după o întrerupere a acesteia la apariţia unor evenimente a căror tratare activează task-uri cu prioritate mai mare.

• Suspended: motivul suspendării poate fi:

� aşteptare mesaj de la alt task;

� aşteptare răspuns de la un task în urma emiterii unui mesaj;

� blocat pe resursa critică;

� aşteptare evenimente externe;

� aşteptare pe interval de timp.

• Running: task-ul este în curs de execuţie.

Diagrama de tranziţie a stărilor şi directivele care concură la trecerea dintr-o stare în alta se prezintă în figura 5.2.5-1:

Page 116: Sisteme de Timp Real

5-117

Stările pot fi modificate de către planificatorul executivului la iniţiativa task-urilor prin apel de directive, sau ca urmare a unor evenimente.

Evenimentele externe sunt generate de către întreruperile externe; IRQi din figură se referă la rutinele de tratare a acestor întreruperi.

5.2.6.2 Directivele implicate în tranziţia stărilor

Directivele SOTRM REX implicate în tranziţia stărilor task-urilor sunt:

• wait – aşteptare eveniment sau întârziere;

• activate – activează un task aflat în starea idle;

• create – creează un descriptor de task şi trece task-ul în starea idle;

• destroy – distruge un task;

• exitt – termină execuţia unui task;

exits

iready

ready

suspended

disp

ecer

IRQ

i

idle

exits

exits

activate

inexistent

crea

te

exit

s

running

preempted

exitt

disp

ecer

exit

s

IRQi

aqio

aqmsg

unlock

wait

sdat

rdat

qio

lock

Fif. 5.2.5 -1 Automatul de tranziţie a starilor la SOTRM REX

Page 117: Sisteme de Timp Real

5-118

• sdat – trimite un bloc de date către alt task, cu sau fără confirmare (comunicare sincronă sau asincronă) ;

• rdat– recepţie mesaj: aşteaptă recepţionarea unui mesaj (comunicaţie sincronă) sau testează dacă în coada de mesaje la task există un mesaj (comunicaţie asincronă);

• qio – lansează o operaţie de I/E către un driver de dispozitiv, aşteptând sau nu terminarea operaţiei;

• lock – intră într-o zonă critică sau blochează task-ul dacă resursa solicitată nu este disponibilă;

• aqio – achită operaţia de I/E;

• aqmsg – achită tratarea unui bloc de date recepţionat de la alt task;

• unlock – ieşire dintr-o zonă critică;

• exits – terminare aplicaţie.

5.2.6.3 Descriptori de task

Deoarece SOTRM REX poate fi utilizat şi pentru aplicaţii în care codul este rezident în memoria internă nevolatilă (EPROM, flash etc.), descriptorul de task utilizat în timpul execuţiei se construieşte pe baza unui alt descriptor, numit descriptor static de task (STD - Static Task Descriptor). Descriptorul de task este referit ca descriptor dinamic de task (DTD - Dinamic Task Descriptor) şi are structura:

typedef unsigned int word; typedef unsigned char byte; struct dtd { word ntask //identificator struct dtd * next_ready; //pointeri inlatuire in lista ready struct dtd * prev_ready;

struct dtd * next_delay//pointeri inlatuire in lista suspended struct dtd * prev_delay; ……. word delay; //interval de intarziere byte status; //starea word * stop_stack,stack_address; //pointeri la zona de date volatile void * msg; //pointer la lista de mesaje de la alte task-uri : : GLOCK * wait_lock; unsigned int cnt_lock;/*numara cite lock au fost apelate de task*/ unsigned char *save_8087; }

top_stack este vârful stivei, stack_address este adresa de început a zonei stivei

În funcţie de starea task-urilor, descriptorii de task se înlănţuie în listele task-urilor ready, în ordinea priorităţii, sau în listele de task-uri suspendate.

STD are următoarea structură:

struct std {

char * name; //nume de identificare pentru task

void (* start_task) (void); //adresa de start a task-ului

word stack_length; //lungimea stivei in octeti

word priority; //prioritate initiala a task-ului

byte activ;//switch ce specifica dacă task-ul este activ initial

Page 118: Sisteme de Timp Real

5-119

}

5.2.6.4 Dispecerul

Dispecerul realizează comutarea contextului, prin suspendarea task-ului running la intrarea în dispecer şi respectiv prin activarea task-ului running la ieşirea din acesta.

Deoarece intrarea în dispecer şi ieşirea din acesta se realizează prin secvenţe de program unice la nivel de sistem, se poate realiza un controlul riguros al instrucţiunilor maşină din aceste secvenţe şi se pot determina performanţe timp - real pe o maşină dată.

Funcţia de Suspendare

Intrarea în dispecer este precedată de salvarea contextului de execuţie al task-ului în curs de execuţie. Această acţiune se realizează la fiecare apel de directivă care implică suspendarea execuţiei task-ului curent:

... Mascarea întreruperilor [Stiva].Running <- RegistreleleProcesorului RegistreleProcesorului <- [Stiva].Kernel ...

Un exemplu de directivă care forţează intrarea în dispecer este directiva wait:

extern int tkrun; // ID-ul task-ului in starea running int far wait(unsigned int n_int,unsigned int n_cuante){ register unsigned int i; unsigned int *pntr; register unsigned int c; asm cli; asm push bp asm push bx asm push cx asm push dx c=_SP; pntr=&td_ram[tkrun].ret_wait; if((n_int<wtqio)&&(*pntr!=0)){ /*o irq externa a aparut între timp*/ i=*pntr; *pntr=0; asm pop dx asm pop cx asm pop bx asm pop bp asm sti; return(i); } . . . *pntr=0; td_ram[tkrun].top_stack=c; push_delay(n_int,n_cuante); _SP=rex_sp; return(dspatch());// intrarea in dispecer }

Funcţia de Activare:

Ieşirea din dispecer este precedată de refacerea contextului de execuţie al task-ului care este lansat în execuţie. Această acţiune se realizează la terminarea execuţiei unei directive care implică lansarea în execuţie a unui task.

Page 119: Sisteme de Timp Real

5-120

... RegistreleProcesor<- [Stiva].Running

Demascarea întreruperilor ...

Prelucrările efectuate de dispecer şi ieşirea din acesta sunt:

/* d s p a t c h - dispecer pentru lansare in executie task-uri. Cauta in lista ready pina cind gaseste cel putin o intrare.În funcţie de stare,reface pointerul virfului de stiva si lanseaza in executie task-ul. Pentru task-urile aflate in starea ready,returneaza si continutul locatiei ret_wait din descriptorul dinamic de task. Depune in locatia tkrun numarul task-ului lansat in executie */ extern struct dtd *is_preempted; //daca un task a fost preemptat,contine //adresa descriptorului; altfel = NULL int far dspatch(void){ register unsigned int i,j; struct dtd *pntr; static unsigned char * s8087=NULL; j=0; tkrun=0xffff; asm cli /* salvare stare procesor 8087 */ if(is_preempted!=NULL){ if((s8087=is_preempted->save_8087)!=NULL){ if(_8087==0){ for(j=0;j<300;j++) *(s8087+j)=*(zFPU+j); } else{ _ES=FP_SEG(s8087); _BX=FP_OFF(s8087); asm fsave byte ptr es:[bx] asm fwait asm fstenv byte ptr es:[bx+210] asm fwait } } is_preempted=NULL; } for(;;){ asm sti for(;first_ready==NULL;)/*asteapta inserare task in lista ready*/ ; asm cli /*Lanseaza in executie un task*/ pntr=pop_ready(); // extrage primul descriptor task din lista ready tkrun=pntr->ntask; i=pntr->status; pntr->status=running; switch(i){ case iready:

Page 120: Sisteme de Timp Real

5-121

/*Lansare task prima data*/ _SP=pntr->top_stack;/*schimba virf stiva*/ asm sti; (*td_rom[pntr->ntask].start_task)();//lanseaza task case ready: /*Continua executia unui task suspendat anterior si gata de executie*/ i=pntr->ret_wait;/*pregateste cuvintul de retur la task*/ pntr->ret_wait=0; _SP=pntr->top_stack;/*restaureaza pointer virf stiva task*/ asm pop dx asm pop cx asm pop bx asm pop bp asm sti; return(i);/*da controlul task-ului*/ case preempted: /*task întrerupt din executie de o rutina de tratare întrerupere externa*/ if((s8087=pntr->save_8087)!=NULL){ if(_8087==0){ /*nu exista coprocesor */ for(j=0;j<300;j++) *(zFPU+j)=*(s8087+j); } else{ _ES=FP_SEG(s8087); _BX=FP_OFF(s8087); asm frstor byte ptr es:[bx] /*byte ptr s8087*/ asm fwait asm fldenv byte ptr es:[bx+210] asm fwait } } _SP=pntr->top_stack;/*restaureaza pointer virf stiva task*/ _SS=pntr->sseg_user; asm sti; resume();/*revine in task-ul întrerupt*/ }/*end switch(i)*/ }/*end for(;;)*/ }

5.2.6.5 Planificatorul

Planificarea este o acţiune declanşată de întreruperi hardware (ceasul de timp real, interfeţe de achiziţie date, interfeţe de comunicaţie etc.) sau de evenimente interne (apelul explicit al unei directive, întreruperi software, excepţii).

Planificatorul kernel-ului REX are două funcţii, legate de operaţiunile interne ale executivului: selecţia următorului task running şi organizarea listei de task-uri ready la suspendarea/deblocarea unui task.

Funcţia de Selecţie

Prin funcţia de Selecţie planificatorul extrage din lista ready noul task running. Pentru lista ready, selecţia se realizează cu funcţia:

/* p o p _ r e a d y - extrege primul task din lista ready si il trece in starea running; Intrari: - nu are Iesiri: - pointer la adresa primului descriptor de task din lista ready

Page 121: Sisteme de Timp Real

5-122

sau null dacă lista este vida. Este apelata numai din dspatch() */ extern struct dtd *first ready; //pointer catre primul dtd din lista ready struct dtd * pop_ready(void){ struct dtd *pntr; if((pntr=first_ready)==NULL) return(pntr); if((first_ready=first_ready->next_ready)!=NULL) first_ready->prev_ready=NULL;/*pune cap de lista urmatorul task*/ pntr->next_ready=NULL; return(pntr); }

Funcţia de organizare

Organizarea se referă la gestiunea task-urilor existente în listele ready, şi este apelată la suspendarea/ deblocarea acestora. Suspendarea se realizează cu funcţia push_delay iar deblocarea cu funcţia pop_delay, care apelează push_ready:

/*p u s h _ d e l a y - insereaza un task in lista delay,in funcţie de intervalul de asteptere solicitat. Intrari: - first_delay - pointer la primul element din lista delay - last_delay - pointer la ultimul element din lista delay - td_ram - tablou descriptorilor dinamici de task - n_int - numarul evenimentului asteptat - n_cuante - numarul de tick-uri de ceas care dau intervalul de asteptare(0<n_cuante<0xffff) sau 0 ori 0xffff pentru asteptere infinita. Iesiri: - descriptorul dinamic al task-ului este inserat in lista */ void push_delay(unsigned int n_int,unsigned int n_cuante){ struct dtd *temp_dtd,*tkrun_dtd; register unsigned int j,k; tkrun_dtd=&td_ram[tkrun];/*adresa descriptorului task-ului apelant*/ if((temp_dtd=first_delay)!=NULL){ /*Sint intrari in lista delay*/ j=0;/*initializare contor cuante*/ if((n_cuante!=0)&&(n_cuante!=0xffff)){ /*Asteapta un interval finit de timp*/ loop: if((k=temp_dtd->delay)!=0xffff) if(n_cuante>j+k) if(temp_dtd->next_delay!=NULL){ temp_dtd=temp_dtd->next_delay; j+=k; goto loop; } else{ j+=k; tkrun_dtd->delay=n_cuante-j; goto endl;/*insert in coada listei*/ } /*Inserare in interiorul listei*/ tkrun_dtd->delay=n_cuante-j; if(k!=0xffff) temp_dtd->delay-=(n_cuante-j);

Page 122: Sisteme de Timp Real

5-123

tkrun_dtd->next_delay=temp_dtd; tkrun_dtd->prev_delay=temp_dtd->prev_delay; if(temp_dtd->prev_delay!=NULL) (temp_dtd->prev_delay)->next_delay=tkrun_dtd; else first_delay=tkrun_dtd; temp_dtd->prev_delay=tkrun_dtd; }/*sfirsit tratare asteptere finita*/ else{ /*Asteptare infinita*/ tkrun_dtd->delay=0xffff; endl: /*Inserare in coada listei*/ tkrun_dtd->next_delay=NULL; tkrun_dtd->prev_delay=last_delay; last_delay->next_delay=tkrun_dtd; last_delay=tkrun_dtd; } }/*sfirsit tratare pentru cazul cind sint intrari in lista*/ else{ /*Prima intrare in lista*/ first_delay=(last_delay=tkrun_dtd); tkrun_dtd->prev_delay=(tkrun_dtd->next_delay=NULL); tkrun_dtd->delay=((n_cuante!=0)&&(n_cuante!=0xffff))?n_cuante:0xffff; } tkrun_dtd->status=4+n_int; tkrun=0xffff; }

/*p o p _ d e l a y - extrage task-uri din lista delay si le depune in lista ready. Intrari: - n_int-numar eveniment pentru care se solicita serviciul;poate fi it. hardware sau wtqio ( directiva qio),wtsdat (directiva sdat),wtrdat (directiva rdat) - ntask-numar de task pentru care se solicita serviciul Iesiri: - descriptorii de task extrasi din lista delay sint trecuti in lista ready.Daca n_int<wtqio,cimpurile ret_wait se incrememteaza Observatii: 1.daca n_int==tick,se extrag din lista delay toti descriptorii de task pentru care a expirat timpul de asteptare,indiferent de evenimentul asteptat. 2.daca ntask=0xffff,se extrag din lista delay toti descriptorii de task care asteapte evenimentul n_int. 3.daca ntask este in starea idle si n_int<wtqio(este o irq externa),task-ul este activat */ void pop_delay(unsigned int ntask,unsigned int n_int){ struct dtd *pdtd,*pdtd_next; register unsigned int i; if(n_int==tick){ /*Activare task-uri pentru care a expirat timpul de asteptare*/ asm pushf;/*salveaza stare sist. De întreruperi*/ asm cli; while((first_delay!=NULL)&&(first_delay->delay)==0){ i=first_delay->ntask;

Page 123: Sisteme de Timp Real

5-124

exit_delay(first_delay); push_ready(i); td_ram[i].delay=0xffff; td_ram[i].status=ready; } asm popf;/*reface stare iîntreruperilor */ } else if(ntask==0xffff){ /*Activarea tuturor tak-urilor care asteapta evenimentul n_int*/ asm pushf; asm cli; pdtd=first_delay; while(pdtd!=NULL){ pdtd_next=pdtd->next_delay; if(pdtd->status==n_int+4){ if(click_rex==NULL){ exit_delay(pdtd); push_ready(pdtd->ntask); pdtd->status=ready; pdtd->delay=0xffff; /*Pentru întreruperi externe,incrementeaza ret_wait*/ pdtd->ret_wait=(n_int<wtqio)?++pdtd->ret_wait:pdtd->ret_wait; } else if(pdtd->wait_lock==click_rex){ exit_delay(pdtd); push_ready(pdtd->ntask); pdtd->status=ready; pdtd->delay=0xffff; pdtd->wait_lock=NULL; } } pdtd=pdtd_next; } click_rex=NULL; asm popf; } else if((ntask<nbtsk)&&(n_int<=wtlock)){ if((pdtd=&td_ram[ntask])->status==n_int+4){ /*Activeaza task-ul ntask dacă acesta asteapta evenimentul*/ asm pushf; asm cli; exit_delay(pdtd); push_ready(ntask); pdtd->status=ready; pdtd->delay=0xffff; asm popf; } else if((pdtd->status==idle)&&(n_int<wtqio)) /*Task-ul aflat in starea idle este activat de o irq externa*/ activate_task(ntask); }

}

Page 124: Sisteme de Timp Real

6-125

6 ALGORITMI DE PLANIFICARE A TASK-URILOR ÎN SCTR CU CONSTRÂNGERI DE TIMP RIGIDE

6.1 Noţiuni introductive Problema planificării task-urilor în prezenţa constrângerilor de timp rigide poate fi formulată astfel:

Fiind dat un set de task-uri precum şi constrângerile de precedenţă, cerinţe de resurse şi constrângerile de timp asociate lor, trebuie găsită o soluţie pentru planificarea task-urilor pe un calculator dat.

Task-uri

În mod formal, task-urile sunt entităţi de programare care consumă resurse (timp procesor, memorie, date de intrare etc.) pentru a obţine unul sau mai multe rezultate (ieşiri).

Un task poate să fie periodic (ciclic), sporadic, sau aperiodic. Un task Ti este periodic dacă este lansat periodic, de exemplu la intervale de Pi secunde. Pi este numită perioada taskului Ti. Constrângerea de periodicitate necesită ca task-ul să se execute în mod obligatoriu şi o singură dată la fiecare perioadă; nu se cere ca timpul de execuţie al task-ului să aibă aceeaşi durată cu perioada. Un task Ti este sporadic dacă nu este periodic, dar poate fi invocat la intervale de timp neregulate. Task-urile sporadice sunt caracterizate printr-o limită superioară a frecvenţei la care ele pot fi invocate. Acest lucru este de obicei specificat prin cerinţă ca invocările succesive ale unui task sporadic Ti să fie separate în timp de cel puţin t(i) secunde. Taskurile sporadice sunt uneori trecute în categoria task-urilor aperiodice. Totuşi, task-urile aperiodice sunt acele taskuri care nu sunt periodice şi care nu au o limită superioară a frecvenţei de invocare.

Constrângeri de precedenţă

Între task-uri pot exista constrângeri de precedenţă, pentru a specifica dacă unele trebuie să fie executate înaintea altora. De exemplu dacă ieşirea taskului Ti trebuie folosită ca intrare de taskul Tj, atunci taskul Tj este constrâns să fie precedat de taskul Ti. Constrângerile de precedenţă ale unui set de task-uri pot fi reprezentate prin graful de precedenţă.

Un exemplu de graf de precedenţă este în figura 6-1 Săgeţile indică precedenţa între task-uri.

Se notează mulţimea taskurilor care preced taskul T prin ←(T), ←(T) indicând care taskuri trebuie să-şi termine execuţia înaintea declanşării task-ului T.

Page 125: Sisteme de Timp Real

6-126

Exemplul 6-1

În figura 6-1 avem

←(1)=∅

←(2)={1}

←(3)={1}

←(4)={1}

←(5)={1,2,3}

←(6)={1,3,4}

←(7)={1,3,4,6}

←(8)={1,3,4,6,7}

De asemenea se poate scrie i←j pentru a indica faptul că taskul Ti precede taskul Tj, acest lucru fiind echivalent cu j → i (Tj este precedat de Ti).

Operatorul de precedenţă este tranzitiv, adică dacă

i←j si j←k ⇒i←k

Prin urmare, pentru comoditatea reprezentării, se pot specifica numai strămoşii imediat anteriori în mulţimea precedentă; de exemplu, se poate scrie ←(5)={2,3} deoarece ←(2)={1}.

În unele cazuri, operatorii → şi ← sunt folosiţi pentru a nota care task are prioritate mai mare: i→j poate să însemne că Ti are prioritate mai mare decât Tj.

T3

Figura 6-1 Exemplu de graf de precedenţă.

T8

T7

T6

T4

T2

T5

T1

Page 126: Sisteme de Timp Real

6-127

Resurse

Fiecare task are cerinţe de resurse: procesor, memorie, acces la magistrale de I/E etc. Resursele pot fi exclusive, atunci când un singur task le poate deţine, sau neexclusive. În plus, o resursă poate fi exclusivă pentru anumite operaţii şi neexclusivă pentru altele. Exemplu: pentru operaţii neatomice de scriere/citire a unor obiecte de memorie, operaţia de citire este neexclusivă, pe când operaţia de scriere este exclusivă.

Constrângeri de timp

Timpul lansării unui task (în engl. release time) este momentul de timp începând de la care task-ul îşi poate începe execuţia - toată informaţia necesară pentru a începe execuţia task-ului este disponibilă. Pentru task-urile periodice, timpul lansării task-ului Ti este un deplasament faţă de momentul de start al perioadei Pi.

Timpul limită al unui task (în engl. deadline) este momentul de timp până la care task-ul trebuie să-şi termine execuţia. Constrângerile pentru timpul limită pot să fie rigide sau flexibile, depinzând de natura task-ului corespunzător.

Timpul limită relativ (în engl. relative deadline) al unui task este timpul limită absolut minus timpul lansării. Astfel, dacă task-ul Ti are timpul limita relativ di şi este lansat la momentul de timp t, trebuie să fie executat până la momentul de timp t + di.

Timpul limită absolut este timpul până la care execuţia task-ului trebuie să fie completă. În acest exemplu, timpul limită absolut al lui Ti este t + di.

Planificare

Planificarea task-urilor se spune că este realizabilă dacă toate task-urile sunt startate după timpul lansării şi se termină înainte de timpul limită. O mulţime de task-uri este A-realizabilă atunci când dacă i se aplică un algoritm de planificare A rezultă o planificare realizabilă. Cel mai mare volum de muncă pentru planificarea timp - real se adresează obţinerii de planificări realizabile.

Planificare poate fi pre-execuţie (off-line), sau dinamică (on-line). Planificarea off-line se face în avans faţă de execuţie, specificând când se execută task-urile periodice şi care sunt ferestrele de timp pentru task-urile sporadice/aperiodice în eventualitatea că ele sunt invocate. Planificarea on-line se face în timpul execuţiei, pe măsură ce task-urile ajung în sistem. Algoritmii folosiţi pentru planificarea on-line trebuie să fie suficient de rapizi pentru a permite respectarea constrângerilor de timp de către task-uri.

Priorităţile de execuţie relative ale task-urilor sunt în funcţie de natura lor şi de starea curentă a procesului controlat. Există astfel algoritmi care presupun că prioritatea task-urilor nu se schimbă în timpul execuţiei; aceştia sunt numiţi algoritmi de prioritate statică. În contrast, algoritmii de prioritate dinamică presupun că prioritatea se schimbă în timp. Cei mai cunoscuţi algoritmi de prioritate statică şi de prioritate dinamică sunt algoritmul de „ritm monoton” (în engl. Rate Monotonic algorithm - RM) şi respectiv algoritmul „cel mai apropiat timp limită primul planificat” (in engl. Earliest Deadline First - EDF).

Planificarea poate să fie preemptivă sau nepreemptivă. Planificare este preemptivă dacă task-ul care deţine controlul procesorului poate fi întrerupt pentru planificarea altor task-uri gata de execuţie care au prioritate mai mare (şi reluat mai târziu). Planificarea este nepreemptivă dacă task-ul care deţine controlul procesorului nu poate fi întrerupt, planificarea fiind restartată atunci când task-ul cedează controlul procesorului – se termină, este blocat pe o resursa etc.

În continuare vor fi prezentaţi şi analizaţi algoritmii RM şi EDF. Scopul acestor algoritmi este respectarea timpului limită pentru fiecare task. Pentru cei doi algoritmi se fac următoarele presupuneri:

1. Task-urile nu au secţiuni nepreemptive şi costul pentru preempţiune este neglijabil.

2. Numai cerinţele de procesare sunt semnificative; memoria, I/E şi alte cerinţe de resurse sunt neglijabile.

3. Toate task-urile sunt independente; nu sunt constrângeri de precedenţă.

Notaţii

Notaţiile utilizate în acest capitol vor fi:

Page 127: Sisteme de Timp Real

6-128

n Numărul de task-uri din mulţimea task-urilor.

ei Timpul de execuţie al task-ului Ti (cazul cel mai defavorabil).

Pi Perioada task-ului Ti, dacă el este periodic.

Ii a k-a perioadă a task-ului periodic Ti începe la timpul Ii + (k-1) Pi , unde Ii este denumit fazarea task- ului Ti.

di Timpul limită relativ al task-ului Ti (relativ la timpul lansării).

Di Timpul limită absolut al task-ului Ti.

ri Timpul lansării task-ului Ti.

hT(t) Suma timpilor de execuţie ale iteraţiilor task-urilor din mulţimea task-urilor T, care au timpul limită absolut nu mai târziu de t

6.2 Algoritmul de planificare RM Algoritmul RM prezentat în [LL73] este unul dintre cei mai studiaţi şi utilizaţi în practică. Este o schemă uniprocesor, preemptivă şi cu prioritate statică.

6.2.1 Prezentarea algoritmului

Faţă de presupunerile 1 – 3 de mai sus, se mai fac presupunerile:

1. Toate task-urile din setul de task-uri sunt periodice.

2. Timpul limită relativ al unui task este egal cu perioada sa.

Presupunerea 5 simplifică analiza algoritmului RM deoarece ea presupune că poate fi cel mult o iteraţie a oricărui task activ în orice moment.

Prioritatea task-ului este inversă în raport cu perioada sa; dacă perioada task-ului Ti este mai mică decât perioada Tj atunci Ti are prioritate mai mare decât Tj.

Task-urile cu prioritate mai mare pot preempta task-urile cu prioritate mai mică.

Exemplul 6-2 Fie trei task-uri A, B, C cu perioadele PA = 2, PB = 6, PC = 10. Timpii de execuţie sunt eA = 0.5, eB = 2.0, eC = 1.75, iar IA = 0, IB = 1, IC = 3. Deoarece PA < PB < PC, TA are cea mai mare prioritate. La fiecare relansare el preemptează task-ul aflat în execuţie. Similar, task-ul TC nu se poate executa atât timp cât TA sau TB sunt în execuţie.

Pentru a determina dacă un set de task-uri periodice independente este planificabil de algoritmul RM, în [LL73] se introduce şi se demonstrează următoarea teoremă:

Teorema 6-1 Un set de n task-uri periodice independente planificate prin algoritmul RM îşi respectă întotdeauna timpii limită pentru toţi timpii de lansare a task-urilor dacă

)12(... /1

2

2

1

1 −≤+++ n

n

n nP

e

P

e

P

e

Page 128: Sisteme de Timp Real

6-129

ei / Pi este utilizarea resursei de către task-ul Ti. Limita utilizării, n(21/n-1), converge rapid către ln2 = 0.69 când n este suficient de mare.

Limitarea dată mai sus este pesimistă, deoarece se presupune setul de task-uri în cazul cel mai defavorabil, puţin probabil de întâlnit în practică.

Condiţia din teoremă este suficientă dar nu şi necesară. Altfel spus, pot fi seturi de task-uri cu o utilizare mai mare decât n(21/n –1) şi care pot fi planificate de algoritmul RM. Timpul rămas poate fi utilizat pentru task-uri de fond de prioritate mai mică. Limita n(21/n –1) este prezentată în figura 6-3.

Se încearcă în continuare să se determine condiţia necesară şi suficientă pentru planificabilitatea RM ([LSD89]). În acest sens, pentru a determina dacă un set de task-uri cu utilizare mai mare decât limita din

teorema 1 poate să-şi respecte timpii limită, se poate utiliza un test de planificabilitate exactă bazat pe teorema zonei critice (reformulare a teoremei din [LL73]):

Teorema 6-2 Pentru un set de task-uri periodice independente, dacă un task Ti îşi respectă primul său timp limită di ≤ Ti, când toate task-urile de prioritate mai mare sunt startate la acelaşi timp, atunci Ti îşi poate respecta toţi timpii limita viitori, pentru orice timpi de lansare.

Este important de notat că teorema 2 se poate aplica la orice tip de asignare a priorităţilor, nu numai pentru asignarea asociată cu algoritmul RM.

Figura 6-3 Limita de utilizare pentru algoritmul RM.

0 2 4 6 8 10 12 14 16

Numar de task-uri

1.0

0.9

0.8

0.7

0.6

Lim

ita

0 1 2 3 4 5 6 7 8

Timp

A1 A4 B1 A2 C1 A3 B1 C1 C2

Figura 6-2 Exemplu de algoritm RM; Xj denota a j-a iteraţie a task-ului TX.

Page 129: Sisteme de Timp Real

6-130

Pentru demonstrarea teoremei 2, reluăm exemplul 6-2 pentru trei task-uri. Se presupune că fazările task-urilor sunt toate 0 (prima iteraţie a fiecărui task este la timpul 0). Se consideră pentru început prima iteraţie. T1 care este cel mai prioritar se startează primul şi nu poate fi întârziat de nici un alt task din sistem.

Deoarece la lansarea task-ului T1 procesorul întrerupe orice altă activitate, singura condiţie pentru planificarea fezabilă a T1 este e1 ≤ P1. Este clar că aceasta este o condiţie necesară şi suficientă.

Task-ul T2 va fi executat cu succes dacă pentru prima sa iteraţie există timp suficient pentru execuţie în intervalul [0,P2]. Fie t momentul la care T2 îşi termină execuţia. Numărul total de iteraţii ale task-ului T1 care a fost reluat în intervalul [0,t] este t/P1 . Pentru ca T2 să se termine la t fiecare dintre iteraţiile lui T1 reluată în intervalul [0,t] trebuie să fie completată şi în plus trebuie să fie un timp e2 suficient pentru execuţia T2. Altfel spus trebuie să fie satisfăcută condiţia:

211

eeP

tt +

=

Prin urmare, este suficient să se găsească un timp t ∈ [0,P2] care să satisfacă condiţia de mai sus.

Întrebarea practică este cum se poate verifica că acest t există. Deoarece fiecare interval are un număr infinit de puncte, nu se poate verifica condiţia pentru fiecare posibil t. Soluţia poate fi găsită dacă se ţine cont de faptul că t / P1 reprezintă de câte ori task-ul T1 a sosit în intervalul [0,t] (la multiplii de P1 cu salturi de e1). Din acest motiv, t/ P1e1 reprezintă necesarul de timp de execuţie pentru T1 în intervalul [0,t]. Prin urmare, dacă se găseşte un întreg k astfel încât kP1 ≥ ke1+e2 şi kP1 ≤ P2, atunci s-a găsit condiţia necesară şi suficientă pentru ca T2 să fie planificabil cu algoritmul RM. Astfel, este nevoie să se verifice numai dacă t ≥ t / P1e1 + e2 pentru valori ale lui t multiplu de P1, astfel ca t ≤ P2. Deoarece există un număr finit de multipli pentru P1 care sunt mai mici sau egali cu P2, verificarea este finită.

În final se consideră task-ul T3. Din nou este suficient de arătat că prima iteraţie se termină înainte de P3. Dacă T3 îşi termină execuţia la t, cu aceleaşi argumente ca pentru T2 avem:

32

2

1

1

eeP

te

P

tt +

+

=

T3 este planificabil dacă există un timp t ∈ [0,P3] care să satisfacă condiţia de mai sus. Dar partea dreaptă a ecuaţiei de mai sus are salturi numai la multiplii de P1 şi P2. Este aşadar suficient să se verifice dacă inegalitatea:

32

2

1

1

eeP

te

P

tt +

+

este satisfacută pentru t multiplu de P1 şi/sau P2, astfel ca t ≤ P3.

Se poate prezenta acum condiţia necesară şi suficientă pentru planificabilitatea RM. Pentru aceasta, se fac următoarele notaţii suplimentare:

∑=

=

i

j j

jiP

tetW

1

)(

t

tWtL i

i

)()( =

)(min0

tLLi

Pti

i<<=

Page 130: Sisteme de Timp Real

6-131

}max{iLL =

Wi(t) este „cantitatea” totală de procesare efectuată de task-urile T1 , T2 ….. Ti, iniţiate în intervalul [0,t]. Dacă toate task-urile sunt lansate la momentul 0, atunci task-ul Ti va fi completat sub algoritmul RM la momentul t’, astfel încât Wi(t’) = t’ (dacă acest t’ există).

Pentru condiţia necesară şi suficientă pentru planificabilitate, se poate enunţa teorema următoare:

Teorema 6-3 Dat fiind un set de n task-uri periodice (cu P1 ≤ P2 ≤ …. ≤ Pn), task-ul Ti poate fi fezabil planificat utilizând algoritmul RM dacă şi numai dacă Li ≤ 1.

Demonstraţie: Dacă Li ≤ 1, atunci există t ∈ [0,Pi] a.i. Wi(t)/t ≤ 1, altfel spus Wi(t) ≤ t. Deoarece Ii = 0 pentru orice i = 1,...,n Wi(t) ≤ t implică faptul că la timpul t cerinţele de calcul ale task-urilor T1 până la Ti au fost respectate. Deoarece t ≤ Pi task-ul Ti îşi respectă timpul limită. Invers, dacă Wi(t) > t pentru orice t ∈ [0,Pi], atunci nu va fi suficient timp de execuţie pentru task-ul Ti înainte de timpul limită, Pi.

Metoda de verificare practică a planificabilităţii

La întrebarea practică referitoare la modul cum se verifică dacă Wi(t) ≤ t, se poate răspunde uşor prin examinarea ecuaţiei

∑=

=

i

j j

jiP

tetW

1

)(

Se vede că Wi(t) este constant, exceptând un număr finit de puncte când task-urile sunt relansate. Va fi deci necesar numai să se calculeze Wi(t) la momentele:

τi = { lPjj=1,…,i; l=1,…, Pi/Pj }

Atunci, sunt două condiţii de planificare RM:

RM1. Dacă mint∈τi Wi(t) ≤ t, task-ul Ti este RM-planificabil

RM2. Dacă maxi∈{1,.,n} {mint∈τi Wi (t)/t} ≤ 1 pentru i∈[1,…,n], t ∈ τi atunci în totalitate, setul T este RM planificabil.

Exemplul 6-3

Se consideră un set de patru task-uri unde:

i ei Pi

1 20 100

2 30 150

3 80 210

4 100 400

Atunci:

τ1 = [100]

τ2 = [100, 150]

τ3 = [100, 150, 200, 210]

τ4 = [100, 150, 200, 210, 300, 400]

Să calculăm planificabilitatea RM pentru fiecare task. Figura 6-4 conţine diagrame ale Wi(t) pentru i = 1, 2, 3, 4. Task-ul Ti este RM planificabil dacă oricare parte a diagramei Wi(t) se plasează sub linia Wi(t) = t.

Page 131: Sisteme de Timp Real

6-132

În termeni algebrici se poate scrie:

• Task-ul T1 este RM planificabil dacă e1 ≤ 100

• Task-ul T2 este RM planificabil dacă

e1 + e2 ≤ 100 sau

2e1 + e2 ≤ 150

• Task-ul T3 este RM planificabil dacă

e1 + e2 + e3 ≤ 100 sau

2e1 + e2 + e3 ≤ 150 sau

2e1 + 2e2 + e3 ≤ 200 sau

3e1 + 2e2 + e3 ≤ 210

• Task-ul T4 este RM planificabil dacă

e1 + e2 + e3 + e4 ≤ 100 sau

2e1 + e2 + e3 + e4 ≤ 150 sau

2e1 + 2e2 + e3 + e4 ≤ 200 sau

3e1 + 2e2 + e3 + e4 ≤ 210 sau

3e1 + 2e2 + 2e3 + e4 ≤ 300 sau

4e1 + 3e2 + 2e3 + e4 ≤ 400

Page 132: Sisteme de Timp Real

6-133

Din Figura 6-4 şi ecuaţiile de mai sus, se observă că task-urile T1 , T2 şi T3 sunt RM planificabile iar task-ul T4

nu este.

Un algoritm pentru testul timpului de completare a task-ului Ti (timpul minim t pentru care Wi(t) = t) este următorul:

..)(

;)(

;...

;)(

;

1

01

10

kki

kik

i

i

j j

ttWcandStop

tWt

tWt

etAtribuie

=←

←←

=∑

100

Timp

W1

100

50

50 100 150

Timp

W2

70

50

50 100 150 200

Timp

W3

210

190

170

150

130 100 200 300 400

Timp

W4

430

380

330

280

230

Figura 6-4 Wi (t) pentru Exemplul 6-3: linia punctata indica Wi(t) = t

Page 133: Sisteme de Timp Real

6-134

6.2.2 Extinderea algoritmului de planificare RM pentru includerea task-urilor sporadice

Algoritmul RM se adresează sistemelor în care toate task-urile sunt periodice. În realitate se întâlnesc rar astfel de sisteme timp - real, cel mai des fiind întâlnite cele care au atât task-uri periodice cât şi task-uri sporadice sau aperiodice. Prin urmare, analiza trebuie extinsă pentru determinarea influenţei execuţiei acestora asupra încărcării sistemului şi respectării limitelor de timp.

Task-urile sporadice sunt lansate neregulat, ca răspuns la evenimente care apar independent de execuţie. Deoarece task-urile sporadice nu au asociate perioade, trebuie să se determine rata maximă la care ele pot fi lansate. Astfel spus, trebuie să existe un interval de timp minim între lansările succesive ale task-urilor sporadice. În caz contrar, nu există o limită maximă pentru timpul de încărcare a sistemului de către task-urile sporadice şi va fi imposibil de garantat că se respectă timpii limită.

O modalitate de includere a task-urilor sporadice este de a le considera pur şi simplu ca task-uri periodice, cu o perioadă egală cu intervalul de timp minim posibil între două lansări succesive. Pentru aceasta, se pot imagina mai multe metode.

Metoda 1

O metodă simplă de a încorpora în sistem task-uri sporadice este aceea de a defini un task periodic fictiv, de cea mai mare prioritate, la care să se găsească o perioadă de execuţie fictivă. În intervalul de timp planificat pentru execuţia acestui task, procesorul este disponibil pentru a executa orice task sporadic gata de execuţie. În rest, timpul va fi afectat task-urilor periodice. Task-urile sporadice nu vor fi lansate în afara intervalului planificat.

Exemplul 6-4:

Se prezintă în figura 6-5 un task fictiv cu cea mai mare prioritate, cu perioada de 10 şi timpul de execuţie de 2.5. Acest task ocupă procesorul pe durata timpului marcat de porţiunile haşurate, care este destinat să execute orice task-uri sporadice gata de execuţie – la fiecare 10 unităţi de timp procesorul poate executa

2.5 unităţi de task-uri sporadice. Dacă pe durata acestui timp, nu există task-uri sporadice gata de execuţie, procesorul nu execută altceva. Procesorul nu poate executa task-uri sporadice în afara intervalelor marcate.

Această metodă este echivalentă cu tratarea evenimentelor externe prin testare şi prelucrare periodică, fiind posibile întârzieri în tratarea evenimentelor.

Metoda 2

Planificarea task-urilor sporadice se poate realiza şi prin algoritmul „server suspendat” (în engl. Deferred Server - DS). Prin algoritmul DS, prezentat în [LSS87], ori de câte ori procesorul este planificat pentru task-uri sporadice şi nu găseşte astfel de task-uri gata de execuţie, planificatorul lansează în execuţie task-uri periodice, în ordinea priorităţii. Totuşi, dacă un task sporadic trece în starea gata de execuţie, el preemptează task-ul periodic curent şi poate ocupa un timp total egal cu timpul alocat pentru task-urile sporadice.

Exemplul 6-5:

0 5 10 15 20 25 30 35 40 45

Figura 6-5 Încorporarea task-urilor sporadice: metoda 1

Page 134: Sisteme de Timp Real

6-135

În figura 6-6, ocuparea procesorului cu task-urile sporadice este indicată de dreptunghiurile haşurate.

Pentru task-urile sporadice sunt alocate unităţi de timp de 2.5 pentru fiecare perioadă de 10 unităţi. Un task sporadic necesită i5 unităţi începând cu momentul 5 şi preia procesorul. La momentul 7.5 planificatorul găseşte că au expirat unităţile de timp alocate pe perioada curentă şi astfel task-ul sporadic este preemptat de un alt task. La momentul 10 începe perioada următoare în care task-urile sporadice au alocate 2.5 unităţi, deci se continuă execuţia task-ului sporadic suspendat pentru restul de 2.5 unităţi. Următorul task sporadic, cu un timp total de execuţie de 7.5 unităţi soseşte la momentul 27.5. El primeşte 2.5 unităţi din perioada curentă [20,30] plus 2.5 unităţi din perioada următoare [30,40]. Prin urmare, el ocupă procesorul în intervalul [27.5, 32.5]. La 32.5 cota sa de timp pe procesor (pentru perioada [30,40]) este completată şi eliberează procesorul. La momentul 40 începe o nouă perioadă de task sporadic şi task-ul sporadic primeşte ultimele 2.5 unităţi, fiind complet la momentul 42.5.

Criteriul de planificabilitate pentru algoritmul DS se poate obţine din algoritmul de bază RM. Atunci când timpul limită relativ al tuturor task-urilor este egal cu perioada lor şi Us este utilizarea procesorului alocată pentru task-urile sporadice, se poate arăta că este posibilă planificarea task-urilor periodice dacă utilizarea totală U (incluzând şi contribuţia task-urilor sporadice) satisface următoarea limită:

≤−≥

≤5.01

5.0

ss

ss

UdacaU

UdacaUU

Când Us ≥ 0.5 este posibil să existe seturi de task-uri cu utilizare scăzută, care totuşi nu pot fi fezabil planificate.

Exemplul 6-6:

Presupunem că Ps = 6 este perioada unui server sporadic şi P1 = 6 este perioada unui task periodic T1 . Fie es = 3 timpul de execuţie rezervat pentru un task sporadic, ceea ce duce la Us =3/6 = 0.5. Atunci dacă task-urile sporadice ocupă câte 3 unităţi de timp la sfârşitul unei perioade şi respectiv la începutul următoarei perioade, o perioadă totală P 1 va trece fără a fi timp pentru T1.

Ecuaţia de mai sus este o condiţie necesară dar nu şi suficientă pentru planificabilitate. Este uşor de construit un set de task-uri periodice fezabile, chiar şi dacă Us ≥ 0.5.

6.2.3 Algoritmul de planificare RM în prezenţa supraîncărcării ocazionale

Un inconvenient al algoritmului RM este că priorităţile task-urilor sunt definite de perioadele lor. Practica dovedeşte că nu întotdeauna toate task-urile periodice sunt critice. În astfel de cazuri, pentru a garanta execuţia completă a tuturor task-urilor critice în prezenţa supraîncărcării ocazionale, este necesară modificarea priorităţii unor task-uri, modificând corespunzător perioadele.

Motivarea acestei afirmaţii se face în exemplul de mai jos.

Exemplul 6-7:

0 5 10 15 20 25 30 35 40 45

Figura 6-6 Încorporarea task-urilor sporadice: metoda 2 (server suspendat)

Page 135: Sisteme de Timp Real

6-136

Se consideră task-urile Ti , i = 1,..,4, cu perioadele Pi, timpii de execuţie în cel mai defavorabil caz ei şi timpii medii de execuţie ai . Se consideră un set de 4 task-uri cu următoarele caracteristici:

i ei ai Pi

1 20 10 100

2 30 25 150

3 80 40 210

4 100 20 400

Se presupune că task-urile T1, T2 si T4 sunt critice şi că T3 nu este critic. Este uşor de verificat că dacă se startează algoritmul RM pe acest set de task-uri, nu se poate garanta planificabilitatea tuturor celor patru task-uri dacă se consideră pentru fiecare cel mai defavorabil caz pentru timpul de execuţie. Totuşi, pentru timpul mediu de execuţie ele pot fi toate planificabile RM. Problema este cum se pot aranja de fapt task-urile astfel încât task-urile critice să respecte timpii limită sub algoritmul RM chiar şi în cel mai defavorabil caz, în timp ce task-ul T3 să-şi respecte limita de timp de cât mai multe ori.

Soluţia este de a creşte prioritatea task-ului T4 prin schimbarea perioadei. Se va înlocui task-ul T4 cu un task T’4 cu următorii parametri: P’4 = P4 / 2, e’4 = e4 / 2, a’4 = a4 / 2. Este uşor de verificat că task-urile T1, T2 şi T’4 sunt RM planificabile chiar şi în cazul cel mai defavorabil. T3 are acum o prioritate mai mică decât T’4 . În momentul în care algoritmul îl planifică pe T’4 se execută cod pentru T4. Din cauza modului în care s-a obţinut e’4, dacă {T1, T2, T’4} este o mulţime planificabilă RM, atunci va fi timp suficient pentru a completa execuţia lui T4.

O alternativă la reducerea perioadei task-ului T4 este să se încerce mărirea perioadei lui T3. Aceasta poate fi făcută numai dacă timpul limită relativ al lui T3 poate fi mai mare decât perioada originală. În acest caz, putem înlocui T3 prin două task-uri T’3 şi T’’3 fiecare cu perioada 420 (210 x 2) cu timpi de execuţie în cazul cel mai defavorabil e’3 = e’’3 = 80 şi timpii de execuţie medii a’3 = a’’3 = 40. Planificatorul trebuie să fazeze T’3 şi T’’3 astfel încât perioadele de relansare P3 = 230 unităţi să nu se suprapună. Dacă setul de task-uri rezultat (T1, T2, T’3, T’’3, T4) este RM planificabil, problema este rezolvată.

Se prezintă în continuare un algoritm de modificare a priorităţii prin modificarea perioadei.

În general, dacă se măreşte perioada cu un factor k, se va înlocui task-ul original prin k task-uri, fazate în mod corespunzător. Dacă se reduce perioada cu factorul k, task-ul original se înlocuieşte printr-un task al cărui timp de execuţie este de asemenea redus cu factorul k.

Procedura de transformare a perioadei conduce în final la două mulţimi de task-uri, C şi NC, cu următoarele proprietăţi:

1. C conţine toate task-urile critice şi posibil unele task-uri necritice iar NC conţine numai task-urile necritice.

2. Pc,max ≤ Pn,min, unde Pc,max şi Pn,min sunt perioadele maxime şi minime ale task-urilor din C şi respectiv NC.

3. C este RM planificabilă în cazul timpilor de execuţie cei mai defavorabili pentru task-uri.

Algoritmul de modificare a priorităţii este urmatorul:

Se iniţializează mulţimea C cu task-urile critice şi mulţimea NC cu task-urile necritice. Dacă Pc,max ≤ Pn,min atunci problema este rezolvată. În caz contrar, se trec în mulţimea C acele task-uri necritice a căror perioadă este mai mică sau egală cu Pc,max. Dacă noua mulţime C este planificabilă RM pentru timpii de execuţie cei mai defavorabili, problema este rezolvată. Dacă nu, se modifică perioada task-urilor necritice în C atât cât este posibil, până când C devine planificabilă RM. Dacă acest lucru nu este posibil, se micşorează perioadele task-urilor critice de prioritate mare şi se trec înapoi în NC toate task-urile necritice din C a căror perioadă este mai

Page 136: Sisteme de Timp Real

6-137

mare decât cea mai mare perioadă a oricărui task critic din C. Se continuă acest proces până când sunt asigurate proprietăţile de mai sus.

6.2.4 Generalizarea algoritmului de planificare RM

Notă:

Acest paragraf (6.2.4) nu este inclus în programa pentru examen.

S-a presupus până acum că timpul limită relativ al unui task este egal cu perioada sa. În situaţia în care nu se face această presupunere, algoritmul RM nu mai este un algoritm optim de planificare cu prioritate statică. Pentru a determina efectele relaxării condiţiei iniţiale, di = Pi, în [Leh90] se consideră celelalte două cazuri: di ≤ Pi şi di > Pi .

Cazul 1: di ≤ Pi

Este uşor de observat pentru acest caz condiţia necesară şi suficientă pentru ca un task Ti să fie planificabil RM:

Wi (t) = t pentru t ∈ [0,d i]

Cazul 2: di > Pi

Se consideră din nou un set de task-uri periodice în cazul timpului de execuţie cel mai defavorabil şi fazate la momentul 0. Când di ≤ Pi, la un moment dat poate exista numai o instanţă a aceluiaşi task în execuţie. De aceea, pentru a verifica planificabilitatea, este suficient să fie fazate toate task-urile din mulţime la momentul zero şi să se verifice că prima instanţă a fiecărui task îşi respectă limita de timp. Aceasta este de fapt originea condiţiilor de planificabilitate RM1 si RM2. Pentru cazul di > Pi, sunt posibile totuşi iniţieri ale mai multor instanţe ale aceluiaşi task, în cadrul aceleiaşi perioade. Apare astfel situaţia în care trebuie verificate un număr de iniţializări ≥1 pentru a obţine timpul de răspuns în cel mai defavorabil caz. Pentru a clarifica aceasta se consideră exemplul următor:

Exemplul 6-8:

Se consideră cazul când n=2, e1 = 28, e2 = 71, P1 = 80 şi P2 = 110. Se setează toate limitele de timp la infinit. Tabela de mai jos arată timpii de răspuns ai task-ului T2 .

Iniţializare Completare Timp răspuns

0 127 127

110 226 116

220 353 133

330 452 122

440 551 111

550 678 128

660 777 117

770 876 106

După cum se poate vedea timpul de răspuns cel mai defavorabil nu este pentru prima iniţiere ci pentru a treia. Aceasta indică faptul că nu este suficient să se ia în considerare numai prima iniţializare a tuturor task-urilor.

Se observă că pentru di > Pi (posibilitatea existenţei mai multor instanţe ale aceluiaşi task în aceeaşi perioadă) trebuie determinată o altă condiţie de planificabilitate. Se presupune şi de această dată că Ti are o prioritate mai mare decât Tj dacă şi numai dacă Pi < Pj. Numerotarea task-urilor se face în ordinea crescătoare a perioadelor (ordinea descrescătoare a priorităţilor).

Page 137: Sisteme de Timp Real

6-138

Fie din nou Si = [T1, …,Ti]. Se defineşte perioada ocupată de nivel i intervalul [a, b] astfel încât:

• b > a;

• numai task-urile din Si sunt lansate în [a, b];

• procesorul este complet ocupat [a, b]

• şi

• procesorul nu execută nici un task din Si imediat înainte de a sau imediat după b.

Exemplul 6-9:

Se defineşte Si = [T1, …,Ti ] pentru I=1,…,5. În figura de mai jos se prezintă cele cinci niveluri de perioadă ocupată:

Teorema 6-4 Task-ul Ti are timpul de răspuns cel mai mare pe durata unei perioade ocupate de nivel i, iniţiată cu fazele l1 = …= li = 0.

Demonstraţie: Demonstraţia este imediată pentru task-ul de cea mai mare prioritate, task-ul T1. Prin urmare, se consideră task-urile Ti pentru i > 1 şi, fără a pierde generalitatea, se presupune că l1 = 0. Se presupune [0, b) este o perioadă ocupată de nivel i şi Ii > 0. Din definiţia perioadei ocupate de nivel i, numai task-urile de prioritate mai mare decât Ti se execută în intervalul [0, li). Descrescând li timpii la care se termină fiecare din aceste task-uri cu prioritate mai mare nu se vor modifica; tot ce se poate întâmpla este să crească timpul de răspuns al lui Ti. Similar, dacă lk>0 pentru k < i, reducând lk de asemenea vor creşte sau vor rămâne neschimbate cerinţele de procesare ale lui Tk pe intervalul [0, b). Altfel spus, reducând lk va creşte sau va rămâne neschimbat timpul de terminare al Tk.

Astfel, pentru a determina planificabilitatea RM, se poate considera numai cazul în care toate fazările sunt zero. Totuşi, pentru a asigura că task-ul Ti îşi respectă limita de timp, trebuie verificat dacă toate iniţializările sale într-o perioadă ocupată de nivel i începută la momentul 0 îşi respectă limitele de timp.

Fie t(k, i) timpul când a k-a iniţializare (în interiorul unei perioade ocupate) a task-ului Ti îşi completează execuţia. Se poate observa că t(k, i) este timpul t minim pentru care se verifică următoare expresie:

T3 T1

T2 T1 T2 T3 T4 T5

Nivel 1

Nivel 2

Nivel 3

Nivel 4

Nivel 5

Figura 6-7 Perioade ocupate

Page 138: Sisteme de Timp Real

6-139

i

i

j j

keP

tejt +

= ∑

=

1

1

Această a k-a iniţializare va respecta limita de timp dacă

t(k, i) < (k - 1)Pi + di

Este suficient a se verifica respectarea limitelor de timp pentru iteraţiile de la 1 la li, unde l i = min{ m | mPi > t(m,i)}.

Task-ul Ti este astfel RM planificabil dacă şi numai dacă:

t(k, i) < (k - 1) Pi + di, pentru oricare k ≤ li

iar setul de task-uri este în totalitate planificabil RM dacă toate task-urile din el sunt planificabile RM.

În literatura de specialitate sunt cunoscute puţine rezultate care să afirme planificabilitatea RM generalizată. Este de reţinut totuşi următoarea teoremă ([KS97]):

Teorema 6-5 Orice set de n task-uri periodice care utilizează complet procesorul sub RM trebuie să aibă o utilizare a procesorului de cel puţin:

( )

≤≤−+≤≤

=

+−

=−

=−

15.01)2(log

5.00

...3,211

)1(

1)12(

1

1

1

γγγγγ

γγ

γγ

γ

daca

daca

dacan

dacan

U

e

n

n

6.2.5 Considerarea întreruperilor

Latenţa întreruperii este intervalul de timp dintre apariţia unei întreruperi hardware şi execuţia primei instrucţiuni din rutina de tratare a acesteia. Pentru anumite porţiuni critice de cod se impune ca întreruperile să fie temporar dezactivate. Timpul maxim de dezactivare defineşte cel mai nefavorabil caz de latenţă a întreruperii.

În Figura 6-8 se arată timpii implicaţi în calculul duratei unei prelucrări a întreruperii care se termină simplu (eveniment nesemnificativ) ([QNX93]):

Page 139: Sisteme de Timp Real

6-140

Figura 6-8: Tratarea întreruperii care se termină simplu el – latenţa întreruperii

et – timpul de tratare a întreruperii

eiret – timpul de terminare a întreruperii

Rutina de tratare se poate termina simplu sau poate declanşa planificarea, pentru a activa task-uri care de regulă sunt asociate cu întreruperea.

el in diagrama de mai sus reprezintă latenţa minimă dintre momentul apariţiei întreruperii şi declanşarea tratării, dată pentru cazul în care întreruperile sunt deja activate în momentul apariţiei întreruperii. Cel mai nefavorabil caz de latenţă a întreruperii este acest timp plus timpul maxim cât planificatorul sau alt task ţine întreruperile dezactivate.

În unele cazuri rutina de tratare întrerupere de nivel scăzut trebuie să planifice execuţia unui task care efectuează prelucrări suplimentare. Pentru aceasta, rutina de tratare se termină declanşând planificarea. Aceasta introduce a doua formă de latenţă – latenţa de planificare - care trebuie luată în calcul - Figura 6-9.

Latenţa de planificare reprezintă timpul dintre terminarea unei rutine de tratare de întrerupere şi execuţia primei instrucţiuni din task-ul care continua execuţia. Aceasta presupune de obicei timpul necesar pentru a salva contextul procesului care se execută curent şi refacerea contextului procesului cel mai prioritar.

Figura 6-9: Timpii pentru o rutină care se termină cu declanşare planificare el – latenţa întreruperii

et – timpul de tratare a întreruperii

ep – latenţa de planificare

Este foarte important faptul că cele mai multe întreruperi se termină simplu, fără declanşare planificare. De cele mai multe ori, prelucrarea evenimentului se face în interiorul rutinei de tratare a întreruperii, declanşarea planificării făcându-se numai când apar evenimente care trebuie anunţate în exterior. De exemplu, umplerea unui tampon cu

el

et

eiret

Apariţie Tratare Terminare Revenire

el

et

ep

Apariţie IRQ

Tratare IRQ

Terminare IRQ şi planificare

Execuţie task selectat

Page 140: Sisteme de Timp Real

6-141

1000 valori achiziţionate din proces este un eveniment semnificativ, care declanşează planificarea, raportat la 999 evenimente nesemnificative anterioare.

Deoarece arhitecturile microcalculatoarelor permit ca întreruperile hardware să aibă priorităţi prestabilite, întreruperile de prioritate mai mare pot fi programate să aibă drept de preempţiune asupra întreruperilor de prioritate mai mică. Cazurile prezentate anterior arată cea mai simplă situaţie - când fiecare întrerupere apare singură. Determinarea performanţelor de timp se poate face în situaţiile prezentate mai sus numai pentru întreruperea cu prioritate maximă. Cel mai defavorabil caz referitor la performanţele de timp se întâlneşte însă la întreruperile cu prioritatea cea mai mică, deoarece la calculul timpului lor de execuţie trebuie luaţi în considerare toţi timpii asociaţi întreruperilor de prioritate mai mare care apar în timpul execuţiei lor (Figura 6-10).

Figura 6-10: Întreruperi suprapuse: A în execuţie. IRQx lansează rutina de tratare asociata Intx, care este

preemptată de IRQy şi rutina asociată Inty . Inty declanşează planificarea task-ului B iar Intx planificarea task-ului C

Pentru a lua în considerare întreruperile, ele sunt modelate ca task-uri de prioritate mai mare decât task-ul curent analizat pentru planificabilitate, considerând perioada fiecăreia ca timpul minim posibil între două întreruperi succesive. Astfel, timpul de completare al unui task i în cel mai defavorabil caz, în prezenta întreruperilor este

∑∑∈∀

=

+

+=

reruperik k

ik

i

j j

ijii P

te

P

teet

int

1

1

ek este timpul de execuţie al întreruperii k, în cazul cel mai defavorabil, calculat pe baza el, et, ep asociate fiecărei întreruperi iar Pk intervalul minim dintre două declanşări succesive ale întreruperii k.

6.2.6 Considerarea sincronizării task-urilor

S-a presupus în secţiunile anterioare toate task-urile planificate sunt independente şi pot fi preemptate la orice punct al execuţiei lor. Totuşi, task-urile interacţionează. Primitivele uzuale de sincronizare includ semafoare, monitoare, rendezvous ADA etc, care protejează accesul la secţiunile critice din program. Deşi aceste metode sunt necesare pentru a proteja consistenţa datelor partajate sau pentru a garanta utilizarea corectă a resurselor critice, pot afecta capacitatea sistemului de a respecta cerinţele de timp.

Se presupune că secţiunile critice sunt imbricate corect. Aceasta înseamnă că dacă există secţiunile S1, S2 pe un singur procesor, următoarea secvenţă este permisă:

Lock S1, Lock S2 ... Unlock S2 , Unlock S1

în timp ce următoarea secvenţă nu este permisă:

Lock S1, Lock S2, Unlock S1, Unlock S2.

Pe un sistem uniprocesor, un task o dată startat continuă până când:

A

C

B

Intx

Inty

IRQx Abur

Page 141: Sisteme de Timp Real

6-142

• se termină;

• se autosuspendă pentru aşteptarea unui eveniment (operaţie I/E, expirare interval de timp etc.);

• este preemptat de un alt task cu prioritate mai mare;

• este blocat de un task cu prioritate mai mică care a intrat într-o secţiune critică de care task-ul are nevoie.

Este deci posibil ca un task de prioritate mică TL să blocheze un task de prioritate mai mare TH. Aceasta se poate întâmpla când TH are nevoie să acceseze o secţiune critică ce a fost accesată anterior de către TL şi nu a fost eliberată. Deşi TH are o prioritate mai mare decât TL, pentru a asigura o funcţionare corectă, TL trebuie lăsat să-şi termine secţiunea critică înainte ca TH să o poată accesa. Blocarea unui task cu o prioritate mai mare de către un task cu o prioritate mai mică are ca efect colateral inversarea priorităţii. Acest fapt este ilustrat în exemplul 6-9:

Exemplul 6-9:

Se consideră task-urile T1, T2, T3 în ordine descrescătoare a priorităţii, care îşi partajează un procesor. Există o secţiune critică S pe care atât T1, cât şi T3 o folosesc (figura 6-11). T3 începe execuţia la

momentul to. La momentul t1 el intră în secţiunea critică S. T1 este relansat la momentul t2 şi îl preemptează pe T3 . El rulează până la momentul t3 când încearcă să intre în secţiunea critică S care este încă blocată prin suspendarea task-ului T3. Astfel T1 este suspendat şi T3 îşi reia execuţia. La momentul t4, task-ul T2 este relansat. Acesta are o prioritate mai mare decât T3 şi îl preemptează. T2 nu are nevoie de S şi rulează până la terminare. După ce T2 îşi completează execuţia la t5, T3 se reia şi iese din secţiunea critică S la t6 . T1 poate acum să-l preempteze pe T3 şi intră în secţiunea critică S.

De notat că deşi T2 are o prioritate mai mică decât T1, el este în măsură să-l întârzie pe T1 indirect (prin preemptarea lui T3 care l-a blocat pe T1). Acest fenomen este cunoscut ca inversarea de prioritate.

O soluţie pentru evitarea inversării de prioritate este utilizarea unui protocol de moştenire a priorităţii. Protocolul se bazează pe convenţia următoare: dacă un task de prioritate mai mare TH este blocat de un task de o prioritate mai mică TL (deoarece TL execută o secţiune critică de care are nevoie TH) task-ul de prioritate mai mică moşteneşte temporar prioritatea lui TH. Când resursa critică este deblocată, TL îşi reia prioritatea iniţială. Protocolul de moştenire a priorităţii este descris mai jos:

1. Task-ul de prioritate cea mai mare T are procesorul alocat. Ori de câte ori T încearcă să intre într-o secţiune critică blocată de către un alt task, eliberează procesorul.

2. Dacă un task T1 este blocat de T2 (datorită disputei pentru secţiunea critică) şi T1 ← T2, task-ul T2 moşteneşte prioritatea lui T1 atâta vreme cât îl blochează pe acesta. Când T2 iese din secţiunea critică, el

S S S

S

t0 t1 t2 t3 t4 t5 t6 t7 t8

Figura 6-11 Inversarea priorităţii

T1

T2

T3

Page 142: Sisteme de Timp Real

6-143

îşi reia prioritatea pe care a avut-o când a intrat în acea secţiune. Operaţiile de moştenirea priorităţii şi reluarea priorităţii anterioare sunt indivizibile.

3. Moştenirea de prioritate este tranzitivă. Dacă T3 blochează pe T2, care îl blochează pe T1 (cu T1 ← T2 ← T3), atunci T3 moşteneşte prioritatea lui T1 prin T2.

4. Un task T1 poate preempta un alt task T2 dacă T1 nu este blocat şi dacă prioritatea curentă a lui T1 este mai mare decât prioritatea curentă a lui T2.

Exemplul 6-10 arată cum se poate preveni inversarea priorităţii.

Exemplul 6-10

Se reia Exemplul 6-9, pentru a arăta cum moştenirea priorităţii previne inversarea priorităţii. La momentul t3 când T3 îl blochează pe T1, T3 moşteneşte prioritatea mai mare a lui T1. Astfel, când T2 este reluat la momentul t4 el nu-l poate întrerupe pe T3. Rezultatul este că T1 nu este indirect blocat de T2.

Din păcate, moştenirea priorităţii poate conduce la blocarea reciprocă (deadlock). Acest fapt este ilustrat în exemplul 6-11.

Exemplul 6-11

Se consideră două task-uri T1 şi T2, care utilizează două secţiuni critice S1 şi S2. Aceste task-uri solicită secţiunile critice în următoarea secvenţă:

T1 : Lock S1 , Lock S2 , Unlock S2 , Unlock S1

T2 : Lock S2 , Lock S1 , Unlock S1 , Unlock S2

Fie T1 ← T2 şi presupunem că T2 începe execuţia la momentul to. La momentul t1 el blochează secţiunea critică S2. La momentul t2, T1 este startat şi îl preemptează pe T2. La momentul t3, T1 încearcă să blocheze secţiunea critică S1. La momentul t4, task-ul T1 încearcă să blocheze S2, dar este blocat deoarece T2 nu a terminat cu ea. T2 care acum moşteneşte prioritatea lui T1 îşi restartează execuţia. Oricum, când la momentul t5 încearcă să blocheze S1 nu o poate face atâta vreme cât T1 o blochează. Atât T1 cât şi T2 sunt acum în deadlock.

Mai este şi un alt inconvenient al moştenirii de prioritate. Este posibil ca task-ul de cea mai mare prioritate să fie blocat o dată de oricare alt task executat pe acelaşi procesor.

Pentru a rezolva problemele legate de moştenirea priorităţii, în [SRL90] este prezentat un protocol care determină prioritatea de nivel maxim (PNM). Prioritatea de nivel maxim a unui semafor este prioritatea cea mai mare a oricărui task care îl poate bloca.

Fie P(T) prioritatea unui task T şi P(S) prioritatea de nivel maxim a semaforului asociat secţiunii critice S

Exemplul 6-12

Se consideră task-urile T1, T2, T3 cu T1 ← T2 ← T3 Există patru secţiuni critice şi următoarea tabelă arată cum blochează task-urile secţiunile critice şi cum rezultă prioritatea de nivel maxim.

Secţiune critică Accesată de Prioritatea de nivel maxim

S1 T1, T2 P(T1)

S2 T1, T2, T3 P(T1)

S3 T3 P(T3)

S4 T2, T3 P(T2)

Protocolul PNM este similar cu protocolul de moştenire a priorităţii, cu modificarea că un task poate de asemenea să fie blocat la intrarea într-o secţiune critică dacă există cel puţin un semafor blocat anterior, de orice alt task, a cărui prioritate de nivel maxim este mai mare sau egală cu prioritatea lui T.

Page 143: Sisteme de Timp Real

6-144

Exemplul 6-13

Se consideră task-urile şi secţiunile critice de la exemplul 6-12. Se presupune că T2 ţine blocată S2, şi T1 este iniţiat. T1 va fi blocat la intrarea în S1 deoarece prioritatea sa nu este mai mare decât prioritatea de nivel maxim a lui S2.

Teorema 6-6 Protocolul PNM previne blocările mutuale între task-uri. În plus, sub protocolul PNM un task poate fi blocat de către task-urile de prioritate mai mică cel mult o dată.

Protocolul PNM poate fi specificat astfel:

1. Task-ul de cea mai mare prioritate T este alocat procesorului. T eliberează procesorul ori de câte ori accesează un semafor care protejează o secţiune critică, dacă:

• semaforul este deja blocat de un alt task Q (în care caz se spune că este blocat de task-ul Q);

• există un alt semafor S’, blocat de un alt task, a cărui prioritate de nivel maxim este mai mare sau egală decât prioritatea lui T. În acest caz, fie S* semaforul cu cea mai mare prioritate dintre cele blocate de alte task-uri. Se poate spune că T este blocat pe S* şi de către task-ul care ţine blocat pe S*.

2. Dacă un task T blochează unul sau mai multe task-uri, atunci el moşteneşte prioritatea task-ului cu cea mai mare prioritate dintre task-urile blocate. Operaţiile de moştenire a priorităţii şi reluarea priorităţii anterioare sunt indivizibile.

3. Moştenirea priorităţii este tranzitivă.

4. Un task T1 poate preempta un alt task T2 dacă T2 nu blochează o secţiune critică de care T1 are nevoie şi dacă prioritatea curentă a lui T1 este mai mare decât prioritatea curentă a lui T2.

Proprietăţile de bază ale protocolului PNM sunt:

1. Protocolul PNM previne blocarea reciprocă.

2. Fie Bi mulţimea tuturor secţiunilor critice care pot cauza blocarea task-ului Ti şi fie t(x) timpul de execuţie pentru secţiunea x. Atunci, Ti va fi blocat pentru cel mult maxx∈Bi t(x).

Proprietatea 1. permite o analiză a planificabilităţii sistemelor care utilizează protocolul PNM. De exemplu, teorema de planificabilitate RM se poate revizui astfel:

Teorema 6-7 Orice set de n procese periodice care utilizează integral procesorul sub RM trebuie să aibă, pentru fiecare i ∈ [1,…,n]

)12(... 1/1

2

2

1

1 −≤++++ iP

b

P

e

P

e

P

e

i

i

i

i

unde bi = maxx∈Bi t(x).

6.3 Algoritmul de planificare EDF Conform algoritmului EDF ([LL73]), procesorul execută întotdeauna task-ul cu cel mai apropiat timp limită absolut. EDF este un algoritm de planificare cu prioritate dinamică; priorităţile task-urilor nu sunt fixate pre-execuţie, fiind stabilite în timpul execuţiei, în funcţie de apropierea timpilor limită absoluţi faţă de momentul planificării.

Exemplul 6-13

Se consideră următorul set de task-uri (aperiodice):

Page 144: Sisteme de Timp Real

6-145

Task Timp de sosire

Timp de execuţie

Timp limită absolut

T1 0 10 30

T2 4 3 10

T3 5 10 25

Când T1 soseşte, este singurul task care aşteaptă să se lanseze şi îşi începe execuţia imediat. T2 soseşte la timpul 4; din D2 < D1, el are o prioritate mai mare decât T1 şi îl preemptează. T3 soseşte la momentul 5; deoarece D3 < D2, el are o prioritate mai mică decât T2 şi trebuie să aştepte ca T2 să se termine. Când T2 se termină (la timpul 7), T3 se startează (deoarece el are o prioritate mai mare decât T1), T3 se execută până în momentul 17, după care T1 se poate relua şi executa complet.

Pentru tratarea algoritmului EDF se fac toate presupunerile care s-au făcut pentru algoritmul RM, exceptând faptul că task-urile nu trebuie să fie periodice.

EDF este un algoritm optimal de planificare uniprocesor. Altfel spus, dacă EDF nu poate planifica fezabil o mulţime de task-uri pe un procesor, nu există nici un alt algoritm de planificare care ar putea face aceasta.

Dacă toate task-urile sunt periodice şi au timpii limită relativi egali cu perioada lor, testul pentru planificabilitatea mulţimii de task-uri este simplu:

Dacă utilizarea totală a unei mulţimi de task-uri nu este mai mare decât 1, mulţimea de task-uri poate fi planificată fezabil pe un singur procesor, cu algoritmul EDF.

După cum s-a arătat anterior, testul de planificabilitate nu este simplu pentru cazul când timpii limită relativi nu sunt egali cu perioada; în astfel de cazuri, trebuie dezvoltată o planificare utilizând algoritmul EDF, pentru a vedea dacă se respectă toţi timpii limită pentru un interval de timp dat. Se prezintă în continuare un test de planificabilitate EDF în acest caz.

Se definesc

∑=

=n

i i

i

P

eu

1

, dmax = max1 ≤ i ≤n {di} şi P = cmmc(P1,…,Pn),

unde cmmc este cel mai mic multiplu comun.

Fie hT(t) suma timpilor de execuţie ai tuturor task-urilor din mulţimea T, a căror limită de timp absolută este mai mică decât t.

Teorema 6-8 O mulţime de n task-uri nu este fezabilă EDF dacă şi numai dacă:

• u > 1

sau

• există

−+<

≤≤)(max

1,min

1max ii

nidP

u

udPt

astfel încât hT(t) > t.

Demonstraţia este prezentată în [KS97].

Page 145: Sisteme de Timp Real

6-146

6.4 Analiza comparativă a algoritmilor RM şi EDF Planificarea task-urilor de timp real astfel încât să se garanteze că toate task-urile îşi respectă timpul limită este o parte importantă a oricărui SOTR. Cele mai utilizate tehnici de planificare în timp real sunt cele periodice, în care planificarea este stabilită pre-execuţie, fiind exprimată printr-o tabelă de planificare care are numărul de intrări egal cu cmmmc al perioadelor task-urilor (vezi şi 5.2.4.2.1). Aceasta elimină deciziile de planificare în timpul execuţiei şi minimizează supraîncărcarea (planificatorul este declanşat la fiecare tick şi planifică task-urile conform tabelei), dar introduce câteva probleme precum:

• tabela de planificare trebuie calculată off-line, adesea manual şi este dificil de modificat atunci când

caracteristicile task-urilor se modifică în timpul proiectării;

• task-urilor aperiodice de prioritate mare este foarte posibil să li se aloce timp în mod necorespunzător,

deoarece apariţia lor nu poate fi anticipată pre-execuţie;

• plaja mare de perioade (în aceeaşi aplicaţie sunt task-uri cu perioade de 1 x ms, 10 x ms, 100 x ms etc.),

des întâlnită în aplicaţiile MCP duce la tabele de dimensiuni foarte mari, inacceptabile uneori pentru

memoria sistemelor utilizate pentru aplicaţii încorporate.

Alternativa la aceste tipuri de planificatoare este folosirea de planificatoare bazate pe prioritate precum RM şi EDF. Utilizarea lor implică însă încărcarea suplimentară a procesorului, prin două componente: supraîncărcarea execuţiei (datorită execuţiei codului planificatorului) şi supraîncărcarea de planificare (limitele teoretice ale numărului de task-uri planificabile cu un anumit algoritm). Împreună, aceste supraîncărcări limitează timpul procesor utilizat efectiv pentru calculele în timp real.

În continuare sunt analizate aceste supraîncărcări pentru RM - care asignează priorităţile în mod static, în funcţie de perioadă - şi EDF - care asignează priorităţile dinamic, în funcţie de cel mai apropiat timp limită [Gro02]. Apoi, se discută o propunere de planificator care utilizează un algoritm mixt RM - EDF, a cărui analiză relevă performanţe mai bune decât ale RM sau EDF considerate separat.

6.4.1 Supraîncărcarea execuţiei

Supraîncărcarea execuţiei (∆t) se datorează analizei listelor de task-uri şi adăugării/ştergerii task-urilor din aceste liste.

Când task-ul în execuţie se blochează, SO trebuie să inspecteze/actualizeze anumite structuri de date pentru identificarea task-ului care se blochează şi selecţia unui nou task pentru execuţie. Se asociază acestor doi paşi supraîncărcarea de blocare ∆tb şi respectiv supraîncărcarea de selecţie ∆ts.

Similar, când un task blocat este deblocat, SO trebuie să inspecteze/actualizeze din nou structurile de date, ceea ce implica o supraîncărcare de deblocare ∆td. La acest pas, este posibil ca SO să selecteze un nou task pentru execuţie (de exemplu atunci când task-ul deblocat are prioritate mai mare decât cel în curs de execuţie), adăugându-se din nou supraîncărcarea de selecţie.

Fiecare task este blocat şi deblocat cel puţin o dată în fiecare perioadă (deblocarea la începutul perioadei şi blocarea după timpul de execuţie ei), de unde rezultă pe fiecare perioadă supraîncărcarea minima: ∆tb + ∆td + 2∆ts.

Supraîncărcarea este şi mai mare dacă task-urile utilizează în timpul execuţiei apeluri sistem blocante; deşi utilizarea apelurilor este dependentă de fiecare task în parte, pentru simplificare se presupune că jumătate din task-uri utilizează câte un apel blocant în fiecare perioadă. Aceasta duce la o supraîncărcare medie a execuţiei pe perioada de

∆t = 1.5(∆tb+ ∆td+2∆ts).

În aceste condiţii, formula de utilizare a procesorului poate fi rescrisă astfel:

∑=

∆+=

n

i i

i

P

teU

1

Page 146: Sisteme de Timp Real

6-147

În continuare se calculează ∆t pentru politicile de planificare EDF şi RM, bazate pe liste înlănţuite, care sunt eficiente în sistemele încorporate care au un număr relativ mic de task-uri (tipic între 15 şi 40).

Implementarea EDF

Pentru implementarea algoritmului EDF, toate task-urile blocate şi deblocate sunt plasate într-o listă unică, nesortată. Acest lucru are sens, deoarece când se utilizează EDF priorităţile task-urilor se modifică continuu. dacă s-ar utiliza o listă sortată, cum operaţiile de inserare/ştergere sunt O(n) schimbarea dinamică a priorităţilor ar implica parcurgerea frecventă a acestei liste. Un task este blocat şi deblocat modificând corespunzător descriptorul de task, iar ∆tb şi ∆td sunt O(1). Pentru selectarea următorului task de executat, este parcursă lista şi este selectat task-ul gata de execuţie care are cel mai apropiat timp limită, astfel că ∆ts este O(n). Deoarece selecţia este executată de două ori pe perioadă (la blocare şi deblocare), creşterea numărului de task-uri duce la creşterea rapidă a ∆t.

Implementarea RM

În implementarea tipică a algoritmului RM se foloseşte o listă de task-uri gata de execuţie, sortată după priorităţile fixe, cu cel mai prioritar task primul. Blocarea/deblocarea implică ştergerea/inserarea de înregistrări în această listă sortată.

Task-urile blocate şi cele gata de execuţie sunt într-o singură listă, sortată după prioritate. Pointerul first_ready indică primul task gata de execuţie, astfel încât ∆ts este O(1). Blocarea unui task necesită modificarea descriptorului de task (ca în EDF) şi actualizarea first_ready pentru următorul task gata de execuţie. Această operaţie implică parcurgerea listei, astfel ca în cel mai defavorabil caz, ∆tb este O(n). Pe de altă parte, deblocarea necesită numai actualizarea descriptorului de task şi compararea priorităţii task-ului cu aceea a task-ului indicat first_ready, modificând acest pointer dacă este necesar. Astfel, ∆td este O(1).

Comparaţie implementare RM-EDF

Pentru RM, ∆tb = O(n) în timp ce pentru EDF ∆ts = O(n). ∆tb este luat în calcul numai o singură dată pentru fiecare operaţie de blocare/deblocare task în timp ce ∆ts trebuie considerat de două ori. Din acest motiv, ∆t = 1.5(∆tb+ ∆td+2∆ts) este mai mic pentru RM decât pentru EDF, în special atunci când numărul de task-uri este mare.

6.4.2 Supraîncărcarea de planificare

Supraîncărcarea de planificabilitate este definită ca 1-u* , unde u* este utilizarea ideală planificabilă. Pentru o încărcare şi un planificator date, u* este cea mai mare încărcare care poate fi planificată fezabil în condiţii ideale, când supraîncărcarea execuţiei este ignorată. S-a arătat anterior că, pentru o încărcare de n task-uri

∑=

=n

i i

i

P

eu

1

.

Conform Teorema 6-8, cu EDF se pot planifica toate încărcările cu u ≤ 1 (ignorând supraîncărcarea de execuţie), astfel încât u* = 1. În aceste condiţii, supraîncărcarea de planificabilitate este 0 pentru EDF.

Pe de altă parte, RM poate avea u* ≤ 1. În [LSD89] se arată că în medie u* =0.88 pentru RM..

Prin urmare, RM induce supraîncărcare de planificare, pe când EDF nu.

Exemplul 6-14

Se consideră 5 task-uri, cu perioadele şi timpii de execuţie de mai jos:

i 1 2 3 4 5 6 7

Pi 4 5 6 7 8 20 30 ei 1.0 1.0 1.0 1.0 0.5 0.5 0.5

Page 147: Sisteme de Timp Real

6-148

Fiecare task Ti are limita de timp di = Pi.. Utilizând planificare RM, în intervalul de timp [0,4], task-urile T1 - T4 se execută, dar înainte ca T5 să se poată lansa, T1 este redeclanşat din nou. T1 – T4 au priorităţi mai mari decât T5, astfel încât acesta nu se poate lansa până când T1 – T4 nu se execută pentru a doua oară. În această situaţie, T5 nu îşi respectă limita de timp şi prin urmare setul de task-uri nu este planificabil RM.

Dacă este utilizat EDF pentru a planifica mulţimea task-urilor, T5 va fi declanşat înainte de a doua lansare a T1 - T4 , deoarece d5=8 este o limită de timp mai apropiată decât limitele de timp ale celei de-a doua lansări a T1 - T4. Prin urmare, mulţimea de task-uri este planificabilă EDF.

6.5 Studiu de caz: algoritm mixt de planificare RM-EDF Se prezintă în continuare o variantă de planificare ([ZPS99]) care speculează cât mai bine calităţile politicilor de planificare RM şi EDF: supraîncărcarea de execuţie mai mică a RM şi lipsa supraîncărcării de planificabilitate a EDF.

Reluând Exemplul 6-14, se observă că existenţa T5 face ca încărcarea de planificabilitate a RM să nu permită planificarea fezabilă. Task-urile T6 - T7 au perioadele mai lungi şi pot fi planificate fără probleme de orice planificator, fie el RM sau EDF.

Se foloseşte această observaţie ca bază de pornire pentru planificatorul mixt RM / EDF. Sub acesta, T1 - T5 vor fi planificate cu EDF astfel încât T5 nu-şi va pierde limita de timp. Pentru task-urile rămase se va utiliza planificarea RM.

Această soluţie are ca avantaje:

• micşorarea supraîncărcării de execuţie, deoarece lista de task-uri EDF se micşorează;

• îmbunătăţirea supraîncărcării de planificare, prin micşorarea listei RM.

Planificatorul mixt gestionează două liste de task-uri: lista task-urilor cu priorităţi dinamice (PD), care conţine task-urile planificate cu EDF şi lista task-urilor cu priorităţi fixe (PF) care conţine task-urile planificate cu RM. Împărţirea task-urilor se face prin analiza de planificabilitate pre-execuţie. Se detectează task-ul cu cea mai mare perioadă care nu poate fi planificat RM, fie acesta Tx. Task-urile T1 - Tx se trec în lista PD iar Tx+1 - Tn în lista PF.

În timpul execuţiei, deoarece în lista PD sunt task-urile cu cele mai mari priorităţi RM (au perioadele mai mici decât cele din lista PF), aceasta este tratată prioritar.

Planificatorul gestionează un contor Ce care conţine permanent numărul de task-uri gata de execuţie din lista PD. Ce se incrementează când un task din PD devine gata de execuţie şi se decrementează când un task din această listă se blochează.

La selecţie pentru execuţie, dacă Ce este diferit de 0, se selectează primul task gata de execuţie din lista PD. În caz contrar, lista PD este ignorată şi se selectează cel mai prioritar task gata de execuţie din lista PF, indicat de către first_ready_RM.

6.5.1 Analiza performanţelor algoritmului

Utilizând planificarea mixtă, se elimină supraîncărcarea de planificare, dar supraîncărcarea execuţiei rămâne. Aceasta depinde de lista în care este task-ul care urmează a fi blocat/deblocat (pentru lista PD supraîncărcarea este mai mare decât pentru lista PF). Se pot considera următoarele cazuri:

1) Blocarea unui task din PD: ∆tb este O(1) (acelaşi ca pentru EDF). În cazul cel mai defavorabil, ∆ts apare

când există cel puţin un task gata de execuţie în lista PD, necesitând parcurgerea acesteia pentru a

selecta următorul task. Astfel, ∆ts este O(x). Parcurgerea se efectuează numai dacă Ce este diferit de 0.

Page 148: Sisteme de Timp Real

6-149

2) Deblocarea unui task din PD: ∆td este O(1). Deoarece la sfârşitul acestei operaţii există cel puţin un task

gata de execuţie în lista PD, aceasta va fi parcursă pentru selectarea următorului task pentru execuţie.

Astfel, ∆ts este O(x).

3) Blocarea unui task din PF: ∆tb este acelaşi ca pentru RM, dar pentru un număr mai mic de task-uri în

listă, astfel ∆tb este O(n-x). Deoarece în execuţie este task-ul din lista PF care se blochează, înseamnă că

nu există task-uri gata de execuţie în lista PD (acestea au prioritatea mai mare decât a oricărui task din

PF), şi aceasta nu va fi parcursă pentru selecţie. Planificatorul selectează pentru execuţie task-ul indicat

de first_ready, astfel că ∆ts este O(1) (acelaşi ca pentru RM).

4) Deblocarea unui task din PF: ∆td este O(1) (acelaşi ca pentru RM). Este posibil ca în lista PD să existe

task-uri gata de execuţie, dacă Ce este diferit de 0, prin urmare pentru cel mai defavorabil caz ∆ts poate

fi O(x).

Din această analiză, rezultă pentru operaţiile de blocare/deblocare o supraîncărcare totală a execuţiei planificatorului de ∆tb + 2∆ts + ∆td. Pentru task-urile din lista PD, supraîncărcarea este O(1) + 2O(x) + O(1) = 2O(x), ceea ce este echivalent cu parcurgerea de două ori a unei liste de lungime x. Pentru task-urile din lista PF, supraîncărcarea este O(n-x) + O(1) + O(1) + O(x) = O(n)+O(2), ceea ce este echivalent practic cu parcurgerea unei liste de lungime n, o singură dată. Prin urmare, supraîncărcarea este mai mică decât pentru EDF (deoarece se parcurge de două ori o listă de lungime x comparativ cu parcurgerea de două ori a uneia de lungime n, iar x < n) şi cu puţin mai mare decât RM (o listă de lungime n parcursă o singură dată).

6.5.2 Testul de planificabilitate

O mulţime de n task-uri sortate după prioritatea RM poate fi planificat fezabil sub EDF dacă

11

≤∆+

= ∑=

n

i i

EDFi

P

teu

unde ∆tEDF , corectează ecuaţia prezentată la 6.3 pentru a include şi supraîncărcarea execuţiei pentru EDF.

Pentru RM, se rescriu ecuaţiile de la 6.2, pentru a conţine şi supraîncărcarea execuţiei:

∑=

∆+=

i

j j

RMjiP

ttetQ

1

)()(

t

tQtO i

i

)()( =

)(min0

tOOi

dti

i<<=

unde ∆tRM este supraîncărcarea execuţiei pentru RM.

Mulţimea de task-uri poate fi planificată fezabil RM dacă

1,1, ≤≤≤∀iOnii

În practică, această ecuaţie necesită evaluare numai într-un număr finit de puncte, aşa cum s-a arătat la 6.2.

Planificabilitatea utilizând algoritmul mixt RM-EDF se testează după cum urmează:

1) se verifică dacă task-urile din PD, T1 - Tx sunt planificate fezabil sub EDF:

11

≤∆+

=∑=

x

i i

PDi

PD P

teu

Page 149: Sisteme de Timp Real

6-150

2) se verifică fezabilitatea task-urilor FP:

1min,,1

0≤

∆+≤<∀ ∑

=≤<

j

i

j

Lj

dt P

t

t

tenixi

i

unde L poate fi PD sau PF după cum j este task în lista PD sau PF. Această verificare este făcută numai pentru task-urile din PF (i ia valori între x+1 şi n), dar în calcul intră şi toate task-urile din PD, deoarece au prioritate mai mare decât cele din PF (j ia valori între 1 şi i).

6.5.3 Localizarea Tx

Pentru a beneficia de performanţele sporite ale algoritmului, este important să se determine corect Tx, după care task-urile T1 – Tx se trec în lista PD iar Tx+1 – Tn în lista PF.

Mulţimea task-urilor T1 – Tx se găseşte aplicând testul de planificabilitate de mai sus. Se începe cu x=0 şi se aplică testul. În caz de succes, căutarea se opreşte, altfel se incrementează x. Operaţia se continuă până când testul de planificabilitate trece (în care caz s-au identificat cele două liste) sau până când x > n, caz în care planificarea nu e fezabilă (poate fi însă fezabilă EDF).

Page 150: Sisteme de Timp Real

7-151

7 COMUNICAŢIA TIMP - REAL

Notă :

Acest capitol (7) nu este inclus în programa pentru examen.

7.1 Introducere Comunicarea eficientă între diferitele dispozitive ale unui sistem timp - real este vitală pentru funcţionarea corectă a acestuia. În sisteme încorporate, există un flux continuu de date de la senzori şi panourile de control către clusterul central de procesoare, între procesoarele din clusterul central şi de la acestea către elementele de execuţie şi dispozitivele de afişare. Timpul necesar pentru comunicare se adaugă la timpul de răspuns al calculatorului. Sistemele HRT trebuie să utilizeze uneori protocoale de comunicaţie care să permită limitarea timpului necesar pentru comunicaţie.

În sistemele SRT, precum multimedia sau videoconferinţele, unde sunt transmise date pentru imagine şi voce, cerinţa de transmitere a mesajelor într-o manieră temporală este evidentă: întârzierile excesive în transmiterea mesajelor pot degrada în mod semnificativ serviciul furnizat. Totuşi, în astfel de aplicaţii, nerespectarea ocazională a limitelor de timp pentru livrarea mesajelor nu este fatală.

Analiza comunicării în SCTRD presupune considerarea următoarelor aspecte:

• mediul fizic de comunicaţie;

• topologia reţelei;

• protocoalele de comunicaţie;

• planificarea mesajelor;

Scopurile protocoalelor de comunicaţie timp - real sunt oarecum diferite de cele ale sistemelor tradiţionale de comunicaţii de date, care nu sunt timp - real. În sistemele tradiţionale, cheia măsurării performanţei este puterea de transfer a sistemului, adică cât de multe date pot fi transferate în reţea într-o unitate de timp, de la sursă la destinaţie. În sistemele timp - real, cheia măsurării performanţei este probabilitatea livrării unui mesaj într-un anumit timp limită. De notat că un mesaj pierdut are un timp de livrare infinit, ceea ce înseamnă că măsura trebuie să se refere atât la viteza cu care mesajele sunt transmise cât şi la probabilitatea pierderii mesajelor.

Întârzierea unui mesaj este cauzată de timpii necesari pentru:

• formatarea şi / sau împachetarea mesajului;

• staţionarea în cozile de aşteptare, pentru accesul la mediul de comunicaţie;

• transmiterea mesajului de la sursă la destinaţie;

• deformatarea şi / sau despachetarea mesajului.

Traficul timp - real va fi clasificat în clase de mesaje, fiecare clasă fiind caracterizată prin timpul limită, structura cadrului şi prioritate.

Timpul limită este interpretat în funcţie de tipul sistemului:

• În sistemele HRT, în special cele încorporate, timpul limită al traficului se referă la timpul limită al task-ului căruia îi aparţine comunicaţia;

• În aplicaţiile de tip multimedia, timpul limită se referă direct la aplicaţie.

Prioritatea este bazată pe importanţa pe care o are clasa de mesaje pentru aplicaţie. Dacă traficul este supraîncărcat, prioritatea mesajului poate fi folosită pentru a determina care mesaje sunt întârziate pentru a asigura ca traficul de importanţă mai mare să se desfăşoare astfel încât să respecte constrângerile temporale.

Page 151: Sisteme de Timp Real

7-152

Din punct de vedere al structurii datelor, cele mai multe surse de date timp - real generează trafic care se încadrează în una din următoarele două categorii:

Rată constantă: la intervale periodice sunt generate pachete de mărime fixă. Exemplu: senzori care transmit valorile măsurate cu o frecvenţă prestabilită. Traficul cu rată constantă este mai uşor de gestionat, deoarece este fluent şi fără supraîncărcări bruşte. Fluenţa traficului duce la micşorarea numărului de buffer-e care trebuie asigurate în fiecare nod.

Rată variabilă: fie pachete de mărime fixă sunt generate la intervale neregulate de timp, fie pachete cu mărime variabilă sunt generate la intervale regulate. Exemplu: traficul de voce şi imagini. Supraîncărcările bruşte în trafic pot duce la creşterea semnificativă a numărului de buffer-e.

7.2 Protocoale de comunicaţie timp - real În tabelul de mai jos se reprezintă protocoale de comunicaţie utilizate în sistemele de calcul timp - real. Unele din acestea oferă garanţii privind respectarea timpul limită. Altele nu oferă aceste garanţii dar sunt algoritmi de efort optim, convenabili pentru sistemele SRT. Cu titlu informativ, se prezintă în continuare protocolul bazat pe timpul limită, prezentat în [FV90] sub denumirea „Earliest-Due-Data-Deadline” (EDD-D)

Protocol Bazat pe Garantarea timpului limită

Tip reţea

VTCSMA Detecţie coliziuni

Nu Difuzare

Fereastră Detecţie coliziuni

Nu Difuzare

Jeton sincronizat Jeton Da Inel

IEEE 802.5 Jeton Da Inel

Stop-and-go Cadre de timp / legătură

Da Punct la punct

Magistrala apelata selectiv Linie ocupare magistrală şi cadre de timp

Nu Magistrală

Round-robin ierarhic Cadre de timp / legătură

Da Punct la punct

Bazat pe timpul limită Timpul limită Nu Punct la punct

7.3 Protocoale bazate pe timpul limită Protocolul bazat pe timpul limită, în reţele punct la punct, constă în aceea că fiecare nod transmite pachetul care are cel mai apropiat timp limită. Există două variante: preemptivă şi nepreemptivă. În protocoalele preemptive, dacă un nod recepţionează un pachet cu un timp limită mai apropiat decât al pachetului care este în curs de transmisie, transmisia curentă este oprită şi se startează imediat transmiterea noului pachet. În protocoalele nepreemptive, nu este permisă întreruperea transmisiei în curs. Se poate defini un protocol în care transmisia pachetului curent este terminată sau nu, în funcţie de limitele de timp ale pachetelor nou sosite şi fracţiunea transmisă deja din pachetul curent.

Cea mai simplă versiune a acestui protocol se execută pe reţele locale, organizate ca inel unidirecţional, care au o cale unică între sursă şi destinaţie. Când emiţătorul s doreşte să stabilească o comunicaţie timp - real cu

Page 152: Sisteme de Timp Real

7-153

destinaţia d, algoritmul EDD-D stabileşte un canal s → d care are suficientă capacitate pentru satisfacerea cerinţelor de timp real. Protocolul EDD-D recunoaşte trei clase de trafic:

• Trafic garantat: Sistemul trebuie să garanteze că fiecare pachet în astfel de trafic soseşte în timpul său limită.

• Trafic statistic timp - real: Numai un procent prestabilit din pachetele din fluxul de date asociate acestui trafic îşi pot depăşi timpul limită.

• Trafic care nu este timp - real: Pachetele asociate acestui trafic nu sunt constrânse să fie livrate într-un anumit timp limită. Aceste pachete pot fi trimise numai când nu sunt cereri din celelalte două clase de trafic.

La aceste trei categorii de trafic se asociază canale de tip timp limită, statistice şi respectiv care nu sunt de timp real.

Există diferite modalităţi în care pot fi specificate încărcarea şi limitele de performanţă pe un canal. Pentru scopul propus în curs au fost aleşi următorii parametri, pentru caracterizarea traficului între orice pereche i sursă-destinaţie:

Parametrii de încărcare:

• xmin,i – intervalul minim de timp între apariţia pachetelor pe canalul i; în acest caz, rata maximă de transport a pachetelor pe canalul i este 1/xmin,i

• xmed – valoarea minimă a intervalului mediu de timp dintre apariţia pachetelor, pe un interval de durata I, considerat cel mai ocupat între intervalele de durata I;

• lmax – lungimea maximă a pachetului;

• tmax,i – timpul maxim de servire în nod a pachetelor de pe canalul i.

Limitarea performanţei:

• limitarea întârzierii pentru pachetele de pe canalul i, δi;

• rata maximă de pierdere a pachetelor.

Pentru traficul garantat, se precizează timpul limită de livrare, pentru traficul statistic atât timpul limită de livrare cât şi procentajul acceptabil de pachete pentru care se admite nerespectarea timpului limită.

Pentru trafic garantat, protocolul rezervă succesiv lărgime de bandă pentru fiecare pereche sursă-destinaţie. Dacă pentru sursa s este necesar un timp limită până la destinaţia d, sistemul trebuie să determine calea de la s la d care respectă acest timp. Pentru o cale de lungime n, timpul consumat în procesul de stocare şi expediere pentru fiecare pachet este ntmax,i. Dacă timpul limită pentru un pachet este Di, timpul de întârziere disponibil pe canalele de comunicaţie este σi = Di – ntmax,i. Acest timp este repartizat în mod egal de-a lungul tuturor nodurilor; altfel spus, fiecare nod din cale are propriul timp limită local şi trebuie să trimită mai departe pachetul la δi = tmax,i + σi / n timp după recepţionarea lui.

Pentru trafic statistic, dacă de la nodul s trebuie stabilit un canal către nodul d, probabilitatea de acceptare a pierderii timpului limită, πpierdut,i este împărţită între cele n noduri pe calea s→d. Timpul de întârziere disponibil este de asemenea divizat între nodurile din cale, în aceeaşi manieră ca şi pentru traficul garantat. Fiecare nod m care aparţine căii s→d trebuie să nu piardă limita sa de timp peste probabilitatea π pierdut,i,m unde ∑mπpierdut,i,m ≤ π

pierdut,i

πpierdut,i,m depinde de constrângeri aferente fiecărui nod şi de instabilitatea întârzierii. În continuare se prezintă metoda prin care se determină dacă π pierdut,i,m este respectată.

7.3.1 Constrângeri aferente nodurilor

Toate nodurile pe canalul i sunt alese astfel încât să satisfacă anumite constrângeri. Se prezintă în continuare constrângerile pe care trebuie să le respecte un nod m. Se notează cu Gm şi Sm mulţimea canalelor cu trafic garantat şi respectiv statistic ce trec prin nodul m. Se defineşte de asemenea mulţimea canalelor Cm,

Cm = Gm U Sm

Page 153: Sisteme de Timp Real

7-154

1) Constrângerea pentru trafic garantat. Nodul trebuie să aibă o capacitate de procesare suficientă pentru a satisface toate tipurile de trafic care îl traversează. Dacă Cm este mulţimea de canale care trec prin nodul m, atunci

1min,

max, ≤∑∈ mGj j

j

x

t

Dacă această condiţie nu este satisfăcută, nodul nu va fi capabil să facă faţă la toate pachetele garantate pe care le are de distribuit. Desigur, această constrângere nu are sens dacă Gm = ∅ .

2) Constrângerea pentru trafic statistic se aplică la nodurile traversate de canale cu trafic statistic. Aceasta asigură că procentul de pachete care îşi respectă timpul limită este sub limita specificată. Pentru a calcula aceasta trebuie determinată probabilitatea de depăşire a timpului limită.

Probabilitatea ca un canal i să fie activ (să transporte pachete) la anumite momente de timp într-un interval de durata l este dată de:

imed

i

ix

xp

,

min,=

Probabilitatea ca în orice moment canalele independente dintr-o submulţime oarecare M ⊂ Cm să fie simultan active este

∏ ∏∈ −∈

−=Mi MCi

ii

m

ppMprob )1()(

Se defineşte o combinaţie de depăşire ca o mulţime de canale Φm ⊆ Cm astfel încât

Dacă canalele in Φm sunt active suficient de mult, ele vor supraîncărca nodul m, făcându-l incapabil să respecte timpii limită. Probabilitatea ca aceasta să se întâmple este prob(Φm).

Dacă Θm este mulţimea tuturor combinaţiilor de depăşire pentru nodul m atunci probabilitatea ca nodul m sa depăşească timpul limită este:

∑Θ∈

=mX

jdtlXprobP )(,

În concluzie, constrângerea pentru traficul statistic este

Pdtl,m ≤ π pierdut,i,m

Constrângerea statistică nu este suficientă să asigure că traficul statistic va fi îndeplinit aşa cum s-a specificat, fiind necesare constrângeri suplimentare

3) Constrângerea de saturare a planificatorului apare ori de câte ori este matematic imposibil să fie îndeplinite constrângerile de timp limită.

Exemplul 7-1.

Fie un nod în care două canale au timpii de servire 3 şi respectiv 4 unităţi, iar limitele de întârziere în nod de 5 şi respectiv 6 unităţi; dacă de pe cele două canale sosesc simultan două pachete în nod, nu există nici o posibilitate de a le planifica astfel încât ambele să-şi respecte timpii limită.

Testul de limitare a întârzierii determină limita minimă a întârzierii care trebuie asignată canalului i astfel încât saturarea planificatorului să fie evitată în nod.

1min,

max, >∑Φ∈ mj j

j

x

t

Page 154: Sisteme de Timp Real

7-155

Pentru a determina dacă saturarea planificatorului este posibilă în nod, se împart canalele cu trafic garantat şi statistic care trec prin nodul m în două mulţimi după cum urmează:

• mulţimea canalelor pentru care limita întârzierii în nodul m este mai mică decât suma timpilor

de servire a canalelor cere trec prin nod, }|{1

max,∑=

<=mC

j

jitiA δ

• mulţimea canalelor pentru care limita întârzierii în nodul m este mai mare sau egală decât suma timpilor de servire a canalelor care trec prin nod,

ACBm

−= .

Fără a pierde din generalitate, se numerotează canalele care traversează nodul m astfel:

• mulţimea A cu 1, … ,llAll, în ordinea în care pachetele se livrează dacă ele ar sosi în acelaşi timp în nodul m (canalul 1 este primul servit, canalul llAll ultimul)

• mulţimea B cu llAll+1, … ,llCmll.

În testul de constrângere pentru traficul statistic, dacă apare saturarea nodului pachetele nu îşi mai respectă limita de timp indiferent dacă există sau nu saturarea planificatorului. Totuşi, saturarea planificatorului poate apărea şi dacă nodul nu este saturat, constrângerea de planificare fiind asociată cu acest caz.

În [FV90] se demonstrează teorema de mai jos, care afirmă constrângerea de saturare a planificatorului.

Teorema 7-1 Saturarea planificatorului este imposibilă într-un nod nesaturat, în care

∑=

=≥mC

j

mjiCitx

1

max,min, ,...,1,

dacă şi numai dacă

Aittk

i

jCki

jim

,...,1,max max,

1

max, =+≥ ∑=

≤<δ

Testul pentru limitarea întârzierii constă deci în verificarea ecuaţiei de mai sus pentru toate valorile lui i (toate canalele din mulţimea A).

4) Constrângerea de spaţiu pentru buffer-e este impusă asupra dimensiunii spaţiului pentru buffer-ele dintr-un nod, în care se memorează pachetele asociate cu traficul garantat şi traficul statistic, astfel încât aceste pachete să nu fie distruse.

Dacă se stabileşte ca un pachet să fie distrus în momentul în care depăşeşte timpul său limită, atunci trebuie ca fiecare pachet al conexiunii i să nu staţioneze în nodul m mai mult decât δi. Spaţiul maxim necesar pentru pachetele canalului i în nodul m va fi:

=

i

i

ix

lmi

min,

max,),(δβ

Se presupune că pachetele care nu sunt timp - real sunt distruse în cazul în care trebuie asigurat spaţiu pentru traficul garantat sau statistic. Spaţiul total necesar pentru buffer-e în nodul m este:

∑∈

=mCi

mimB ),()( β

Page 155: Sisteme de Timp Real

7-156

5) Constrângerea impusă de aplicaţie Toate nodurile trebuie să satisfacă constrângerea de spaţiu pentru buffer-e dacă pentru traficul timp - real nu se tolerează nici o depăşire de buffer-e. Un nod care suportă trafic garantat trebuie să satisfacă constrângerile pentru trafic garantat şi de saturare a planificatorului, iar un nod care suportă trafic statistic trebuie să satisfacă constrângerile de trafic statistic şi de saturare a planificatorului.

Aşa cum s-a arătat, când s încearcă să stabilească un canal cu d, sistemul alege o cale de la s la d astfel încât fiecare nod pe acea cale să satisfacă constrângerile corespunzătoare. Dacă canalul care a fost stabilit este statistic, nodurile trebuie să fie alese astfel încât

∑mπpierdut,i,m ≤ π pierdut,I (sau πpierdut,i,m ≤ π pierdut,i /n )

Deoarece sunt posibile mai multe căi între s şi d, procesul stabilirii canalului constă în principal în încercări succesive, până când se găseşte o cale care satisface toate constrângerile.

Fiecare nod are trei cozi de aşteptare, pentru fiecare tip de trafic – garantat (CTG), statistic (CTS), non-timp real (CTN). Pachetele din primele două cozi sunt ordonate crescător după timpul limită. Dacă la pachetele din lista traficului garantat apar suprapuneri ca urmare a parametrului LTTT (Latest Time To Transmite), se modifică timpul limită înapoi, astfel încât să nu fie suprapuneri.

Exemplul 7-2.

Sosesc două pachete cu LTTT de 30 respectiv 34, iar transmiterea fiecăruia se face în cinci unităţi de timp. Pentru a evita suprapunerea, se ajustează LTTT al primului pachet de la 30 la 34-5=29.

7.3.2 Instabilitatea întârzierii

Instabilitatea întârzierii poate afecta funcţionarea aplicaţiei. De exemplu, în aplicaţii precum controlul proceselor sau multimedia, sosirea mai devreme a pachetelor poate fi la fel de dăunătoare ca şi sosirea cu întârziere. Prin urmare, pe lângă timpul limită (care specifică întârzierea maximă), trebuie specificat încă un parametru, şi anume limitarea instabilităţii întârzierii pentru fiecare canal (întârzierea minimă). Astfel, se poate solicita ca pachetele transmise pe canal să aibă o întârziere sursă-destinaţie în intervalul [Di -Ii, Di ]. Canalele cu trafic garantat trebuie să asigure că fiecare pachet satisface această condiţie iar canalele cu trafic statistic asigură ca probabilitatea ca timpii de transmitere ai pachetului să nu fie în acest interval să fie mai mică decât π pierdut,i.

Algoritmul EDD-D poate fi uşor modificat pentru a limita instabilitatea întârzierii. Astfel, pe lângă parametrul LTTT, fiecare nod poate avea şi parametrul ETTT (earliest-time-to-transmit).

Page 156: Sisteme de Timp Real

8-157

8 BIBLIOGRAFIE

[FV90]

Ferrari, D. si D. C. Verma: A scheme for Real-Time Channel Establishment in Wide Area Networks, IEEE Journal on Selected Areas in Communications Vol. 8, pp. 368-379, 1990.

[Gro02]

Grosu, M.: Sisteme de calcul în timp real distribuite, Teza de doctorat, Universitatea din Craiova, 20 decembrie 2002.

[KS97]

Krishna, C.M. si K.G. Shin: Real Time Systems, McGraw-Hill Book CO. Singapore, 1997.

[Leh90]

Lehoczky, J.P.: Fixed Priority Scheduling of Periodic Task Sets with Arbitrary Deadlines, Proc. IEEE Real-Time Sistems Symp., pp. 201-210, IEEE, Los Alamitos, CA, 1990.

[LL73]

Liu, C.L. si J.W. Layland: Scheduling Algorithms for Multiprogramming in Hard-Real-Time Environment, Journal of the ACM, 20(1), pp. 46-61, 1973.

[LSD89]

Lehoczky, J.P., L. Sha si Y. Ding: The Rate Monotonic Algorithm: Exact Caracterisation and Average Case Behavior, Proc. of IEEE Real-Time Sistems Symp., pag. 166-171, Los Alamitos, CA, 1989.

[QNX93]

QNX Software Systems LTD: QNX Operating System, System architecture, 1995.

[Stu88]

Stuart, B.: Real Time Computer Control, 1988

[Tur99]

Turley, J.: Embedded Processors by the Numbers, Embedded Systems Programming, pag. 13-14, May 1999.

[ZPS99]

Zuberi, K. M., P. Pillai si K. G. Shin: EMERALDS - a small-memory real-time microkernel, 17th ACM Symposium on Operating Systems Principles (SOSP '99), Published as Operating Systems Review, 34(5):277–291,Dec. 1999.