Curs Sctr2009
Upcoming SlideShare
Loading in...5
×
 

Curs Sctr2009

on

  • 4,317 views

Materia de curs pt RTCS.

Materia de curs pt RTCS.

Statistics

Views

Total Views
4,317
Views on SlideShare
4,317
Embed Views
0

Actions

Likes
2
Downloads
78
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Curs Sctr2009 Curs Sctr2009 Document Transcript

  • SISTEME DE CALCUL TIMP - REAL Mircea Grosu Facultatea de Automatică, Calculatoare şi Electronică Catedra Ingineria Calculatoarelor şi Comunica iilor 1-1
  • 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 1-2
  • 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 1-3
  • 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 1-4
  • 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 1-5
  • 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]; 1-6
  • • 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 1-7
  • 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 Element de încălzire termistor Motor on/off flux aer Sens rota ie Control motor Unitate tiristorizată Total deschis Punte de măsură motor Ventilator Poten iometru Temperatura masurată Semnal "Pozi ie curentă alimentare de la 0 la 10V obturator" Obturator A aspira ie aer Măsurare ieşire Total manual închis automat Panou operator Control intrare aer Control element de încălzire Man LED stare LED-uri stare (vent. elem. P/O, obt. încălzire închis/deschis) ON/OFF Control Control manual încălzire manual aspira ie aer LED Auto/Man Fig. 1.2-1 Monitorizarea şi controlul unei instala ii de încălzire aer 1-8
  • 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 CALCULATOR Intrări numerice CAN CNA Ieşiri numerice Spre panou Total operator inchis Total Direc ie On/off deschis Intrare de la Pozi ie Circuit de Control motor puntea de obturator încălzire măsură Panou operator MAN / AUTO Element de încălzire Termistor Ventilator motor Fig. 1.2-2 Sistem de conducere cu calculator a instala iei de încălzire aer 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): 1-9
  • • î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: CALCULATOR Dispozitive I / O standard Dispozitive de Dispozitive intrare din de ieşire spre INTERFE E CU PROCESUL proces proces PROCES Fig. 1.2-3 Sistem generalizat de conducere procese 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: 1-10
  • Dispozitivele de intrare şi softul aferent furnizează informa ii pentru a crea o imagine internă a intrărilor din CALCULATOR Imaginea Taskuri de control internă a procesului Imaginea Imaginea ieşirii intrării Taskuri de intrare Taskuri de ieşire Dispozitive de intrare Dispozitive de ieşire spre din proces proces PROCES Fig. 1.2-4 Sistem de control generalizat care prezintă interfe e hard şi soft 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. 1-11
  • 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). 1-12
  • DISPLAY Tastatură Imprimantă Re ea comunica ie INTERFE E Taskuri control Taskuri comunica ie Imaginea intrării Imaginea ieşirii Taskuri de intrare Taskuri de ieşire Dispozitive de intrare Dispozitive de ieşire spre din proces proces PROCES Fig. 1.2-5 Sistem de control generalizat, cu taskuri de comunica ie 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. 1-13
  • 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. 1-14
  • 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ș 1-15
  • • 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. 1-16
  • 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. 2-17
  • 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: Supraveghere cu calculator şi/sau umană Val.de referin ă Val. măsurate r Calculator de proces (controller) m Proces condus Ieşiri Intrări y x Fig. 2.2.2-1 Control în buclă închisă Î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]:  1 de(t )  m(t ) = K c e(t ) + ∫ e(t )dt + Td  (1)  Ti dt  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 2-18
  • de e − ek −1 n |k = k si ∫ e(t ) dt = ∑ e k T dk T k =0 Ecua ia de control devine în acest caz  e − en −1 1 n  mn = K c Td n T + en + Ti ∑ e T  (2) k  k =0  Dacă se fac înlocuirile K p = Kc T Ki = Kc Ti Td Kd = Kc T ecua ia (2) poate fi exprimată ca un algoritm de forma s n = s n −1 + en (3) mn = K p en + K i s n + K d (en − en −1 ) 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: 2-19
  • … # 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. 2-20
  • Furnizare materie primă Abur TP TP Traductor presiune Recirculare solutie Vaporizatoare Produs concentrat Fig. 2.2.3-1 Supervizarea unei instala ii de vaporizare (reproducere din [Stu88]) 2-21
  • Î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. 2-22
  • 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). Periferice standard Management Calculator A Calculator B Comutator Bloc de control Interfe e Proces Fig. 2.3.1-1 Sistem cu calculatoar dublu 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. 2-23
  • 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): Informa ii Comenzi Nivel superior Constrângeri Constrângeri Acelaşi nivel Luarea deciziei Informa ii Informa ii Informa ii Comenzi Nivel inferior (provenite de la nivelul inferor) Fig. 2.3.2-1 Func ia de fabricare ierarhică a deciziilor 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: Fig. 2.3.2-2 Structura ierarhică de luare a deciziilor 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. 2-24
  • 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. Manager Gestionare resurse Planificare produc ie Evaluare Supervizor 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 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; 2-25
  • • 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. 2-26
  • • Nivel 6 Management Nivel 5 Microcomputer Supervizor Nivel 4 Microcomputer Comunica ie operator Nivel 3 Microcomputer Control secven ial al proceselor Nivel 2 Microcomputer Control în buclă Nivel 1 Controller Controller Controller Achizi ie/ac ionare PROCES Fig. 2.3.2-1 Sistem distribuit şi ierarhizat 2-27
  • 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). Volum de Sincronizare Timp real date f. mare NU Management Lent (min sau ore) mare NU Supervizare mediu NU mare Celula de bază mediu DA/NU Control procese mic DA Achizi ie date și msec ac ionare Nivel ierarhic Nivel ierarhic Fig. 2.3.4-1 Piramida automatizării 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. 2-28
  • 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 3-29
  • 1 4 Memorie UC Dispozitive Interfe e de Intrare/iEşire standard 6 Întreruperi, RTC HDD 3 Streamer In Semnale Imprimantă numerice Out Display, tastatură In Semnale în impulsuri 5 Dispozitive operator Out proces P CAN Panou R operator O C CNA Display E S Canale de telemetrie Alarmare Dispozitive de proces Imprimantă 2 Dispozitive de comunica ii Fig. 3.1-1 Dispozitive de interfa are tipice 3-30
  • 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. 3-31
  • 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 3-32
  • 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 Dispozitive de Mediul Intrare pentru extern Traductoare Condi ionare conversie semnale Analiza Afişare, semnale în format acceptat înregistrare Senzori de calculator Decizii Dispozitive de iEşire pentru conversie date către proces Mediul exterrn Elemente de execu ie Fig. 3.3-1 Sistem de achizi ie de date şi control – schema bloc 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ă. 3-33
  • Î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 Dispozitive ADC + calculator gazdă BUS µC Proces Dispozitive (PC) I/E mag. internă Fig. 3.3.1.1-1 Sistem ADC pe magistrală internă 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ă. 3-34
  • 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. Dispozitiv I/E pe mag. externă RS 232 Dispoziti RS 422 ve I/E pe Proces mag. µC Calculator internă gazdă RS 485 IEEE 488 LAN Fig. 3.3.1.2-1 – SADC cu dispozitive pe magistrala externă Î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. 3-35
  • Î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). Semnal analogic +10V Semnal numeric 5V 0 -10V Fig. 3.3.2.1-1 Semnale numerice vs. semnale analogice Semnalele analogice sunt convertite în format calculator prin intermediul convertoarelor analog-numerice (CAN). 3-36
  • 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: 3-37
  • • 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): V=K(t) (1) 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]. Cu J2 Constantan Voltmetru J1 Cu J3 Cu V1 Fig. 3.3.2.2.1-1 Măsurarea temperaturii cu un termocuplu 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 3-38
  • 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). 3-39
  • 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: 3-40
  • 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 3-41
  • Caracteristicile de intrare (curent bias, impedan ă, tensiunea de offset, lărgimea de bandă etc.) SADC implică + - Vout + OPA 104 * R1 * R1 până la 109 ohmi Fig. 3.3.3.1-1 Circuit tampon de intrare 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. + Tin 250 ohmi Vout Fig. 3.3.3.2-1 Conversia curent-tensiune (4-20mA) R1 + Iin -> - Vout=-Iin*R1 + OPA 111 Fig. 3.3.3.2-2 Conversie curent-tensiune pentru curen i foarte mici 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ă 3-42
  • 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 R1 + Vout R2 Vin Vout = Vin * R 2 / (R 1 + R 2) Fig. 3.3.3.3-1 Divizor de tensiune pentru a reduce semnalale de intrare sub 10V 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: 3-43
  • + R1 + R1 R2 10K 10K C1 C1 C2 2,7µF 2,7µF A B Fig. 3.3.3.4-1 Filtru trece jos cu 1 (A) sau 2 (B) poli Figura B este un exemplu de circuit bipolar de filtrare pentru mod comun care atenuează zgomote de 60-80 Hz. R R Semnal * intrare C C Spre SADC R R * C C Fig. 3.3.3.4-2 Filtru trece jos cu 2 poli diferen ial 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: 3-44
  • 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: A B Fig. 3.3.3.4-3 Alias datorat unei rate mici de eşantionare Î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 3-45
  • 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 K C Spre SADC Fig. 3.3.3.5-1 Cuplare capacitivă – condensator flotant 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, 3-46
  • 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. 1K, 1W A 15V MOV ¼A B ∼ 15V MOV Fig. 3.3.3.6-1 Re ele reprezentative de protec ie a intrării 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 3-47
  • 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 10K TTL Vin=(10-50)V 4,7 V Zenner C 10 pF Fig. 3.3.3.7-1 – Circuit de conversie semnale numerice mari în TTL î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 +5V R1 R2 Spre SADC C1 contacte externe Fig. 3.3.3-11 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. 3-48
  • 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: +5V De la ieşirea TTL a D1 SADC Releu exterior Fig. 3.3.3.10-1 Circuit de comandă a unui releu 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); 3-49
  • • 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 3-50
  • 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. 3-51
  • Condi ionare semnale 1 Amplificator 2 MUX AN S/H Eşantionare - memorare n CAN Convertor analog numeric Cod ieşire (numeric) Fig. 3.3.4.1-1 – Sistem complet de intrări analogice 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. 3-52
  • 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. 1 S/H Amplificator CAN 2 S/H MUX AN n S/H Fig. 3.3.4.1-2 Sistem cu circuite S/H multiple 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: 3-53
  • Tur (fir cald) Amplificator de instrumenta ie Es Es - DV ∼ Rez.firului Retur (fir rece) VG1 VG2 Masa sursei Masa calculatorului Fig. 3.3.4.1-3 Conexiune single-ended 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ă. Amplificator de instrumenta ie Es Es ∼ VCM Rez.firului VG1 VG2 Masa sursei Masa calculatorului Fig. 3.3.4.1-4 Conexiunea diferen ială 3-54
  • 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. 3-55
  • 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. 3-56
  • 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. 4-57
  • 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 4-58
  • 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. 4-59
  • 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 Aşteaptă întrerupere Eveniment extern NU IF=1 DA NU Nivel demascat ? DA NU Procesorul tratează altă IT ? DA NU Prioritatea este mai mare ? DA Start rutină de tratare întrerupere Fig. 4.2.1-1Automatul de lansare IT externe la I8259A 4-60
  • 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. 4-61
  • 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; 4-62
  • 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. 4-63
  • Î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; 4-64
  • • 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 6543 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: 4-65
  • 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 | | xxxxODITSZxAxPxC 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. 4-66
  • 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 4-67
  • 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 4-68
  • 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; 4-69
  • 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); 4-70
  • /* 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. 4-71
  • 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: 4-72
  • • 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 DATA BUS CLK0 BUFFER CNT0 GATE0 OUT0 INTERNAL BUS RD CLK1 CNT1 WR R/W GATE1 A0 LOGIC OUT1 A1 CLK2 CS CNT2 GATE2 CONTROL WORD OUT2 REGISTER Fig. 4.3.1 – 1 Schema bloc a dispozitivului I8254 (conform catalog Intel) 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ă 4-73
  • • GATEi =0 ⇒ numărarea inhibată Nivelul logic al ieşirii OUT i depinde de modul de lucru ales. CWR CRM CRL Status Latch CE Status Control OLM OLL Logic CLK GATE OUT Fig. 4.2.1-2 – Schema bloc internă a unui numărător (conform catalog Intel) Formatul cuvântului de control este: SC1 SC0 RW1 RW0 M2 M1 M0 BCD 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 4-74
  • 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. 4-75
  • 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. 4-76
  • Î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. 5 4 3 2 1 5 4 3 2 1 5 CLKn Gate OUTn Incărcare numărător cu 5 în modul 2 Perioada dintre întreruperi Fig. 4.3.3-1 – Generarea de intreruperi in modul 2 de lucru 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. 4-77
  • 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; 4-78
  • 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: 4-79
  • • 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); 4-80
  • /* 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ă 4-81
  • 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. 4-82
  • 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. 4-83
  • 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 4-84
  • 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: 4-85
  • • î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 4-86
  • 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 4-87
  • 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 4-88
  • 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 4-89
  • 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 4-90
  • 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 4-91
  • |--- | 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 | | | | | | | | ----------- ++ ++ / / - - 4-92
  • 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ă 4-93
  • 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. 4-94
  • 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 4-95
  • 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: 4-96
  • 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 4-97
  • Î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 7654 3210 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 4-98
  • 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 4-99
  • 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. 4-100
  • 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 Program i Date 1 Date i SO Hardware Fig. 5.1-1 Execu ia multiuser 5-101
  • 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. Utilizatori Task 1 Task i Task n Date 1 Date i Date n Date comune SO Hardware Fig. 5.1-2 – Execu ia multitasking Î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. 5-102
  • Î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 Nivel utilizator Alocare şi gestiune Interpretor comenzi Subsistem de I/E Gestiune fişiere resurse Nivel SO 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 5-103
  • 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. Lansare în execu ie Gata de execu ie Oprire Pornire ini ială Activ Suspendare Inactiv Activare Suspendare Oprire Distruge Cerare Suspendat Inexistent Terminare Fig. 5.2.1-1 – Tranzi ii de stări ale taskurilor 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. 5-104
  • 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. activ Cap DT Coadă gata de Cap DT DT execu ie Coadă suspendat Cap DT DT Coadă inactiv Cap DT DT Coadă Fig. 5.2.1 – 2 Structura listelor de task-uri conform stărilor 5-105
  • 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: 5-106
  • IRQ0 Priorită i întreruperi externe (Nivelul IRQi întrerupe- rilor) Ceas de TR Planificator şi dispecer pentru nivelul de bază IRQn Priorită i Priorită i Prioritate 1 Prioritate 1 taskuri taskuri de baza bazate pe ceas (Nivelul (Nivelul de bază) ceas TR) Prioritate k Prioritate m Fig. 5.2.3-1 Niveluri de prioritati în SOTRM 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. 5-107
  • 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: 5-108
  • • 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 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 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 5-109
  • 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 Task C B A 11ms Tick 1 2 3 4 5 Figura 5.2.3.2.-3 - 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 5-110
  • 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. 5-111
  • Task A B C D E F Masca de activare Tick 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 0 2 1 1 0 0 0 0 Cuvântul de control 3 1 0 0 0 0 0 al execu iei 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 Figura 5.2.3.2.-4 Tabela de planificare la nivel de ceas 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. 5-112
  • 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. 5-113
  • 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. 5-114
  • Intrarea A: Intrarea B: IRQ ceas TR A B Suspendare pt. IRQ I/E întârziere, aşteptare transfer Salvare stare Salvare stare task activ task activ Nivel prioritate Nivel prioritate = -1 = prioritatea curentă Incrementarea niv.de prioritate DA Nivel prioritate > max (a ieşit din domeniul priorită ilor alocate) NU Task în NU lista ready ? Cerere de transfer în memorie DA Task în NU memorie ? DA Restaurare stare task Ieşire în task Fig. 5.2.4-1 - Apelul la dispecer 5-115
  • 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: 5-116
  • exits iready activate preempted ready idle exitt dispecer dispecer IRQi exits exits create suspended running exits inexistent IRQi wait aqio sdat aqmsg rdat exits unlock qio lock Fif. 5.2.5 -1 Automatul de tranzi ie a starilor la SOTRM REX 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; 5-117
  • • 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 5-118
  • } 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. 5-119
  • ... 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: 5-120
  • /*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 5-121
  • 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); 5-122
  • 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; 5-123
  • 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); } } 5-124
  • 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. 6-125
  • Exemplul 6-1 În figura 6-1 avem T1 T2 T4 T3 T6 T5 T7 Figura 6-1 Exemplu de graf de preceden ă. T8 ←(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. 6-126
  • 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: 6-127
  • 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ă e1 e e + 2 + ... + n ≤ n 21 / n − 1 ( ) P1 P2 Pn 6-128
  • A1 B1 A2 B1 C1 A3 C1 A4 C2 0 1 2 3 4 5 6 7 8 Timp Figura 6-2 Exemplu de algoritm RM; Xj denota a j-a itera ie a task-ului TX. 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 1.0 0.9 Limita 0.8 0.7 0.6 0 2 4 6 8 10 12 14 16 Numar de task-uri Figura 6-3 Limita de utilizare pentru algoritmul RM. 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. 6-129
  • 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: t t =   e1 + e2 P  1 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/ P1e1 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 / P1e1 + 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: t  t  t =  e1 +  e2 + e3 P1  P2  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: t  t  t ≥  e1 +  e2 + e3 P1  P2  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 t  Wi(t) = ∑ P ej   j=1  j Wi( ) t Li( ) = t t Li = min Li( ) t 0 < t < Pi 6-130
  • L = max{Li} 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 t  Wi(t) = ∑ P ej   j=1  j 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 = { lPjj=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. 6-131
  • Î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 6-132
  • W1 W2 100 70 50 50 100 50 100 150 Timp Timp W4 W3 430 210 380 190 330 170 280 150 230 130 100 200 300 400 50 100 150 200 Timp Timp Figura 6-4 Wi (t) pentru Exemplul 6-3: linia punctata indica Wi(t) = t 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: ← ∑j = 1 ej i Atribuie t0 ; t1 ← Wi( 0) t ; ... ; tk ← Wi( k − 1) t ; Stop cand Wi( k) = tk. t . 6-133
  • 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 0 5 10 15 20 25 30 35 40 45 Figura 6-5 Încorporarea task-urilor sporadice: metoda 1 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: 6-134
  • În figura 6-6, ocuparea procesorului cu task-urile sporadice este indicată de dreptunghiurile haşurate. 0 5 10 15 20 25 30 35 40 45 Figura 6-6 Încorporarea task-urilor sporadice: metoda 2 (server suspendat) 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ă: U s daca U s ≥ 0.5 U ≤  1 − U s daca U s ≤ 0.5 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: 6-135
  • 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 6-136
  • 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). 6-137
  • 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ă: T3 T1 T2 T1 T2 T3 T4 T5 Nivel 1 Nivel 2 Nivel 3 Nivel 4 Nivel 5 Figura 6-7 Perioade ocupate 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: 6-138
  • i −1 t  t = ∑ ejP  + kei j=1  j 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:  1  n 2n − 1 ( ) daca γ = 1   1     γ + 1  (n − 1) U = γ(n − 1  γ  )  − 1 daca γ = 2, ... 3        γ daca 0 ≤ γ ≤ 0.5  loge(2γ ) + 1 − γ daca 0.5 ≤ γ ≤ 1 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]): 6-139
  • Apari ie Tratare Terminare Revenire el eiret et 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. Apari ie Tratare Terminare IRQ Execu ie IRQ IRQ şi planificare task selectat el ep et 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 6-140
  • 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). A C B Intx Inty IRQx Abur 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 i −1 t  t  ti = ei + ∑ e j  i  + ∑ ek  i  j =1  Pj  ∀k∈int reruperi  Pk  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: 6-141
  • • 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 S T1 T2 S S S T3 t0 t1 t2 t3 t4 t5 t6 t7 t8 Figura 6-11 Inversarea priorită ii 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 6-142
  • îş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. 6-143
  • 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] e1 e e b + 2 + ... + i + i ≤ i 21 / 1 − 1 ( ) P1 P2 Pi Pi 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): 6-144
  • Task Timp de Timp de Timp limită sosire execu ie 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 ei u = ∑P i =1 , dmax = max1 ≤ i ≤n {di} şi P = cmmc(P1,…,Pn), i 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  u  • există t < min P + d max, max( i − di) P   1 − u 1≤i ≤ n  astfel încât hT(t) > t. Demonstra ia este prezentată în [KS97]. 6-145
  • 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 ei + ∆t U = ∑ i =1 Pi 6-146
  • Î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 ei u = ∑P i =1 . i 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 6-147
  • 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. 6-148
  • 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ă n ei + ∆tEDF u = ∑ i =1 Pi ≤ 1 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 t  Qi( ) = t ∑ (e j + ∆tRM )   j=1 Pj  Qi( ) t Oi( ) = t t Oi = min Oi( ) t 0 < t < di unde ∆tRM este supraîncărcarea execu iei pentru RM. Mul imea de task-uri poate fi planificată fezabil RM dacă ∀i, ≤ i ≤ n, Oi ≤ 1 1 Î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: x ei + ∆t PD u PD = ∑ ≤1 i =1 Pi 6-149
  • 2) se verifică fezabilitatea task-urilor FP:  i e j + ∆t L  t   ∀i, x < i ≤ n, min  ∑   ≤1 0<t ≤ d i   j =1 t  Pj    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). 6-150
  • 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. 7-151
  • 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 Tip re ea timpului limită VTCSMA Detec ie Nu Difuzare coliziuni Fereastră Detec ie Nu Difuzare coliziuni Jeton sincronizat Jeton Da Inel IEEE 802.5 Jeton Da Inel Stop-and-go Cadre de timp / Da Punct la punct legătură Magistrala apelata selectiv Linie ocupare Nu Magistrală magistrală şi cadre de timp Round-robin ierarhic Cadre de timp / Da Punct la punct legătură 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 7-152
  • 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 7-153
  • 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 tmax,j ∑x j ∈G m ≤ 1 min,j 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: x min,i pi = x med,i Probabilitatea ca în orice moment canalele independente dintr-o submul ime oarecare M ⊂ Cm să fie simultan active este prob M) = ( ∏ i∈ M pi ∏ (1 − i ∈C m − M pi) Se defineşte o combina ie de depăşire ca o mul ime de canale Φm ⊆ Cm astfel încât tmax,j ∑x j∈ Φ m > 1 min,j 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: Pdtl,j = ∑ prob(X) X ∈ Θm Î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. 7-154
  • 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 Cm de servire a canalelor cere trec prin nod, A = { | δi < i ∑t j=1 max,j} • 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, B = Cm − A . 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 Cm x min,i ≥ ∑t j=1 max,j, i = 1,..., C m dacă şi numai dacă i δi ≥ ∑t j=1 max,j + max tmax,k,i = 1,..., A i < k ≤ Cm 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  β( , m) = lmax,i  i   x min,i  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: B m) = ( ∑ β(i, m) i ∈C m 7-155
  • 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). 7-156
  • 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. 8-157