MODULUL A DE STUDIU
1. S i s t e m e d e c o n d u c e r e î n t i m p r e a l
2. M e c a n i s m e l e p r o g r a m ă r i i c o n c u r e n t e î n t i m p
real
1
Modulul A
* *
2
Programarea aplicaţiilor de timp real
CAPITOLUL
Sisteme de conducere
1 în timp real
3
Modulul A
Obiective Rezultate
Comenzi
MC OC
4
Programarea aplicaţiilor de timp real
Feedforward Perturbaţii
Feedforward Perturbaţii
Feedback
p1 pk pn
… a b
……
i P r1 rk
y ..
DA Pr
m I P y
m
DA Pr
i u r
EE Proces T
C
a Perturbaţii
I u y
C EE Proces
Parte variabilă
b Parte fixată
8
Programarea aplicaţiilor de timp real
9
Modulul A
Limite de avertizare
P1 Pk Pn
10
Programarea aplicaţiilor de timp real
11
Modulul A
- elaborarea comenzilor;
- procesarea comenzilor în vederea transmiterii către elemente-
le de execuţie;
- generarea de rapoarte.
COP
MEC
BGR
CTR
BDP ABDP
TA EEA
EEN PROCES
MACU
T2
MATn BDST
Tn
13
Modulul A
1
Engl. – scheduler
2
Engl. – time driven
3
Engl. – event driven
15
Modulul A
4
Fiecărui task i se atribuie contextul timpului real un indicator de urgenţă sau importanţă
în execuţie care se numeşte prioritate. Aceste poate fi un atribut fix, care să rămână ne-
modificat pe durata existenţei taskului, sau variabil (care se poate schimba pe parcurs –
vezi funcţia RTK SetTaskPriority)
16
Programarea aplicaţiilor de timp real
5
FIFO – First Input First Output
6
Engl – time sharing
17
Modulul A
7
Multiprogramarea presupune o execuţie întreţesută conform căreia la un moment dat un
singur task este executat, dar mai multe sunt în execuţie (respectiv au instrucţiuni care au
fost executate şi aşteaptă continuarea execuţiei).
18
Programarea aplicaţiilor de timp real
19
Modulul A
- principiul abstractizării;
- principiul localizării;
- principiul uniformităţii;
- principiul completitudinii;
- principiul confirmabilităţii;
- principiul acoperirii.
Principiul modularizării. Modularizarea reprezintă manie-
ra în care trebuie structurat un program pentru a atinge mai uşor un
anumit scop. Modularizarea constituie un factor determinant pentru
satisfacerea obiectivelor de adaptabilitate şi fiabilitate.
Principiul abstractizării impune identificarea proprietăţi-
lor comune unor entităţi aparent diferite şi omiterea unor detalii speci-
fice neesenţiale. De regulă într-o structură ierarhică , fiecare nivel re-
prezintă o abstractizare a nivelurilor inferioare, detaliile fiind păstrate
pe acestea.
Principiul localizării se referă dispunerea în vecinătate fi-
zică a elementelor cu legături între ele cum ar fi: subrutine, înregistrări
fizice şi logice, pagini de memorie, etc.
Principiul uniformităţii presupune asigurarea consistenţei,
un exemplu în acest sens fiind stabilirea notaţiilor.
Principiul completitudinii are în vedere includerea în con-
ceptele abstracte a tuturor elementelor semnificative.
Principiul confirmabilităţii afirmă necesitatea formulării
explicite a tuturor informaţiilor legate de posibilitatea verificării corec-
titudinii programelor.
Principiul acoperirii promovează afirmarea aspectelor
esenţiale în favoarea celor neesenţiale, care pot fi transparente pentru
utilizator.
Un alt aspect specific IPTR este legat de fazele din existenţa
unui program respectiv:
- analiza cerinţelor;
- elaborarea specificaţiilor;
- proiectarea sistemului de programe;
21
Modulul A
- codificarea în program;
- instalarea şi testarea programelor;
- întreţinerea programelor.
Analiza cerinţelor este o etapă în care beneficiarul colabo-
rează strâns cu echipa de analişti din partea elaboratorului produsului
informatic, în vederea identificării particularităţilor problemei care ur-
mează a se rezolva. Această etapă se finalizează cu tema de proiectare
în care sunt formulate cerinţele şi restricţiile aplicaţiei.
Elaborarea specificaţiilor presupune formularea unui set
de specificaţii care includ resursele funcţionale şi restricţiile de opera-
re.
Proiectarea sistemului de programe reprezintă o etapă în
care se stabilesc:
- structura pe module funcţionale a programelor;
- relaţiile între modulele componente şi modalităţile de comu-
nicare;
- datele de intrare şi rezultatele pentru fiecare modul;
- algoritmii care vor fi utilizaţi pentru implementarea cerinţe-
lor din tema de proiectare.
Codificarea presupune generarea programelor pentru mo-
dulele definite în etapa de proiectare şi rularea lor pe un calculator
gazdă.
Instalarea şi testarea programelor are în vedere transferul
programelor pe maşina unde aplicaţia urmează a fi executată, respectiv
pe calculatorul ţintă. În această etapă mai pot fi corectate eventuale
erori de programare care nu au putut fi depistate în fazele anterioare.
Întreţinerea programelor presupune eventuale corecţii im-
puse fie de neconcordanţe în raport cu tema de proiectare, fie de reve-
niri ale beneficiarului.
Fiecare dintre etapele anterioare conţine câte o secvenţă de va-
lidare, promovarea la etapa următoare fiind condiţionată de validarea
celei precedente. După cum se observă din figura 1.10, în care sunt
evidenţiate aceste etape, etapa de întreţinere conţine o validare care are
în vedere o anume activitate specifică acestei etape.
22
Programarea aplicaţiilor de timp real
Analiză
Codificare
Nu Da
Validare Nu Da
Validare
Specificaţii
Da
Nu Da
Validare Instalare -
testare
Proiectare Nu Da
Validare
Nu Da
Validare
Întreţinere
Nu
Nu
Da
Expirare contract Validare
intreţinere
Da
23
Modulul A
24
Programarea aplicaţiilor de timp real
CAPITOLUL
Mecanismele programării
2 concurente în timp real
9
Atributul de paralel are în vedere execuţia paralelă sau pseudoparalelă a mai multor
acţiuni. Atributul concurent se referă la faptul că taskurile se află în competiţie pentru
deţinerea de resurse.
25
Modulul A
operaţii
a A A …. A B …. A C
t
. . Cerere de
întrerupere
Execuţie task
Cerere întrerupere
Execuţie
rutină tratare
b Execuţie task
Taskuri utilizator
Taskuri sistem
Nucleu SOTRM
Hardware
27
Modulul A
28
Programarea aplicaţiilor de timp real
Aşteptare ACTIV
Aşteptare Preluare
GATA DE
BLOCAT EXECUŢIE EXECUŢIE
Continuare Eliberare ŢIEXECUŢ
IE
Stop forţat din Start Stop forţat din
alt task alt task
Instalare Ştergere
NEINSTALAT
normală;
- după priorităţi, controlul UCP fiind preluat de taskul cu
prioritatea cea mai ridicată.
Substarea blocat este asociată taskurilor care se pot găsi
într-una din situaţiile:
- aşteaptă să i se aloce memorie;
- aşteaptă producerea unui eveniment;
- aşteaptă realizarea unei condiţii de timp;
- aşteaptă realizarea unei operaţii de intrare / ieșire.
Tranziţiile între stări şi substări se pot realiza în două moduri
şi anume:
- prin întreruperi hardware sau software, contextul comută-
rii fiind determinat de nivelul întreruperii;
- prin apeluri către Executiv din taskul aflat în Execuţie.
Acestea sunt apeluri de subrutine neîntreruptibile numite Primitive
sau Directive, contextul comutării fiind determinat de numele şi para-
metrii directivei.
Există două categorii de directive şi anume:
- directive care nu declară un eveniment semnificativ , după
a căror execuţie controlul UCP este returnat taskului întrerupt;
- directive care declară un eveniment semnificativ , după a
căror execuţie controlul UCP este returnat taskului aflat pe prima pozi-
ţie în coada taskurilor Gata De Execuţie.
În cele ce urmează se prezintă tranziţiile ilustrate în graful din
figura 2.3 şi directivele asociate.
Tranziţia Neinstalat – Inactiv se realizează prin directiva
Instalare care face cunoscut executivului taskul realizând în acelaşi
timp crearea şi alocarea Blocului Descriptor al Taskului (BDT) care
poate conţine următoarele elemente:
- parametri ai taskului (adresă de început, prioritate, identi-
ficator, nume, etc.);
- mărimea stivei;
- indicatori către alte taskuri.
30
Programarea aplicaţiilor de timp real
11
Resursele reentrante pot fi considerate resurse partajabile cu n tinzând către infinit.
33
Modulul A
I←I-1
DA NU
I≥0
Se apelează planificatorul
13
FIFO - First Input First Output
35
Modulul A
I←I+1
NU DA
I ≤0
14
În figura 2.21 este surprinsă situaţia în care continuă execuţia taskului apelant, deci
taskul deblocat este adus în execuţie logică.
15
În exemplele vor urma prin incrementarea/decrementarea unui semafor se subînțelege
incrementarea/decrementarea variabilei întregi I asociate.
36
Programarea aplicaţiilor de timp real
Task T1 Task T2
Iniţializare T1 Iniţializare T2
…SEMEX=1… …SEMEX=1…
NU NU
Δt_ex_T1 ? Δt_ex_T2 ?
DA DA
P1_T1 P1_T2
P(SEMEX) P(SEMEX)
V(SEMEX) V(SEMEX)
P2_T1 P2_T2
37
Modulul A
16
Pentru ca soluţia să fie funcţională, semaforul SEMEX nu trebuie aservit altor scopuri
în afara excluderii mutuale.
38
Programarea aplicaţiilor de timp real
Task T1 Task T2
Iniţializare T1 Iniţializare T2
…EVEX=ADEV… …EVEX=ADEV…
NU NU
Δt_ex_T1 ? Δt_ex_T2 ?
DA DA
P1_T1 P1_T2
NU ? NU ?
EVEX=ADEV EVEX=ADEV
ŞTERGE(EVEX) ŞTERGE(EVEX)
SCr_T1 SCr_T2
EVEX=FALS
EVEX=FALS
ÎNSCRIE(EVEX) ÎNSCRIE(EVEX)
P2_T1 P2_T2
Iniţializare T1 Iniţializare T2
DA DA
P1-T1 P1-T2
NU ? ? NU
MESEX în CPEX MESEX în CPEX
DA DA
PREIA MESEX din CPEX PREIA MESEX din CPEX
GET GET
SCr-T1 CPEX SCr-T2
PUT PUT
DEPUNE MESEX în CPEX DEPUNE MESEX în CPEX
P2-T1 P2-T2
Utilizarea căsuţei poştală CPEX şi a mesajului MESEX trebuie să fie numai în excludere
18
43
Modulul A
44
Programarea aplicaţiilor de timp real
46
Programarea aplicaţiilor de timp real
τ τ τ τ τ
a b
Fig. 2.9. Ilustrarea sincronizării cu timpul:
a – intervalul de execuţie τ în afara intervalului de sincronizare Δt;
b – intervalul de execuţie τ în interiorul intervalului de sincronizare Δt.
47
Modulul A
Task T1 Task T2
Iniţializare T1 Iniţializare T2
SEMSYNC1=1 SEMSYNC2=0
NU NU
Δt_ex_T1 ? Δt_ex_T2 ?
DA DA
P1_T1 P1_T2
P(SEMSYNC1) P(SEMSYNC2)
PS1 PS2
V(SEMSYNC2) V(SEMSYNC1)
) )
P2_T1 P2_T2
Iniţializare T0 Iniţializare T1
SEMSYNC=0 SEMSYNC=0
NU
P1_T1
EVEXT?
DA
P(SEMSYNC)
V(SEMSYNC)
P2_T1
49
Modulul A
Task T0 Task T1
Iniţializare T0 Iniţializare T1
SEMSYNC=0 SEMSYNC=0
NU
Δt_ex_T1 ? P(SEMSYNC)
DA
P_T1
V(SEMSYNC)
19
Timpul de execuţie al taskului T1 este inclus în acest interval.
50
Programarea aplicaţiilor de timp real
AŞTEAPTĂ (F)
NU NU F VTE1 VTE2
EVEX1? EVEX2?
NU
DA DA F=ADEV ?
ÎNSCRIE(VTE1) ÎNSCRIE(VTE2)
DA
P_T3
P_T1 P_T2
ŞTERGE(VTE1)
ŞTERGE(VTE2)
51
Modulul A
Task T1
Task T2
Iniţializare T1
Iniţializare T2
DA
Mes în C0 ?
NU NU
PREIA Mes din C0 MES_SYNC în C1?
GET DA
GET
C0 PREIA MES_SYNC din C1
t=Δt ? C1
NU
DA TRIMITE MES_CONF în C2
TRIMITE MES_SYNC în C1
PUT
P_T2
NU
MES_CONF în C2? C2
DA GET
PREIA MES_CONF din C2
52
Programarea aplicaţiilor de timp real
Δt Δt Δt Δt
t
53
Modulul A
Task T2
Iniţializare T2
DA
Mes în C0 ?
54
Programarea aplicaţiilor de timp real
Iniţializare T1 Iniţializare T2
Iniţializare T0
NU
NU MES_EV
NU
EV_EXT ? MES_SYNC
în C0? în C1?
DA PUT DA DA
TRIMITE GET GET
MES_EV PREIA PREIA
în C0 MES_EV MES_SYNC
din C0 din C1
C0
C1
NU P_T2
MES_CONF
în C2? C2
DA
PREIA GET
MES_CONF
din C2
Task T2
Task T0
Iniţializare T2
Iniţializare T0
MES_EV
NU
NU în C0?
EV_EXT ?
DA
D
A
TRIMITE PUT PREIA
MES_EV GET MES_EV
în C0 din C0
C0
P_T2
56
Programarea aplicaţiilor de timp real
Punct de întâlnire
(rendez – vous)
58
Programarea aplicaţiilor de timp real
Conducta 2
Taskul j
59
Modulul A
20
Buffer-ul BUF plin sau gol.
60
Programarea aplicaţiilor de timp real
NU NU
Δt_ex_TPROD ? Δt_ex_TCONS ?
DA DA
P1_TPROD(pdata) P1_TCONS
P(SGOL) V(SGOL)
P(SEMEX) P(SEMEX)
NPROD=NPROD+1 NCONS=NCONS+1
DA DA
NPROD=N ? NCONS=N ?
NPROD=0 NCONS=0
NU NU
V(SEMEX) V(SEMEX)
V(SPLIN) P(SPLIN)
P2_TPROD P2_TCONS(cdata)
Task T1 Task T2
Iniţializare T1 Iniţializare T2
P1_T1 P1_T2
NU ? NU
T2 gata recepţie T1 gata transmisie ?
DA DA
RECEIVE
TRIMITE MES_ INF la T2 PREIA MES_ INF de la T1
SEND
P2_T1 P2_T2
62
Programarea aplicaţiilor de timp real
21
Directivele cu care sunt operate mesajele de trecere sunt Send (pentru trimitere) şi
Receive (pentru recepţie).
63
Modulul A
Întrebări pentru
EA modulul A de studiu
64
Programarea aplicaţiilor de timp real
65
Modulul A
Test de autoevaluare
pentru modulul A de
TA studiu
66
Programarea aplicaţiilor de timp real
67
Modulul A
* *
68
Programarea aplicaţiilor de timp real
MODULUL B DE STUDIU
69
Modulul B
* *
70
Programarea aplicaţiilor de timp real
71
Modulul B
0 1 2 ... 8 9
72
Programarea aplicaţiilor de timp real
+
cifră
-
Fig. 3.2. Graf sintactic pentru noţiunea număr algebric.
literă
literă
cifră
Fig. 3.3. Graf sintactic pentru noţiunea nume.
74
Programarea aplicaţiilor de timp real
75
Modulul B
Structurarea
Când se vorbeşte de structurare se au în vedere aspecte legate
de tipizare, abstractizare şi vizibilitate care se referă atât la date, cât şi
la cod.
Tipizarea există practic în orice limbaj evoluat şi presupune de-
scrierea datelor şi a operaţiilor în care sunt implicate, într-o terminolo-
gie orientată în primul rând spre aplicaţie şi mai puţin către maşină.
Un tip de date este caracterizat prin mulţimea valorilor pe care le
pot lua obiectele aferente şi prin mulţimea operaţiilor care le sunt apli-
cabile.
Abstractizarea presupune conferirea caracterului de generalita-
te pentru operaţiile şi funcţiile limbajului (în sensul apropierii de apli-
caţie şi de îndepărtare de maşină). Tipizarea reprezintă alături de as-
cundere o latură a abstractizării. Ascunderea presupune transparenţa
în ceea ce priveşte folosirea registrelor şi a locaţiilor de memorie pre-
cum şi a transferurilor interne.
Vizibilitatea precizează zonele din program în care o entitate
identificabilă printr-un nume este vizibilă, respectiv poate fi modifica-
tă.
Structurile de date (SD) pot fi statice sau dinamice. Cele
statice pot fi la rândul lor simple sau compuse.
SD statice simple sunt tipurile de date care nu au componente,
valorile lor fiind unităţi elementare fără structură internă analizabilă
(exemple: real, întreg, logic, caracter).
SD statice compuse sunt tipurile de date cu mai multe compo-
nente (exemple: şiruri, matrice, etc.). Acestea pot fi referite atât glo-
bal, cât şi pe componente. Ca SD compuse s-au impus tabloul (care
grupează componente de acelaşi tip) şi articolul (care grupează com-
ponente de tipuri diferite). Prin combinarea celor două tipuri se pot
obţine structuri de orice complexitate.
SD dinamice se caracterizează prin aceea că datele pot fi create
şi distruse în timpul execuţiei. Aceste variabile nu au nume (dacă ar
avea s-ar transforma în variabile statice). Referirea la aceste variabile
anonime se face printr-o variabilă de tip acces a cărei valoare este
adresa variabilei referite.
76
Programarea aplicaţiilor de timp real
Concurenţa
Programarea concurentă este acel stil de programare care
permite implementarea prelucrării paralele sau pseudoparalele a date-
lor.
77
Modulul B
78
Programarea aplicaţiilor de timp real
Tratarea excepţiilor
Excepţiile reprezintă situaţiile anormale apărute în evoluţia
unui program. Mecanismele de tratare a excepţiilor trebuie să prezinte
următoarele caracteristici:
- simplitate în utilizare;
- încărcarea procedurii de tratare numai la apariţia excepţiei;
- tratarea unitară a tuturor tipurilor de excepţii.
Compilarea separată
Pornind de la modularizarea programelor, acest procedeu are
în vedere compilarea separată a fiecărui modul. Unităţile de program
(de exemplu taskurile) se compilează individual, dar cu considerarea
pentru verificare a rezultatelor compilării celorlalte module.
Compilarea separată este justificată , printre altele, de următoa-
rele aspecte:
- facilitarea dezvoltării de aplicaţii complexe pe sisteme cu
disponibilităţi reduse;
79
Modulul B
1
Se are în vedere dezvoltarea de facilităţi destinate implementării execuţiei pseudoparalele a tas-
kurilor.
2
Embedded systems
80
Programarea aplicaţiilor de timp real
3
P1< P2<….< P64
4
În cele ce urmează se vor face referiri numai la varianta de RTK bazată pe utilizarea
limbajului C.
5
Reentranţa reprezintă proprietatea unei funcţii de a putea fi executată simultan de către
mai multe taskuri utilizator.
81
Modulul B
6
Stările Blocked şi Timed mai pot avea şi substări care vor fi evidenţiate la prezentarea
funcţiilor specifice.
82
Programarea aplicaţiilor de timp real
7
Pentru stabilirea tranşei de timp se apelează funcţia RTKTimeSlice din repertoriul de
instrucțiuni al RTKernel.
8
Cele două funcţii din repertoriul RTKernel vor fi prezentate în secţiunea funcţiilor RTK
de administrare a taskurilor.
83
Modulul B
9
Funcţia RTKDelay din repertoriul RTKernel va fi prezentate în secţiunea funcţiilor RTK
de gestionare a timpului.
10
Coada (queue) reprezintă o structură de date din care elementele sunt extrase în ordinea
introducerii (administrare FIFO – First Input First Output).
84
Programarea aplicaţiilor de timp real
11
În acest context prin driver se înţelege o componentă software care permite sistemului
de calcul să comunice cu un anumit dispozitiv. Dacă în program mai sunt utilizate şi alte
dispozitive, în afara consolei, vor trebui iniţializate şi driverele acestora
12
TaskHandle este un tip de variabilă predefinit în RTKernel
13
Dacă taskul main nu este referit TaskHandle poate lipsi.
85
Modulul B
87
Modulul B
Stare Explicaţie
Ready Task pregătit (aflat în starea Ready)
Current Task în execuţie (aflat în starea Current )
Suspended Task suspendat prin execuţia funcţiei RTKSuspend
Delaying Task în aşteptare după apelarea funcţiei RTKdelay
Task blocat la un semafor după execuţia unei funcţii
BlockedWait
RTKWait
Task în aşteptare temporizată la un semafor după
TimedWait
execuţia unei funcţii RTKWaitTimed
BlockedPut Task blocat la depunerea unui mesaj într-o cutie
poştală plină după execuţia unei funcţii RTKPut
Task în aşteptare temporizată pentru depunerea unui
TimedPut mesaj într-o cutie poştală plină după execuţia unei
funcţii RTKPutTimed
15
Acest tip din RTKernel corespunde tipului enumerat din limbajul C.
88
Programarea aplicaţiilor de timp real
89
Modulul B
Exemplul 3.2
În acest exemplu se prezintă utilizarea funcţiilor
(3.3)…(3.9)
-----------------
#include "rtkernel.h"
#include "rtkeybrd.h"
------------------
TaskHandle Handler_A;
TaskState Stare_A;
unsigned Prio_noua,Prio_task,Stiva_libera;
-----------------
Handler_A=RTKCreateTask(TaskA,5,1024," Taskul_A");
-----------------
RTKSuspend(Handler_A);
Stare_A=RTKGetTaskState(Handler_A);
RTKResume(Handler_A);
-----------------
Prio_task=RTKGetaskPrio(Handler_A);
Prio_noua=Prio_task+2;
RTKSetPriority(Handler_A,Prio_noua);
Stiva_libera= RTKGetTaskStack(Handler_A);
-----------------
3.2.5. Funcţii de RTK gestionare a timpului
După cum s-a menţionat în capitolul precedent, timpul prezintă
o mare importanţă în sistemele de timp real. În acest context, nucleul
RTK menţine un ceas intern care poate fi setat sau citit. În RTK unita-
tea de măsură pentru timp este timer tick. O cuantă de timp, respectiv
un timer tick are aproximativ 55 ms. Această valoare rezultă ţinând
cont că timerul hardware al unui PC generează 216 întreruperi pe oră
ceea ce reprezintă aproximativ 18,2 întreruperi/secundă care corespun-
de unei perioade de aproximativ 55 ms.
Pentru gestionarea timpului, RTK utilizează tipurile Time –
pentru a memora momente şi Duration – pentru a memora durate,
ambele de tipul unsigned long. După cum s-a arătat, la iniţializarea
executivului prin funcția RTKernelInit ceasul intern este iniţializat cu
zero.
În continuare vor fi prezentate funcţiile uzuale RTK pentru ges-
tionarea timpului.
90
Programarea aplicaţiilor de timp real
16
La iniţializarea RTK în cadrul funcţiei RTKernelInit se execută funcţia
RTKSetTime(0);
91
Modulul B
Exemplul 3.4
În acest exemplu se prezintă un caz de utilizare a funcţiei
RTKDelay într-un sistem multitasking destinat afişării cu periodi-
citate de o secundă a datei şi orei. Sistemul este constituit din tas-
kurile Task_ora şi main.
Taskul Task_ora se execută în buclă infinită şi apelea-
ză cu periodicitate de o secundă funcţia afordata care achiziţio-
nează şi tipăreşte elemente ale timpului sistem şi anume zi, lună,
an, oră, minut, secundă. Aceste elemente se preiau în variabilele d
şi t care sunt de tipul struct date, respectiv struct time din DOS.
Afişarea se realizează la nivel de caracter în regim alfanumeric în
care ecranul este văzut ca o matrice cu 80 de coloane şi 25 de linii,
potrivit figurii 3.6.
x
1 2 80
1
25
92
Programarea aplicaţiilor de timp real
93
Modulul B
//
// Task main
//
main()
{
char c;
RTKernelInit(3); //initializare RTK
clrscr(); //stergere ecran
gotoxy(5,8); //pozitionare cursor
cprintf("E - Iesire");
RTKeybrdInit(); //initializare driver consola
// Creare Task_ora
RTKCreateTask(Task_ora,5,1024,"Task_tip_ora");
//
for(;;) //bucla for infinita
{
c=RTGetCh(); //supraveghere tastatura
if(c==’E’) //testare fata de E
exit(0); //iesire
} //sfarsit for
} //sfarsit main
17
Sema Type este un tip de variabilă RTK.
95
Modulul B
96
Programarea aplicaţiilor de timp real
Exemplul 3.5
În acest exemplu se prezintă un caz de utilizare a semafoa-
relor pentru realizarea sincronizării taskurilor. Sistemul este con-
stituit din taskurile Task_ora, Task_sincr şi main.
Taskul Task_ora are aceleaşi caracteristici şi funcţio-
nalitate ca în exemplul 3.4.
Taskul Task_sincr este blocat la semaforul binar
Sem_sincr iniţializat cu zero în taskul main. În momentul când
din acest task se execută o funcţie RTKSignal(Sem_sincr); se de-
blochează Task_sincr pentru 10 secunde. Pe durata deblocării pe
ecran se afișează numărul de secunde trecute. După trecerea celor
10 secunde, în taskul Task_sincr se execută funcția
RTKWait(Sem_sincr), ceea ce va determina revenirea Task_sincr
în starea BlockedWait. De asemenea pe ecran se afișează starea în
care se găsește Task_sincr, adică BLOCAT respectiv EXECUȚIE.
Taskul main conţine o primă secţiune de declaraţii şi
iniţializări şi o a doua secţiune în buclă infinită destinată suprav e-
gherii tastaturii. La apăsarea tastei B se execută funcția
RTKSignal(Sem_sincr), iar la apăsarea tastei E se iese din
program. Ca și în exemplul precedent, acţionarea altei taste rămâ-
ne fără efect.
//
// Program demonstrativ utilizare semafoare
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
97
Modulul B
#include "rtkeybrd.h"
//
Semaphore Sem_sincr;
struct date d;
struct time t;
//
//
} //sfarsit for
} //sfarsit Task_ora
//
//
Task_sincr() //task sincronizat
{
int i;
for(;;) //bucla for infinita
{
gotoxy(5,10);
cprintf("BLOCAT ");
//decrementare semafor Sem_sincr
RTKWait(Sem_sincr),
gotoxy(5,10);
cprintf("EXECUTIE");
for(i=0;i<=9;i++) //bucla for in 10 pasi
{
RTKdelay(18); //temporizare o secunda
98
Programarea aplicaţiilor de timp real
gotoxy(15,10);
//tiparire secunde trecute
cprintf("%d",i);
} //sfarsit for finit
} //sfarsit for infinit
} //sfarsit Task_sincr
//
//
main() //task main
{
char c;
//initializare RTK
RTKernelInit(3);
clrscr(); //stergere ecran
gotoxy(5,8); //pozitionare cursor
cprintf("B – Executie task_sincr E - Iesire");
//initializare driver consola
RTKeybrdInit();
// Initializare semafor Sem_sincr
Sem_sincr=RTKCreateSemaphore(Binary,0,"Sem_sin");
// creare Task_ora si Task_sincr
RTKCreateTask(Task_ora,5,1024,"Task_af_ora");
RTKCreateTask(Task_sincr,7,1024,"Task_sin");
//
for(;;) //bucla for infinita
{
c=RTGetCh(); //supraveghere tastatura
if(c==’B’) //testarea fata de B
//incrementeaza semafor Sem_sincr
RTKSignal(Sem_sincr);
if(c==’E’) //testare fata de E
exit(0); //iesire
} //sfarsit for
} //sfarsit main
99
Modulul B
18
FIFO – First Input First Output - strategie potrivit căreia extragerea din coadă se face în
ordinea introducerii.
100
Programarea aplicaţiilor de timp real
101
Modulul B
103
Modulul B
Exemplul 3.6
În acest exemplu se prezintă utilizarea unei cutii poştale
pentru realizarea sincronizării taskurilor. Sistemul este constituit
din taskurile Task_ora, Task_sinc şi main.
Taskul Task_ora are aceleaşi caracteristici şi funcţio-
nalitate ca în exemplele 3.4 și 3.5.
Taskul Task_sinc este blocat pentru așteptarea sosirii
unui mesaj în cutia poștală CP, inițializată în taskul main. În
momentul când din acest task se execută asupra cutiei poștale CP
o funcţie RTKPut referitoare la codul unei taste apăsate, Task_sinc
se deblochează. După deblocare se execută o funcție RTKGet prin
care se preia mesajul (care constă din codul unui caracter) din CP.
Pentru vizualizarea caracterului recepționat, acesta se tipărește.
După această operație Task_sinc trece din nou în starea
BlokedPut. De asemenea pe ecran se afișează starea în care se gă-
sește Task_sinc, adică T_Sinc așteaptă la CP respectiv Sosit me-
saj.
Ca și în exemplele precedente taskul main conţine o
primă secţiune de declaraţii şi iniţializări şi o a doua secţiune în
buclă infinită destinată supravegherii tastaturii. La apăsarea orică-
rei taste, alta decât E, se execută o funcția RTKPut, prin care
codul tastei apăsate este depus în CP. În ceea ce privește apăsarea
tastei E, această acțiune va determina ieșirea din program. Ca și
în exemplul precedent, acţionarea altei taste rămâne fără efect.
//
// Program demonstrativ utilizare cutii postale
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
#include "rtkeybrd.h"
//
Mailbox CP;
struct date d;
struct time t;
//
//functie preluare si tiparire data si ora
//
104
Programarea aplicaţiilor de timp real
afordata()
{
getdate(&d); // preia data in variabila d
gettime(&t); // preia timpul in variabila t
gotoxy(55,3);//pozitioneaza cursorul
//se tiparesc: ziua, luna anul
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
// se tiparesc: ora, minutul, secunda
cprintf(" %02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
Task_ora() //task afisare periodica ora
{
for(;;) //bucla for infinita
{
RTKDelay(18); //temporizare o secunda
afordata(); //apelare functie afordata
} //sfarsit for
} //sfarsit Task_ora
//
//
Task_sinc() //task sincronizat
{
char i;
for(;;) //bucla for infinita
{
gotoxy(5,10);
cprintf("T_sinc asteapta la CP ");
//preia din CP si depune in i
RTKGet(CP,&i);
RTKdelay(18); //temporizare o secunda
gotoxy(5,10);
//tipareste caracterul din i
cprintf("Sosit in CP mesaj %c ",i);
RTKdelay(18); //temporizare o secunda
} //sfarsit for infinit
} //sfarsit Task_sinc
//
//
main() //task main
{
char c;
RTKernelInit(3); //initializare RTK
clrscr(); //stergere ecran
gotoxy(5,8); //pozitionare cursor
cprintf("Orice tasta - mesaj E - Iesire");
// Initializare driver consola
105
Modulul B
RTKeybrdInit();
// Initializare cutie postala CP
CP=RTKCreateMailbox(2,1,"CP_sinc");
// creare Task_ora si Task_sinc
RTKCreateTask(Task_ora,5,1024,"Task_tip_ora");
RTKCreateTask(Task_sinc,7,1024,"T_sincr");
//
for(;;) //bucla for infinita
{
gotoxy(5,9);
cprintf("Transmis din main mesajul ");
c=RTGetCh(); //supraveghere tastatura
gotoxy(41,9);
//tipareste caracterul tastat
cprintf("%c",c);
if(c==’E’) //testare fata de E
exit(0); //iesire
RTKPut(CP,&c); //altfel depune c in CP
} //sfarsit for
} //sfarsit main
106
Programarea aplicaţiilor de timp real
107
Modulul B
Exemplul 3.7
În acest exemplu se prezintă utilizarea mesajelor de trecere
pentru comunicarea între două taskuri. Sistemul multitasking este
constituit din taskurile Task_ora, Task_dest şi main.
Taskul Task_ora are aceleaşi caracteristici şi funcţio-
nalitate ca în exemplele 3.4, 3.5 și 3.6.
Taskul Task_dest are rolul de task receptor executând
în buclă infinită o secvență RTKReceive, cprintf. Rezultă că acest
task se găsește cvasipermanent în starea BlockedReceive, debloca-
rea producându-se în momentul când Task_dest a fost referit prin
handlerul asociat Handle_dest în taskul emițător. După recepția
mesajului sub forma unui caracter, acesta este tipărit în coordonate
prestabilite, însoțit de mesajul Dest a recepționat.
109
Modulul B
110
Programarea aplicaţiilor de timp real
//
Task_dest() //task receptor
{
char j2;
for(;;) //bucla for infinita
{
RTKReceive(&j2,2);// preia mesaj si depune in j2
goto(5,8);
cprintf("Dest a receptionat %c ",j2);//tip j2
} //sfarsit for infinit
} //sfarsit TaskB
//
//
main() //task main
{
char c, j1=’0’;
int i;
RTKernelInit(3); //initializare RTK
clrscr(); //stergere ecran
gotoxy(5,8); //pozitionare cursor
cprintf("Orice tasta–main transmite E - Iesire");
//initializare driver consola
RTKeybrdInit();
// creare Task_ora si Task_dest
RTKCreateTask(Task_ora,5,1024,"Task-tip_ora");
Handler_destB=RTKCreateTask(Task_dest,7,1024,"Dest");
//
for(;;) //bucla for infinita
{
c=RTGetCh(); //supraveghere tastatura
//
for(i=1;i<=25;i++) //bucla for finita
{
j1++;
gotoxy(5,10);
cprintf("main transmite %c ",j1);
//transmite catre Task_dest
RTKSend(Handler_dest,&j1);
RTKDelay(18);
} //sfarsit for finit
//
if(c==’E’) //testare c fata de E
exit(0); //iesire
j1=’0’; //altfel initializeaza j1
} //sfarsit for infinit
}
111
Modulul B
* *
112
Programarea aplicaţiilor de timp real
CAPITOLUL Prelucrarea
4 în timp real a
informaţiei de proces
113
Modulul B
114
Programarea aplicaţiilor de timp real
x[ n k ] ,
1
y[ n ] (4.2)
N k 0
x[ n 1 k ] .
1
y [ n 1] (4.3)
N k 0
x[ n k ] ,
1 1
y [ n 1] y [ n ] x[ n 1 k ]
N k 0
N k 0
1
y [ n 1] y [ n ] ( x[ n 1] x[ n 1 N ]). (4.4)
N
Relaţia (4.4) este de tip recurenţial întrucât valoarea curentă a
mărimii filtrate y depinde de valoarea anterioară a acesteia. În relaţia
(4.4) mai intervin două valori ale intrării şi anume: valoarea curentă şi
cea din urmă cu N paşi. Pentru determinarea valorii întârziate cu N paşi
se utilizează o structură de tip coadă ilustrată în figura 4.2.
115
Modulul B
x[n+1-(N)]
x[n+1-(N)]
x[n+1-(N-1)]
x[n+1-(2)]
x[n+1-(1)]
x[n+1]
x[n+1
]
Fig. 4.2. Organizarea cozii termenul pentru obţinerea termenului
x[n+1-N din] relaţia (4.4).
116
Programarea aplicaţiilor de timp real
F1 F2
Fig. 4.3. Fluxul informaţional aferent unui sistem de conducere:
F1, F2 - frontiere, T – traductor, EE – element de execuţie, PI – port de intrare,
PE –port de ieşire.
117
Modulul B
19
În cazul aparaturii inteligente de automatizare (Smart) această frontieră este situată la
limita respectivei instrumentații, iar transmiterea semnalelor se face în format digital.
20
CAN și CNA sunt abrevieri pentru Convertor Analog Numeric, respectiv Convertor
Numeric Analog.
21
În raport cu referința y2i
118
Programarea aplicaţiilor de timp real
uP1
F2 F1
P2_1 P2_k P2_n
iP1
P* NP uP CIU1 TP1
V mA
BC1 CAN 1
uPk iPk
V CIUk TPk
uING uCAN
REG V
mA
PERT
REG AB P2
u1
y1* N1 P1
i1 y1 SP2
REG EE SP1
BC2 CNA CUI AB
uING uCNA V mA r1
TA y2 uING
y2i mA
uING
Fig. 4.4. Circuitul informațional într-un SRA ierarhizat.
119
Modulul B
Δx Δi Δu ΔN Δx* Δx Δx*
T CIU CAN BC1 SNMD
uING mA V uCAN uING uING uING
Δxmax Δx
120
Programarea aplicaţiilor de timp real
Δu ΔN
ΔNmax
Δumax
Δimax Δi Δumax Δu
a b
Fig. 4.7. Caracteristici statice ale convertoarelor: a – CIU; b – CAN.
Δxmax Δx
121
Modulul B
x*max
SNMD: x
*
x , (4.8)
xmax
imax
T: i x , (4.9)
xmax
umax
CIU: u i , (4.10)
imax
N max
CAN: N u . (4.11)
umax
Rezolvând sistemul format din ecuaţiile (4.8)…(4.11) rezultă
pentru BC1 ecuaţia
x*max
x* N , (4.12)
N max
sau impunând pentru mărimea x* reprezentată în memorie, acelaşi
domeniu de variaţie ca pentru mărimea fizică
xmax
x* N . (4.13)
N max
Examinând relaţia (4.13) se observă că elementul BC1 este un
element liniar, a cărui caracteristică statică este reprezentată în figura
4.9.
Δx*
Δxmax
ΔNmax ΔN
122
Programarea aplicaţiilor de timp real
xmax xmin
x* xmin ( N N min ) . (4.14)
N max N min
După efectuarea calculelor în relaţia (4.14) se obţine,
xmax N min
b0 ; (4.21)
N max N min
xmax (4.22)
b1 .
N max N min
Rezultatele de mai sus confirmă faptul că indiferent de forma
de exprimare (prin variaţii sau valori absolute), BC1 prezintă o caracte-
ristică statică liniară.
123
Modulul B
Δi
Δimax
Δxmax Δx
x*max
SNMD: x
*
x , (4.23)
xmax
imax
T: i ( x )2 , (4.24)
( xmax )2
umax
CIU: u i , (4.25)
imax
N max
CAN: N u . (4.26)
umax
Rezolvând sistemul format din ecuaţiile (4.23)…(4.26) rezul-
tă pentru BC1 ecuaţia
x*max
x *
N , (4.27)
N max
sau impunând pentru mărimea x* reprezentată în memorie acelaşi do-
meniu de variaţie ca pentru mărimea fizică
124
Programarea aplicaţiilor de timp real
xmax
x* N . (4.28)
N max
Examinând relaţia (4.28) se observă că elementul BC1 este un
element neliniar, a cărui caracteristică statică este reprezentată în figu-
ra 4.11. Este de remarcat faptul că neliniaritatea introdusă de BC1
compensează neliniaritatea traductorului T, astfel încât pe ansamblu
caracteristica statică a SNMD să rezulte liniară.
Δx*
Δxmax
ΔNmax ΔN
N N min
x* xmax . (4.30)
N max N min
sau
N min xmax
2 2
xmax
x* N (4.31)
N max N min N max N min
respectiv
125
Modulul B
x* c0 c1 N , (4.32)
unde
N min xmax
2
c0 ;
N max N min (4.33)
2
xmax
c1 . (4.34)
N max N min
Exemplul 4.1
126
Programarea aplicaţiilor de timp real
Qi i
H *
N H
LT R u CAN BC1
Qe
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin R imin 250 4 103 1V ;
U
Umin Umax
127
Modulul B
de unde rezultă
N max 1023
N min umin 1 204,6 uCAN .
umax 5
H * 50
N ,
0,733138
respectiv
Exemplul 4.2
*
N Q
u CAN BC1
i R
FT
Q
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin R imin 250 4 103 1V ;
N max 2047
N min umin 1 409,4 uCAN .
umax 5
N min Qmax
2
409,4 3600
c0 900( mc / h )2 ;
N max N min 2047 409,4
2
Qmax 3600
c1 2,198( mc / h )2 / uCAN .
N max N min 2047 409,4
Δy* Δu Δi Δy Δy* Δy
ΔN
BC2 CNA CUI SRA SNTD
uING uCNA V mA uING uING uING
130
Programarea aplicaţiilor de timp real
Δy
Δymax
Δy*max Δy*
Atât pentru convertorul tensiune curent CUI, cât şi pentru cel
analog numeric CNA se presupun caracteristici statice liniare ilustrate
în figura 4.35.
Δi Δu
Δimax
Δumax
Δumax Δu ΔN
ΔNmax
a b
Fig. 4.17. Caracteristici statice ale convertoarelor: a – CUI; b – CNA.
131
Modulul B
Δi
Δimax
ymax
SNTD: y y* , (4.35)
ymax
*
ymax
SRA: y i , (4.36)
imax
imax
CUI: i u , (4.37)
umax
umax
CNA: u N . (4.38)
N max
Rezolvând sistemul format din ecuaţiile (4.35)…(4.38) rezul-
tă pentru BC2 ecuaţia
N max
N y* , (4.39)
ymax
*
132
Programarea aplicaţiilor de timp real
ΔN
ΔNmax
Fig. 4.19. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu
CM liniară.
Δymax Δy*
unde
133
Modulul B
N max N min *
N N min y , (4.46)
ymax
sau
N e0 e1 y* , (4.47)
unde
e0 Nmin , (4.48)
N max N min (4.49)
e1 .
ymax
Rezultatele de mai sus confirmă faptul că indiferent de forma de ex-
primare (prin variaţii sau valori absolute), modulul BC2 prezintă o ca-
racteristică statică liniară.
Δy
Δymax
Fig. 4.20. Caracteristica statică a SRA cu CM
neliniară din structura SNTD.
Δi
Δimax
134
Programarea aplicaţiilor de timp real
ymax
SNTD: y y* , (4.50)
ymax
*
ymax
SRA: y i , (4.51)
imax
imax
CUI: i u , (4.52)
umax
umax
CNA: u N . (4.53)
N max
Rezolvând sistemul format din ecuaţiile (4.50)…(4.53) rezul-
tă pentru BC2 relaţia
N max
N ( y* )2 , (4.54)
( ymax )
* 2
ΔN
ΔNmax
Fig. 4.21. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu CM
neliniară.
Δymax Δy*
N max N min
N N min ( y* ymin )2 . (4.56)
( ymax ymin ) 2
N f0 f1 y* f 2 ( y* )2 , (4.57)
unde
N max N min
f0 N min ( ymin )2 , (4.58)
( ymax ymin ) 2
N max N min
f1 2 ymin , (4.59)
ymax ymin
N max N min
f2 . (4.60)
( ymax ymin )2
N g0 g2 ( y* )2 , (4.61)
unde
g0 Nmin , (4.62)
N max N min
g 2 g 20 .
( ymax )2
(4.63)
136
Programarea aplicaţiilor de timp real
Exemplul 4.3
LT LC
Qe
Rezolvare
137
Modulul B
Umax
N
Nmin Nmax
de unde rezultă
N max 1023
N min umin 1 204,6 uCNA .
umax 5
138
Programarea aplicaţiilor de timp real
N 68,2 1,364 H * ,
de unde
N 68,2
H* ,
1,364
respectiv
N1 68,2 600 68,2 668,2
H1* 489,88 mm.
1,364 1,364 1,364
Exemplul 4.4
u N Q*
i BC2
CUI CNA
FC
FT
Q
Rezolvare
Umax = 2
Nmin Nmax=4095
umax umin u
u N cu u max N ,
N max N min N max
de unde rezultă
N max 4095
N min umin 0,4 819 uCNA .
umax 2
140
Programarea aplicaţiilor de timp real
Domeniu Traductor
Fig. 4.26. Limite asociate diverselor tipuri de testări a unei mărimi achiziţionate.
141
Modulul B
Ymin Ymax Y
142
Programarea aplicaţiilor de timp real
PROCEDURA TESTARE
COMANDA CALCULATA
Y
Transfera
Ycalc
Da
Ycalc ≤ Ymin
Nu
Da
Ycalc ≥ Ymax
Nu
Y=Ymin Y=Ycalc Y=Ymax
Transfera
Y
RETURN
143
Modulul B
t
de
1
e( )d Td ,
u u0 Kp e
Ti dt
(4.64)
0
144
Programarea aplicaţiilor de timp real
145
Modulul B
Initializare task
REG_PID
SEMEX=1, stabileşte valori
iniţiale pentru UC, UA, EC,
EA, EAA.
Nu
∆t=T ?
Da
P(SEMEX)
V(SEMEX) EAA=EA
Achiziționeză R
UA=UC
prin SADA
EC = I-R
Transfera UC
la EE prin SDCA
146
Programarea aplicaţiilor de timp real
Initializare task
CNS_OP
SEMEX=1, stabileşte valori iniţia-
le pentru I, CC, EA, CAA.
Nu
Tast ?
V(SEMEX)
Da
Da
P? Modif Kp Transfera I,
Nu CC, CA,
CAA în BDP
Da
I? Modif Ti
Nu
P(SEMEX)
Da
D? Modif Td
Nu
Calculează
CC, CA, CAA
Da
R? Modif I
Nu
Nu
E?
Da Fig. 4.30. Schema logică asociată taskului
CONS_OP.
EXIT
147
Modulul B
Qr TT
Qr Tm
Tm
TC
Tref u T
2 EE Proces
TC m
1 (W)
r
Tref TT
220 V
50 Hz
a) b)
Fig. 4.31. Scheme ale SRA temperatura bipozițional: a - schema principiala; b -
schema de structura; 1 – încălzitor electric; 2 – serpentină evacuare căldură; Tref,
T - temperaturi prescrisă, respectiv reglată; u - mărime de comanda (stare contact);
m - mărime de execuție (debit caloric W); Tm – temperatură ambiantă; Qr – debit
agent răcire.
u HYST
CON
DECON
T
Tmin Tref Tmax
HYST
T min Tref ; (4.72)
2
HYST
T max Tref . (4.73)
2
149
Modulul B
u
CON
a)
DECON
t
T
Tmax
Tref
Tmin HYST
T0 b)
Initializare task
REG_BP
SEMEX=1, determină valoarea
iniţială pentru comanda U
Nu
∆t=Tcom ?
Da
P(SEMEX)
V(SEMEX)
Achiziționează R prin
SADA evaluează T
Nu Da
T ≤ Tmin ?
Nu
T ≥ Tmax ?
Da
U = DECON U= CON
Transmite U la EE
prin SDCN
151
Modulul B
Nu
Tast ?
V(SEMEX)
Da
Da
I? Modif Tref
Transfera
Nu Tmin, Tmax
Da în BDP
H? Modif
HHYST
Nu
Nu P(SEMEX)
E?
Da Calculează
Tmin, Tmax
EXIT
155
Modulul B
Exerciţii şi întrebări
pentru modulul B de
EB studiu
156
Programarea aplicaţiilor de timp real
157
Modulul B
Test de autoevaluare
pentru modulul B de
TB studiu
ΔNmax=3276 uCAN
Δumax Δu
158
Programarea aplicaţiilor de timp real
x*max
SNMD: x
*
x ,
xmax
imax
T: i ( x )2 ,
( xmax ) 2
N max
CIU+CAN: N i.
imax
14. Pentru SNMD presiune reprezentat în figură se cunosc
i
Qi P *
N P
PT R u CAN BC1
Qe
Să se determine:
a – Umin şi imax;
b – rezoluţia n a CAN şi Nmax;
c – valoarea P1* a presiunii pentru N1=1000 uCAN
15. Deduceţi relaţia asociată modulului BC2 în următoarele condiţii:
ymax
SNTD: y y* ,
ymax
*
ymax
SRA: y i ,
imax
i
CNA+CUI: i max N .
N max
159
Modulul B
16. Fie SNTD ilustrat în figura de mai jos, pentru care se cunosc:
SNTD - caracteristică statică impusă liniară
SRA - Q ,Q* [ 0 30 ] mc / h , caracteristică statică
neliniară (radical);
CUI - u [ 1 5 ]V , caracteristică statică liniară ;
CNA - Nmax = 1023 uCNA , caracteristică statică liniară.
u N Q*
i BC2
CUI CNA
FC
FT
Q
Să se determine:
a – numerele de n şi Nmin şi pentru CNA;
b – relaţia de calcul pentru BC2;
c – valoarea Q1* pentru N1 500 uCNA .
160
Programarea aplicaţiilor de timp real
Soluţiile testelor de
autoevaluare
SAB
Modulul A
1. Care este diferenţa dintre conducerea corectivă şi cea preventivă ?
În cadrul conducerii corective prin acţiunea comenzii este corectată o
diferenţă (eroare) dintre obiective şi realizări, în timp ce prin conduce-
rea preventivă, prin acţiunea comenzii se previne apariţia unei aseme-
nea diferenţe.
2. Ce obiectiv al unui proces este asigurat prin funcţia de protecţie
automată ?
Prin funcţia de protecţie automată este asigurat obiectivul de securita-
te al unui proces.
3. Care sunt funcţiile dispozitivului de automatizare din structura
unui SRA ?
Funcţiile unui dispozitiv de automatizare sunt: măsură, comandă,
execuţie.
4. Când prezintă un sistem de conducere comportare în timp real ?
Un sistem de conducere prezintă comportare în timp real atunci când
reacţia sa la schimbările din proces este conformă cu inerţia acestuia.
5. Care este diferenţa dintre prelucrarea paralelă şi cea
pseudoparalelă ?
Prelucrarea paralelă, (posibilă la echipamentele cu mai multe UCP)
mai multe taskuri sunt în execuţie la un moment dat. Prelucrarea
pseudoparalelă presupune un singur task în execuţie la un moment
dat (la sistemele cu o singură UCP).
6. În ce constă obiectivul de perceptibilitate al IPTR ?
161
Modulul B
162
Programarea aplicaţiilor de timp real
163
Modulul B
Modulul B
1. Care sunt aspectele vizate atunci când se vorbeşte de structura-
rea unui limbaj de programare în timp real ?
Când se vorbeşte de structurare se au în vedere aspecte legate de tipi-
zare, abstractizare şi vizibilitate care se referă atât la date cât şi la cod.
2. Prin ce funcţie RTK este scos un task din starea Suspended ?
Prin funcţia RTKResume
3. Scrieţi funcţia RTK pentru iniţializarea nucleului, considerând
pentru taskul main prioritatea 5 şi fără handler.
Forma funcţiei este RTKernelInit(5);
4. Care este rolul taskului Idle creat la iniţializarea nucleului RTK ?
Taskul Idle se execută atunci când nici un task utilizator nu se află în
starea Current.
5. În ce situaţie ajunge un task în starea BlockedPut ?
După execuţia unei funcţii RTKPut asupra unei cutii poştale pline.
6. Scrieţi funcţia RTK care să realizeze tranziţia taskului apelant
în starea Delaying pentru 4 secunde.
Funcţia este RTKDelay(72);
7. Enumeraţi tipurile de variabile specifice nucleului RTK.
TaskHandle, TaskState, Time, Duration, Semaphore, SemaType,
Mailbox
8. Prin ce se implementează frontiera F2 la achiziţia datelor şi
transmiterea comenzilor ?
La achiziţia datelor prin modulul de calcul BC1iar la transmiterea co-
menzilor prin modulul de calcul BC2.
9. Când se consideră pregătit un task destinatar în contextul unei
funcţii de transmitere a unui mesaj.
În contextul unei funcţii de transmitere a unui mesaj, taskul destinatar
referit prin handler este pregătit) dacă se găseşte într-una din stările
BlockedReceive sau TimedReceive.
10. Denumiţi operaţiile de prelucrare primară a datelor de proces.
164
Programarea aplicaţiilor de timp real
ΔNmax=3276 uCAN
Δumax Δu
Rezolvare
N max
CIU+CAN: N i.
imax
165
Modulul B
Rezolvare
N max N max imax
N i ( x )2
imax imax ( xmax )2
max
x N
N max
x*max
BC1: x *
N .
N max
i
Qi P *
N P
PT R u CAN BC1
Qe
Să se determine:
a – Umin şi imax;
b – rezoluţia n a CAN şi Nmax;
c – valoarea P1* a presiunii pentru N1=1000 uCAN .
166
Programarea aplicaţiilor de timp real
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin R imin 50 4 103 0,2 V ;
umax 1
imax 0,02 A 20 mA.
R 50
b - se determină pentru început valoarea Nmax apelând la
caracteristica statică a CAN ilustrată mai jos.
N
Nmax
Nmin
U
Umin Umax
N max N min N
N u cu N max u ,
umax umin umax
de unde rezultă
N min 409,4
N max umax 1 2047 uCAN .
umin 0,2
n log2( Nmax 1 ) log2( 2047 1 ) log2 2048 11biti .
c
167
Modulul B
P* b0 b1 N ,
cu
Pmax 20
b1 0,012213bar / uCAN .
N max N min 2047 409,4
respectiv
P* 5 0,012213 N ,
sau
ymax
SNTD: y y* ,
ymax
*
y
SRA: y max i ,
imax
i
CNA+CUI: i max N .
N max
Rezolvare
N max N max imax
N i y
imax imax ymax
N max ymax
N * y*
ymax ymax
168
Programarea aplicaţiilor de timp real
N max
BC2: N y* .
ymax
*
16. Fie SNTD ilustrat în figura de mai jos, pentru care se cunosc:
SNTD - caracteristică statică impusă liniară;
SRA - Q ,Q* [ 0 30 ] mc / h , caracteristică statică
neliniară (radical);
CUI - u [ 1 5 ]V , caracteristică statică liniară ;
CNA - Nmax = 1023 uCNA , caracteristică statică liniară.
Să se determine:
a – numerele de n şi Nmin şi pentru CNA;
b – relaţia de calcul pentru BC2;
c – valoarea Q1* pentru N1 500 uCNA .
u N Q*
i BC2
CUI CNA
FC
FT
Q
Rezolvare
Umax = 5
Umin = 1
N[uCNA]
de unde rezultă
N max 1023
N min umin 1 204,6 uCNA .
umax 5
171
Modulul B
* *
172
Programarea aplicaţiilor de timp real
B Bibliografie
173
Modulul B
174
NICOLAE PARASCHIV
PROGRAMAREA
APLICAȚIILOR DE
TIMP REAL
- SINTEZE -
Autorul poartă întreaga răspundere morală, legală şi materială faţă de editură şi terţe
persoane pentru conţinutul lucrării.
004
Control ştiinţific:
Prof. univ. dr. ing. Gabriel Rădulescu
Prof. univ. dr. ing. Otilia Cangea
Redactor:
Conf. univ. dr. ing. Gabriela Bucur
Tehnoredactare computerizată:
Prof. univ. dr. ing. Nicolae Paraschiv
Coperta:
Şef lucr. dr. ing. Marian Popescu
Director editură:
Prof. univ. dr. ing. Şerban Vasilescu
Adresa:
Editura Universităţii Petrol-Gaze din Ploieşti
Bd. Bucureşti 39, cod 100680
Ploieşti, România
Tel. 0244-573171, Fax. 0244-575847
http://editura.upg-ploiesti.ro/
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
PREFAȚĂ
1
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
2
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
CUPRINS
PREFAȚĂ ........................................................................................................................................ 1
CUPRINS ........................................................................................................................................ 3
MODULUL DE STUDIU 1 ................................................................................................................ 7
SISTEME DE CONDUCERE ÎN TIMP REAL ....................................................................................... 7
Unitatea de învăţare 1-1.1 ......................................................................................................... 7
Funcții ale automatizării proceselor ...................................................................................... 7
1-1.1.1 Strategii de conducere .......................................................................................... 7
1-1.1.2 Monitorizarea automată ..................................................................................... 10
1-1.1.3 Protecția automată ............................................................................................ 14
1-1.1.4 Optimizarea automată ....................................................................................... 18
MODULUL DE STUDIU 1 .............................................................................................................. 21
SISTEME DE CONDUCERE ÎN TIMP REAL ..................................................................................... 21
Unitatea de învăţare 2-1.2 ....................................................................................................... 21
Ingineria aplicațiilor de timp real ........................................................................................ 21
2-1.2.1 Tipuri de aplicații de timp real ............................................................................ 21
2-1.2.2 Trăsături ale sistemelor de operare în timp real ................................................ 26
2-1.2.3 Obiectivele și principiile ingineriei programării aplicațiilor de timp real ............ 31
MODULUL DE STUDIU 2 .............................................................................................................. 39
MECANISMELE PROGRAMĂRII CONCURENTE A ......................................................................... 39
APLICAȚIILOR DE TIMP REAL ....................................................................................................... 39
Unitatea de învăţare 3-2.1 ....................................................................................................... 39
Stările și tranzițiile taskurilor .............................................................................................. 39
3-2.1.1 Stările taskurilor .................................................................................................. 39
3-2.1.2 Tranzițiile taskurilor ............................................................................................ 43
MODULUL DE STUDIU 2 .............................................................................................................. 49
MECANISMELE PROGRAMĂRII CONCURENTE A ....................................................... 49
APLICAȚIILOR DE TIMP real ............................................................................................. 49
Unitatea de învăţare 4-2.2 ....................................................................................................... 49
Conflicte potențiale în sistemele multitasking .................................................................... 49
4-2.2.1 Resurse și secțiuni critice .................................................................................... 49
4-2.2.2 Excluderea mutuală realizată cu semafoare ....................................................... 52
4-2.2.3 Excluderea mutuală realizată cu variabile de tip eveniment .............................. 56
4-2.2.4 Excluderea mutuală realizată cu mesaje și cutii poștale..................................... 59
4-2.2.5 Alte modalități de realizare a excluderii mutuale ............................................... 62
MODULUL DE STUDIU 2 .............................................................................................................. 67
MECANISMELE PROGRAMĂRII CONCURENTE A ......................................................................... 67
APLICAȚIILOR DE TIMP REAL ....................................................................................................... 67
Unitatea de învăţare 5-2.3 ....................................................................................................... 67
3
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Sincronizarea taskurilor....................................................................................................... 67
5-2.3.1 Definirea sincronizării ......................................................................................... 67
5-2.3.2 Sincronizarea realizată cu semafoare ................................................................. 69
5-2.3.3 Sincronizarea realizată cu variabile de tip eveniment ........................................ 72
5-2.3.4 Sincronizarea realizată cu mesaje și cutii poștale ............................................... 74
5-2.3.5 Sincronizarea realizată cu monitoare și blocuri de întâlnire .............................. 79
MODULUL DE STUDIU 2 .............................................................................................................. 85
MECANISMELE PROGRAMĂRII CONCURENTE A ......................................................................... 85
APLICAȚIILOR DE TIMP REAL ....................................................................................................... 85
Unitatea de învăţare 6-2.4 ....................................................................................................... 85
Comunicarea între taskuri ................................................................................................... 85
6-2.4.1 Aspecte introductive ........................................................................................... 85
6-2.4.2 Utilizarea în comunicare a semafoarelor ............................................................ 87
6-2.4.3 Utilizarea în comunicare a mesajelor și cutiilor poștale ..................................... 90
MODULUL DE STUDIU 3 .............................................................................................................. 95
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR ...................................................................... 95
DE TIMP REAL .............................................................................................................................. 95
Unitatea de învăţare 7-3.1 ....................................................................................................... 95
Cerințe și caracteristici ale limbajelor pentru programarea aplicațiilor de timp real
(LPATR) ............................................................................................................................. 95
7-3.1.1 Tipuri de LPATR ................................................................................................... 95
7-3.1.2 Cerințe impuse LPATR ......................................................................................... 98
7-3.1.3 Caracteristici ale LPATR ....................................................................................... 99
MODULUL DE STUDIU 3 ............................................................................................................ 105
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR .................................................................... 105
DE TIMP REAL ............................................................................................................................ 105
Unitatea de învăţare 8-3.2 ..................................................................................................... 105
Nucleul de timp real RTK – caracteristici, inițializare și administrare ............................. 105
8-3.2.1 Caracteristicile nucleului RTK ............................................................................ 105
8-3.2.2 Taskuri sub RTK ................................................................................................. 106
8-3.2.3 Funcții RTK de inițializare .................................................................................. 110
8-3.2.4 Funcții RTK de administrare a taskurilor ........................................................... 112
MODULUL DE STUDIU 3 ............................................................................................................ 119
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR .................................................................... 119
DE TIMP REAL ............................................................................................................................ 119
Unitatea de învăţare 9-3.3 ..................................................................................................... 119
Nucleul de timp real RTK – funcții de gestionare a timpului și semafoarelor .................. 119
9-3.3.1 Timpul în context RTK ...................................................................................... 119
9-3.3.2 Funcții RTK de gestionare a timpului ................................................................ 120
9-3.3.3 Semafoare în context RTK ................................................................................ 124
4
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
5
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
6
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 1
SISTEME DE CONDUCERE ÎN TIMP REAL
Unitatea de învăţare 1-1.1
Funcții ale automatizării proceselor
1-1.1.1 Strategii de conducere
1-1.1.2 Monitorizarea automată
1-1.1.3 Reglarea automată
1-1.1.4 Protecția automată
1-1.1.5 Optimizarea automată
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- ce este un proces;
- în ce constă conducerea unui proces;
- care sunt funcțiile automatizării proceselor;
- cum pot fi realizate obiectivele unui proces prin funcții ale automatizării.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi obiectivele unui proces;
- faci diferența între conducerea corectivă și cea preventivă;
- interpretezi funcțiile automatizării din perspectiva realizării obiectivelor
unui proces.
7
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care sunt obiectivele unui proces?
8
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Feedforward Perturbaţii
9
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Feedforward Perturbaţii
Testul de autoevaluare 1
Enumerați motivele principale care justifică strategia mixtă de
conducere (preventivă și corectivă).
10
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Indicați procedeele prin care pot fi determinate, în cadrul monitorizării,
valorile aferente parametrilor unui proces.
11
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
…
a
P
i y
DA PrT
m
p1 pk pn
b
… …
..
I P
y
m
DA PrT
12
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Parametri de
acordare Perturbaţii
i
u r
CA EE PrT T
a
Perturbaţii
I u y
CP EE PrT
Exerciţiul 3
Evidențiați principalele avantaje pe care le oferă reglarea după abatere,
respectiv cea după perturbație.
13
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 3
Precizați, prin analogie cu sistemele de conducere, strategiile pe care
le implementează SRA abatere, respectiv perturbație.
14
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Limite de avertizare
P1 Pk Pn
PROCES
TEHNOLOGIC
15
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Care este rolul BLP_A în cadrul SAA?
Limite de blocare
Resurse
P1limb Pklimb Pnlimb pentru
… … proces
ui m
BLP_B EASB SBRP
… …
T1 Tk Tn
P1 Pk Pn
PROCES
TEHNOLOGIC
16
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 5
Care este rolul BLP_B în cadrul SBA?
SBA este conectat cu SAA avarie, în sensul că scoaterea din funcțiune a
unui utilaj, a unei secvențe de instalație sau a întregii instalații este interpretată ca
o avarie.
• Sistemele de comandă automată (SCA) sunt componente ale SPA
care asigură oprirea manuală sau pornirea condiţionată a unui utilaj sau secţiune
dintr-o instalaţie gazdă a unui proces tehnologic. Condiţionarea pornirii constă în
testarea îndeplinirii unor condiţii într-o succesiune temporală impusă, care
preced, de exemplu, conectarea la resurse.
Condiții pornire
Resurse
CP1 CPk CPn pentru
proces
… …
ui m
BLP_C EASVCP SVCP
… …
PP1 PPk PPn
SPM
Parametri urmăriți la
pornire SOM
PROCES
TEHNOLOGIC
17
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
După cum rezultă din figura 1.9 unde este prezentată structura
principială, a unui SCA, acesta este un sistem cu structură deschisă care conține
ca element central Blocul Logic Program Comandă (BLP_C). Ca și în cazul
sistemelor de avertizare respectiv blocare și acest bloc are implementate funcții
logice, de data aceasta pe cele asociate programului de comandă. Pe baza
acestor funcții se generează secvența de comenzi care este aplicată, prin
intermediul EASVCP sistemului de validare a condițiilor de pornire SVCP.
Validarea este reprezentată în figura 1.9 prin închiderea unui comutator (acțiune
figurată prin săgeata punctată de culoare verde.
În urma validării, conectarea propriuzisă este realizată de către
personalul de operare prin acționarea unui element corespunzător numit generic
sistem de pornire manuală (SPM), care este asmilat, după cum este ilustrat în
figura 1.9 sub forma unui buton de acționare normal deschis.
Exerciţiul 6
Care este rolul BLP_C în cadrul SCA?
Exerciţiul 7
Ce rezultă prin soluționarea unei probleme de optimizare?
Este important de subliniat că nivelul de optimizare se situează de regulă
la un nivel superior reglării convenţionale. În acest context, comenzile rezultate
ca urmare a soluționării problemei de optimizare pot fi aplicate în calitate de
referințe sistemelor de reglare convenționale.
18
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Care sunt obiectivele unui proces?
2. Ce reprezintă conducerea unui proces?
3. Care sunt funcțiile automatizării proceselor?
4. Cine indică numărul de SRA pentru un proces?
5. Ce obiectiv al unui proces este realizat prin funcția de protectie
automată?
6. Denumiți tipurile de sisteme de protecție?
7. În ce constă avertizarea de prevenire?
Rezumat
Conducerea unui proces presupune dirijarea acestuia, prin aplicarea de
comenzi, pentru realizarea obiectivelor de calitate, eficiență, securitate.
Strategia de conducere poate fi: corectivă, preventivă, mixtă.
Conducerea automată nu implică prezența factorului uman în
adoptarea și aplicarea de comenzi.
Funcțiile automatizării proceselor sunt: monitorizarea automată,
reglarea automată, protecția automată, optimizarea automată.
Monitorizarea automată este implicată în realizarea tuturor celor patru
obiective.
Reglarea automată susține în primul rând realizarea obiectivului de
calitate.
Protecția automată asigură realizarea obiectivului de securitate.
Optimizarea automată asigură realizarea obiectivului de eficiență.
Reglarea convențională poate fi după abatere (corectivă) sau după
perturbație (preventivă).
Sistemele de protecție automată pot fi: de avertizare, de blocare, de
comandă.
Conducerea optimală presupune aplicarea către proces a comenzilor
1. Enunț
Enumerați motivele principale care justifică strategia mixtă de
conducere (preventivă și corectivă).
19
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Componenta preventivă – menținerea realizărilor la nivelul
obiectivelor în condițiile modificării uneia sau mai multor perturbații
considerate.
Componenta corectivă – aducerea realizărilor la nivelul obiectivelor în
condițiile modificării perturbațiilor neluate în considerare sau a
obiectivelor.
2. Enunț
Precizați cine indică numărul minim de sisteme de măsurat respectiv
maxim de sisteme de reglare automată pentru un proces.
Rezolvare
Numărul minim de sisteme de măsurat – este impus de numărul
gradelor de libertate.
Numărul maxim de sisteme de reglare automată – este impus de
numărul disponibil de mărimi de execuție (agenți de reglare).
3. Enunț
Precizați, prin analogie cu sistemele de conducere, strategiile pe care
le implementează SRA abatere, respectiv perturbație.
Rezolvare
SRA abatere – implementează stategia corectivă , deoarece eliminarea
abaterii (efectului) reprezintă o corecție. este impus de numărul
gradelor de libertate.
SRA perturbație – implementează stategia preventivă , deoarece se
previne apariției unei abateri (efect) la modificarea perurbațiilor
(cauzelor) considerate.
Bibliografie
1. Marinoiu V., Paraschiv, N., Automatizarea proceselor chimice.
Bucureşti, Editura Tehnică, 1992.
2. Paraschiv N., Programarea aplicațiilor de timp real, Editura
Universității Petrol-Gaze din Ploiești, 2014.
3. Pricop E., Mihalache S.F., Paraschiv N., Fattahi J., Zamfir F.,
Considerations regarding security issues impact on systems availability.
Proceedings of the 8th International Conference on Electronics,
Computers and Artificial Intelligence, ECAI 2016, Ploiesti, Romania,
2017; pp. 1–6.
20
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 1
SISTEME DE CONDUCERE ÎN TIMP REAL
Unitatea de învăţare 2-1.2
Ingineria aplicațiilor de timp real
2-1.2.1 Tipuri de aplicații de timp real
2-1.2.2 Trăsături ale sistemelor de operare în timp real
2-1.2.3 Obiectivele și principiile ingineriei programării aplicațiilor de timp real
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- în ce constă comportarea în timp real a unui sistem de conducere ;
- care sunt trăsăturile și funcțiile unui sistem de operare în timp real;
- care sunt obiectivele și principiile ingineriei programării în timp real
(IPTR);
- să care sunt etapele aferente dezvoltării unei aplicații informatice.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi un sistem de conducere în timp real;
- faci diferența între procesarea paralelă și cea pseudoparalelă;
- interpretezi problemele pe care trebuie să le soluționeze IPTR;
- stabilești etapele aferente dezvoltării unei aplicații informatice.
21
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Ce afirmă teorema Nyquist-Shannon?
Testul de autoevaluare 1
Justificați din perspectiva dinamicii unui proces sintagma comportare
în timp util sau timp specific, în calitate de alternativă la cea de
comportare în timp real.
În continuare vor fi prezentate două tipuri relevante de aplicaţii de timp
real şi anume aplicaţii de conducere şi aplicaţii tranzacţionale.
• Aplicaţiile de conducere se referă la elaborarea şi transmiterea în
timp real de comenzi, către un proces.
Pentru exemplificare în figura 1.10 se prezintă structura unei astfel de
aplicaţii, care permite realizarea următoarelor funcţii:
- achiziţia datelor;
- procesarea datelor achiziţionate;
- actualizarea bazei de date de proces;
- elaborarea comenzilor;
- procesarea comenzilor în vederea transmiterii către elementele de
execuţie;
- intervenții ale operatorului de la o consolă specializată;
- generarea de rapoarte la cerere.
1
Aplicarea către proces a unei comenzi la cărei determinare intervin mărimi cu frecvențe de
eșantionare diferite, se face cu o frecvență egală cu frecvența de eșantionare cea mai ridicată.
2
Un comportament universal ar impune o unică frecvență de eșantionare, indiferent de dinamica
proceselor, ceea ce ar încălca teorema eșantionării.
22
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MIJLOC DE CONDUCERE
COP
MEC
MGR
CTR
BDP MABDP
MPDA MPCE
TA EEA
EEN PROCES CONDUS
3
În mod uzual acesta este cunoscut ca Sistem de Interfață Proces Calculator (SIPC).
23
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Explicați rolurile MPDA și MPCE în cadrul unui sistem de de
conducere în timp real.
Operatorul procesului are la dispoziție consola operatorului (COP) prin
care poate primi rapoarte privind starea procesului. Aceste rapoarte sunt furnizate
de către modulul generare rapoarte (MGR) care procesează date preluate din
BDP. De asemenea tot de la COP operatorul poate actualiza diverse date din BDP
(prin intermediul MABDP) și poate transmite comenzi manuale (de tipul
închis/deschis) către elemente de execuție specifice (EEN) prin intermediul
SDCN.
4
Aceste componente sunt impuse de faptul că lumea reală, la care sunt conectate EPP este o
lume a analogicului (de exemplu temperatura unui produs care se încălzește într-un cuptor are
variație continuă).
24
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
Ce presupune sincronizarea modulelor MPDA, MEC și MPCE în
cadrul unui sistem de de conducere în timp real?
T1 MAT1
MASU
T2
Tn MATn BDST
25
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
26
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
5
Engl. – scheduler.
6
Engl. – time driven.
7
Engl. – event driven.
27
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Enumerați serviciile comune asigurate de resursele software de bază.
8
Fiecărui task i se atribuie contextul timpului real un indicator de urgenţă sau importanţă în
execuţie care se numeşte prioritate. Aceste poate fi un atribut fix, care să rămână nemodificat pe
durata existenţei taskului, sau variabil (care se poate schimba pe parcurs – vezi funcţia RTK
SetTaskPriority UI 8-3.2).
28
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
9
FIFO – First Input First Output
10
Engl – time sharing
29
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 3
Comentați execuția paralelă și pseudoparalelă în condițiile existenței
mai multor SRA monovariabile organizate într-un sistem de conducere
în timp real, de tipul celui ilustrat în figura 1.10.
11
Multiprogramarea presupune o execuţie întreţesută conform căreia la un moment dat un
singur task este executat, dar mai multe sunt în execuţie (respectiv au instrucţiuni care au fost
executate şi aşteaptă continuarea execuţiei).
30
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
12
În limba latină ingeniare – a născoci.
31
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
13
O metodă recomandată constă în dezvoltarea de module redundante.
14
Această obiectiv mai este cunoscut şi sub denumirea de claritate.
32
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
33
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Start dezvoltare
aplicaţie
Da
Validare
Instalare,
Analiză testare
Nu
Da
Nu Da Nu
Validare Validare
Întreținere
Specificații Codificare
Nu
Validare
Nu Da
Validare Da
Da Contract
întreținere
Proiectare
Nu
Nu Da
Validare
Încheiere dezvoltare
aplicaţie
34
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
35
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Când prezintă un sistem de conducere comportare în timp real?
2. Ce este un task?
3. Care sunt nivelurile de planificare a taskurilor de către un SOTR?
4. Ce este un sistem de operare în timp real multitasking?
5. Care sunt obiectivele ingineriei programării în timp real?
6. Denumiți fazele din dezvoltarea unei aplicații informatice.
7. Denumiți categoriile de personal implicat în dezvoltarea aplicațiilor
informatice.
Rezumat
Un sistem de conducere prezintă comportare în timp real dacă reacțiile
sale la schimbările din proces sunt în conformitate cu inerția procesului.
Având în vedere corelarea cu inerția, o denumire alternativă pentru sintagma
timp real este cea de timp util.
Un sistem de operare în timp real (SOTR) asigură planificarea pentru
execuție a taskurilor condiționată de timp sau de evenimente externe. Un
SOTR capabil să asigure o procesare paralelă sau psudoparalelă a taskurilor se
numește sistem de operare în timp real multitasking.
Ingineria programării în timp real (IPTR) încadrează concepte,
principii, metode şi instrumente de dezvoltare și întreținere a programelor
destinate aplicaţiilor de timp real.
Obiectivele IPTR sunt legate de modularitatea, eficiența, fiabilitatea și
perceptibilitatea produselor informatice dezvoltate.
Fazele din dezvoltarea unui produs informatic sunt: analiză, elaborare
specificații, proiectare, codificare în program (programare), instalare și
testare (implementare), întreținere.
Pentru dezvoltarea aplicațiilor (conform fazelor de mai sus) poate fi
utilizat modelul cascadă sau modelul iterativ.
36
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1. Enunț
Justificați din perspectiva dinamicii unui proces sintagma comportare
în timp util sau timp specific, în calitate de alternativă la cea de
comportare în timp real.
Rezolvare
Dinamica unui proces este cuantificată în viteza de răspuns, sau în
timpul de răspuns al acestuia la modificarea intrării sau intrărilor.
Funcție de de acest timp se estimează frecvența (respectiv intervalul)
de eșantionare pentru păstrarea consistenței informaționale. De
exemplu un proces de transport prin conducte a unui lichid are o inerție
redusă (răspunde mai repede) în raport cu un proces de amulare a unui
lichid într-un vas. În aceste condiții frecvența de eșantionare a
semnalului de la un traductor de debit va fi mai mare decât frecvența
de eșantionare a semnalului de la un traductor de nivel.
Dependența intervalului între eșantionări față de timpul de răspuns
justifică denumirea de timp util (specific).
2. Enunț
Ce presupune sincronizarea modulelor MPDA, MEC și MPCE în
cadrul unui sistem de conducere în timp real?
Rezolvare
Sincronizarea este realizată cu timpul în sensul că modulele MPDA,
MEC și MPCE se activează la intervale de timp prestabilite.
3. Enunț
Comentați execuția paralelă și pseudoparalelă în condițiile existenței
mai multor SRA monovariabile organizate într-un sistem de conducere
în timp real, de tipul celui ilustrat în figura 1.10.
Rezolvare
Execuție paralelă
a- se achiziționează simultan în cadrul unei cuante de timp, prin
SADA, semnalele de la toate traductoarele;
b- se activează simultan în cadrul unei cuante de timp toate
modulele MPDA (conversie în unități inginerești);
c- se determină simultan în cadrul unei cuante de timp toate
comenzile (în unități inginerești);
37
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Bibliografie
1. Bărbat B., Filip Gh. F., Informatica industrială. Ingineria programării în
timp real, Bucureşti, Editura Tehnică, 1997.
2. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
3. Paraschiv N., Achiziția și prelucrarea datelor, Editura Universității Petrol-
Gaze din Ploiești, 2013.
4. Paraschiv N., Programarea aplicațiilor de timp real, Editura Universității
Petrol-Gaze din Ploiești, 2014.
5. https://ro.wikipedia.org/wiki/Inginerie#cite_note-1
6. https://ro.wikipedia.org/wiki/Inginerie_software
38
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 2
MECANISMELE PROGRAMĂRII CONCURENTE A
APLICAȚIILOR DE TIMP REAL
Unitatea de învăţare 3-2.1
Stările și tranzițiile taskurilor
3-2.1.1 Stările taskurilor
3-2.1.2 Tranzițiile taskurilor
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- când două taskuri sunt paralele;
- diferența dintre taskurile interactive și cele disjuncte;
- care sunt mecanismele implementate de un SOTRM în calitate de suport
pentru execuția intercalată a taskurilor;
- structura stratificată a unei aplicații de timp real.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi lucrul în întreruperi asociat execuției intercalate a taskurilor;
- caracterizezi stările și substările unui task;
- caracterizezi tranzițiile între stări și substări împreună cu directivele
aferente;
- să construiești graful tranzițiilor între stări și substări.
15
Atributul de paralel are în vedere execuţia paralelă sau pseudoparalelă a mai multor acţiuni.
Atributul concurent se referă la faptul că taskurile se află în competiţie pentru deţinerea de
resurse.
39
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Operaţii
a
….. ….. A C
A A A B
t
Cereri de
întrerupere
b
Execuţie task
Cerere întrerupere
Execuţie rutină
tratare întrerupere
Exerciţiul 1
Când este posibilă procesarea pur paralelă a taskurilor?
40
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Taskuri utilizator
Taskuri sistem
Nucleu SOTRM
Hardware
41
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
42
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Când se găsește un task în substarea blocat?
Testul de autoevaluare 1
Comentați ce presupune preluarea controlului UCP de către taskul C
de avertizare potrivit reprezentării din figura 2.1.
43
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Aşteptare ACTIV
Aşteptare Preluare
GATA DE EXECUŢIE
BLOCAT
EXECUŢIE
Continuare Eliberare
Stop forţat din alt task Start Stop forţat din alt task
Stop normal
INACTIV
Instalare Ştergere
NEINSTALAT
44
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
Comentați când, unde și prin ce directive se realizează tranziția unui
task din substarea Execuție a stării Activ.
45
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Când două taskuri sunt interactive?
2. Care sunt secțiunile unui task?
3. Care sunt substările stării Activ asociate unui task?
4. Ce directivă determină crearea blocului descriptor al taskului?
5. Din ce stare/substare este posibilă tranziția unui task în substarea
Execuție?
6. În ce situație se realizează tranziția Gata de execuție – Blocat?
7. Ce conține graful ilustrat în figura 2.3 în calitate de noduri și arce?
Rezumat
Pentru dezvoltarea aplicațiilor de timp real se apelează la programarea
paralelă.
Dacă există o singură UCP execuția este pseudoparalelă (intercalată).
Execuția intercalată a taskurilor are ca suport sistemul de întreruperi și
necesită deținerea de către SOTRM a capabilităților pentru taskuri de: activare
și dezactivare, salvare și restaurare a contextului, excludere mutuală,
sincronizare, comunicare.
Evoluția unui sistem de taskuri interactive (respectiv cele care
comunică și utilizează resurse în comun) este influențată de modurile în care
sunt planificate pentru execuție și în care se efectuează tranzițiile.
Unui task i se asociază în memoria internă secțiuni de cod , date și
stivă.
În abordarea prezentată un task se poate găsi într-una din stările
neinstalat, inactiv, activ. Stării activ, îi sunt specifice substările execuție, gata
de execuție, blocat.
Tranzițiile între stări și substări se realizează prin construcții
imperative neîntreruptibile numite directive sau primitive. Acestea pot fi
lansate de către taskul aflat în execuție sau de către SOTRM.
46
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1. Enunț
Comentați ce presupune preluarea controlului UCP de către taskul C
de avertizare potrivit reprezentării din figura 2.1.
Rezolvare
Taskul de avertizare este în mod normal în starea Inactiv. Cererea de
întrerupere apare ca urmare a unui eveniment semnificativ, reprezentat
de încălcarea limitei de către un parametru. Prin directiva Start taskul
tranzitează în substarea Gata de Execuție și de aici prin directiva
Preluare în substarea Execuție. Taskul care deținea controlul UCP la
momentul apariției evenimentului semnificativ este trecut prin
directiva Eliberare în substarea Gata de Execuție.
2. Enunț
Comentați când, unde și prin ce directive se realizează tranziția unui
task din substarea Execuție a stării Activ.
Rezolvare
Comentariul se va baza pe graful tranzițiilor ilustrat în figura 2.3.
Din substarea Execuție sunt posibile tranzițiile în:
- starea Inactiv, prin directiva Stop normal, la o terminare normală a
taskului (de exemplu taskul de avertizare din testul de autoevaluare 1);
- substarea Gata de Execuție, prin directiva Eliberare, la declararea
unui eveniment semnificativ, cum ar de exemplu expirarea cuantei de
timp alocate;
- substarea Blocat, prin directiva Așteptare, în situația în care
continuarea execuției este condiționată (un exemplu de condiție este
cea legată de trecerea unui interval de timp).
Bibliografie
1. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
2. Paraschiv N., Achiziția și prelucrarea datelor, Editura Universității Petrol-Gaze
din Ploiești, 2013.
3. Paraschiv N., Programarea aplicațiilor de timp real, Editura Universității
Petrol-Gaze din Ploiești, 2014.
4. Robu N., Programare concurentă. Mecanisme suport orientate timp real,
Timişoara, Editura Politehnica, 2007.
47
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 2
MECANISMELE PROGRAMĂRII CONCURENTE A
APLICAȚIILOR DE TIMP real
Unitatea de învăţare 4-2.2
Conflicte potențiale în sistemele multitasking
4-2.2.1 Resurse și secțiuni critice
4-2.2.2 Excluderea mutuală realizată cu semafoare
4-2.2.3 Excluderea mutuală realizată cu variabile de tip eveniment
4-2.2.4 Excluderea mutuală realizată cu mesaje și cutii poștale
4-2.2.5 Alte modalități de realizare a excluderii mutuale
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- diferența dintre resursele locale și cele comune;
- necesitatea excluderii mutuale (EM) pentru utilizarea resurselor critice fără a
genera situații conflictuale;
- cerințele care trebuie respectate la implementarea excluderii mutuale;
- utilizarea diverselor instrumente pentru implementarea excluderii mutuale.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- identifici resursele critice;
- caracterizezi utilizarea semafoarelor și variabilelor de tip eveniment pentru
implementarea excluderii mutuale;
- caracterizezi utilizarea cutiilor poștale și mesajelor pentru implementarea
excluderii mutuale;
- aplici excluderea mutuală în aplicațiile multitasking de conducere în timp
real.
16
În mod obişnuit acestea sunt cunoscute ca Operaţii Fundamentale Multitasking.
49
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
50
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care este diferența dintre o resursă locală și una comună?
17
Resursele reentrante pot fi considerate resurse partajabile cu n tinzând către infinit.
51
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Care este condiția ca un task să își execute o secțiune critică referitoare
la o anumită resursă?
18
Indivizibilitatea are în vedere faptul că cele două funcţii nu pot fi întrerupte.
19
First Input First Output
20
univoce – câte o prioritate pentru fiecare task, neunivoce – o prioritate pentru mai multe taskuri.
52
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
I←I-1
DA NU
I≥0
Se apelează dispecerul
Testul de autoevaluare 1
Interpretați, pe baza schemei logice din figura 2.4 operația P pentru un
semafor S binar.
53
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
I←I+1
NU DA
I ≤0
Testul de autoevaluare 2
Interpretați, pe baza schemei logice din figura 2.5, operația V pentru
un semafor S binar.
54
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
..SEMEX=1.. ..SEMEX=1..
NU NU
Δt_ex_T1? Δt_ex_T2?
DA DA
P1_T1 P1_T2
P(SEMEX P(SEMEX
V(SEMEX) V(SEMEX)
P2_T1 P2_T1
55
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Din cele expuse rezultă că în intervalul de timp în care unul dintre cele
două taskuri se află în propria secţiune critică referitoare la o anumită resursă
SEMEX=0, aspect evidenţiat şi în figura 2.6. În aceste condiţii dacă celălalt
task este în situația de a executa propria secţiune critică referitoare la aceiaşi
resursă, va aplica directiva P(SEMEX), ceea ce va determina blocarea sa întrucât
după decrementare va rezulta SEMEX = -1.
După ieşirea din secţiunea critică, execuţia directivei V(SEMEX) va
determina SEMEX=0 şi conform celor precizate anterior, taskul aflat în prima
poziţie în coada C aferentă semaforului SEMEX , va fi deblocat21 şi va putea
pătrunde la rândul său în propria secţiune critică.
Având în vedere că SEMEX este iniţializat cu valoarea 1, dacă de
exemplu, după iniţializare, pentru taskul T1se impune accesul în secţiunea sa
critică, acest lucru va fi posibil întrucât directiva P(SEMEX) nu va bloca acest
task. Dacă în timp ce T1 se află în secţiunea sa critică , T2 va ajunge la iminenţa
intrării în secţiunea sa critică, acest deziderat nu se va putea realiza întrucât
directiva P(SEMEX) va determina blocarea Taskului T2 la semaforul SEMEX.
Deblocarea se va produce când T1 va termina de executat secţiunea sa critică
după care va executa directiva V(SEMEX). Ca urmare a acestei directive SEMEX
va căpăta valoarea 0 (zero) şi T2 va trece în starea gata de execuţie urmând a fi
planificat pentru execuţia secţiunii sale critice.
Indiferent de numărul taskurilor care trebuie să se excludă mutual se
utilizează un singur semafor binar iniţializat în fiecare task cu valoarea 1 (unu).
Testul de autoevaluare 3
Interpretați, pe baza schemei logice din figura 2.6, în ce situație un al
treilea task T3 își va putea accesa secțiunea critică referitoare la o
resursă utilizată în comun cu taskurile T1 și T2.
21
Pentru ca soluţia să fie funcţională, semaforul SEMEX nu trebuie aservit altor scopuri în afara
excluderii mutuale.
22
Alternative pot fi VTE=ADEV →VTE=1 și VTE=FALS →VTE=0.
56
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
23
Ca şi în cazul semafoarelor, variabila de tip eveniment EVEX va trebui utilizată numai la
implementarea excluderii mutuale.
57
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
…EVEX=ADEV… …EVEX=ADEV…
NU NU
Δt_ex_T1? Δt_ex_T2?
DA DA
P1_T1 P1_T2
NU NU
? ?
EVEX=ADEV EVEX=ADEV
ŞTERGE(EVEX) ŞTERGE(EVEX)
ÎNSCRIE(EVEX) ÎNSCRIE(EVEX)
P2_T1 P2_T2
58
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Ce valoare trebuie să aibă o VTE utilizată în excluderea mutuală
pentru ca un task să își poată executa secțiunea critică?
24
FIFO – First Input First Output (Primul Intrat Primul Ieșit).
59
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
25
Utilizarea căsuţei poştală CPEX şi a mesajului MESEX trebuie să fie numai în excludere
mutuală. utilizată numai la implementarea excluderii mutuale.
60
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
DA DA
P1_T1 P1_T2
NU ? ? NU
MESEX în CPEX MESEX în CPEX
DA DA
PREIA MESEX din CPEX PREIA MESEX din CPEX
GET GET
CPEX
SCr_T1 SCr_T2
PUT PUT
DEPUNE MESEX în CPEX DEPUNE MESEX în CPEX
P2_T1 P2_T2
Testul de autoevaluare 4
Interpretați, pe baza schemei logice din figura 2.8, în ce situație un al
treilea task T3 își va putea accesa secțiunea critică referitoare la o
resursă utilizată în comun cu taskurile T1 și T2.
61
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
62
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
63
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Care sunt operațiile fundamentale multitasking?
2. Ce este o resursă critică?
3. În ce constă excluderea mutuală (EM)?
4. Care sunt recomandările lui Tanenbaum pentru implementarea
EM?
5. Ce este un semafor?
6. Pe ce operație se poate realiza blocarea unui task la un semafor?
7. Ce valoare are un semafor utilizat în EM pe durata execuției unei
secțiuni critice?
8. Ce tip de mesaj se utilizează la implementarea EM cu ajutorul
cutiilor poștale?
9. Ce valoare are o variabilă de tip eveniment utilizată în EM pe
durata execuției unei secțiuni critice?
10. Indicați alte metode pentru implementarea EM?
Rezumat
Pe parcursul evoluției lor taskurile utilizează resurse, între care
importante sunt cele critice, care pot fi aceesate la un moment dat de către un
singur task. Secțiunea critică este secțiunea în care un task accesează o
resursă critică.
Excluderea mutuală (EM) este operația multitasking ce reglementează
accesarea neconflictuală a resurselor critice, în sensul că autorizează la un
moment dat execuția de către un singur task a propriei resurse critice în care
este utilizată o asemenea resursă.
EM realizată cu semafoare presupune utilizarea unui singur semafor
binar inițializat cu valoarea zero. Înainte de intrarea în secțiunea critică asupra
acestui semafor se execută operația P, iar după execuția secțiunii critice
operația V. Pe durata execuției secțiunii critice semaforul implicat are
valoarea zero.
EM realizată cu cutii poștale (CP) presupune utilizarea unui mesaj
simbolic și a unei singure CP. Primul task ce se inițializează depune mesajul
în CP. Înainte de intrarea în secțiunea critică asupra mesajul este preluat din
CP, iar după execuția secțiunii critice mesajul este depus în CP. Pe durata
execuției secțiunii critice cutia poștală este vidă (nu conține mesajul
simbolic).
Pentru implementarea EM mai pot fi implicate: variabile de tip
eveniment, fanioane, fanioane de excluziune, blocuri de tip resursă,
monitoare, dezacivarea întreruperilor.
64
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1. Enunț
Interpretați, pe baza schemei logice din figura 2.4 operația P pentru un
semafor S binar.
Rezolvare
a) I=0 (I este variabila de tip întreg asociată taskului S);
I=I-1= -1 → I<0 → Se blocheză taskul apelant→ Se apelează
dispecerul → Se aduce în execuție alt task.
b) I=1 (I este variabila de tip întreg asociată taskului S);
I=I-1=0 → I=0 → Se continua execuția taskului apelant.
2. Enunț
Interpretați, pe baza schemei logice din figura 2.5 operația V pentru un
semafor S binar.
Rezolvare
a) I=-1 (I este variabila de tip întreg asociată taskului S);
I=I+1= 0 → I=0 → Se deblochează taskul aflat pe prima poziție în
coada de așteptare la semaforul S → Se apelează dispecerul → Se
continuă execuția taskului apelant.
b) I=0 (I este variabila de tip întreg asociată taskului S);
I=I+1=1 → I=1 → Se continua execuția taskului apelant.
3. Enunț
Interpretați, pe baza schemei logice din figura 2.6, în ce situație un al
treilea task T3 își va putea accesa secțiunea critică referitoare la o
resursă utilizată în comun cu taskurile T1 și T2.
Rezolvare
Un al treilea task T3 își va putea accesa secțiunea critică numai dacă
SEMEX=1, respectiv dacă în acest task se va putea efectua operația
P(SEMEX).
65
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
4. Enunț
Interpretați, pe baza schemei logice din figura 2.8, în ce situație un al
treilea task T3 își va putea accesa secțiunea critică referitoare la o
resursă utilizată în comun cu taskurile T1 și T2.
Rezolvare
Un al treilea task T3 își va putea accesa secțiunea critică numai dacă
CPEX conține MESEX, respectiv dacă în acest task se va putea prelua
MESEX din CPEX.
Bibliografie
1. Bărbat B., Filip Gh. F., Informatica industrială. Ingineria programării în
timp real, Bucureşti, Editura Tehnică, 1997
2. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
66
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 2
MECANISMELE PROGRAMĂRII CONCURENTE A
APLICAȚIILOR DE TIMP REAL
Unitatea de învăţare 5-2.3
Sincronizarea taskurilor
5-2.3.1 Definirea sincronizării
5-2.3.2 Sincronizarea realizată cu semafoare
5-2.3.3 Sincronizarea realizată cu variabile de tip eveniment
5-2.3.4 Sincronizarea realizată cu mesaje și cutii poștale
5-2.3.5 Sincronizarea realizată cu monitoare și blocuri de întâlnire
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- particularitatea sincronizării în cadrul operațiilor multitasking;
- necesitatea definirii punctelor de sincronizare în cazul sincronizării a două
taskuri;
- tratarea uniformă a sincronizării cu timpul și a celei cu un eveniment extern;
- utilizarea diverselor instrumente pentru implementarea sincronizării.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi sincronizarea între taskuri, cu timpul sau cu evenimente
externe;
- caracterizezi utilizarea semafoarelor și variabilelor de tip eveniment pentru
implementarea sincronizării;
- caracterizezi utilizarea cutiilor poștale și mesajelor pentru implementarea
sincronizării;
- aplici sincronizarea în aplicațiile multitasking de conducere în timp real.
67
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Când se impune sincronizarea unui task cu timpul, respectiv cu un
eveniment extern?
68
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δt Δt Δt Δt Δt
t t
τ τ τ τ τ
a b
Fig. 2.9. Ilustrarea sincronizării cu timpul:
a – intervalul de execuţie τ în afara intervalului de sincronizare Δt;
b – intervalul de execuţie τ în interiorul intervalului de sincronizare Δt.
69
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
SEMSYNC1=1 SEMSYNC2=0
NU NU
Δt_ex_T1? Δt_ex_T2?
DA DA
P1_T1 P1_T2
P(SEMSYNC1) P(SEMSYNC2)
PS1 PS2
V(SEMSYNC2) V(SEMSYNC1)
P2_T1 P2_T2
70
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T0 TASK T1
Iniţializare T0 Iniţializare T1
SEMSYNC=0 SEMSYNC=0
NU P1_T1
EVEXT?
DA
P(SEMSYNC)
V(SEMSYNC)
P2_T1
Testul de autoevaluare 1
Construiți o versiune a reprezentării din figura 2.11, în care EVEXT
este reprezentat de apăsarea unei taste. Deblocarea taskului T1 se
produce la apăsarea tastei D, apăsarea altei taste rămânând fără efect.
TASK T0 TASK T1
Iniţializare T0 Iniţializare T1
SEMSYNC=0 SEMSYNC=0
NU
Δt_ex_T1? P(SEMSYNC)
DA
P_T1
V(SEMSYNC)
71
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Explicați de ce taskul T1 din figura 2.12 este blocat între execuții pe
directiva P(SEMSYNC).
26
Timpul de execuţie al taskului T1 este inclus în acest interval.
72
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
AŞTEAPTĂ (F)
NU NU FTE = VTE1 VTE 2
EVEX1? EVEX2?
NU
DA DA FTE=ADEV?
ÎNSCRIE(VTE1) ÎNSCRIE(VTE2)
DA
P_T3
P_T1 P_T2
ŞTERGE(VTE1)
ŞTERGE(VTE2)
Testul de autoevaluare 2
Construiți o versiune a reprezentării din figura 2.12 (sincronizarea cu
timpul), în care se utilizează pentru sincronizare variabila de tip
eveniment EVSINT .
73
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1
TASK T2
Iniţializare T1
Iniţializare T2
DA
Mes în C0?
NU NU
PREIA Mes din C0 MES_SYNC în C1?
GET GET
DA
(PRE)
C0 PREIA MES_SYNC din C1
t=Δt?
NU C1
DA DEPUNE MES_CONF în C2
DEPUNE MES_SYNC în C1
PUT
PUT
(DEP) (DEP)
P_T2
NU
MES_CONF în C2? C2
DA GET
PREIA MES_CONF din C2 (PRE)
74
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
75
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δt Δt Δt Δt
t
t
Ex. Ex. Ex. Ex.
Task Task Task Task
T2 T2 T2 T2
Fig. 2.16. Sincronizarea cu timpul: execuţia taskului T2 se face în
exteriorul cuantei de timp Δt.
Iniţializare T2
DA
Mes în C0?
NU
PREIA Mes din C0
Fig. 2.17. Utilizarea unei cutii poştale
GET
(PRE)
vide pentru sincronizarea cu timpul:
C0 – cutie poştală; P_T2 procedură a
C0
t=Δt? taskului T2.
NU
DA
P_T2
76
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Explicați așteptarea temporizată la CP-C0 în exemplele ilustrate în
figurile 2.14 și 2.17.
Iniţializare T1 Iniţializare T2
Iniţializare T0
NU
NU NU
EV_EXT? MES_EV MES_SYNC
PUT în C0? în C1?
DA GET DA GET
(DEP) DA
DEPUNE (PRE)
PREIA (PRE) PREIA
MES_EV
în C0 MES_EV MES_SYNC
din C0 din C1
C0
C1
NU P_T2
MES_CONF
în C2? C2
DA
PREIA GET
MES_CONF
din C2 (PRE)
77
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
C0
P_T2
După cum se observă din figura 2.19, între două momente ale producerii
evenimentului extern EV_EXT taskurile T0 şi T2 sunt blocate după cum urmează:
- T0 – în aşteptarea producerii evenimentului EV_EXT;
- T2 – la cutia poştală C0 în aşteptarea mesajului MES_EV referitor la
producerea evenimentului extern.
În aceste condiţii taskul T2 este deblocat în momentul în care în cutia
poştală C0 este depus MES_EV asociat producerii evenimentului extern.
78
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 3
Construiți o versiune a reprezentării din figura 2.10 (sincronizarea a
două taskuri), în care se utilizează pentru sincronizare cutiile poștale
CS_1 și CS_2 și mesajul simbolic M_S.
Punct de întâlnire
(rendez – vous)
79
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
80
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Când se consideră sincronizate două taskuri?
2. Ce presupune sincronizarea unui task cu timpul?
3. Ce presupune sincronizarea unui task cu un eveniment extern?
4. Ce operație se execută asupra unui semafor în taskul planificator
după producerea evenimentului extern sau după trecerea timpului
specificat?
5. Ce presupune utilizarea unei cutii poștale în sincronizarea cu
timpul?
6. Ce tip de semafor se utilizează în operația de sincronizare?
7. Ce tip de mesaj se utilizează în sincronizarea implementată cu
ajutorul cutiilor poștale?
8. Care este rolul cutiilor poștale C0, C1, C2 în cazul sincronizării cu
timpul ilustrată în figura 2.14?
9. Care este rolul cutiilor poștale C0, C1, C2 în cazul sincronizării cu
un eveniment extern ilustrată în figura 2.15?
10. Explicați utilizarea mecanismului rendez-vous în sincronizare.
Rezumat
Sensul general al sincronizării este acela de corelare în timp, respectiv
de coordonare.
Sincronizarea unui task se poate realiza cu un alt task, cu timpul sau
cu un eveniment extern. Sincronizarea cu timpul poate fi interpretată din
perspectiva sincronizării cu evenimente externe, considerând întreruperile de
la ceasul de timp real ca fiind astfel de evenimente.
Sincronizarea între două taskuri presupune definirea unor puncte de
sincronizare. Pe durata în care un task așteaptă realizarea unei condiții de
timp sau producerea unui eveniment extern un task se găsește în substarea
blocat a stării active.
Semafoarele și variabilele de tip eveniment pot fi utilizate pentru toate
tipurile de sincronizări.
În ceea ce privește cutiile poștale) acestea sunt adecvate cu precădere
sincronizării cu timpul și cu evenimente externe.
Tot pentru implementarea mai pot fi utilizate monitoare și mecanismul
rendez-vous (blocuri de întâlnire).
81
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
TASK T0 TASK T1
Iniţializare T0 Iniţializare T1
SEMSYNC=0 SEMSYNC=0
NU
P1_T1
TAST?
DA
NU P(SEMSYNC)
D?
DA P2_T1
V(SEMSYNC)
82
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
2. Enunț
Construiți o versiune a reprezentării din figura 2.12 (sincronizarea cu
timpul), în care se utilizează pentru sincronizare variabila de tip
eveniment EVSINT .
Rezolvare
TASK T0 TASK T1
Iniţializare T0 Iniţializare T1
EVSINT=FALS EVSINT=FALS
ASTEAPTĂ(EVSINT)
NU
Δt_ex_T1? NU
EVSINT=
ADEV?
DA
DA
ÎNSCRIE(EVSINT)
ȘTERGE(EVSINT)
P_T1
3. Enunț
Construiți o versiune a reprezentării din figura 2.10 (sincronizarea a
două taskuri), în care se utilizează pentru sincronizare cutiile poștale
CS_1 și CS_2 și mesajul simbolic M_S.
83
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
TASK T1 TASK T2
Rezolvare
Iniţializare T1 Iniţializare T2
PUT
(DEP)
DEPUNE M_S în CS_1
NU NU
Δt_ex_T1? Δt_ex_T2?
DA DA
P1_T1 P1_T2
NU
NU
M_S în CS_1? M_S în CS_2?
PS1
GET
DA (PRE) DA
PS2
PREIA M_S DIN CS_1 CS_1 PREIA M_S DIN CS_2
PUT
DEPUNE M_S în CS_2 (DEP) DEPUNE M_S în CS_1
Bibliografie
1. Bărbat B., Filip Gh. F., Informatica industrială. Ingineria programării în
timp real, Bucureşti, Editura Tehnică, 1997
2. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
84
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 2
MECANISMELE PROGRAMĂRII CONCURENTE A
APLICAȚIILOR DE TIMP REAL
Unitatea de învăţare 6-2.4
Comunicarea între taskuri
6-2.4.1 Aspecte introductive
6-2.4.2 Utilizarea în comunicare a semafoarelor
6-2.4.3 Utilizarea în comunicare a mesajelor și cutiilor poștale
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- necesitatea comunicării pentru taskurile interactive;
- modul de realizare a comunicării bidirecționale prin conducte;
- utilizarea semafoarelor pentru gestionarea comunicării prin conductă între
două taskuri;
- utilizarea mesajelor de trecere și a cutiilor poștale pentru implementarea
comunicării între două taskuri.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi când se impune utilizarea mesajelor informaționale, respectiv a
celor simbolice pentru implementarea comunicării între taskuri;
- caracterizezi utilizarea semafoarelor pentru implementarea comunicării;
- caracterizezi utilizarea cutiilor poștale și mesajelor pentru implementarea
comunicării.
85
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care este diferența dintre transmiterea directă și cea indirectă a unui
mesaj?
Taskul i Conducta 1
Conducta 2
Taskul j
86
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Ce este o conductă?
P1_TCONS TCONS
cdata
NPROD N NCONS
N
.
.
BUF .
3 3
2 2
1 1
pdata
P1_TPROD TPROD
87
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
NU NU
Δt_ex_TPROD? Δt_ex_TCONS?
DA DA
P1_TPROD(pdata) P1_TCONS
P(SGOL) V(SGOL)
P(SEMEX) P(SEMEX)
NPROD=NPROD+1 NCONS=NCONS+1
DA DA
NPROD=N+1? NCONS=N+1?
NPROD=1 NCONS=1
NU NU
V(SEMEX) V(SEMEX)
V(SPLIN) P(SPLIN)
P2_TPROD P2_TCONS(cdata)
88
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Explicați în ce situații se blochează taskul TPROD.
89
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Explicați în ce situații se blochează taskul TCONS.
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
P1_T1 P1_T2
? NU
NU ? T1 gata transmisie
T2 gata recepţie
SEND
DA DA
T1 TRANSMITE MES_ INF la T2 T2 RECEPTIONEAZA MES_ INF
de la T1
RECEIVE
NU ? GET
MES_CONF în CP1 PUT
(PRE) CP1 (DEP)
DA
T1 PREIA MES_CONF din CP1 T2 DEPUNE MES_CONF în CP1
P2_T1 P2_T2
90
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Construiți o versiune a comunicării ilustrate în figura 2.24 în care
pentru transmiterea mesajului informațional se utilizează cutia poștală
CP1 , iar confirmarea se transmite sub forma unui mesaj de trecere.
91
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Care sunt tipurile de taskuri din punctul de vedere al comunicării?
2. În ce categorie (producător/consumator) se încadrează taskurile
transmițătoare?
3. În ce categorie (producător/consumator) se încadrează taskurile
receptoare?
4. Care este diferența între comunicarea directă și cea indirectă dintre
două taskuri?
5. Ce tip de semafor se utilizează pentru gestionarea comunicării
printr-o conductă (buffer)?
6. În ce moment un task producător poate transmite un mesaj unui
task receptor?
7. În ce moment un task consumator poate recepționa un mesaj de la
un task transmițător?
8. Ce operație execută Task 1 înaintea preluării mesajului de
confirmare din CP1 (figura 2.24)?
Rezumat
Comunicarea este o caracteristică a taskurilor interactive.
Uzual, comunicarea se realizează prin mecanismul producător-
consumator, taskurile care trimit mesaje fiind de tip producător, iar cele care
primesc mesaje de tip consumator.
Comunicarea între două taskuri poate fi directă sau indirectă. Pentru
comunicarea directă se utilizează mesajele de trecere, iar pentru cea indirectă
conductele.
Pentru gestionarea comunicării prin conducte se recomandă utilizarea
semafoarelor generale. Comunicarea prin conducte este posibilă dacă există
spațiu disponibil (la depunere – scriere), respectiv mesaje disponibile (la
preluare – citire).
Comunicarea prin mesaje de trecere se poate realiza dacă ambele
taskuri (producător și consumator) sunt pregătite (respectiv sunt gata) pentru
transmiterea, sau după caz recepționarea mesajului.
Taskurile pot transfera și mesaje de confirmare, prin aceleași metode și
cu respectarea acelorași reguli utilizate la transferul mesajelor informaționale.
92
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
TASK T1 TASK T2
Iniţializare T1 Iniţializare T2
P1_T1 P1_T2
PUT GET ?
NU NU
? Mes. disp. în CP1
Sp. disp. în CP1 CP1 ii
i (DEP) (PRE)
DA DA
T1 DEPUNE MES_ INF în CP1 T2 PREIA MES_ INF din CP1
NU ? ? NU
T2 gata transmisie T1 gata recepție
SEND
DA DA
T1 RECEPTIONEAZA MES_ CONF T2 TRANSMITE MES_CONF
de la T2 la T1
P2_T1 RECEIVE
P2_T2
93
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Bibliografie
1. Bărbat B., Filip Gh. F., Informatica industrială. Ingineria programării în
timp real, Bucureşti, Editura Tehnică, 1997
2. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
94
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 7-3.1
Cerințe și caracteristici ale limbajelor pentru programarea
aplicațiilor de timp real (LPATR)
7-3.1.1 Tipuri de LPATR
7-3.1.2 Cerințe impuse LPATR
7-3.1.3 Caracteristici ale LPATR
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- ce este un metalimbaj;
- ce este și cum se construiește un graf sintactic;
- care sunt cerințele impuse unui LPATR;
- care sunt caracteristicile cu care un LPATR răspunde cerințelor.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- construiești un graf sintactic a unei noțiuni aferente unui limbaj de
programare;
- caracterizezi un LPATR după modul în care acesta răspunde cerințelor
impuse;
- identifici caracteristicile unui LPATR.
95
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Prin ce se implementează într-un graf sintactic elementele
fundamentale ale programării structurate?
0 1 2 ... 8 9
96
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
CZ
literă
literă
cifră
Testul de autoevaluare 1
Construiți graful sintactic pentru definirea noțiunii număr real zecimal
cu semn. Numărul va conține parte întreagă, separator (punct) și parte
fracționară.
97
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
98
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Enumerați cerințele impuse unui LPATR.
• Structurarea
Când se vorbeşte de structurare se au în vedere aspecte legate de tipizare,
abstractizare şi vizibilitate care se referă atât la date, cât şi la cod.
Tipizarea există practic în orice limbaj evoluat şi presupune descrierea
datelor şi a operaţiilor în care sunt implicate, într-o terminologie orientată în
primul rând spre aplicaţie şi mai puţin către maşină.
99
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Un tip de date este caracterizat prin mulţimea valorilor pe care le pot lua
obiectele aferente şi prin mulţimea operaţiilor care le sunt aplicabile.
Abstractizarea presupune conferirea caracterului de generalitate pentru
operaţiile şi funcţiile limbajului (în sensul apropierii de aplicaţie şi de îndepărtare
de maşină). Tipizarea reprezintă alături de ascundere o latură a abstractizării.
Ascunderea presupune transparenţa în ceea ce priveşte folosirea registrelor şi a
locaţiilor de memorie precum şi a transferurilor interne.
Vizibilitatea precizează zonele din program în care o entitate
identificabilă printr-un nume este vizibilă, respectiv poate fi modificată.
Structurile de date (SD) pot fi simple, compuse sau dinamice.
SD simple sunt tipurile de date care nu au componente, valorile lor fiind
unităţi elementare fără structură internă analizabilă (exemple: real, întreg, logic,
caracter).
SD compuse sunt tipurile de date cu mai multe componente cu mai multe
componente (exemple: şiruri, matrice, etc.). Acestea pot fi referite atât global,
cât şi pe componente. Ca SD compuse s-au impus tabloul (care grupează
componente de acelaşi tip) şi articolul (care grupează componente de tipuri
diferite). Prin combinarea celor două tipuri se pot obţine structuri de orice
complexitate.
SD dinamice se caracterizează prin aceea că datele pot fi create şi
distruse în timpul execuţiei. Aceste variabile nu au nume (dacă ar avea s-ar
transforma în variabile statice). Referirea la aceste variabile anonime se face
printr-o variabilă de tip acces a cărei valoare este adresa variabilei referite.
Structurile de cod (SC) pot fi de tip instrucţiune, bloc sau
procedură.
Instrucţiunile sunt grupate în structuri. Pe lângă structurile de bază
(secvenţă, selecţie, iteraţie) mai există şi structurile adiţionale (cum ar fi
alternativa generală CASE, iteraţia cu test iniţial sau final etc.)
Pot fi evidenţiate şi structuri aferente aplicaţiilor de timp real cum ar fi
structura iterativă cu ieşire condiţionată sau structura iterativă cu un număr
necunoscut de paşi.
Structura de bloc are în vedere abandonarea conceptului program
monolitic în favoarea programului împărţit în două secţiuni date şi cod.
Structurarea în blocuri prezintă următoarele avantaje:
- permite construcţia modulară rezultată din proiectarea prin detaliere
succesivă;
- oferă posibilitatea creării de memorie locală printr-o formă restrânsă
de alocare dinamică a memoriei. În acest fel o parte a memoriei se
100
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
• Concurenţa
Programarea concurentă este acel stil de programare care permite
implementarea prelucrării paralele sau pseudoparalele a datelor.
Având în vedere cele două laturi ale concurenţei (paralelismul şi
interacţiunea), LPATR trebuie să dețină instrumente care să ofere posibilitatea
tranziţiei taskurilor între stări şi substări alături de implementarea operaţiilor
multitasking (excludere mutuală, sincronizare, comunicare).
În programarea concurentă entitatea de bază este taskul care după cum se
ştie se bucură de proprietăţile de indivizibilitate, secvenţialitate, asincronism,
dinamism.
Excluderea mutuală prezentată pe larg în unitatea de învățare 4 (UI 4-
2.2) presupune interzicerea execuţiei paralele a secţiunilor critice referitoare la o
aceiaşi resursă. LPTR trebuie să asigure implementarea acestei operaţii prin
semafoare, cutii poştale, mesaje de trecere, monitoare etc.
Sincronizarea taskurilor presupune în primul rând o coordonare a
execuţiei acestora în raport cu timpul sau cu evenimente externe. LPATR trebuie
să ofere mijloace care să implementeze atât corelarea cu timpul sau cu
evenimente, cât şi stabilitatea acestor relaţii.
De asemenea trebuie create posibilităţi pentru realizarea sincronizării
implicite sau explicite sau cu timpul după cum urmează:
- sincronizarea implicită specifică realizării disciplinei de acces la o
resursă comună care se partajează;
- sincronizarea explicită conform căreia un program trebuie să
aştepte (durată impredictibilă) până când altul va finaliza o anumită
activitate;
101
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
• Tratarea excepţiilor
Excepţiile reprezintă situaţii anormale apărute în evoluţia unui program.
Mecanismele de tratare a excepţiilor trebuie să prezinte următoarele
caracteristici:
- simplitate în utilizare;
- să nu încarce procedura de tratare decât la apariţia excepţiei;
- să trateze unitar toate tipurile de excepţii.
• Compilarea separată
Pornind de la modularizarea programelor, acest procedeu are în vedere
compilarea separată a fiecărui modul. Unităţile de program (de exemplu
102
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Care sunt caracteristicile prin care un LPATR răspunde cerințelor
impuse?
Lucrare de verificare
1. Ce este un metalimbaj de descriere?
2. Care sunt elementele atomice ale unui graf sintactic?
3. Care este cerința esențială impusă unui LPATR?
4. Ce presupune cerința de fiabilitate impusă unui LPATR?
5. Sub ce aspecte este abordată caracteristica de structurare a unui
LPATR?
6. Denumiți două tipuri de structuri de cod utilizabile în
codificarea (programarea) aplicațiilor de timp real.
7. Justificați necesitatea compilării separate în calitate de
caracteristică a unui LPATR?
8. Ce presupune caracteristica de portabilitate a unui LPATR?
9. Ce sunt unitățile generice?
103
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
Metalimbajul de descriere reprezintă un limbaj pentru descrierea
construcţiilor altui limbaj.
Principalul criteriu de clasificare a LPATR îl reprezintă forma sub care
taskurile solicită servicii Sistemului de Operare în Timp Real ( SOTR).
Exigențele (cerințele) la care trebuie să răspundă un LPATR sunt:
existenţa de primitive care să implementeze operaţiile multitasking şi
instrumentele de implementare specifice, fiabilitate, eficienţă, flexibilitate,
claritate, simplitate, portabilitate.
Caracteristicile importante ale unui LPATR sunt cele legate de:
structurare, concurenţă, programarea la nivel fizic, tratarea excepţiilor,
compilare separată, existenţa unităţilor generice.
Rezolvare
CZ CZ
- CZ – cifră zecimală.
Bibliografie
1. Bărbat B., Filip Gh. F., Informatica industrială. Ingineria programării în timp
real, Bucureşti, Editura Tehnică, 1997
2. Davidoviciu A., Bărbat B., Limbaje de programare în timp real, Bucureşti,
Editura Tehnică, 1986.
3. Paraschiv N., Programarea aplicațiilor de timp real, Editura Universității
Petrol-Gaze din Ploiești, 2014.
104
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 8-3.2
Nucleul de timp real RTK – caracteristici, inițializare și
administrare
8-3.2.1 Caracteristicile nucleului RTK
8-3.2.2 Taskuri sub RTK
8-3.2.3 Funcții RTK de inițializare
8-3.2.4 Funcții RTK de administrare a taskurilor
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- motivația studierii nucleului de timp real RTK;
- care sunt caracteristicile nucleului de timp real RTK;
- care sunt stările taskurilor și tranzițiile posibile ale acestora în context RTK;
- ce operații se produc la inițializarea nucleului de timp real RTK;
- importanța funcțiilor de administrare a taskurilor.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- caracterizezi starea în care se găsește un task în context RTK;
- construiești funcțiile pentru inițializarea nucleului RTK și a driverului
consolei;
- construiești funcții RTK pentru crearea, dezactivarea și activarea taskurilor;
- construiești funcții RTK pentru furnizarea de informaţii privind
caracteristicile şi evoluţia taskurilor.
105
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
27
Se are în vedere dezvoltarea de facilităţi destinate implementării execuţiei pseudoparalele a
taskurilor.
28
MS-DOS (prescurtat de la Microsoft Disk Operating System) a fost cel mai utilizat sistem de
operare din familia DOS și a dominat sistemele de operare pentru PC în anii 1980, El a fost
bazat pe familia de microprocesoare Intel 8086, în special pe IBM PC și compatibil. Un
emulator recomandat pentru o mașină pe care să ruleze MS-DOS este DOSBox
(https://www.dosbox.com/).
29
Embedded systems
30
P1< P2<….< P64
31
În cele ce urmează se vor face referiri numai la varianta de RTK bazată pe utilizarea
limbajului C/C++.
106
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
32
Reentranţa reprezintă proprietatea unei funcţii de a putea fi executată simultan de către mai
multe taskuri utilizator.
33
Stările Blocked şi Timed mai pot avea şi substări care vor fi evidenţiate la prezentarea
funcţiilor specifice.
107
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
După cum se observă din figura 3.5, în starea Current se poate ajunge
numai din starea Ready, în timp ce din starea Current pot fi efectuate tranziţii în
toate celelalte stări.
În ceea ce priveşte planificarea pentru execuţie a taskurilor aflate în
starea Ready,, aceasta se poate face în mod preemptiv sau cooperativ, modul
implicit fiind cel cooperativ. Modul preemptiv (preemptive scheduling)
corespunde întreruperii periodice a taskului aflat în execuţie şi transferul
controlului către un task aflat în starea Ready. Acest mod elimină posibilitatea
acaparării procesorului de către un singur task. Procedeul mai este cunoscut şi ca
time-slice multitasking (multitasking cu tranşe de timp)34. Modul cooperativ
(cooperative multitasking) presupune cedarea controlului procesorului de către
taskul current către un alt task aflat în starea Ready.
34
Pentru stabilirea tranşei de timp se apelează funcţia RTKTimeSlice din repertoriul de
instrucțiuni al RTKernel.
108
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
În ce stări se poate tranzita un task din starea Current?.
35
Cele două funcţii din repertoriul RTKernel vor fi prezentate în secţiunea funcţiilor RTK de
administrare a taskurilor.
36
Funcţia RTKDelay din repertoriul RTKernel va fi prezentate în secţiunea funcţiilor RTK de
gestionare a timpului.
37
Coada (queue) reprezintă o structură de date din care elementele sunt extrase în ordinea
introducerii (administrare FIFO – First Input First Output).
109
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Observații
Sintaxa fiecărei funcții include trei câmpuri după cum
urmează: denumirea funcției (culoare albastră), lista cu tipul și
numele argumentelor-variabile de intrare (culoare verde), lista și
tipul variabilelor de ieșire (culoare roșie).
Denumirea fiecărei funcții include (cu o singură excepție)
prefixul RTK.
Din categoria funcţiilor de iniţializare vor fi prezentate cele asociate
nucleului şi driverului asociat consolei.
• Funcţia RTKernelInit inițializează nucleul RTK şi are forma
generală
TaskHandle Handler_Main RTKernelInit
(unsigned Prio_Main); (3.1)
38
În acest context prin driver se înţelege o componentă software care permite sistemului de
calcul să comunice cu un anumit dispozitiv. Dacă în program mai sunt utilizate şi alte
dispozitive, în afara consolei, vor trebui iniţializate şi driverele acestora
110
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
39
TaskHandle este un tip de variabilă predefinit în RTKernel
40
Dacă taskul main nu este referit TaskHandle poate lipsi.
41
Taskul Idle se execută atunci când nici un task utilizator nu se află în starea Current.
111
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Observaţie
Ieşirea din RTKernel se realizează prin apelarea funcţiei C
exit(0).
Exerciţiul 5
Ce este un handler?
• Funcţia RTKSuspend realizează dezactivarea unui task,
respectiv trecerea sa în starea Suspended şi are următoarea formă generală
42
Acest nume constituie un auxiliar pentru programator și nu are legătură cu argumentul
Cod_Task
112
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
113
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
43
Acest tip din RTKernel corespunde tipului enumerat din limbajul C
114
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
115
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Câte priorități sunt specifice nucleului RTK?
2. Ce este un handler?
3. După execuția cărei funcții RTK se creează taskul Idle?
4. Ce trebuie precizat la inițializarea nucleului RTK?
5. Ce conține lista parametrilor (argumentelor) funcției
RTKCreateTask?
6. Care este deosebirea între stările Blocked și Timed ale unui task în
context RTK?
7. Caracterizați funcțiile RTKSuspend și RTKResume.
8. Caracterizați funcțiile RTKGetTaskState și
RTKGetTaskStack.
9. După execuția cărei funcții RTK funcția main este transformată în
taskul main
10. Prin ce funcție RTK poate fi schimbată prioritatea unui task?
Rezumat
RTK (Real Time Kernel) dezvoltă pentru sistemul de operare MS-DOS
facilități de prelucrare pseudoparalelă.
RTK pune la dispoziția programatorului semafoare, cutii poștale ,
mesaje de trecere pentru implementarea operațiilor fundamentale
multitasking.
În context RTK un task reprezintă o funcție în limbaj C/C++ fără
parametri și cu stivă proprie. La inițializare unui task i se alocă o prioritate
(număr între 1 și 64). Mai multe taskuri pot avea aceiași prioritate.
Un task sub RTK se poate găsi într-una din stările: Current, Ready,
Suspended, Delaying, Blocked, Timed.
O aplicație RTK conține instrucțiuni și funcții ale limbajului C/C++ la
care se adaugă funcții specifice RTK.
Meniul nucleului RTK conține 210 funcții, din care în cadrul
prezentului curs vor fi abordate cele care privesc: iniţializarea nucleului,
administrarea taskurilor, gestionarea timpului, gestionarea cutiilor
poştale gestionarea mesajelor de trecere.
Din prima categorie au fost prezentate funcțiile: RTKernelInit
și RTKeybrdInit iar din a doua categorie funcțiile:
RTKCreateTask, RTKSuspend, RTKResume, RTKSet
Priority, RTKGetTaskPrio, RTKGetTaskStack.
TaskHandle și TaskState sunt tipuri de variabile RTK.
116
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
2. Enunț
Știind că:
- variabilele Hand_T și Hand_M sunt de tipul TaskHandle;
- variabila Stare_T este de tipul TaskState;
- variabilele Prio_T, Stiva_disp_T sunt de tipul unsigned ,
scrieți funcțiile RTK pentru:
2.1 inițializarea RTK cu prioritatea 5 și handlerul Hand_M pentru
taskul main;
2.2 crearea unui task cu următoarele caracteristici: handler-Hand_T,
funcția C care conține codul- Func_T, prioritate – 8, stiva - 512,
nume (auxiliar) cu numele (auxiliar) - Task_test;
2.3 suspendarea taskului creat la punctul 2.1;
2.4 preluarea în variabila Stare_T a stării taskului creat la punctul 2.1;
2.5 reactivarea taskului creat la punctul 2.1;
2.6 preluarea în variabila Prio_T a priorității taskului creat la punctul
2.1;
2.7 preluarea în variabila Stiva_disp_T a stivei libere aferente taskului
creat la punctul 2.1.
117
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
2.1 Hand_M=RTKernelInit(3);
2.2 Hand_T=RTKCreateTask(Func_T,8,512,"Task_Test");
2.3 RTKSuspend(Hand_T);
2.4 Stare_T=RTKGetTaskState(Hand_T);
2.5 RTKResume(Hand_T);
2.6 Prio_task=TRTKGetaskPrio(Hand_T;
2.7 Stiva_disp_T= RTKGetTaskStack(Hand_T);
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura Universității
Petrol-Gaze din Ploiești, 2014.
2. http://www.on-time.com/rtkernel-dos.htm
3. https://ro.wikipedia.org/wiki/MS-DOS
4. https://www.dosbox.com/
118
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 9-3.3
Nucleul de timp real RTK – funcții de gestionare a timpului și
semafoarelor
9-3.3.1 Timpul în context RTK
9-3.3.2 Funcții RTK de gestionare a timpului
9-3.3.3 Semafoare în context RTK
9-3.3.4 Funcții RTK de gestionare a semafoarelor
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- cum este tratat timpul în context RTK;
- prin ce funcție RTK se realizează tranziția unui task în starea Delaying;
- cum se definește un semafor în context RTK;
- cum se implementează operațiile de P și V pentru un semafor RTK;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedWait, respectiv TimedWait.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- utilizezi funcțiile RTK pentru gestionarea timpului;
- utilizezi funcțiile RTK pentru gestionarea semafoarelor;
- implementezi sincronizarea taskurilor cu timpul;
- utilizezi semafoarele pentru sincronizarea taskurilor cu evenimente
externe.
119
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
În RTK unitatea de măsură pentru timp este timer tick. O cuantă de timp,
respectiv un timer tick are o durată aproximativ 55 ms. Această valoare rezultă
ţinând cont că timerul al unei mașini fizice (sau emulate) pe care rulează MS-
DOS generează 216 întreruperi pe oră ceea ce reprezintă aproximativ 18,2
întreruperi/secundă, care corespunde unei perioade de aproximativ 55 ms.
Exerciţiul 1
În ce unitate de măsură se exprimă timpul în context RTK?
44
La iniţializarea RTK în cadrul funcţiei RTKernelInit se execută funcţia RTKSetTime(0);
120
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Prin ce funcție RTK poate fi preluată valoarea înscrisă în numărătorul
asociat ceasului intern al RTK?
Exemplul 3.3
În acest exemplu se prezintă utilizarea funcţiilor (3.10) şi (3.11).
-----------------
#include "rtkernel.h"
#include "rtkeybrd.h"
------------------
Time Timp_setat,Timp_curent;
-----------------
Timp_curent=RTKGetTime();
Timp_setat=Timp_curent+25321;
RTKSetTime(Timp_setat);
-----------------
Următoarele două funcții prezintă o importanță deosebită întrucât determină
tranziții ale taskurilor în care acestea se execută.
Testul de autoevaluare 1
Scrieți funcția RTK prin care taskul în care se execută este trecut în
starea Delaying pentru un interval de timp de 5 secunde.
121
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exemplul 3.4
În acest exemplu se prezintă un caz de utilizare a funcţiei
RTKDelay într-un sistem multitasking destinat afişării cu periodicitate de o
secundă a datei şi orei. Sistemul este constituit din taskurile care au codul în
funcțiile Task_ora, respectiv main.
• Taskul Task_ora se execută în buclă infinită şi apelează cu
periodicitate de o secundă funcţia afordata care achiziţionează şi tipăreşte
elemente ale timpului sistem şi anume zi, lună, an, oră, minut, secundă.
Aceste elemente se preiau în variabilele d şi t care sunt de tipul struct date,
respectiv struct time din MS-DOS. Afişarea se realizează la nivel de caracter
în regim alfanumeric. În acest regim, ecranul este văzut ca o matrice cu 80
de coloane şi 25 de linii, potrivit figurii 3.6.
x
1 2 80
1
25
122
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
123
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Observații
În intervalele în care taskul Task_ora este în starea
Delaying și taskul main este în starea Blocked se execută taskul Idle creat cu
funcția RTKernelInit.
După cum se observă din exempul 3.4 o aplicație dezvoltată în RTK
include: directive de preprocesare, declarații, funcții (inclusiv taskurile).
Testul de autoevaluare 2
Construiți schemele logice ale taskurilor Task_ora și main din
Exemplul 3.4.
Testul de autoevaluare 3
Adaptați aplicația din Exemplul 3.4 , astfel încât să se tipărească cu
periodicitate de 60 secunde direct ora și minutul (fără utilizarea
funcției afordata) în linia a 4 începând cu coloana 45.
124
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Ce presupune implementarea operațiilor P și V pentru semafoarelor
definite în context RTK?
Exerciţiul 5
Care sunt argumentele funcției de creare a unui semafor RTK?
• Funcţia RTKSemaValue permite returnarea într-o variabilă de
tip întreg fără semn, a numărului de evenimente memorat într-un semafor şi
are forma generală
unsigned nr_ev RTKSemaValue(Semaphore Semaf); (3.17)
în care: Semaf indică semaforul referit, iar nr_ev reprezintă variabila în care
se înscrie numărul de evenimente memorat în semaforul referit .
45
Acest nume constituie un auxiliar pentru programator.
125
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
126
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 6
Care sunt funcțiile prin care se implementează operațiile de
incrementare respectiv decrementare a unui semafor RTK?
Exemplul 3.5
În acest exemplu se prezintă un caz de utilizare a semafoarelor
pentru realizarea sincronizării taskurilor. Sistemul este constituit din
taskurile Task_ora, Task_sincr şi main.
• Taskul Task_ora are aceleaşi caracteristici şi aceiași
funcţionalitate ca în exemplul 3.4.
• Taskul Task_sincr este blocat la semaforul binar Sem_sincr
iniţializat cu zero în taskul main. În momentul când din acest task se
execută funcţia RTKSignal(Sem_sincr) se deblochează Task_sincr
pentru 10 secunde. Pe durata deblocării, pe ecran se afișează numărul de
secunde trecute. După trecerea celor 10 secunde în taskul Task_sincr se
execută funcția RTKWait(Sem_sincr), ceea ce va determina revenirea
taskului Task_sincr în starea BlockedWait. De asemenea pe ecran se
afișează starea în care se găsește Task_sincr, adică BLOCAT respectiv
EXECUȚIE.
• Taskul main conţine o primă secţiune de declaraţii şi
iniţializări şi o a doua secţiune în buclă infinită destinată supravegherii
tastaturii. La apăsarea tastei B se execută funcția RTKSignal(Sem_sincr),
127
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
// Program demonstrativ utilizare semafoare
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
#include "rtkeybrd.h"
//
Semaphore Sem_sincr;
struct date d;
struct time t;
//
//functie preluare si tiparire data si ora
//
afordata(void)
{
getdate(&d); // preia data in variabila d
gettime(&t); // preia timpul in variabila t
gotoxy(55,3); //pozitioneaza cursorul
//se tiparesc: ziua, luna anul
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
//se tiparesc: ora, minutul, secunda
cprintf(" 02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
//
Task_ora(void) //task temporizare
{
for(;;) //bucla for infinita
{
RTKDelay(18); //temporizare o secunda
afordata(void); //apelare functie afordata
} //sfarsit for
} //sfarsit Task_ora
//
//
Task_sincr(void) //task sincronizat
{
int i;
for(;;) //bucla for infinita
128
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
{
gotoxy(5,10);
cprintf("B - BLOCAT ");
//decrementare semafor Sem_sincr
RTKWait(Sem_sincr),
gotoxy(5,10);
cprintf("EXECUTIE");
for(i=0;i<=9;i++) //bucla for in 10 pasi
{
RTKdelay(18); //temporizare o secunda
gotoxy(15,10); //tiparire secunde trecute
cprintf("%d",i);
} //sfarsit for finit
} //sfarsit for infinit
} //sfarsit Task_sincr
Testul de autoevaluare 4
Construiți o aplicație RTK care să implementeze utilizarea
semafoarelor în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-
2.3 (în taskul T1, procedura P_T1, va fi reprezentată de funcția
afordata ) .
129
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Care este mărimea unei cuante de timp cu care operează nucleul RTK?
2. Interpretați funcția RTKDelay(36);
3. Ce reprezintă un semafor în context RTK?
4. Care sunt tipurile de variabile RTK asociate gestionării timpului și
semafoarelor?
5. Care dintre funcțiile RTKSignal, respectiv RTKWait poate
determina blocarea taskului în care se execută?
6. Caracterizați cele trei forme ale funcței RTKWait.
Rezumat
Nucleul RTK conține un ceas intern reprezentat de un numărător al
cărui conținut este incrementat prin sistemul de întreruperi. Intervalul dintre
două întreruperi este de circa 55 ms, acest interval reprezentând mărimea unei
cuante de timp în context RTK, respectiv timer tick.
În toate funcțiile RTK timpul este gestionat ca momente respectiv ca
durate. Momentele sunt specificate prin variabile de tip Time , duratele prin
variabile de tip Duration. Atât momentele cât duratele se exprimă în
numere de timer tick.
Pentru gestionarea timpului au fost prezentate funcțiile
RTKSetTime, RTKGetTime, RTKDelay, RTKDelayUntil.
Funcția RTKDelay prezintă o importanță deosebită întrucât este utilizată
pentru sincronizarea cu timpul a taskurilor. Execuția unei asemenea funcții are
drept efect tranziția taskului în care funcția se execută în starea Delaying
pentru intervalul de timp specificat.
În context RTK un semafor reprezintă practic un numărător de
evenimente al cărui conținut poate fi incrementat (operația de tip V), respectiv
decrementat (operația de tip P). Pentru declararea semafoarelor, în RTK se
utilizează tipul Semaphore. Semafoarele pot fi de tip binar (SemaType
Binary) sau general (SemaType Counting).
Operația de tip V este implementată prin funcția RTKSignal,
iar operația de tip P prin funcția RTKWait, pentru aceasta din urmă
existând formele necondiționat, condiționat, temporizat.
130
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
2. Enunț
Construiți schemele logice ale taskurilor Task_ora și main din
Exemplul 3.4.
Rezolvare
Task_main
Task_ora
Iniţializare
Task main
NU
Δt=1 sec? NU
Tast?
DA
DA
afordata NU
E?
DA
Exit
131
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
132
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
133
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
main(void)
{
char c;
RTKernelInit(3);
clrscr(void);
gotoxy(5,8);
cprintf("E - Iesire");
RTKeybrdInit(void);
SEMSYNC=RTKCreateSemaphore(Binary,0,"Sem_sincr");
RTKCreateTask(Task_T0,5,1024,"Task_planif");
RTKCreateTask(Task_T1,7,1024,"Task_sincr");
//
for(;;)
{
c=RTGetCh();
if(c==’E’)
exit(0);
}
}
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura
Universității Petrol-Gaze din Ploiești, 2014.
2. http://www.on-time.com/rtkernel-dos.htm
3. https://ro.wikipedia.org/wiki/MS-DOS
4. https://www.dosbox.com/
134
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 10-3.4
Nucleul de timp real RTK – funcții de gestionare a cutiilor
poștale
10-3.4.1 Cutii poștale în context RTK
10-3.4.2 Funcții RTK de gestionare a cutiilor poștale
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- cum se definește o cutie poștală în context RTK;
- cum se implementează operația de depunere a unui mesaj într-o cutie
poștală RTK;
- cum se implementează operația de preluare a unui mesaj dintr-o cutie
poștală RTK;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedPut, respectiv TimedPut;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedGet, respectiv TimedGet;
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- utilizezi funcțiile RTK pentru gestionarea cutiilor poștale;
- utilizezi cutiile poștale RTK pentru excluderea mutuală a taskurilor ;
- utilizezi cutiile poștale RTK pentru sincronizarea taskurilor timpul ;
- utilizezi cutiile poștale RTK pentru sincronizarea taskurilor cu
evenimente externe;
- utilizezi cutiile poștale pentru comunicarea între taskuri.
46
FIFO – First Input First Output - strategie potrivit căreia extragerea mesajelor din coadă se
face în ordinea introducerii.
135
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care este mărimea maximă a unei cutii poștale în context RTK?
Exerciţiul 2
Care sunt argumentele funcției de creare a unei cutii poștale RTK?
47
Ca și în cazul semafoarelor, acest nume constituie un auxiliar pentru programator.
136
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Știind că:
- variabila CP_Test este de tipul Mailbox;
- variabila Nr_mes_ este de tipul unsigned ;
scrieți funcțiile RTK pentru:
1.1 crearea și inițializarea cutiei poștale CP_Test cu parametrii:
Lung_mes = 4 octeți, Nr_mes = 16, Nume_cut_post =
Cut_post_test ;
1.2 preluarea în variabila Nr_mes a numărului de mesaje din cutia
poștală CP_test ;
1.3 ștergerea cutiei poștale CP_test.
Principalele funcţii ale nucleului RTK asociate cutiilor poştale sunt cele
depunere respectiv preluare de mesaje, fucții care se prezintă în trei forme şi
anume: necondiţionată, condiţionată şi temporizată.
137
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
138
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 5
În ce situație se produce tranziția unui task în starea BlockedGet?
139
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 6
În ce situații, după execuția unei funcții RTKGetTimed variabilei
exec i se atribuie valoarea True?
Testul de autoevaluare 2
Știind că:
- variabila CP_Transf este de tipul Mailbox;
- variabilele i și j sunt de tipul unsigned ;
scrieți funcțiile RTK pentru:
2.1 crearea și inițializarea cutiei poștale CP_Transf cu parametrii:
Lung_mes = 4 octeți, Nr_mes = 1, Nume_cut_post =
Cut_post_transf ;
2.2 inițializarea variabilei i cu valoarea 1;
2.3 tipărirea valorii variabilei i începând cu colana 30, linia 4;
2.4 depunerea în CP_Transf a conținutului variabilei i;
2.5 preluarea din CP_Transf și depunerea conținutului preluat în
variabila j;
2.6 tipărirea valorii variabilei j începând cu colana 30, linia 5.
140
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exemplul 3.6
În acest exemplu se prezintă un caz de utilizare a cutiilor poștale
pentru realizarea sincronizării taskurilor. Sistemul este constituit din
taskurile Task_ora, Task_sincr şi main.
• Taskul Task_ora are aceleaşi caracteristici şi aceiași
funcţionalitate ca în exemplele 3.4 și 3.5.
• Taskul Task_sincr este blocat pentru așteptarea sosirii unui
mesaj în cutia poștală Cut_post_sincr, creată și iniţializată în taskul main.
În momentul când din acest task se execută asupra Cut_post_sincr o funcție
de depunere RTKPut a codului unei taste apăsate, taskul Task_sincr se
deblochează. După deblocare, în Task_sincr se execută o funcție RTKGet
prin care se preia mesajul din Cut_post_sincr și se depune în variabila i.
Pentru vizualizarea caracterului recepționat, acesta se tipărește. După
această operație Task_sincr trece din nou în starea BlokedPut. De
asemenea pe ecran se afișează starea în care se găsește Task_sincr, adică
T_Sincr așteaptă la Cut_post_sincr respectiv Sosit mesaj
• Ca și în exemplele precedente taskul main conţine o primă
secţiune de declaraţii şi iniţializări şi o a doua secţiune executată, în buclă
infinită, destinată supravegherii tastaturii. La apăsarea oricărei taste, alta
decât tasta E, se execută o funcția RTKPut, prin care codul tastei apăsate
este depus în Cut_post_sincr. În ceea ce privește apăsarea tastei E, această
acțiune va determina ieșirea din program. Ca și în exemplele precedente,
acţionarea altei taste rămâne fără efect.
//
// Program demonstrativ utilizare cutii poștale
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
#include "rtkeybrd.h"
//
Mailbox Cut_post_sincr;
struct date d;
struct time t;
//
//functie preluare si tiparire data si ora
//
afordata(void)
{
getdate(&d); // preia data in variabila d
141
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
142
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Cut_post_sincr=RTKCreateMailbox(2,1,"CP_sincr");
// creare Task_ora si Task_sincr
RTKCreateTask(Task_ora,5,1024,"Task_af_ora");
RTKCreateTask(Task_sincr,7,1024,"Task_sin");
//
for(;;) //bucla for infinita
{
gotoxy(5,9);
cprintf("Transmis din main mesajul ");
c=RTGetCh(void); //supraveghere tastatura
gotoxy(41,9);
//tipareste caracterul tastat
cprintf("%c",c);
if(c==’E’) //testarea fata de E
exit(0); //iesire
RTKPut(Cut_post_sincr,&c); //altfel depune c in CP
} //sfarsit for
} //sfarsit main
Testul de autoevaluare 3
Construiți o aplicație RTK care să implementeze utilizarea cutiilor
poștale în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-2.3 (în
taskul T1, procedura P_T1, va fi reprezentată de funcția afordata ) .
Lucrare de verificare
1. Ce reprezintă o cutie poștală în context RTK?
2. Ce tip de variabilă RTK este asociată gestionării cutiilor poștale?
3. Care este dimensiunea maximă a unei cutii poștale cu care poate
opera nucleul RTK?
4. Ce trebuie specificat la inițializarea unei cutii poștale RTK?
5. Interpretați funcția RTKMessages.
6. Ce funcții trebuie să se execute pentru ca un task să realizeze
tranzițiile BlockedPut →Ready respectiv BlockedGet →Ready?
7. Care dintre funcțiile RTKPut, RTKPutCond, RTKPutTimed
poate determina tranziția în starea BlockedPut a taskului în care
se execută?
8. Care dintre funcțiile RTKGet, RTKGetCond, RTKGetTimed
poate determina tranziția în starea BlockedGet a taskului în care
se execută?
9. Caracterizați cele trei forme ale funcței RTKPut.
10. Caracterizați cele trei forme ale funcței RTKGet.
143
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
În context RTK o cutie poștală reprezintă un buffer în care taskurile pot
depune mesaje sau din care acestea pot extrage mesaje. La crearea unei cutii
poștale trebuie specificate: numărul de mesaje, mărimea în octeți a unui
mesaj. Toate mesajele au aceiași lungime. Pentru specificarea cutiilor poștale,
în RTK există tipul Mailbox. La crearea unei cutii poștale se precizează
numărul de mesaje și mărimea în octeți a unui mesaj.
Principalele funcții pentru gestionarea cutiilor poștale sunt cele de
depunere respectiv de preluare a mesajelor.
Funcția de depunere se prezintă în trei forme și anume: necondiționată
– RTKPut,condiționată – RTKPutCond, temporizată – RTKPutTimed.
Funcția de preluare se prezintă de asemenea în trei forme și anume:
necondiționată – RTKGet,condiționată – RTKGetCond, temporizată –
RTKGetTimed.
Legat de utilizarea cutiilor poștale pot apărea două situații critice și
anume: cutie poștală plină (nu se poate depune un mesaj), cutie poștală goală
(nu poate prelua un mesaj).
Stările unui task aferente situației critice legate de depunerea unui
mesaj sunt BlockedPut, TimedPut.
Stările unui task aferente situației critice legate de preluarea unui mesaj
sunt BlockedGet, TimedGet.
144
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
2. Enunț:
Știind că:
- variabila CP_Transf este de tipul Mailbox;
- variabilele i și j sunt de tipul unsigned ;
scrieți funcțiile RTK pentru:
2.1 crearea și inițializarea cutiei poștale CP_Transf cu parametrii:
Lung_mes = 4 octeți, Nr_mes = 1, Nume_cut_post =
Cut_post_transf ;
2.2 inițializarea variabilei i cu valoarea 1;
2.3 tipărirea valorii variabilei i începând cu colana 30, linia 4;
2.4 depunerea în CP_Transf a conținutului variabilei i;
2.5 preluarea din CP_Transf și depunerea conținutului preluat în
variabila j;
2.6 tipărirea valorii variabilei j începând cu colana 30, linia 5.
Rezolvare
2.1 CP_Transf=RTKCreateMailbox(4,1,"Cut_post_transf");
2.2 i=1;
2.3 gotoxy(30,4);
cprintf("i=%d",i);
2.4 RTKPut(CP_Transf,&i);
2.5 RTKGet(CP_Transf,&j);
2.6 gotoxy(30,5);
cprintf("j=%d",j);
145
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
146
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
Task_T0(void)
{
int i=1;
for(;;)
{
RTKDelay(18);
RTKPut(CP_SYNC,&i);
}
}
//
Task_T1(void)
{
int j;
for(;;)
{
RTKGet(CP_SYNC,&j);
afordata(void);
}
}
//
//
main(void)
{
char c;
RTKernelInit(3);
clrscr(void);
gotoxy(5,8);
cprintf("E - Iesire");
RTKeybrdInit(void);
CP_SYNC=RTKCreateMailbox(2,1,"Cut_post_sincr");
RTKCreateTask(Task_T0,5,1024,"Task_planif");
RTKCreateTask(Task_T1,7,1024,"Task_sincr");
//
for(;;)
{
c=RTGetCh();
if(c==’E’)
exit(0);
}
}
147
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura
Universității Petrol-Gaze din Ploiești, 2014.
2. http://www.on-time.com/rtkernel-dos.htm
3. https://ro.wikipedia.org/wiki/MS-DOS
4. https://www.dosbox.com/
148
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 11-3.5
Nucleul de timp real RTK – funcții de gestionare a mesajelor
de trecere
11-3.5.1 Mesaje de trecere în context RTK
11-3.5.2 Funcții RTK de gestionare a mesajelor de trecere
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- ce reprezintă un mesaj de trecere în context RTK;
- cum se implementează operația de transmitere a unui mesaj de trecere
în context RTK;
- cum se implementează operația de recepție a unui mesaj de trecere în
context RTK;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedSend, respectiv TimedSend;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedReceive, respectiv TimedReceive;
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- utilizezi funcțiile RTK pentru gestionarea mesajelor de trecere;
- utilizezi mesajele de trecere pentru sincronizarea taskurilor timpul ;
- utilizezi mesajele de trecere pentru sincronizarea taskurilor cu
evenimente externe;
- utilizezi mesajele pentru comunicarea între taskuri.
149
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care este deosebirea dintre comunicarea prin cutii poștale și
comunicarea prin mesaje de trecere?
150
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Dacă TDP funcţia se execută, taskul în care este apelată funcţia îşi
continuă rularea, iar în variabila exec de tip bool se înscrie valoarea logică
True.
Dacă TDNP, funcţia nu se execută, taskul apelant nu se blochează, iar
în variabila exec de tip bool se înscrie valoarea logică False.
Exerciţiul 2
În ce situație se produce tranziția unui task în starea BlockedSend?
Exerciţiul 3
În ce situații, după execuția unei funcții RTKSendTimed variabilei
exec i se atribuie valoarea True?
151
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
În ce situație se produce tranziția unui task în starea Blocked RECEIVE
152
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Știind că:
- variabila Hand_dest (de tip TaskHandle) este un handler asociat
taskului T2
- variabilele i și j sunt de tipul unsigned ;
scrieți funcțiile RTK pentru:
1.1 inițializarea variabilei i cu valoarea 1 (2 octeți);
1.2 tipărirea valorii variabilei i începând cu colana 32, linia 5;
1.3 transmiterea către taskul T2 a conținutului variabilei i ;
1.4 recepția în taskul T2 (variabila j )a mesajului transmis din taskul
T1;
1.5 tipărirea valorii variabilei j începând cu colana 32, linia 6.
Exemplul 3.7
În acest exemplu se prezintă utilizarea mesajelor de trecere pentru
comunicarea între două taskuri. Sistemul multitasking este constituit din
taskurile Task_ora, Task_dest şi main.
• Taskul Task_ora are aceleaşi caracteristici şi funcţionalitate ca
în exemplele 3.4, 3.5 și 3.6.
• Taskul Task_dest are rolul de task receptor executând în buclă
infinită o secvență RTKReceive, cprintf. Rezultă că acest task se găsește
cvasipermanent în starea BlockedReceive, deblocarea producându-se în
momentul când Task_dest a fost referit prin handlerul asociat
Handle_dest în taskul emițător. După recepția mesajului sub forma unui
caracter, acesta este tipărit în coordonate prestabilite, însoțit de mesajul
Dest a recepționat.
• Ca și în exemplele precedente taskul main conţine o primă
secţiune de declaraţii şi iniţializări şi o a doua secţiune în buclă infinită
153
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
//functie preluare si tiparire data si ora
//
afordata(void)
{
getdate(&d); // preia data in variabila d
gettime(&t); // preia timpul in variabila t
gotoxy(55,3); //pozitioneaza cursorul
//se tiparesc: ziua, luna anul
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
//se tiparesc: ora, minutul, secunda
cprintf(" 02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
//
154
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
155
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
Construiți o aplicație RTK care să implementeze utilizarea mesajelor de
trecere în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-2.3 (în
taskul T1, procedura P_T1, va fi reprezentată de funcția afordata ) .
Lucrare de verificare
1. Ce reprezintă un mesaj de trecere în context RTK?
2. Când un task se consideră pregătit pentru transmiterea unui mesaj
de trecere?
3. Când un task se consideră pregătit pentru recepția unui mesaj de
trecere?
4. Care este diferența dintre funcțiile RTKSend și
RTKSendCond?
5. Care este diferența dintre funcțiile RTKReceive și
RTKReceiveCond?
6. Ce funcții trebuie să se execute pentru ca un task să execute
tranzițiile BlockedSend →Ready urespectiv BlockedReceive
→Ready?
7. Care dintre funcțiile RTKSend, RTKSendCond,
RTKSendTimed poate determina tranziția în starea
BlockedSend a taskului în care se execută?
8. Care dintre funcțiile RTKReceive, RTKReceiveCond,
RTKReceiveTimed poate determina tranziția în starea
BlockedReceive a taskului în care se execută?
9. Caracterizați funcția RTKSendTimed.
10. Caracterizați funcția RTKReceiveTimed.
156
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
În context RTK un mesaj de trecere reprezintă o facilitate de
comunicare directă între taskuri
Principalele funcții pentru gestionarea acestei facilități sunt cele de
transmitere respectiv de recepție a mesajelor.
Funcția de transmitere se prezintă în trei forme și anume:
necondiționată – RTKSend, condiționată – RTKSendCond, temporizată –
RTKSendTimed.
Funcția de recepție se prezintă de asemenea în trei forme și anume:
necondiționată – RTKReceive,condiționată – RTKReceiveCond,
temporizată – RTKReceiveTimed.
Legat de utilizarea mesajelor pot apărea două situații critice și anume:
task receptor nepregătit (nu se poate transmite un mesaj), task emițător
nepregătit (nu poaterecepționa un mesaj).
Stările unui task aferente situației critice legate de transmiterea unui
mesaj sunt BlockedSend, TimedSend.
Stările unui task aferente situației critice legate de recepția unui mesaj
sunt BlockedReceive, TimedReceive.
157
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1.3 RTKSend(Hand_dest,&i);
1.4 RTKReceive(&j,2);
1.5 gotoxy(32,6);
cprintf("j=%d",j);
2. Enunț
Construiți o aplicație RTK care să implementeze utilizarea mesajelor de
trecere în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-2.3 (în
taskul T1, procedura P_T1, va fi reprezentată de funcția afordata ) .
Rezolvare
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
#include "rtkeybrd.h"
//
TaskHandle Handler_T1;
struct date d;
struct time t;
//
afordata(void)
{
getdate(&d);
gettime(&t);
gotoxy(55,3);
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
cprintf(" 02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
//
Task_T0(void)
{
int i=1;
for(;;)
{
RTKDelay(18);
RTKSend(Hand_T1,&i);
}
}
158
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
Task_T1(void)
{
int j;
for(;;)
{
RTKReceive(&j,2);
afordata(void);
}
}
//
//
main(void)
{
char c;
RTKernelInit(3);
clrscr(void);
gotoxy(5,8);
cprintf("E - Iesire");
RTKeybrdInit(void);
RTKCreateTask(Task_T0,5,1024,"Task_planif");
Handler_T1=RTKCreateTask(Task_T1,7,1024,"Task_sincr");
//
for(;;)
{
c=RTGetCh();
if(c==’E’)
exit(0);
}
}
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura
Universității Petrol-Gaze din Ploiești, 2014.
2. http://www.on-time.com/rtkernel-dos.htm
3. https://ro.wikipedia.org/wiki/MS-DOS
4. https://www.dosbox.com/
159
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 4
PRELUCRAREA ÎN TIMP REAL A INFORMAŢIEI DE PROCES
Unitatea de învăţare 12-4.1
Operații de prelucrare primară a datelor de proces
12-4.1.1 Tipuri de operații de prelucrare primară a datelor de proces
12-4.1.2 Filtrarea datelor achiziționate
12-4.1.3 Circuitul informațional aferent unei aplicații de conducere
12-4.1.4 Conversia în unități inginerești
12-4.1.5 Conversia din unități inginerești
12-4.1.6 Validarea datelor achiziționate și a comenzilor elaborate
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- necesitatea operațiilor de prelucrare primară a datelor de proces;
- ce este filtrarea numerică ;
- prin ce se caracterizează un filtru numeric nerecursiv ;
- funcționalitatea circuitului informațional specific unei aplicații de
conducere;
- cum se realizează sinteza modulului de conversie (scalare) BC1 în
cadrul unui Sistem Numeric de Măsurat la Distanță (SNMD);
- cum se realizează sinteza modulului de conversie (scalare) BC2 în
cadrul unui Sistem Numeric de Transmitere la Distanță (SNTD);
- ce presupune validarea datelor achiziționate și a comenzilor elaborate.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- deduci o relație recurentă pentru implementarea unui filtru numeric
nerecursiv;
- proiectezi modulul de conversii în unități inginerești (fizice) aferent
unui SNMD ;
- proiectezi modulul de conversii din unități inginerești (fizice) aferent
unui SNTD ;
- implementezi în cadrul taskurilor de achiziții date și generare comenzi a
testarea încadrării între limite a datelor achiziționate, respectiv a
comenzilor calculate.
161
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
sub forma a trei categorii de obiective și anume cele legate de calitate, eficiență,
securitate.
• Obiectivele de calitate se referă la respectarea specificațiilor de
calitate referitoare la produsele și serviciile rezultate ca urmare a desfășurării
procesului.
• Obiectivele de eficiență impun profitabilitatea respectivului proces,
în condițiile unei piețe concurențiale.
• Obiectivele de securitate au în vedere desfășurarea procesului astfel
încât să nu fie afectată securitatea personalului de operare a mediului și a
infrastructurii aferente procesului.
Din punctul de vedere al conducerii, fluxurile informaționale prezintă o
importanță deosebită întrucât prin intermediul acestora se realizează cunoașterea
procesului și se implementează comenzile.
În prima unitate de învățare (sinteză) a modulului de studiu 4 (UI
12-4.1) este tratată problema procesării primare a informației preluate din proces
și a celei destinate procesului sub forma comenzilor.
Procesarea primară încadrează următoarele operații:
- filtrarea mărimilor achiziționate;
- conversia în unități fizice (inginerești) a datelor achiziționate;
- conversia din unități fizice (inginerești) a comenzilor elaborate;
- validarea datelor achiziționate și a comenzilor elaborate.
În figura 1.10 din unitatea de învățare 2 (UI 2-1.2) modulul MPDA
concentrează pentru datele achiziționate funcțiile de filtrare, conversie în unități
fizice, validare. În aceiași figură modulul MPCE realizează pentru comenzile
elaborate funcțiile care privesc conversia din unități fizice și validare.
A doua unitate de învățare (sinteză) a acestui modul (UI 13-4.2)
prezintă taskurile asociate unor algoritmi de reglare numerică cu o arie largă de
răspândire.
În a treia unitate de învățare (sinteză) (UI 14-4.3) sunt expuse
câteva considerații referitoare la organizarea bazelor de date de proces (BDP) în
calitate de principală resursă destinată stocării datelor aferente aplicațiilor de
conducere în timp real.
Exerciţiul 1
Care sunt obiectivele unui proces?
Exerciţiul 2
Enumerați operațiile de prelucrare primară a datelor achiziționate și a
comenzilor elaborate.
162
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
x[n] y[n]
FILTRU
NUMERIC
163
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N −1
1
y[n − 1] =
N
x[n − 1 − k ]. (4.3)
k =0
1
y[n] = y[n − 1] + ( x[n] − x[n − N ]). (4.4)
N
x[n-N]
x[n-(N-1)]
x[n-2]
x[n-1]
x[n]
x[n+1]
164
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Într-o aplicaţie de conducere în timp real, de tipul celei din figura 1.10,
(UI 2-1.2) poate fi evidenţiată următoarea secvenţă de operaţii:
- achiziția din proces a datelor;
- elaborarea comenzilor;
- implementarea în proces a comenzilor.
Realizarea acestei secvențe implică existenţa unui circuit informaţional
ilustrat în figura 4.3, în care procesul este reprezentat prin traductoare-T și
elemente de execuție - EE, iar echipamentul numeric prin porturi de intrare – PI
și porturi de ieșiri – PE.
165
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
F1 F2
50
În cazul aparaturii inteligente de automatizare (Smart) această frontieră este situată la limita
respectivei instrumentații, iar transmiterea semnalelor se face în format digital.
51
CAN și CNA sunt abrevieri pentru Convertor Analog Numeric, respectiv Convertor Numeric
Analog.
166
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
uP1
F2 F1
P2_1 P2_k P2_n
iP1
P* NP uP CIU1 TP1
V mA
PI BC1 CAN
uPk iPk
V CIUk TPk
REG uING uCAN
V
PERT mA
REG AB P2
u1
y1* N1 P1
i1 y1 SP2
PE CUI REG SP1
BC2 CNA AB EE
uING uCNA V r1
mA
TA y2 uING
y2i mA
uING
Fig. 4.4. Circuitul informațional într-un SRA ierarhizat.
52
În raport cu referința y2i
167
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Care este rolul frontierelor F1 și F2 în cadrul circuitului informațional
asociat unui sistem de conducere?
Exerciţiul 4
Prin ce se implementează frontierele F1 și F2 în cadrul circuitului
informațional asociat unui SRA ierarhizat?
Δx
Δxmax
168
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δimax Δi Δumax Δu
a b
Δxmax Δx
169
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
* Δx*max
SNMD: Δx = ⋅ Δx , (4.8)
Δxmax
Δimax
T: Δi = ⋅ Δx , (4.9)
Δxmax
Δumax
CIU: Δu = ⋅ Δi , (4.10)
Δimax
ΔN max
CAN: ΔN = ⋅ Δu . (4.11)
Δumax
Rezolvând sistemul format din ecuaţiile (4.8)…(4.11) rezultă pentru
BC1 relaţia
*
Δxmax
Δx* = ⋅ ΔN . (4.12)
ΔN max
Dacă în relația (4.12) se impune pentru mărimea x* (reprezentată în
memorie) acelaşi domeniu de variaţie ca pentru mărimea fizică (respectiv
Δx*max= Δxmax), rezultă
Δxmax
Δx* = ⋅ ΔN . (4.13)
ΔN max
Examinând relaţia (4.13) se observă că elementul BC1 este un element
liniar, a cărui caracteristică statică este reprezentată în figura 4.9.
Δx*
Δxmax
ΔNmax ΔN
Sunt situaţii care necesită utilizarea ecuaţiei modulului BC1 în valori absolute.
Pentru a obţine această formă, în ecuaţia (4.13) se exprimă abaterile ţinând cont
de relaţiile (4.6) , (4.7) şi rezultă
xmax − xmin
x* − xmin = ⋅ ( N − N min ) . (4.14)
N max − N min
170
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
unde
171
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δxmax Δx
* Δx*max
SNMD: Δx = ⋅ Δx , (4.23)
Δxmax
Δimax
T: Δi = 2
⋅ ( Δx )2 , (4.24)
( Δxmax )
Δumax
CIU: Δu = ⋅ Δi , (4.25)
Δimax
ΔN max
CAN: ΔN = ⋅ Δu . (4.26)
Δumax
Rezolvând sistemul format din ecuaţiile (4.23)…(4.26) rezultă pentru
BC1 ecuaţia
Δx*max
*
Δx = ⋅ ΔN , (4.27)
ΔN max
sau impunând pentru mărimea x* reprezentată în memorie acelaşi domeniu de
variaţie ca pentru mărimea fizică, respectiv (respectiv Δx*max= Δxmax), se obține
Δxmax
Δx* = ⋅ ΔN . (4.28)
ΔN max
Examinând relaţia (4.28) se observă că modulul BC1 corespunde unui
element neliniar, a cărui caracteristică statică este reprezentată în figura 4.11.
Este de remarcat faptul că neliniaritatea introdusă de BC1 compensează
172
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δx*
Δxmax
ΔNmax ΔN
N − N min
x* = xmax ⋅ . (4.30)
N max − N min
sau
2 2
* − N min xmax xmax
x = + ⋅N (4.31)
N max − N min N max − N min
respectiv
x* = c0 + c1 ⋅ N , (4.32)
unde
2
N min ⋅ xmax
c0 = − ; (4.33)
N max − N min
2
xmax (4.34)
c1 = .
N max − N min
173
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 5
Ce elemente sunt incluse în structura unui SNMD?
Exerciţiul 6
Care este rolul BC1 în cadrul unui SNMD?
Exemplul 4.1
Să se determine:
a – domeniul de valori al tensiunii (respectiv umin și umax) la
intrarea CAN;
b – rezoluţia n a CAN;
c – valoarea numărului de cuante N1 în cazul
corespunzătoare unui unei valori a nivelului reprezentată
în memorie H1* = 400 mm .
Qi i
H H*
N
LT R u CAN BC1
Qe
174
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin = R ⋅ imin = 250 ⋅ 4 ⋅10−3 =1V ;
U
Umin Umax
Caracteristica statică liniară din figura 4.13 este descrisă de ecuaţia
N max
N= ⋅u ,
umax
de unde rezultă
N max 1023
N min = ⋅ umin = ⋅ 1 = 204 ,6 uCAN .
umax 5
175
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
H m a x − H m in 800 − 200
a1 = = = 0 ,7 3 3 1 3 7 8 3 m m / u C A N .
N m a x − N m in 1 0 2 3 − 2 0 4 , 6
H * − 50
N= ,
0,73313783
respectiv
Exemplul 4.2
176
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N Q*
u CAN BC1
i R
FT
Q
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin = R ⋅ imin = 50 ⋅ 4 ⋅10−3 = 0,2 V ;
umax = R ⋅ imax = 50 ⋅ 20 ⋅10−3 =1V .
Pentru CAN cu caracteristica statică liniară din figura 4.13 (exemplul 4.1)
este descrisă de ecuaţia
N max
N= ⋅u ,
umax
de unde rezultă
N max 4095
N min = ⋅ umin = ⋅ 0 ,2 = 819 uCAN .
umax 1
2
− N min ⋅ Qmax −819 ⋅ 3600
c0 = = = − 900 ( m3 / h )2 ;
N max − N min 4095 − 819
2
Qmax 3600
c1 = = =1,0989011( m3 / h )2 / uCAN .
N max − N min 4095 − 819
177
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
CIU - CS – liniară
u ∈ [ umin ÷ umax ]V , umin =1V ,umax = 5V ;
BC1 - CS – liniară
ΔTmax
ΔT * = ⋅ ΔN .
ΔN max
Qi
i
N T*
Qat TT R u
CAN BC1
T
Qe
Să se determine:
a – valorile pentru rezistența R (în Ω) și intensității curentului imin
(în mA);
b – numărul maxim Nmax (în uCNA și rezoluţia n (în biți) a CAN;
c – valoarea numărului de cuante N1 corespunzătoare valorii
T1* = 75 grd C temperaturii reprezentate în memorie.
178
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy* ΔN Δu Δi Δy Δy* Δy
BC2 CNA CUI SRA SNTD
[uING] [uCNA] [V] [mA] [uING] [uING] [uING]
Δy
Δymax
Δy*max Δy*
Atât pentru convertorul tensiune curent CUI, cât şi pentru cel analog
numeric CNA se presupun caracteristici statice liniare prezentate în figura 4.17.
Δi Δu
Δimax
Δumax
Δumax Δu ΔN
ΔNmax
a b
Fig. 4.17. Caracteristici statice ale convertoarelor: a – CUI; b – CNA.
179
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy
Δymax
Δi
Δimax
Δymax
SNTD: Δy = *
⋅ Δy* , (4.35)
Δymax
Δymax
SRA: Δy = ⋅ Δi , (4.36)
Δimax
Δimax
CUI: Δi = ⋅ Δu , (4.37)
Δumax
Δumax
CNA: Δu = ⋅ ΔN . (4.38)
ΔN max
53
În loc de SRA poate fi considerat un element de execuție EE.
180
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔNmax
Fig. 4.19. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu
CM liniară.
Δymax Δy*
N max − N min
N − N min = ⋅ ( y* − ymin ) . (4.41)
ymax − ymin
După efectuarea calculelor în relaţia (4.41) se obţine,
ymax ⋅ N min − ymin ⋅ N max N max − N min *
N= + ⋅y . (4.42)
ymax − ymin ymax − ymin
sau
N = d 0 + d1 ⋅ y* , (4.43)
181
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
unde
e0 = N min , (4.48)
N max − N min (4.49)
e1 = .
ymax
182
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy
Δymax
Fig. 4.20. Caracteristica statică a SRA cu CM
neliniară din structura SNTD.
Δi
Δimax
183
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔN
ΔNmax
Fig. 4.21. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu CM
neliniară de tip radical.
Δymax Δy*
N max − N min
N − N min = 2
⋅ ( y* − ymin )2 . (4.56)
( ymax − ymin )
N = f 0 + f1 ⋅ y* + f 2 ⋅ ( y* )2 , (4.57)
unde
N max − N min
f 0 = N min + 2
⋅ ( ymin )2 , (4.58)
( ymax − ymin )
N max − N min
f1 = −2 ⋅ ymin ⋅ , (4.59)
ymax − ymin
N max − N min
f2 = . (4.60)
( ymax − ymin )2
Dacă limita inferioară a domeniului mărimii y este nulă, respectiv
ymin = 0 , relaţia (4.60) devine
N = g 0 + g 2 ⋅ ( y* )2 , (4.61)
unde
g 0 = N min , (4.62)
N max − N min
g2 = . (4.63)
( ymax )2
184
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 7
Ce elemente sunt incluse în structura unui SNTD?
Exerciţiul 8
Care este rolul BC2 în cadrul unui SNTD?
Exemplul 4.3
Să se determine:
a – rezoluţia n a CNA și numărul minim Nmin de uCNA;
b – valoarea calculată H1* a nivelului pentru care a
rezultat un număr N1=800 uCNA .
Qi i u N H*
CUI CNA BC2
LT LC
Qe
185
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Umax
N
Nmin Nmax
de unde rezultă
N max 2047
N min = ⋅ umin = ⋅ 1 = 409 ,4 uCNA .
umax 5
186
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N + 136 ,466667
H* = .
2 ,72933333
Exemplul 4.4
Să se determine:
a – numerele Nmin şi Nmax de uCNA pentru CNA;
b – valorile coeficienților asociați exprimării relației pentru
BC2 în valori absolute;
c – valoarea N1 a numărului de uCNA pentru un debit calculat
Q1* = 45 m3 / h.
.
187
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N Q*
i u
CUI CNA BC2
FC
FT
Q
Rezolvare
Umax = 2
de unde rezultă
N max 4095
N min = ⋅ umin = ⋅ 0 ,4 = 819 uCNA .
umax 2
188
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
189
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 3
CUI - CS – liniară cu u ∈ [ 0 ,2 ÷ 1 ]V ;
BC2 - CS – liniară
ΔN max
ΔN = ⋅ ΔT * .
ΔTmax
QP TP
u N T*
TT
Qa QC CNA BC2
i
TC CUI
Să se determine:
a – relația asociată CS a CUI și graficul acesteia ;
b – rezoluția CNA și numărul minim Nmin de uCNA;
c – relația în valori absolute asociată CS a BC2 și graficul acesteia.
190
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Domeniu Traductor
Fig. 4.26. Limite asociate diverselor tipuri de testări a unei mărimi achiziţionate.
Ymin Ymax Y
191
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Transfera
Ycalc
Da
Ycalc ≤ Ymin
Nu
Da
Ycalc ≥ Ymax
Nu
Transfera
Y
RETURN
192
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 9
Enumerați tipurile de limite cu care se compară valoarea unei mărimi
achiziționate.
Exerciţiul 10
Ce comandă se transmite EE la încălcarea unei limite de către valoarea
calculată a acesteia?
Lucrare de verificare
1. Enumerați operațiile de prelucrare primară a datelor achiziționate
și comenzilor elaborate.
2. Prin ce se caracterizează un filtru recursiv?
3. Scrieți relația recurențială pentru calculul valorii filtrate curente a
unui filtru nerecursiv.
4. Prin ce se implementează frontierele F1 și F2 la achiziția datelor
din proces?
5. Prin ce se implementează frontierele F1 și F2 la transmiterea
comenzilor către proces?
6. Enumerați componentele unui SNMD.
7. Enumerați componentele unui SNTD.
8. Justificați necesitatea conversiei în unități inginerești în cadrul
unui SNMD.
9. Justificați necesitatea conversiei din unități inginerești în cadrul
unui SNTD.
10. Ce presupune exprimarea prin variații a unei mărimi?
11. Ce implică validarea unei mărimi achiziționate?
12. Ce implică validarea unei comenzi elaborate?
193
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
Unui proces i se asociază obiective de calitate, eficiență, securitate.
Prin conducere, procesul este dirijat pentru a realiza aceste obiective.
În circuitul informațional asociat sistemului de conducere a unui proces
tehnologic sunt identificate pe fiecare dintre cele două canale (transmitere
date, respectiv transmitere comenzi) frontierele F1 și F2.
La nivelul frontierei F1 au loc conversii de formă – din analogic în
numeric la transmiterea datelor și din numeric în analogic la transmiterea
comenzilor. Frontiera F1 este implementată prin Convertoare Analog
Numerice (CAN) pe canalul de transmitere a datelor și prin Convertoare
Numeric Analogice (CNA) pe canalul de transmitere a comenzilor.
La nivelul frontierei F2 au loc conversii de conținut – din unități CAN
în unități inginerești (fizice) la transmiterea datelor și din unități inginerești
(fizice) în unități CNA la transmiterea comenzilor. Frontiera F2 este
implementată prin blocuri (module) de calcul și anume: BC1 pe canalul de
transmitere a datelor și BC2 pe canalul de transmitere a comenzilor.
Procesarea primară încadrează următoarele operații;
- filtrarea mărimilor achiziționate;
- conversia datelor achiziționate din unități CAN în unități fizice
(inginerești);
- conversia comenzilor elaborate din unități fizice (inginerești) în
unități CNA;
CAN și BC1 se consideră incluse într-un Sistem Numeric de Măsurat la
Distanță (SNMD).
CNA și BC2 se consideră incluse într-un Sistem Numeric de
Transmitere a comenzilor la Distanță (SNTD).
194
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Inițializare task
TASK_FILT
SEMEX=1, valori iniţiale pentru N,Z(i)
YFC, YFA,YFAI, XAC, XAI
Nu
∆t=Te_F?
Da
P(SEMEX)
V(SEMEX)
XAI=Z(N) YFA=YFC
i=N V(SEMEX)
Z(i)=Z(i-1)
Transferă în BDP
YFC
i=i-1
Nu P(SEMEX)
i=1?
YFC=YFA+(XAC-XAI)/N
Z(1)=XAC
Da
195
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
CIU - CS – liniară
u ∈ [ umin ÷ umax ]V , umin =1V ,umax = 5V ;
BC1 - CS – liniară
ΔTmax
ΔT * = ⋅ ΔN .
ΔN max
Qi
i
N T*
Qat TT R u
CAN BC1
T
Qe
Să se determine:
a – valorile pentru rezistența R (în Ω) și intensității curentului imin
(în mA);
b – numărul maxim Nmax (în uCNA și rezoluţia n (în biți) a CAN;
c – valoarea numărului de cuante N1 corespunzătoare valorii
T1* = 75 grd C temperaturii reprezentate în memorie.
196
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Nmin
U
Umin Umax
se poate scrie
N min
N= ⋅ u , de unde rezultă
umin
N min 819
N max = ⋅ umax = ⋅ 5 = 4095 uCAN .
umin 1
ΔTmax ΔN max
c – din relația ΔT * = ⋅ ΔN rezultă ΔN1 = ⋅ ΔT1* ,
ΔN max ΔTmax
197
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N max − N min
N1 − N min = ⋅ ( T1* − Tmin ) sau
Tmax − Tmin
4095 − 819
N1 − 819 = ⋅ ( 75 − 0 ) de unde
100 − 0
3276 ⋅ 75
N1 = 819 + = 3276 uCAN
100
Răspuns la testele de autoevaluare (continuare)
3. Enunț
BC2 - CS – liniară
ΔN max
ΔN = ⋅ ΔT * .
ΔTmax
QP TP
u N T*
TT
Qa QC CNA BC2
i
TC CUI
Să se determine:
a – relația asociată CS a CUI și graficul acesteia ;
b – rezoluția CNA și numărul minim Nmin de uCNA;
c – relația în valori absolute asociată CS a BC2 și graficul acesteia.
198
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
20
u[V]
0,2 1
Umax
Umin
N
Nmin Nmax
199
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
de unde rezultă
N max 4095
N min = ⋅ umin = ⋅ 0,2 = 819 uCNA .
umax 1
N[UCNA]
4095
819
T[grd C]
0 800
Bibliografie
1. Diaconescu E., Achiziţii de date şi instrumentaţie. Fundamente hardware,
Bucureşti, Editura MatrixRom, 2006.
200
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 4
PRELUCRAREA ÎN TIMP REAL A INFORMAŢIEI DE PROCES
Unitatea de învăţare 13-4.2
Taskuri asociate unor algoritmi uzuali de reglare numerică
13-4.2.1 Taskuri asociate unui sistem de reglare automată cu regulator
Proporțional Integrator Derivator (PID)
13-4.2.2 Taskuri asociate unui sistem de reglare automată
cu regulator bipozițional
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- cum se obține forma discretizată a expresiei pentru calculul comenzii
unui regulator PID;
- care este diferența între forma pozițională și cea recurențială
(incrementală) a expresiei discretizate pentru calculul comenzii unui
regulator PID;
- cum se construiește un task pentru implementarea unui regulator PID;
- ce funcții pot fi încredințate taskului prin care poate fi operat regulatorul
PID ;
- cum poate fi implementat printr-un task un algoritm de reglare
bipozițional ;
- cum poate fi implementată comunicarea între taskul de reglare și cel de
operare.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- deduci forma discretizată a unui algoritm continuu de reglare;
- să deduci forma recurențială pornind de la forma discretizată
pozițională;
- implementezi în cadrul unui task un regulator bipozițional;
- construiești taskuri de operare ale taskurilor reglare.
- implementezi în cadrul taskurilor de achiziții date și generare comenzi a
testării încadrării între limite a datelor achiziționate, respectiv a
comenzilor calculate .
201
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 2
Care sunt rolurile componentelor P , I, D într-un algoritm PID?
202
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Cum se implementează componentele I și D în formă discretizată?
203
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
204
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Initializare task
REG_PID
SEMEX=1, stabileşte valori
iniţiale pentru UC, UA, EC,
EA, EAA.
Nu
∆t=T?
Da
P(SEMEX)
V(SEMEX) EAA=EA
EC = I-R
Transmite UC
la EE prin SEA
Testul de autoevaluare 1
Completați schema logică din figura 4.29 cu secvența comparare a
comenzii calculate UC cu limitele minimă Umin și maximă Umax
preluate într-o secțiune critică din BDP (se va utiliza figura 4.28 UI 12-
4.1). Excluderea mutuală se va implementa cu semaforul binar SEMEX.
205
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Funcție
Tastă Efect
apelată
P Modif_Kp Modificare parametru de acordare Kp
I Modif_Ti Modificare parametru de acordare Ti
D Modif_Td Modificare parametru de acordare Td
R Modif_I Modificare referință I
E - Oprire task
Altă tastă - Fără efect
Exerciţiul 4
Cu ce se sincronizează taskul COP_PID?
206
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Initializare task
COP_PID
SEMEX=1, stabileşte valori iniţiale
pentru I, CC, CA, CAA.
Nu
Tast?
V(SEMEX)
Da
Da
P? Modif _Kp Transfera I,
Nu CC, CA, CAA în
BDP
Da
I? Modif _Ti
Nu
P(SEMEX)
Da
D? Modif _Td
Nu
Calculează
CC, CA, CAA
Da
R? Modif _I
Nu
Nu
E?
Da Fig. 4.30. Schema logică asociată taskului
COP_PID.
EXIT
Testul de autoevaluare 2
Completați schema logică din figura 4.30 cu funcțiile de modificare a
parametrilor Umax (la apăsarea tastei M) și Umin (la apăsarea tastei m).
207
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Explicați, cu referire a figura 4.31, de ce BDP este considerată resursă
critică.
Qr T TT
Qr Tm
Tm
TC
Tref u T
2 EE Proces
TC m
1 K (W)
r
Tref TT
230 V
50 Hz
a) b)
Fig. 4.32. Scheme ale SRA temperatura bipozițional:
a - schema principială; b - schema de structură; 1 – încălzitor electric; 2 –
serpentină prin care circulă un agent care preia căldura; Tref, T - temperaturi
prescrisă, respectiv reglată; u - mărime de comanda (stare contact); m - mărime de
execuție (debit caloric W); Tm – temperatură ambiantă; Qr – debit agent care preia
căldura; K – întrerupător.
208
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
u HYST
CON
DECON
T
Tmin Tref Tmax
Observații
1. După cum se observă din figura 4.34 pentru Tmin < T < Tmax
comanda u poate avea una dintre valorile CON (corespunzătoare liniei roșii a
caracteristicii statice) respectiv DECON (corespunzătoare liniei albastre a
caracteristicii statice).
2. Pentru a înlătura această ambiguitate, în oricare dintre aceste
situații comanda va păstra valoarea corespunzătoare pasului anterior, respectiv
pentru T(k-1) din relația (4.71).
209
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
HYST
T max = Tref + . (4.73)
2
unde HYST reprezintă lățimea benzii de hysterezis.
Exerciţiul 5
În ce situații este conectată, respectiv deconectată rezistența de
încălzire 1 din figura 4.33?
Exerciţiul 6
Cum influențează lățimea benzii de hysterezis precizia de reglare a
temperaturii?
Tmax
Tref
Tmin HYST
T0 b)
210
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Observație
Analizând schema logică din figura 4.35 se observă că se poate comanda
închiderea întrerupătorului (comanda CON), deschiderea întrerupătorului
(comanda DECON) sau se poate menține starea acestuia dacă Tmin<T<Tmax.
211
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Initializare task
REG_BP
SEMEX=1, determină valoarea
iniţială UC pentru comanda U
Nu
∆t=Tcom?
Da
P(SEMEX)
V(SEMEX)
Achiziționează R prin
SIA și evaluează T
Nu Da
T ≤ Tmin?
Nu
T ≥ Tmax?
Da
UC = DECON UC= CON
Transmite UC la EE
prin SEN
Testul de autoevaluare 3
Pornind de la relațiile (4.72) și (4.73), scrieți relațiile pentru calculul
valorilor anticipate Tmin_a și Tmax_a cu considerarea valorii de
anticipare Tant și a figurii 4.34 b.. Adaptați schema logică din figura
4.35 astfel încât comenzile să se dea anticipat la valorile Tmax_a și
Tmin a.
212
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Funcție
Tastă Efect
apelată
I Modif_Tref Modificare referință Tref
H Modif_HYST Modificare lățime bandă de hysterezis
E - Oprire task
Altă astă - Fără efect
Exerciţiul 7
Cum este sincronizat taskul COP_BP?
Testul de autoevaluare 4
Completați schema logică din figura 4.36 cu funcția de modificare a
valorii de anticipare Tant la a apăsarea tastei A, urmată de recalcularea
valorilor pentru Tmin_a și Tmax_a.
213
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Inițializare task
COP_BP
SEMEX=1, stabileşte valori iniţiale
pentru Tref, HYST, Tmin, Tmax.
Nu
Tast?
V(SEMEX)
Da
Da
I? Modif _Tref
Transfera
Nu
Tmin, Tmax
Da în BDP
H? Modif _HYST
Nu
P(SEMEX)
Nu
E?
Da Calculează
Tmin, Tmax
EXIT
Tmin Tmin
Tmax Tmax
214
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Deduceți forma discretizată recurențială pentru algoritmii de
reglare Proporțional – P și Proporțional Integrator – PI.
2. Indicați trei metode de discretizare a componentei integratoare.
3. Prin ce se caracterizează taskul REG_PID?
4. Prin ce se caracterizează taskul COP_PID?
5. Care dintre taskurile REG_PID și COP_PID se execută în buclă
infinită?
6. Cum comunică taskurile REG_PID și COP_PID?
7. Cine determină precizia de reglare a unui regulator BP?
8. Ce comandă va fi transmisă pentru T min < T < T max (figura
4.33)?
9. Prin ce se caracterizează taskurile REG_BP și COP_BP?
10. Care dintre taskurile REG_BP și COP_BP permite oprirea
aplicației?
11. Cum comunică taskurile REG_BP și COP_BP?
Rezumat
Dezvoltarea unui task pentru implementarea unui algoritm de reglare
continuu implică discretizarea relației pentru determinarea mărimii de
comandă, pentru acest algoritm.
Pentru algoritmul PID se impune exprimarea în format numeric a
tuturor celor trei componente: proporțională, integratoare, derivatoare.
Pentru implementare facilă se preferă exprimarea în formă recurențială.
S-a dedus o asemenea formă în care mărimea de comandă se determină numai
prin operații de adunare și înmulțire.
Taskul REG_PID este sincronizat cu timpul iar taskul de operare
COP_PID cu un eveniment extern legat de apăsarea unei taste. Cele două
taskuri comunică printr-o Bază de Date de Proces (BDP) care constituie o
resursă critică.
Al doilea algoritm pentru care se propune un sistem de taskuri este
algoritmul bipozițional (BP), pentru care mărimea de comandă are numai
două valori de tipul Conectat - Deconectat.
Taskul dezvoltat REG_BP este asociat unui SRA temperatură în care
este utilizat un regulator bipozițional.
Taskul REG_BP este sincronizat cu timpul iar taskul de operare
COP_BP cu un eveniment extern legat de apăsarea unei taste. Cele două
taskuri comunică printr-o Bază de Date de Proces (BDP) care constituie o
resursă critică.
Pentru realizarea excluderii mutuale aferente celor două sisteme de
taskuri REG_PID-COP_PID respectiv REG_BP-COP_BP este utilizat un
semafor binar inițializat cu valoarea 1.
215
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Initializare task
REG_PID
SEMEX=1, stabileşte valori
iniţiale pentru UC, UA, EC,
EA, EAA.
Nu
∆t=T?
Da
P(SEMEX)
EAA=EA
V(SEMEX)
UA=UC
Preia R de la T prin SIA
EC = I-R
1 2
216
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1 2
Da
UC≤ Umin
Nu
Da
UC ≥ Umax
Nu
U=Umin U=UC U=Umax
Transmite U
la EE prin SEA
217
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Initializare task
COP_PID
SEMEX=1, stabileşte valori iniţiale pentru
I, CC, CA, CAA, Umin, Umax.
Nu
Tast?
V(SEMEX)
Da
Da
P? Modif_ Kp
Transfera I,
Nu CC, CA, CAA,
Umin,Umax
Da
în BDP
I? Modif _Ti
Nu
Da P(SEMEX)
D? Modif_ Td
Nu
Calculează
CC, CA, CAA
Da
R? Modif_ I
Nu
Nu Da
M? Modif_ Umax
Da
Da
m? Modif _Umin
Nu Da
E? EXIT
218
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Initializare task
REG_BP
SEMEX=1, determină valoarea
iniţială UC pentru comanda U
Nu
∆t=Tcom?
Da
P(SEMEX)
V(SEMEX)
Nu Da
T≤
Nu
T≥
Da
UC = DECON UC= CON
219
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Inițializare task
COP_BP
SEMEX=1, stabileşte valori iniţiale pentru
Tref, Tant, HYST, Tmin_a, Tmax_a.
Nu
Tast?
V(SEMEX)
Da
Da
I? Modif _Tref
Transferă
Nu
Tmin_a,
Da Tmax_a
H? Modif _HYST în BDP
Nu
Da
A? Modif _Tant
P(SEMEX)
Da
Nu
E? Calculează
Tmin_a, Tmax_a
Da
EXIT
220
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Bibliografie
1. Diaconescu E., Achiziţii de date şi instrumentaţie. Fundamente hardware,
Bucureşti, Editura MatrixRom, 2006.
221
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 4
PRELUCRAREA ÎN TIMP REAL A INFORMAŢIEI DE PROCES
Unitatea de învăţare 14-4.3
Baze de date de proces
14-4.3.1 Cerințe impuse bazelor de date de proces
14-4.3.2 Tipuri de date incluse în bazele de date de proces
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- rolul unei Baze de Date de Proces (BDP) în cadrul unui sistem numeric
de conducere;
- cerințele la care trebuie să răspundă un Sistem de Gestiune a unei BDP;
- ce presupune asigurarea securității, integrității și independenței datelor
dintr-o BDP;
- caracterul de resursă critică al unei BDP;
- ce tipuri de date pot fi incluse într-o BDP;
- ce operații pot fi efectuate asupra unei BDP;
- unde poate fi locată o BDP.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- construiești taskuri care să utilizeze o BDP ;
- să definești calitatea de producător , respectiv de consumator a unui
task în raport cu o BDP;
- să stabilești care dintre datele cu care operează un task pot fi preluate
dintr-o, respectiv înscrise într-o BDP.
223
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
54
Engl: Database Management System
224
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Ce este o bază de date de proces?
Exerciţiul 2
Ce care sunt cerințele impuse unui SGBD aferent unei BDP?
Exerciţiul 3
Enumerați categoriile de date aferente regulatoarelor după abatere care
trebuie înscrise într-o BDP.
225
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
Enumerați principalele operații aferente utilizării unei BDP.
Testul de autoevaluare 1
Adaptați schema logică aferentă taskului REG_PID (figura 4.29) astfel
încât să fie în concordanță figura 1.10 asociată din UI 2-1.2 (ilustrarea
unui Sistem de conducere în timp real). Explicați în ce constă
adaptarea.
226
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Lucrare de verificare
1. Ce este o Bază de Date de Proces - BDP?
2. Explicați de ce o BDP este considerată o resursă critică în cadrul unei
aplicații de conducere în timp real?
3. Care este principala cerință impuse unui Sistem de Gestiune a unei
4. BDP (SG-BDP)?
5. În ce constă cerința de securitate a datelor impusă unui SG-BDP?
6. În ce constă cerința de integritate a datelor impusă unui SG-BDP?
7. În ce constă cerința de independență a datelor impusă unui SG-BDP?
8. Denumiți trei categorii de date care pot fi înscrise într-o BDP.
9. În ce constă funcția de structurare a unei BDP?
10. Ce tipuri de date aferente unei BDP sunt stocate în memoria primară
a echipamentului numeric de conducere?
11. Unde sunt locate datele aferente fișierelor istorice dintr-o BDP?
Rezumat
O bază de date care conţine date organizate pentru a fi utilizate în
aplicaţii de conducere în timp real se numeşte bază de date de proces (BDP)
Un SGBD aferent unei BDP trebuie să răspundă cerinţelor legate de :
respectarea constrângerilor aferente procesării în timp real, securitatea
datelor, integritatea datelor, independența datelor.
Într-o BDP pot fi înscrise mai multe categorii de date între care o
importanță deosebită prezintă cele care privesc istoricul procesului (valori
parametri, valori comenzi, evenimente, intervenții operator) și cele care
privesc echipamentele (adrese, parametri de acordare, regimuri de lucru);
Principalele operații (funcții) care au ca obiect BDP sunt cele care
privesc: structurarea BDP, încărcarea datelor, actualizarea datelor.
Din punct de vedere fizic secțiuni ale BDP sunt locate funcție de
taskurile care utilizează datele în memoria internă sau externă a
echipamentului numeric de conducere.
Din perspectivă multitasking o BDP se constituie într-o resursă critică,
utilizarea sa trebuind să se facă în cadrul secțiunilor critice în condițiile
excluderii mutuale..
227
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Initializare task
REG_PID
SEMEX=1, stabileşte valori
iniţiale pentru UC, UA, EC,
EA, EAA.
Nu
∆t=T?
Da EAA=UA
P(SEMEX)
EAA=EA
Preia din BDP
I, CC, CA, CAA
UA=UC
V(SEMEX)
V(SEMEX)
Preia R de la T prin SIA
Transferă în BDP
R și UC
EC = I-R
P(SEMEX)
UC =UA + CC ⋅ EC + CA ⋅ EA + CAA ⋅ EAA .
Transmite UC
la EE prin SEA
228
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura Universității
Petrol-Gaze din Ploiești, 2014.
2. Pătrașcu A., Baze de date – Unități de învățare, Universitatea Petrol-Gaze
din Ploiești, platforma E_learning, 2018.
229
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 5
STUDIU SUPLIMENTAR
Unitatea de învăţare 15
Exerciții și teste de autoevaluare
15 - ES12 Exerciții suplimentarea pentru modulele de studiu 1 și 2
15 - TS12 Teste suplimentare de autoevaluare pentru modulele de studiu 1 și 2
15 - RS12 Răspunsuri la testele suplimentare de autoevaluare pentru
modulele de studiu 1 și 2
15 – ES34 Exerciții suplimentarea pentru modulele de studiu 3 și 4
15 – TS34 Teste suplimentare de autoevaluare pentru modulele de studiu 3 și 4
15 – RS34 Răspunsuri la testele suplimentare de autoevaluare pentru
modulele de studiu 3 și 4
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- rolul exercițiilor și testelor pentru verificarea și consolidarea
cunoștințelor acumulate după parcurgerea celor 14 sinteze (unități de
învățare) care se pot constitui în tot atâtea referințe bibliografice;
- racordarea disciplinei Programarea Aplicațiilor de Timp Real (PATR)
cu alte discipline inginerești din planul de învățământ al specializării de
licență Automatică și Informatică Aplicată.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- verifici corectitudinea soluționării exercițiilor propuse;
- rezolvi probleme generate de aplicarea cunoștințelor acumulate în
cadrul disciplinei PATR.
231
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
232
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
233
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
234
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
235
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
236
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
237
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔNmax=3276 uCAN
Δu
Δumax
* Δx*max
SNMD: Δx = ⋅ Δx ,
Δxmax
Δimax
T: Δi = 2
⋅ ( Δx )2 ,
( Δxmax )
238
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔN max
CIU+CAN: ΔN = ⋅ Δi .
Δimax
i
Qi P N P*
PT R u CAN BC1
Qe
Δymax
SRA: Δy = ⋅ Δi ,
Δimax
Δi
CNA+CUI: Δi = max ⋅ ΔN .
ΔN max
16. Fie SNTD ilustrat în figura de mai jos, pentru care se cunosc:
SNTD : caracteristică statică impusă liniară
SRA : Q ,Q* ∈ [ 0 ÷ 30 ] mc / h , caracteristică statică
neliniară (radical);
CUI : u ∈ [ 1 ÷ 5 ]V , caracteristică statică liniară ;
CNA: Nmax = 1023 uCNA , caracteristică statică liniară.
239
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N Q*
i u
CUI CNA BC2
FC
FT
Q
Să se determine:
a – rezoluția n şi Nmin şi pentru CNA;
b – relaţia de calcul BC2;
c – valoarea Q1* pentru N1 = 500 uCNA .
240
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
241
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔNmax=3276 uCAN
Δu
Δumax
Rezolvare
N max = 2n − 1= 212 − 1= 4096 −1= 4095 uCAN
ΔN max = N max − N min
N min = N max − ΔN max = 4095 − 3276 = 819 uCAN
242
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
* Δx*max
SNMD: Δx = ⋅ Δx ,
Δxmax
Δimax
T: Δi = 2
⋅ ( Δx )2 ,
( Δxmax )
ΔN max
CIU+CAN: ΔN = ⋅ Δi .
Δimax
Rezolvare
ΔN max ΔN max Δimax
ΔN = ⋅ Δi = ⋅ 2
⋅ ( Δx )2
Δimax Δimax ( Δxmax )
Δ max
Δx = ⋅ ΔN
ΔN max
Δx*max
*
BC1: Δx = ⋅ ΔN .
ΔN max
i
Qi P N P*
PT R u CAN BC1
Qe
243
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Să se determine:
a – Umin şi imax;
b – rezoluţia n a CAN şi Nmax;
c – valoarea P1* a presiunii pentru N1=1000 uCAN .
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin = R ⋅ imin = 50 ⋅ 4 ⋅10−3 = 0 ,2 V ;
umax 1
imax = = = 0,02 A = 20 mA.
R 50
b - se determină pentru început valoarea Nmax apelând la caracteristica
statică a CAN ilustrată în figura de mai jos.
N
Nmax
Nmin
U
Umin Umax
N max − N min
N= ⋅u ,
umax − umin
de unde rezultă
N min 409 ,4
N max = ⋅ umax = ⋅ 1 = 2047 uCAN .
umin 0 ,2
P* = b0 + b1 ⋅ N ,
244
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
cu
Pmax 20
b1 = = = 0 ,012213 bar / uCAN .
N max − N min 2047 − 409 ,4
respectiv
P* = − 5 + 0 ,012213 ⋅ N ,
sau
P1* = − 5 + 0,012213 ⋅ N1 = −5 + 0,012213 ⋅ 1000 = 7, 213 bar.
Δymax
SRA: Δy = ⋅ Δi ,
Δimax
Δi
CNA+CUI: Δi = max ⋅ ΔN .
ΔN max
Rezolvare
245
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
16. Fie SNTD ilustrat în figura de mai jos, pentru care se cunosc:
SNTD : caracteristică statică impusă liniară
SRA : Q ,Q* ∈ [ 0 ÷ 30 ] mc / h , caracteristică statică
neliniară (radical);
CUI : u ∈ [ 1 ÷ 5 ]V , caracteristică statică liniară ;
CNA: Nmax = 1023 uCNA , caracteristică statică liniară.
N Q*
i u
CUI CNA BC2
FC
FT
Q
Să se determine:
a – rezoluția n şi Nmin şi pentru CNA;
b – relaţia de calcul BC2;
c – valoarea Q1* pentru N1 = 500 uCNA .
Rezolvare
u [V]
Umax = 5
Umin = 1
N[uCNA]
Nmin Nmax=1023
246
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
de unde rezultă
N max 1023
N min = ⋅ u min = ⋅ 1 = 204 ,6 uCNA .
umax 5
247
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
248
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 3
RESURSE PENTRU PROGRAMAREA APLICAȚIILOR
DE TIMP REAL
Unitatea de învăţare 11-3.5
Nucleul de timp real RTK – funcții de gestionare a mesajelor
de trecere
11-3.5.1 Mesaje de trecere în context RTK
11-3.5.2 Funcții RTK de gestionare a mesajelor de trecere
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- ce reprezintă un mesaj de trecere în context RTK;
- cum se implementează operația de transmitere a unui mesaj de trecere
în context RTK;
- cum se implementează operația de recepție a unui mesaj de trecere în
context RTK;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedSend, respectiv TimedSend;
- prin ce funcții se realizează tranziția unui task într-una din stările
BlockedReceive, respectiv TimedReceive;
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- utilizezi funcțiile RTK pentru gestionarea mesajelor de trecere;
- utilizezi mesajele de trecere pentru sincronizarea taskurilor timpul ;
- utilizezi mesajele de trecere pentru sincronizarea taskurilor cu
evenimente externe;
- utilizezi mesajele pentru comunicarea între taskuri.
149
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 1
Care este deosebirea dintre comunicarea prin cutii poștale și
comunicarea prin mesaje de trecere?
150
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Dacă TDP funcţia se execută, taskul în care este apelată funcţia îşi
continuă rularea, iar în variabila exec de tip bool se înscrie valoarea logică
True.
Dacă TDNP, funcţia nu se execută, taskul apelant nu se blochează, iar
în variabila exec de tip bool se înscrie valoarea logică False.
Exerciţiul 2
În ce situație se produce tranziția unui task în starea BlockedSend?
Exerciţiul 3
În ce situații, după execuția unei funcții RTKSendTimed variabilei
exec i se atribuie valoarea True?
151
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 4
În ce situație se produce tranziția unui task în starea Blocked RECEIVE
152
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Știind că:
- variabila Hand_dest (de tip TaskHandle) este un handler asociat
taskului T2
- variabilele i și j sunt de tipul unsigned ;
scrieți funcțiile RTK pentru:
1.1 inițializarea variabilei i cu valoarea 1 (2 octeți);
1.2 tipărirea valorii variabilei i începând cu colana 32, linia 5;
1.3 transmiterea către taskul T2 a conținutului variabilei i ;
1.4 recepția în taskul T2 (variabila j )a mesajului transmis din taskul
T1;
1.5 tipărirea valorii variabilei j începând cu colana 32, linia 6.
Exemplul 3.7
În acest exemplu se prezintă utilizarea mesajelor de trecere pentru
comunicarea între două taskuri. Sistemul multitasking este constituit din
taskurile Task_ora, Task_dest şi main.
• Taskul Task_ora are aceleaşi caracteristici şi funcţionalitate ca
în exemplele 3.4, 3.5 și 3.6.
• Taskul Task_dest are rolul de task receptor executând în buclă
infinită o secvență RTKReceive, cprintf. Rezultă că acest task se găsește
cvasipermanent în starea BlockedReceive, deblocarea producându-se în
momentul când Task_dest a fost referit prin handlerul asociat
Handle_dest în taskul emițător. După recepția mesajului sub forma unui
caracter, acesta este tipărit în coordonate prestabilite, însoțit de mesajul
Dest a recepționat.
• Ca și în exemplele precedente taskul main conţine o primă
secţiune de declaraţii şi iniţializări şi o a doua secţiune în buclă infinită
153
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
//functie preluare si tiparire data si ora
//
afordata(void)
{
getdate(&d); // preia data in variabila d
gettime(&t); // preia timpul in variabila t
gotoxy(55,3); //pozitioneaza cursorul
//se tiparesc: ziua, luna anul
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
//se tiparesc: ora, minutul, secunda
cprintf(" 02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
//
154
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
155
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
Construiți o aplicație RTK care să implementeze utilizarea mesajelor de
trecere în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-2.3 (în
taskul T1, procedura P_T1, va fi reprezentată de funcția afordata ) .
Lucrare de verificare
1. Ce reprezintă un mesaj de trecere în context RTK?
2. Când un task se consideră pregătit pentru transmiterea unui mesaj
de trecere?
3. Când un task se consideră pregătit pentru recepția unui mesaj de
trecere?
4. Care este diferența dintre funcțiile RTKSend și
RTKSendCond?
5. Care este diferența dintre funcțiile RTKReceive și
RTKReceiveCond?
6. Ce funcții trebuie să se execute pentru ca un task să execute
tranzițiile BlockedSend →Ready urespectiv BlockedReceive
→Ready?
7. Care dintre funcțiile RTKSend, RTKSendCond,
RTKSendTimed poate determina tranziția în starea
BlockedSend a taskului în care se execută?
8. Care dintre funcțiile RTKReceive, RTKReceiveCond,
RTKReceiveTimed poate determina tranziția în starea
BlockedReceive a taskului în care se execută?
9. Caracterizați funcția RTKSendTimed.
10. Caracterizați funcția RTKReceiveTimed.
156
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
În context RTK un mesaj de trecere reprezintă o facilitate de
comunicare directă între taskuri
Principalele funcții pentru gestionarea acestei facilități sunt cele de
transmitere respectiv de recepție a mesajelor.
Funcția de transmitere se prezintă în trei forme și anume:
necondiționată – RTKSend, condiționată – RTKSendCond, temporizată –
RTKSendTimed.
Funcția de recepție se prezintă de asemenea în trei forme și anume:
necondiționată – RTKReceive,condiționată – RTKReceiveCond,
temporizată – RTKReceiveTimed.
Legat de utilizarea mesajelor pot apărea două situații critice și anume:
task receptor nepregătit (nu se poate transmite un mesaj), task emițător
nepregătit (nu poaterecepționa un mesaj).
Stările unui task aferente situației critice legate de transmiterea unui
mesaj sunt BlockedSend, TimedSend.
Stările unui task aferente situației critice legate de recepția unui mesaj
sunt BlockedReceive, TimedReceive.
157
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
1.3 RTKSend(Hand_dest,&i);
1.4 RTKReceive(&j,2);
1.5 gotoxy(32,6);
cprintf("j=%d",j);
2. Enunț
Construiți o aplicație RTK care să implementeze utilizarea mesajelor de
trecere în sincronizarea cu timpul ilustrată în figura 2.12, UI 5-2.3 (în
taskul T1, procedura P_T1, va fi reprezentată de funcția afordata ) .
Rezolvare
//
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include "rtkernel.h"
#include "rtkeybrd.h"
//
TaskHandle Handler_T1;
struct date d;
struct time t;
//
afordata(void)
{
getdate(&d);
gettime(&t);
gotoxy(55,3);
cprintf("%02d-%02d-%4d",d.da_day,d.da_mon,d.da_year);
cprintf(" 02d-%02d-%02d",t.ti_hour,t.ti_min,t.ti_sec);
}
//
//
Task_T0(void)
{
int i=1;
for(;;)
{
RTKDelay(18);
RTKSend(Hand_T1,&i);
}
}
158
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
//
Task_T1(void)
{
int j;
for(;;)
{
RTKReceive(&j,2);
afordata(void);
}
}
//
//
main(void)
{
char c;
RTKernelInit(3);
clrscr(void);
gotoxy(5,8);
cprintf("E - Iesire");
RTKeybrdInit(void);
RTKCreateTask(Task_T0,5,1024,"Task_planif");
Handler_T1=RTKCreateTask(Task_T1,7,1024,"Task_sincr");
//
for(;;)
{
c=RTGetCh();
if(c==’E’)
exit(0);
}
}
Bibliografie
1. Paraschiv N., Programarea aplicațiilor de timp real, Editura
Universității Petrol-Gaze din Ploiești, 2014.
2. http://www.on-time.com/rtkernel-dos.htm
3. https://ro.wikipedia.org/wiki/MS-DOS
4. https://www.dosbox.com/
159
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
MODULUL DE STUDIU 4
PRELUCRAREA ÎN TIMP REAL A INFORMAŢIEI DE PROCES
Unitatea de învăţare 12-4.1
Operații de prelucrare primară a datelor de proces
12-4.1.1 Tipuri de operații de prelucrare primară a datelor de proces
12-4.1.2 Filtrarea datelor achiziționate
12-4.1.3 Circuitul informațional aferent unei aplicații de conducere
12-4.1.4 Conversia în unități inginerești
12-4.1.5 Conversia din unități inginerești
12-4.1.6 Validarea datelor achiziționate și a comenzilor elaborate
Cunoştinţe şi deprinderi
La finalul parcurgerii acestei unităţi de învăţare vei înţelege:
- necesitatea operațiilor de prelucrare primară a datelor de proces;
- ce este filtrarea numerică ;
- prin ce se caracterizează un filtru numeric nerecursiv ;
- funcționalitatea circuitului informațional specific unei aplicații de
conducere;
- cum se realizează sinteza modulului de conversie (scalare) BC1 în
cadrul unui Sistem Numeric de Măsurat la Distanță (SNMD);
- cum se realizează sinteza modulului de conversie (scalare) BC2 în
cadrul unui Sistem Numeric de Transmitere la Distanță (SNTD);
- ce presupune validarea datelor achiziționate și a comenzilor elaborate.
La finalul parcurgerii acestei unităţi de învăţare vei putea să:
- deduci o relație recurentă pentru implementarea unui filtru numeric
nerecursiv;
- proiectezi modulul de conversii în unități inginerești (fizice) aferent
unui SNMD ;
- proiectezi modulul de conversii din unități inginerești (fizice) aferent
unui SNTD ;
- implementezi în cadrul taskurilor de achiziții date și generare comenzi a
testarea încadrării între limite a datelor achiziționate, respectiv a
comenzilor calculate.
161
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
sub forma a trei categorii de obiective și anume cele legate de calitate, eficiență,
securitate.
• Obiectivele de calitate se referă la respectarea specificațiilor de
calitate referitoare la produsele și serviciile rezultate ca urmare a desfășurării
procesului.
• Obiectivele de eficiență impun profitabilitatea respectivului proces,
în condițiile unei piețe concurențiale.
• Obiectivele de securitate au în vedere desfășurarea procesului astfel
încât să nu fie afectată securitatea personalului de operare a mediului și a
infrastructurii aferente procesului.
Din punctul de vedere al conducerii, fluxurile informaționale prezintă o
importanță deosebită întrucât prin intermediul acestora se realizează cunoașterea
procesului și se implementează comenzile.
În prima unitate de învățare (sinteză) a modulului de studiu 4 (UI
12-4.1) este tratată problema procesării primare a informației preluate din proces
și a celei destinate procesului sub forma comenzilor.
Procesarea primară încadrează următoarele operații:
- filtrarea mărimilor achiziționate;
- conversia în unități fizice (inginerești) a datelor achiziționate;
- conversia din unități fizice (inginerești) a comenzilor elaborate;
- validarea datelor achiziționate și a comenzilor elaborate.
În figura 1.10 din unitatea de învățare 2 (UI 2-1.2) modulul MPDA
concentrează pentru datele achiziționate funcțiile de filtrare, conversie în unități
fizice, validare. În aceiași figură modulul MPCE realizează pentru comenzile
elaborate funcțiile care privesc conversia din unități fizice și validare.
A doua unitate de învățare (sinteză) a acestui modul (UI 13-4.2)
prezintă taskurile asociate unor algoritmi de reglare numerică cu o arie largă de
răspândire.
În a treia unitate de învățare (sinteză) (UI 14-4.3) sunt expuse
câteva considerații referitoare la organizarea bazelor de date de proces (BDP) în
calitate de principală resursă destinată stocării datelor aferente aplicațiilor de
conducere în timp real.
Exerciţiul 1
Care sunt obiectivele unui proces?
Exerciţiul 2
Enumerați operațiile de prelucrare primară a datelor achiziționate și a
comenzilor elaborate.
162
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
x[n] y[n]
FILTRU
NUMERIC
163
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N −1
1
y[n − 1] =
N
x[n − 1 − k ]. (4.3)
k =0
1
y[n] = y[n − 1] + ( x[n] − x[n − N ]). (4.4)
N
x[n-N]
x[n-(N-1)]
x[n-2]
x[n-1]
x[n]
x[n+1]
164
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 1
Într-o aplicaţie de conducere în timp real, de tipul celei din figura 1.10,
(UI 2-1.2) poate fi evidenţiată următoarea secvenţă de operaţii:
- achiziția din proces a datelor;
- elaborarea comenzilor;
- implementarea în proces a comenzilor.
Realizarea acestei secvențe implică existenţa unui circuit informaţional
ilustrat în figura 4.3, în care procesul este reprezentat prin traductoare-T și
elemente de execuție - EE, iar echipamentul numeric prin porturi de intrare – PI
și porturi de ieșiri – PE.
165
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
F1 F2
50
În cazul aparaturii inteligente de automatizare (Smart) această frontieră este situată la limita
respectivei instrumentații, iar transmiterea semnalelor se face în format digital.
51
CAN și CNA sunt abrevieri pentru Convertor Analog Numeric, respectiv Convertor Numeric
Analog.
166
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
uP1
F2 F1
P2_1 P2_k P2_n
iP1
P* NP uP CIU1 TP1
V mA
PI BC1 CAN
uPk iPk
V CIUk TPk
REG uING uCAN
V
PERT mA
REG AB P2
u1
y1* N1 P1
i1 y1 SP2
PE CUI REG SP1
BC2 CNA AB EE
uING uCNA V r1
mA
TA y2 uING
y2i mA
uING
Fig. 4.4. Circuitul informațional într-un SRA ierarhizat.
52
În raport cu referința y2i
167
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 3
Care este rolul frontierelor F1 și F2 în cadrul circuitului informațional
asociat unui sistem de conducere?
Exerciţiul 4
Prin ce se implementează frontierele F1 și F2 în cadrul circuitului
informațional asociat unui SRA ierarhizat?
Δx
Δxmax
168
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δimax Δi Δumax Δu
a b
Δxmax Δx
169
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
* Δx*max
SNMD: Δx = ⋅ Δx , (4.8)
Δxmax
Δimax
T: Δi = ⋅ Δx , (4.9)
Δxmax
Δumax
CIU: Δu = ⋅ Δi , (4.10)
Δimax
ΔN max
CAN: ΔN = ⋅ Δu . (4.11)
Δumax
Rezolvând sistemul format din ecuaţiile (4.8)…(4.11) rezultă pentru
BC1 relaţia
*
Δxmax
Δx* = ⋅ ΔN . (4.12)
ΔN max
Dacă în relația (4.12) se impune pentru mărimea x* (reprezentată în
memorie) acelaşi domeniu de variaţie ca pentru mărimea fizică (respectiv
Δx*max= Δxmax), rezultă
Δxmax
Δx* = ⋅ ΔN . (4.13)
ΔN max
Examinând relaţia (4.13) se observă că elementul BC1 este un element
liniar, a cărui caracteristică statică este reprezentată în figura 4.9.
Δx*
Δxmax
ΔNmax ΔN
Sunt situaţii care necesită utilizarea ecuaţiei modulului BC1 în valori absolute.
Pentru a obţine această formă, în ecuaţia (4.13) se exprimă abaterile ţinând cont
de relaţiile (4.6) , (4.7) şi rezultă
xmax − xmin
x* − xmin = ⋅ ( N − N min ) . (4.14)
N max − N min
170
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
unde
171
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δxmax Δx
* Δx*max
SNMD: Δx = ⋅ Δx , (4.23)
Δxmax
Δimax
T: Δi = 2
⋅ ( Δx )2 , (4.24)
( Δxmax )
Δumax
CIU: Δu = ⋅ Δi , (4.25)
Δimax
ΔN max
CAN: ΔN = ⋅ Δu . (4.26)
Δumax
Rezolvând sistemul format din ecuaţiile (4.23)…(4.26) rezultă pentru
BC1 ecuaţia
Δx*max
*
Δx = ⋅ ΔN , (4.27)
ΔN max
sau impunând pentru mărimea x* reprezentată în memorie acelaşi domeniu de
variaţie ca pentru mărimea fizică, respectiv (respectiv Δx*max= Δxmax), se obține
Δxmax
Δx* = ⋅ ΔN . (4.28)
ΔN max
Examinând relaţia (4.28) se observă că modulul BC1 corespunde unui
element neliniar, a cărui caracteristică statică este reprezentată în figura 4.11.
Este de remarcat faptul că neliniaritatea introdusă de BC1 compensează
172
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δx*
Δxmax
ΔNmax ΔN
N − N min
x* = xmax ⋅ . (4.30)
N max − N min
sau
2 2
* − N min xmax xmax
x = + ⋅N (4.31)
N max − N min N max − N min
respectiv
x* = c0 + c1 ⋅ N , (4.32)
unde
2
N min ⋅ xmax
c0 = − ; (4.33)
N max − N min
2
xmax (4.34)
c1 = .
N max − N min
173
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 5
Ce elemente sunt incluse în structura unui SNMD?
Exerciţiul 6
Care este rolul BC1 în cadrul unui SNMD?
Exemplul 4.1
Să se determine:
a – domeniul de valori al tensiunii (respectiv umin și umax) la
intrarea CAN;
b – rezoluţia n a CAN;
c – valoarea numărului de cuante N1 în cazul
corespunzătoare unui unei valori a nivelului reprezentată
în memorie H1* = 400 mm .
Qi i
H H*
N
LT R u CAN BC1
Qe
174
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin = R ⋅ imin = 250 ⋅ 4 ⋅10−3 =1V ;
U
Umin Umax
Caracteristica statică liniară din figura 4.13 este descrisă de ecuaţia
N max
N= ⋅u ,
umax
de unde rezultă
N max 1023
N min = ⋅ umin = ⋅ 1 = 204 ,6 uCAN .
umax 5
175
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
H m a x − H m in 800 − 200
a1 = = = 0 ,7 3 3 1 3 7 8 3 m m / u C A N .
N m a x − N m in 1 0 2 3 − 2 0 4 , 6
H * − 50
N= ,
0,73313783
respectiv
Exemplul 4.2
176
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N Q*
u CAN BC1
i R
FT
Q
Rezolvare
a – conform legii lui Ohm, pentru rezistorul R se poate scrie
umin = R ⋅ imin = 50 ⋅ 4 ⋅10−3 = 0,2 V ;
umax = R ⋅ imax = 50 ⋅ 20 ⋅10−3 =1V .
Pentru CAN cu caracteristica statică liniară din figura 4.13 (exemplul 4.1)
este descrisă de ecuaţia
N max
N= ⋅u ,
umax
de unde rezultă
N max 4095
N min = ⋅ umin = ⋅ 0 ,2 = 819 uCAN .
umax 1
2
− N min ⋅ Qmax −819 ⋅ 3600
c0 = = = − 900 ( m3 / h )2 ;
N max − N min 4095 − 819
2
Qmax 3600
c1 = = =1,0989011( m3 / h )2 / uCAN .
N max − N min 4095 − 819
177
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 2
CIU - CS – liniară
u ∈ [ umin ÷ umax ]V , umin =1V ,umax = 5V ;
BC1 - CS – liniară
ΔTmax
ΔT * = ⋅ ΔN .
ΔN max
Qi
i
N T*
Qat TT R u
CAN BC1
T
Qe
Să se determine:
a – valorile pentru rezistența R (în Ω) și intensității curentului imin
(în mA);
b – numărul maxim Nmax (în uCNA și rezoluţia n (în biți) a CAN;
c – valoarea numărului de cuante N1 corespunzătoare valorii
T1* = 75 grd C temperaturii reprezentate în memorie.
178
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy* ΔN Δu Δi Δy Δy* Δy
BC2 CNA CUI SRA SNTD
[uING] [uCNA] [V] [mA] [uING] [uING] [uING]
Δy
Δymax
Δy*max Δy*
Atât pentru convertorul tensiune curent CUI, cât şi pentru cel analog
numeric CNA se presupun caracteristici statice liniare prezentate în figura 4.17.
Δi Δu
Δimax
Δumax
Δumax Δu ΔN
ΔNmax
a b
Fig. 4.17. Caracteristici statice ale convertoarelor: a – CUI; b – CNA.
179
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy
Δymax
Δi
Δimax
Δymax
SNTD: Δy = *
⋅ Δy* , (4.35)
Δymax
Δymax
SRA: Δy = ⋅ Δi , (4.36)
Δimax
Δimax
CUI: Δi = ⋅ Δu , (4.37)
Δumax
Δumax
CNA: Δu = ⋅ ΔN . (4.38)
ΔN max
53
În loc de SRA poate fi considerat un element de execuție EE.
180
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔNmax
Fig. 4.19. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu
CM liniară.
Δymax Δy*
N max − N min
N − N min = ⋅ ( y* − ymin ) . (4.41)
ymax − ymin
După efectuarea calculelor în relaţia (4.41) se obţine,
ymax ⋅ N min − ymin ⋅ N max N max − N min *
N= + ⋅y . (4.42)
ymax − ymin ymax − ymin
sau
N = d 0 + d1 ⋅ y* , (4.43)
181
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
unde
e0 = N min , (4.48)
N max − N min (4.49)
e1 = .
ymax
182
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Δy
Δymax
Fig. 4.20. Caracteristica statică a SRA cu CM
neliniară din structura SNTD.
Δi
Δimax
183
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
ΔN
ΔNmax
Fig. 4.21. Caracteristica statică rezultată pentru
modulul de calcul BC2, în cazul SRA cu CM
neliniară de tip radical.
Δymax Δy*
N max − N min
N − N min = 2
⋅ ( y* − ymin )2 . (4.56)
( ymax − ymin )
N = f 0 + f1 ⋅ y* + f 2 ⋅ ( y* )2 , (4.57)
unde
N max − N min
f 0 = N min + 2
⋅ ( ymin )2 , (4.58)
( ymax − ymin )
N max − N min
f1 = −2 ⋅ ymin ⋅ , (4.59)
ymax − ymin
N max − N min
f2 = . (4.60)
( ymax − ymin )2
Dacă limita inferioară a domeniului mărimii y este nulă, respectiv
ymin = 0 , relaţia (4.60) devine
N = g 0 + g 2 ⋅ ( y* )2 , (4.61)
unde
g 0 = N min , (4.62)
N max − N min
g2 = . (4.63)
( ymax )2
184
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 7
Ce elemente sunt incluse în structura unui SNTD?
Exerciţiul 8
Care este rolul BC2 în cadrul unui SNTD?
Exemplul 4.3
Să se determine:
a – rezoluţia n a CNA și numărul minim Nmin de uCNA;
b – valoarea calculată H1* a nivelului pentru care a
rezultat un număr N1=800 uCNA .
Qi i u N H*
CUI CNA BC2
LT LC
Qe
185
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Umax
N
Nmin Nmax
de unde rezultă
N max 2047
N min = ⋅ umin = ⋅ 1 = 409 ,4 uCNA .
umax 5
186
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N + 136 ,466667
H* = .
2 ,72933333
Exemplul 4.4
Să se determine:
a – numerele Nmin şi Nmax de uCNA pentru CNA;
b – valorile coeficienților asociați exprimării relației pentru
BC2 în valori absolute;
c – valoarea N1 a numărului de uCNA pentru un debit calculat
Q1* = 45 m3 / h.
.
187
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N Q*
i u
CUI CNA BC2
FC
FT
Q
Rezolvare
Umax = 2
de unde rezultă
N max 4095
N min = ⋅ umin = ⋅ 0 ,4 = 819 uCNA .
umax 2
188
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
189
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Testul de autoevaluare 3
CUI - CS – liniară cu u ∈ [ 0 ,2 ÷ 1 ]V ;
BC2 - CS – liniară
ΔN max
ΔN = ⋅ ΔT * .
ΔTmax
QP TP
u N T*
TT
Qa QC CNA BC2
i
TC CUI
Să se determine:
a – relația asociată CS a CUI și graficul acesteia ;
b – rezoluția CNA și numărul minim Nmin de uCNA;
c – relația în valori absolute asociată CS a BC2 și graficul acesteia.
190
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Domeniu Traductor
Fig. 4.26. Limite asociate diverselor tipuri de testări a unei mărimi achiziţionate.
Ymin Ymax Y
191
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Transfera
Ycalc
Da
Ycalc ≤ Ymin
Nu
Da
Ycalc ≥ Ymax
Nu
Transfera
Y
RETURN
192
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Exerciţiul 9
Enumerați tipurile de limite cu care se compară valoarea unei mărimi
achiziționate.
Exerciţiul 10
Ce comandă se transmite EE la încălcarea unei limite de către valoarea
calculată a acesteia?
Lucrare de verificare
1. Enumerați operațiile de prelucrare primară a datelor achiziționate
și comenzilor elaborate.
2. Prin ce se caracterizează un filtru recursiv?
3. Scrieți relația recurențială pentru calculul valorii filtrate curente a
unui filtru nerecursiv.
4. Prin ce se implementează frontierele F1 și F2 la achiziția datelor
din proces?
5. Prin ce se implementează frontierele F1 și F2 la transmiterea
comenzilor către proces?
6. Enumerați componentele unui SNMD.
7. Enumerați componentele unui SNTD.
8. Justificați necesitatea conversiei în unități inginerești în cadrul
unui SNMD.
9. Justificați necesitatea conversiei din unități inginerești în cadrul
unui SNTD.
10. Ce presupune exprimarea prin variații a unei mărimi?
11. Ce implică validarea unei mărimi achiziționate?
12. Ce implică validarea unei comenzi elaborate?
193
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezumat
Unui proces i se asociază obiective de calitate, eficiență, securitate.
Prin conducere, procesul este dirijat pentru a realiza aceste obiective.
În circuitul informațional asociat sistemului de conducere a unui proces
tehnologic sunt identificate pe fiecare dintre cele două canale (transmitere
date, respectiv transmitere comenzi) frontierele F1 și F2.
La nivelul frontierei F1 au loc conversii de formă – din analogic în
numeric la transmiterea datelor și din numeric în analogic la transmiterea
comenzilor. Frontiera F1 este implementată prin Convertoare Analog
Numerice (CAN) pe canalul de transmitere a datelor și prin Convertoare
Numeric Analogice (CNA) pe canalul de transmitere a comenzilor.
La nivelul frontierei F2 au loc conversii de conținut – din unități CAN
în unități inginerești (fizice) la transmiterea datelor și din unități inginerești
(fizice) în unități CNA la transmiterea comenzilor. Frontiera F2 este
implementată prin blocuri (module) de calcul și anume: BC1 pe canalul de
transmitere a datelor și BC2 pe canalul de transmitere a comenzilor.
Procesarea primară încadrează următoarele operații;
- filtrarea mărimilor achiziționate;
- conversia datelor achiziționate din unități CAN în unități fizice
(inginerești);
- conversia comenzilor elaborate din unități fizice (inginerești) în
unități CNA;
CAN și BC1 se consideră incluse într-un Sistem Numeric de Măsurat la
Distanță (SNMD).
CNA și BC2 se consideră incluse într-un Sistem Numeric de
Transmitere a comenzilor la Distanță (SNTD).
194
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Rezolvare
Inițializare task
TASK_FILT
SEMEX=1, valori iniţiale pentru N,Z(i)
YFC, YFA,YFAI, XAC, XAI
Nu
∆t=Te_F?
Da
P(SEMEX)
V(SEMEX)
XAI=Z(N) YFA=YFC
i=N V(SEMEX)
Z(i)=Z(i-1)
Transferă în BDP
YFC
i=i-1
Nu P(SEMEX)
i=1?
YFC=YFA+(XAC-XAI)/N
Z(1)=XAC
Da
195
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
CIU - CS – liniară
u ∈ [ umin ÷ umax ]V , umin =1V ,umax = 5V ;
BC1 - CS – liniară
ΔTmax
ΔT * = ⋅ ΔN .
ΔN max
Qi
i
N T*
Qat TT R u
CAN BC1
T
Qe
Să se determine:
a – valorile pentru rezistența R (în Ω) și intensității curentului imin
(în mA);
b – numărul maxim Nmax (în uCNA și rezoluţia n (în biți) a CAN;
c – valoarea numărului de cuante N1 corespunzătoare valorii
T1* = 75 grd C temperaturii reprezentate în memorie.
196
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
Nmin
U
Umin Umax
se poate scrie
N min
N= ⋅ u , de unde rezultă
umin
N min 819
N max = ⋅ umax = ⋅ 5 = 4095 uCAN .
umin 1
ΔTmax ΔN max
c – din relația ΔT * = ⋅ ΔN rezultă ΔN1 = ⋅ ΔT1* ,
ΔN max ΔTmax
197
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE
N max − N min
N1 − N min = ⋅ ( T1* − Tmin ) sau
Tmax − Tmin
4095 − 819
N1 − 819 = ⋅ ( 75 − 0 ) de unde
100 − 0
3276 ⋅ 75
N1 = 819 + = 3276 uCAN
100
Răspuns la testele de autoevaluare (continuare)
3. Enunț
BC2 - CS – liniară
ΔN max
ΔN = ⋅ ΔT * .
ΔTmax
QP TP
u N T*
TT
Qa QC CNA BC2
i
TC CUI
Să se determine:
a – relația asociată CS a CUI și graficul acesteia ;
b – rezoluția CNA și numărul minim Nmin de uCNA;
c – relația în valori absolute asociată CS a BC2 și graficul acesteia.
198
PROGRAMAREA APLICAȚIILOR DE TIMP REAL - SINTEZE