5.
5.1. PROGRAMAREA CALCULATOARELOR
5.1.1. Pentru progamul următor, corectati erorile de editare, compilare, atentionările și
erorile de functionare. Programul calculează incidenta și procentajul literelor dintr-un fișier
(denumit mai jos histograma). Scrieti în dreptul liniei greșite varianta corectă.
#include <stdio.h>
int main (int argc, char **argv) {
FILE p_file; /* Fisier de intrare */
int c; /* Caracterul curent citit */
int hist['Z' - 'A' + 1]; /* Histograma literelor */
int sum_let; /* Numarul total de litere din fisier */
float freq; /* Frecventa de aparitie a literei curente */
/* Verificati numarul de argumente */
if (argc < 2) {
printf (" %s <input file>\n", argv[0]);
return (1);
}
/* Deschideti fisierul de intrare specificat de argv[1] */
p_file = fopen (argv[1], "r");
if (p_file == NULL) {
printf ("Nu poate fi deschis fisierul de intrare '%s'.\n", argv[1]);
return (1);
}
/*intializare cu 0 a histogramei */
for (c = 'A'; c > 'Z'; c++)
hist[c - 'A'] = 0;
/*Citirea continutului fisierului, caracter cu caracter */
sum_let = 0;
while ((c = fputc(p_file)) != EOF) {
if (c >= 'a' && c <= 'z')
c += ('a' - 'A'); /*Daca este cazul, se trece la litera mare */
/* daca e litera, actualizeaza histograma */
if (c >= 'A' && c <= 'Z') {
(hist[c - 'A'+1])++;
sum_let++;
}
}
fclose (p_file,w); /* Inchide fisierul */
/* Afiseaza histograma */
for (c = 'A'; c <= 'Z'; c++) {
freq = 100 * (float)hist[c - 'A'] / (float)sum_let;
printf ("%c : %4c (%5.2f %%)\n", c, hist[c - 'A'], freq);
}
return (0);
}
Solutie:
#include <stdio.h>
int main (int argc, char **argv) {
FILE *p_file; /* Fisier de intrare */
int c; /* Caracterul curent citit */
int hist['Z' - 'A' + 1]; /* Histograma literelor */
int sum_let; /* Numarul total de litere din fisier */
float freq; /* Frecventa de aparitie a literei curente */
/* Verificati numarul de argumente */
if (argc < 2) {
printf (" %s <input file>\n", argv[0]);
return (1);
}
/* Deschideti fisierul de intrare specificat de argv[1] */
p_file = fopen (argv[1], "r");
if (p_file == NULL) {
printf ("Nu poate fi deschis fisierul de intrare '%s'.\n", argv[1]);
return (1);
}
/*intializare cu 0 a histogramei */
for (c = 'A'; c <= 'Z'; c++)
hist[c - 'A'] = 0;
/*Citirea continutului fisierului, caracter cu caracter */
sum_let = 0;
while ((c = fgetc(p_file)) != EOF) {
if (c >= 'a' && c <= 'z')
c += ('A' - a'); /*Daca este cazul, se trece la litera mare */
/* daca e litera, actualizeaza histograma */
if (c >= 'A' && c <= 'Z') {
(hist[c - 'A')++;
sum_let++;
}
}
fclose (p_file); /* Inchide fisierul */
/* Afiseaza histograma */
for (c = 'A'; c <= 'Z'; c++) {
freq = 100 * (float)hist[c - 'A'] / (float)sum_let;
printf ("%c : %4d (%5.2f %%)\n", c, hist[c - 'A'], freq);
}
return (0);
}
5.1.2. Pentru programul următor să se precizeze care sunt rezultatele afișărilor – precizati în
dreptul liniei care contine functia de afișare.
#include <stdio.h>
#define MAX 5
int ModificaTabel(int b[], int);
int ModificaElement(int);
int main() {
int a[MAX] = {0,1,2,3,4};
int i;
printf( "Efectul transmiterii intregului tabel ca parametru:\n\nValorile"
" din tabelul original sunt:\n" );
for (i=0;i<MAX;i++)
printf("%3d",a[i]);
printf("\n");
ModificaTabel(a, MAX);
printf("Valorile din tabelul modificat sunt:\n");
for (i = 0; i < MAX; i++)
printf("%3d",a[i]);
printf( "\n\n\nEfectul transmiterii elementelor tabelului"
"\n\nValoarea elementului a[3] este %d\n", a[3]);
ModificaElement(a[3]);
printf( "Valoarea elementului a[3] este %d\n",a[3]);
return 0;
}
int ModificaTabel(int b[], int dimm) {
int j;
for (j=0;j<dimm;j++)
b[j] *= 2;
return 0;
}
int ModificaElement(int x) {
printf( "Valoarea elementului in ModificaElement este %d\n", x *= 2 );
return 0;
}
Solutie:
5.1.3. Să se scrie un program în C care este constituit din 3 părţi după cum urmează:
- se creează un fișier în care se introduc date caracter cu caracter de la tastatură.
Fişierul este închis la introducerea CTRL+Z de la tastatură;
- fişierul creat este redeschis pentru adăugarea de caractere de la tastatură şi închis la
introducerea CTRL+Z;
la final este listat continutului fișierului, linie cu linie.
Solutie:
#include <stdio.h>
#include <conio.h>
int main() {
FILE *pf;
char ch, s[100], nume_fis[50] = "c:\\fisier.txt";
int i;
clrscr();
/* crearea fisierului prin introducerea caracterelor,
inclusiv '/n', de la tastatura. Se termina cu Ctrl-Z */
pf=fopen(nume_fis,"w");
printf("\nIntroduceti textul: ");
while ((ch=getc(stdin))!=EOF)
putc(ch,pf);
fclose(pf);
/* Adaugarea unor siruri de caractere. Se termina cu Ctrl-Z*/
pf=fopen(nume_fis,"r+");
fseek(pf,0l,2);
printf("Precizati sirurile de caractere incheind cu ^Z:");
while(fgets(s,100,stdin)!=(char*)0)
fputs(s,pf);
fclose(pf);
/* Afisarea continutului */
printf("\nContinutul fisierului, linie cu linie, este: \n");
i=0;
pf=fopen(nume_fis,"r");
while(fgets(s,100,pf)!=(char *)0) {
printf("%d %s",i,s);
i++;
}
fclose(pf);
getch();
return 0;
}
5.2. STANDARDE ŞI GRAFICĂ TEHNICĂ ŞI CREAŢIE INTELECTUALĂ
5.2.1. Prezentaţi, pe scurt, regulile de întocmire a schemei circuitelor din cadrul
documentaţiei unei instalaţii electrice de automatizare în situaţia în care aceasta conţine atât
circuite de forţă cât şi circuite de comandă.
Soluţie:
Schema circuitelor permite înţelegerea funcţionării în detaliu a operaţiunilor ce pot fi realizate de
maşina industrială. Ea reprezintă, cu ajutorul semnelor convenţionale, dispozitivele electrice şi
toate legăturile, în special legăturile electrice utilizate în funcţionarea maşinii.
Pentru schema circuitelor se recomandă formatul A3.
Semnele convenţionale utilizate, cum ar fi de exemplu literele reper pentru identificarea
elementelor, trebuie să fie conform standardelor în vigoare.
Aparatele sunt reprezentate în poziţia lor fără tensiune, iar operatoarele logice binare puse la
zero. Organele mecanice de comandă sunt reprezentate în poziţia pe care o au înainte de a porni
în ciclu.
Diferite circuite se prezintă astfel încât să permită înţelegerea şi depanarea lor uşoară. Se
recomandă reprezentarea separată pe schemă a circuitelor de putere (a), de comandă şi de
semnalizare (b), în măsura în care acestea sunt separate electric, astfel:
a) Circuitele de forţă se reprezintă prin una sau mai multe linii orizontale de pe care pleacă
perpendicular derivaţiile cu protecţiile lor, spre fiecare aparat receptor (motor, etc.);
b) In circuitele de comanda si semnalizare fiecare circuit elementar se reprezintă între două sau
mai multe linii paralele, perpendicular pe acestea, sub forma unui traseu cuprinzând atât cât este
posibil, una sau mai multe linii drepte.
De asemenea, trebuie să se reprezinte sursa sau sursele de alimentare a circuitelor de comandă.
Pentru echipamentele electronice, în locul schemei circuitelor se poate reprezenta o schemă
asemănătoare cu schema funcţională, dar indicând în detaliu relaţiile intrări-ieşiri ale
operatoarelor logice binare (de exemplu, utilizând tabelele de adevăr).
Pe schema circuitelor se recomandă trecerea următoarelor informaţii:
- polarităţile;
- tensiunile şi frecvenţele diferitelor surse de alimentare şi numărul fazelor;
- caracteristicile specifice fiecărui aparat de comandă, atunci când acestea sunt necesare
la înţelegerea funcţionării (rezistoare, capacităţi etc.);
- curenţii nominali ai siguranţelor fuzibile, valorile de reglaj ale aparatelor cu
posibilitatea de reglaj;
- mijloacele de acţionare şi funcţiunile aparatelor care nu au funcţii strict electrice
(detectoare de poziţie, contacte cu comandă manuală, electrodistribuitoare hidraulice sau
pneumatice, dispozitive de temporizare);
- diagrama contactelor aparatelor cu comandă manuală;
- diagrama circuitelor de lucru ale unităţilor componentelor sau ale utilajului în general;
- alte precizări care să contribuie la citirea şi înţelegerea corectă a schemei circuitelor (de
exemplu valorile de reglaj ale parametrilor traductoarelor).
Astfel de precizări se pot da, de exemplu într-o legendă pe schemă.
În cazul în care maşina poate executa mai multe cicluri (eventual cu puncte de plecare diferite),
trebuie să se precizeze pe schemă ciclul pentru care aceasta este definită.
Se recomandă reprezentarea elementelor consumatoare de energie ale aparatelor (bobine,
electromagneţi, etc.) în apropierea liniei la care sunt racordate direct şi care este destinată să fie
legată, eventual la pământ; contactele pe care le comandă sunt atunci racordate la altă linie.
Pentru uşurarea citirii schemei, se recomandă reprezentarea operaţiilor în ordinea lor succesivă
de la stânga la dreapta sau de sus în jos.
Trebuie să se indice clar funcţia fiecărui circuit în funcţionarea maşinii.
5.2.2. Precizaţi, pe scurt, câte o măsura recomandată pentru implementare a patru dintre
următoarele metode de protecţie, destinate a fi aplicate in cadrul echipamentelor electrice:
a. Protecţia împotriva electrocutărilor; b. Protecţia împotriva scurtcircuitelor; c. Protecţia la
suprasarcină; d. Protecţia împotriva repornirii automate după întreruperea şi restabilirea
tensiunii; e. Dispozitive pentru oprirea de urgenţă şi pentru întreruperea alimentării; f.
Protecţia în caz de defect si g. Perturbaţii radioelectronice.
Soluţie a. Protecţia împotriva electrocutărilor
a.1 Protecţia împotriva electrocutărilor prin atingere directă. Această protecţie este destinată
să protejeze persoanele împotriva pericolelor care pot rezultă în urma unui contact direct cu
părţile active. Măsurile pot fi: - părţile active trebuiesc protejate prin carcase; - părţile active
trebuiesc izolate prin înglobarea acestora într-un înveliş izolant.
a.2. Protecţia împotriva electrocutărilor prin atingere indirectă.
a.2.1. Protecţia prin deconectarea rapidă a alimentării cu dispozitive de protecţie.
Deconectarea rapidă a alimentării, după apariţia unui defect, în scopul de a împiedica
menţinerea tensiunii de atingere un timp care prezintă pericol pentru persoane. Aceasta
presupune: - racordarea părţilor metalice inactive la circuitul de protecţie; - dispozitive de
protecţie care să asigure deconectarea rapidă a alimentării, în caz de defect, cu dispozitive de
protecţie (siguranţe, întrerupătoare, relee etc.). Trebuie să se asigure continuitatea circuitului
de protecţie prin legături efective, adică prin conductoare de protecţie sau direct prin părţi
metalice.
Organele de comandă manuală trebuie să fie realizate din materiale electroizolante.
a.2.2. Protecţia prin utilizarea tensiunii reduse. Tensiunile recomandate sunt de cel mult 40
Vef in c. a. si 60 in c. c.
a.2.3. Separare de protecţie. Separarea de protecţie a unui circuit, în scopul realizării de
„circuite unice”, pentru evitarea contactului cu părţile inactive, susceptibile a fi puse sub
tensiunea părţii active.
b. Protecţia împotriva scurtcircuitelor. Protecţia generală se prevede la începutul cablului de
alimentare a echipamentului. Trebuie să asigure protecţia conductoarelor, cu ajutorul
dispozitivelor de protecţie corespunzător alese. Se recomanda utilizarea de siguranţe fuzibile
sau întrerupătoare automate. Acestea trebuie să asigure o capacitate de rupere egală cu
intensitatea curentului de scurtcircuit estimat în punctul de instalare. Alegerea curentului
nominal al unui dispozitiv de protecţie împotriva scurtcircuitelor este determinată de secţiunea
cea mai mică a conductoarelor protejate de acest dispozitiv.
c. Protecţia la suprasarcină. Protecţia conductoarelor împotriva suprasarcinilor este necesară
pentru circuite care alimentează motoare. Aceasta se poate realiza cu diverse aparate cum ar fi
releele termice.
d. Protecţia împotriva repornirii automate după întreruperea şi restabilirea tensiunii. În
cazul în care repornirea automată a unor aparate, după întreruperea şi restabilirea alimentării,
poate să prezinte pericol pentru persoane, să provoace deteriorarea maşinii sau să dăuneze în
funcţionare, această repornire trebuie să fie împiedicată.
e. Dispozitive pentru oprirea de urgenţă şi pentru întreruperea alimentării. Echipamentul
electric de automatizare al unei maşini va cuprinde dispozitive care să permită oprirea în caz
de pericol si separarea echipamentul electric de la sursa de alimentare. Un astfel de dispozitiv
poate fi, de exemplu, un buton ciupercă de culoare roşie.
f. Protecţia în caz de defect. Dacă defectarea echipamentului de automatizare poate fi cauza
unor accidente, pentru evitarea acestui risc se vor lua măsuri corespunzătoare, de exemplu:
- utilizarea de dispozitive mecanice pentru asigurarea securităţii maşinii;
- blocări corespunzătoare ale circuitelor electrice, care comandă mişcări mecanice;
- utilizarea de funcţii redondante (dublare de circuit);
- adăugarea de circuite care să asigure funcţii de securitate.
g. Perturbaţii radioelectronice. Efectele nedorite ale perturbaţiilor radiostatice şi
electromagnetice se vor elimina, de exemplu, utilizând filtre, alegând anumite nivele de
putere, metode şi tehnici de cablare şi ecrane adecvate.
5.2.3. Precizaţi măsurile recomandate pentru a asigura fiabilitatea şi utilizabilitatea (condiţii
tehnice de calitate) ale unui program.
Soluţie:
a) Conditii pentru asigurarea fiabilitatii:
-Produsul trebuie să includă informaţii despre procedurile de salvare a datelor.
-Produsul trebuie sa includa functiuni suplimentare prin care se asigură capabilitatea
funcţională, se exemplu:
-verificări că intrarea este plauzibilă;
-protecţie împotriva consecinţelor grave datorate unei greşeli de utilizare;
-reluare în caz de eroare.
b) Modalitati de asigurare a calitatii de “utilizabilitate” a unui program:
-Produsul trebuie sa aiba o interfata cu utilizatorul, cum ar fi, de exemplu: linie de comandă,
meniu, ferestre, taste funcţionale, funcţiune de ajutor.
-Produsul trebuie sa dispuna de instrumente de adaptare la necesitatile utlizatorului, cum ar fi
de exemplu: modificarea parametrilor; modificarea algoritmilor de prelucrare pe calculator;
atribuiri la tastele funcţionale.
-Produsul trebuie sa asigure protecţia dreptului de autor, prin masuri cum ar fi: protecţia
tehnică împotriva copierii; data limită sau durata preprogramată de utilizare; atenţionările
interactive în vederea plătirii copiilor.
Masurile care se recomanda pentru “usurinta de a avea o privire de ansamblu” in cadrul
cerintei de “utilizabilitate” a programelor si datelor sunt:
-Fiecare suport de date trebuie să conţină identificarea produsului, iar dacă există mai mult
decât un suport, atunci să conţină şi un număr sau un text distinctiv.
-Atunci când programele sunt puse în funcţiune, utilizatorul trebuie să fie întotdeauna în
măsură de a şti care este funcţiunea care este în curs de a se executa.
-Ar trebui ca programele să furnizeze utilizatorului informaţii într-o formă care să fie uşor
vizibilă şi uşor de citit. Utilizatorul ar trebui să fie ghidat printr-o reprezentare şi grupare
adecvată a informaţiei. Atunci când este necesar, programele ar trebui să atenţioneze
utilizatorul.
-Mesajele emise de programe pot fi concepute astfel încât utilizatorul să le poată diferenţia
uşor după tip, de exemplu: confirmare; interogări din programe; avertizări; mesaje de eroare.
-Formatele ecranelor de intrare, rapoartelor sau altor intrări şi ieşiri ar trebui proiectate astfel
încât să fie clare şi uşor de perceput, de exemplu:
-câmpurile alfanumerice să fie aliniate la stânga;
-câmpurile numerice să fie aliniate la dreapta;
-în tabele punctele sau virgulele zecimale să fie aranjate pe aceeaşi linie verticală;
-limitele de câmp să fie uşor de recunoscut;
-câmpurile, a căror utilizare este obligatorie, sa fie semnalate ca atare;
-erorile de intrare identificate sunt imediat luminate cu intensitate mai mare în formatul
ecranului de intrare;
- se atrage atenţia utilizatorului la o schimbare a conţinutului ecranului cu ajutorul unui
semnal vizual sau auditiv.
5.3. DISPOZITIVE ŞI CIRCUITE ELECTRONICE
5.3.1. Pentru schema din figură se presupune că dispozitivul de comandă pe grilă (DCG)
furnizează semnale de comandă cu un unghiul de comandă α constant, raportat la fiecare
trecere prin zero a tensiunii reţelei. Frecvenţa tensiunii de alimentare este f = 50 Hz.
a) Să se reprezinte formele de variaţie în timp ale tensiunilor u2(t) şi uS(t), pentru α = /2
(rad).
b) Ştiind că pentru u2 (t)= U2m.sin t expresia curentului de sarcină iS(t) este
2
2
0,pentru [0, ) ;
/ sin ,pentru [ , ]; (1.1)
0,pentru ( , ) ;
/ sin ,pentru ,2 .
m S
S
m S
t
U R t ti t
t
U R t t
să se calculeze valoarea medie US med iar pe baza rezultatului obţinut să se reprezinte
caracteristica de comandă: US med(α), pentru 0; .
Soluţie:
a) mss.sf
T 2002050
11 , .
mss./
ftt 50050
502
2
2
.
Folosind aceste valori şi cunoscând principiul de funcţionare al schemei rezultă reprezentarea
din Fig. 1.
Fig 1. Fig. 2.
b) S S Su t R i t
2 2
0 0 0
1 1 1 1( ). ( ) ( ). ( ) ( ). ( ) ( ). ( )
2 2S med S S S S S S SU u t d t R i t d t R i t d t R i t d t
2 1 cosmSmed
UU
, având forma de variaţie din figura Fig. 2.
Us
U2
5.3.2. Se consideră schemele de amplificatoare inversoare din figurile de mai jos realizate cu
amplificatoare operaţionale.
a) Pentru schema din figura din stânga să se determine expresiile tensiunii de ieşire U0 = f(U1)
de parametru x, 0;1x fiind coeficientul de poziţie al cursorului potenţiometrului, în două
situaţii:i) amplificatorul operaţional este ideal şi fără saturaţie, ii) amplificator operaţional este
ideal cu fenomen de saturare a ieşirii. În primul caz să se calculeze U0 dacă R = 100kΩ, Rp =
50kΩ, x = 0.75, U1 = 8V. În al doilea caz să se calculeze U0, considerând că amplificatorul
este polarizat de la o sursă de tensiune dublă: +VS , 0V, -VS, şi că R = 100kΩ, Rp = 50kΩ, x =
0.5, VS = 10V, U1 = 8V.
b) Care este deosebirea dintre cele două scheme din punctul de vedere al rezistenţei Rp?
Soluţie:
a) i)Pentru un amplificator operaţional ideal, variaţia tensiunii de ieşire este nelimitată,
0 ;U . În Fig.2a avem montajul unui amplificator proporţional inversor, având
coeficientul de amplificare K negativ:
1 1o i i i
x R xU U U KU
x R x
; ; ( ;0]
1
xK K
x
, pentru x 0;1 .
Aplicaţie numerică:
0.75
8 24 V1 1 0.75
o i
x RU U
x R
, deci 24VoU .
ii) Pentru cazul unui amplificator operaţional ideal cu limitare, variaţia tensiunii de ieşire este
limitată, 0 ;S SU V V ,. Punând condiţia de limitare a tensiunii de ieşire, rezultă:
, ( ; ]; 0;11
, ; ; 0;11 1
, [ ; ); 0;11
S i S
o i i S S
S i S
xV dacă U V x
x
x xU U dacă U V V x
x x
xV dacă U V x
x
Aplicaţie numerică:
0.758V 24V <-10V
1 1 0.75Ox i S
xU U V
x
, deci 10VoU , limitat prin
saturarea ieşirii amplificatorului operaţional.
b) Montajul din Fig.2b permite ajustarea coeficientului de proporţionalitate negativ, fără a
modifica condiţia de eliminare a efectului temperaturii asupra tensiunii de ieşire,
1 || const.p nR R R , dacă 1 || nR R R .
În cazul montajului din Fig.2a, condiţia pentru Rp :
1
1|| 1 R const.
1p n
xR x RR R R x x
xR x R
, pentru x 0;1 .
5.3.3. Se consideră schemele electronice din Fig. a şi b realizate cu amplificatoare
operaţionale ideale şi elemente neliniare EN cu caracteristica din Fig. c, în configuraţii de
tipul celor din Fig. d.
i) Să calculeze şi să se reprezinte grafic caracteristica de transfer U1(Ue) a schemei din Fig.a
atunci când EN se realizează sub forma EN4.
ii) Să calculeze şi să se reprezinte grafic caracteristica de transfer U1(Ue) a schemei din Fig.b
atunci când EN se realizează sub forma EN6.
Fig.a. Fig.b.
En1 En2 En3 En4 En5 En6
Fig.c. Fig.d.
Soluţie:
EN de tip dipol (EN1÷EN6) pot fi utilizate în orice schemă, neavând terminal conectat la
borna de masă (0 V) a sursei de alimentare.
Soluţie:
Amplificatorul operaţional ideal este în montaj inversor, deci ecuaţia tensiunii de ieşire în
funcţie de intrare este:
k
0 k
1
100
100
ni i i i
RU KU U U U
R
;
V V
0 10 ; 10iU U
EN6 are limitele de intrare în conducţie egale, DZ1 şi DZ2 fiind identice:
Pragul de intrare în conducţie la polarizare negativă
UL2 = UZ2 + UDO1 = 5.2[V] + 0,65[V] = 5,85[V] pentru U12 -UL2 <0;
Pragul de intrare în conducţie la polarizare pozitivă
UL1 = UZ1 + UDO2 = 5.2[V] + 0,65[V] = 5,85[V] pentru 0 < UL1 U12
Polarizarea EN6 se face de către tensiunea de ieşire U0 a AO, deci avem V V
0 [ 10 ; 10 ]U .
Prin corelarea polarităţii tensiunii de ieşire a AO şi pragurile de intrare în conducţie, rezultă
V
2 2
2 1
V
1 1
; pentru [ 10 ; ); (EN în conducţie)
; pentru ; ; (EN blocat)
; pentru ( ; 10 ]. (ENîn conducţie)
L i L
e i i L L
L i L
U U U
U U U U U
U U U
5.4. FUNDAMENTELE CALCULATOARELOR
5.4.1. Să se reprezinte funcţia f din schema următoare cu un număr minim de porţi logice SI-
NU (2 sau 4 intrări):
5.4.2. Să se reprezinte funcţia f din figura următoare folosind un circuit multiplexor cu 2
intrări de adresă, 4 de date şi porţi logice:
Vom pune la intrările de adresă ale multiplexorului variabilele a şi b. Variabilele c şi d sunt
puse la intrătile de date în funcţie de valorile
funcţiei. In fapt, fiecare intrare de date devine o
funcţie de cele 2 variabile c şi d. obtinem
expresiile:
D00= d , D01= c + d , D02= D03= c
O schemă posibilă este reprezentată în figura
următoare (se accept şi reprezentare
simplificată pentru circuitul multiplexor cu
punctarea doar a intrărilor şi ieşirilor folosite):
5.4.3. Proiectaţi un numărător sincron modulo 5 folosind bistabile JK.
Soluţie:
Vom avea nevoie de 3 bistabile JK. Tabelul de funcţionare este următorul:
Tabelul1
In tabelul 1 am pus şi intrările J şi K ale celor 3
bistabile. Pentru aceasta am folosit tabelul de
funcţionare al bistabilului JK (tabelul 2, nu trebuie
specificat în rezolvare).
Din tabel obţinem următoarele ecuaţii (prin intermediul
diagramelor de minimizare):
Tabelul 2
J0 = Q2 ; K0 = 1; J1 = Q0 ; K1 = Q0 ; J2 = Q1 . Q0 ; K2 = 1;
Schema pentru numărător este dată în figura de mai jos:
5.5. TEORIA SISTEMELOR I
5.5.1. Să se stabilească dependenţa intrare - ieşire în domeniul imaginilor pentru sistemul din
figură cu orientarea {w, v1, v2} y.
a u HR()
w
-
v1 v2
y HP1(
)
HP2(
)
HM()
y
Soluţie: Rezolvarea problemei se bazează pe următorul rezultat: În ipoteza că ne găsim în
cazul SISO, funcţia de transfer a sistemului din figură se
calculează cu formula )(H)(H
)(H)(H
)(
21
1
1
.
Fie Hw(), Hv1() şi Hv2() funcţiile de transfer prin care se
exprimă în mod separat influenţa mărimilor de intrare asupra
mărimii de ieşire. Ele se obţin folosind formula anterioară astfel:
)(H)(H)(H)(H
)(H)(H)(H
)(w
)(y)(H
MPPR
PPR
)(v )(v
w
21
21
2
1 100
(1)
)(H)(H)(H)(H
)(H
)(H)(H))((H)(H
)(H
)(v
)(y)(H
PRMP
P
PRMP
P
)(v)(w
v
12
2
12
2
2
1 111001
(2)
)(H)(H)(H)(H)(H)(H)(H))((H)(v
)(y)(H
MPPRRPPM)(v)(w
v
21211
2 1
1
11
1
002
(3)
Sistemul fiind liniar este valabil principiul superpoziţiei, astfel că dependenţa intrare-ieşire are
forma:
1 2w v 1 v 2y( ) H ( )w( ) H ( )v ( ) H ( )v ( ) . (4).
Egalitatea (4) reprezintă rezultatul problemei.
Rezolvarea de mai sus se bazează pe metoda algebrei schemelor bloc. Rezultatul poate fi
obţinut cu acelaşi volum de muncă folosind formula lui Mason şi cu un volum de muncă şi
mai redus, folosind „calculul din aproape în aproape”.
5.5.2. În cazul discretizării prin aproximare a sistemelor liniare se folosesc formulele
(MT)
(MDA)
(MDR)
1z
1zh
1z
zh
1z
h
s
1
21
(1) (MDR – metoda Euler sau metoda dreptunghiului retardată, MDA –
metoda dreptunghiului sau metoda dreptunghiului avansată, MT – metoda Tustin sau metoda
trapezului). Explicaţi cum se folosesc aceste formule şi determinaţi modelul matematic în
timp discret ( cu orientarea ua ) asociat prin metoda dreptunghiului avansată sistemului în
timp continuu )t(a3)t(u2)t(u5 cu orientarea a u. Pasul de discretizare a timpului este h.
Sistemul dat poate îndeplini funcţia de filtru de ordinul I sau de regulator proporţional cu
filtrare.
Soluţie: Relaţiile se folosesc pentru a asocia unui sistem în timp continuu cu funcţia de
transfer H(s) un sistem în timp discret cu funcţia de transfer H(z). Calculul se reduce la
efectuarea substituţiei )(dinadecvataresiaexp
s
)s(H)z(H1
1
(2). Metoda de calcul poartă numele
de metoda substituţiei.
u1 y1=y
H1
H2 y2 u2=y
u
(+)
Sistemului dat îi corespunde funcţia de transfer
s
125
s
13
2s5
3)s(H
, iar în conformitate cu
formula de substituţie (2) aplicată pentru a doua egalitate din (1) rezultă
1
1z
hz
s
1z5h25
h3
5z)h25(
hz3
1z
hz25
1z
hz3
)s(H)z(H
.
Întrucât )z(u
)z(a)z(H , avem
1525
3
zh
h
)z(u
)z(a , respectiv )z(uh)z(az)z(a)h( 3525 1 . În
consecinţă modelul în timp discret este ]t[uh
h]t[a
h]t[a
25
31
25
5 . (3).
Egalitatea (3) reprezintă rezultatul problemei.
5.6. PROGRAMAREA ORIENTATĂ PE OBIECTE
5.6.1. Într-o aplicaţie de conducere de proces se utilizează senzori de tip analogic şi optic.
Toţi senzorii trebuie resetaţi şi calibraţi, respectiv periodic citiţi. Citirea presupune şi filtrare
folosind valoarea anterioară citită, dar metodele de filtrare sunt diferite pentru senzori de tip
diferit. Toate valorile citite sunt întregi. Fiecare operaţie de citire este specifică senzorului
respectiv, resetarea este comună tuturor tipurilor de senzori iar calibrarea este diferită pentru
senzorii analogici şi optici. Senzorii permit şi o operaţie identică de interogare a stării.
Senzorii optici mai necesită o operaţie specifică de aducere la zero, alta decât reset, iar
senzorii analogici necesită o operaţie specifică de selectare a canalului.
Proiectaţi o ierarhie de clase (se cer doar declaraţiile, nu şi implementările) care să modeleze
fragmentul corespunzător de realitate, în cadrul aplicaţiei software de conducere de proces.
Sugeraţi care vor fi metodele publice şi unde vor fi folosite acele funcţii care nu sunt publice.
Comentaţi fiecare variabilă şi fiecare funcţie membră.
Soluţie:
class senzor{
int status; // starea
protected:
int val_citita; // valoarea citita (va fi setata de citire)
int val_anterioara; // valoarea anterioara va fi transferata din val_citita
// in timpul apelului metodei de citire
int val_filtrata; // valoarea prelucrata prin filtrare (va fi returnata de get)
virtual int filtru()=0;
public:
virtual void calibrare()=0; // calibrarea este o functie virtuala pura
virtual void citire()=0; // citirea este si ea o functie virtuala pura
void reset(); // operatia de reset
int status(); // returneaza starea
int get(); // returneaza valoarea filtrata
};
class senzor_analog public: senzor { // clasa specializata pentru senzori analogici
int filtru(); // functia de filtrare nu va fi accesata de afara
public:
void calibrare(); // calibrarea specifica senzorului analogic
void citire(); // aici se va apela si filtrul specific
void select_canal(int ); // extensie pentru selectia canalului analogic
};
class senzor_optic public: senzor {
int filtru();
public:
void calibrare(); // calibrarea specifica senzorului optic
void citire(); // aici se va apela si filtrul specific
void zero(); // extensie pentru operatia specifica de aducere la zero
};
5.6.2. Valorile citite într-un sistem de monitorizare trebuie stocate într-o stivă. Creaţi pentru
aceasta un tipar stivă cu alocare dinamică şi apoi generaţi o stivă de întregi pentru stocarea
acelor valori.
Soluţie:
template <class T> class Cstack // tipar de stiva
{
T *m_p; // stiva propriu-zisa va fi aici
int m_nStored; // indicator varf stiva
int m_nDepth; // dimensiunea temporara a stivei
enum {GROW_BY=5}; // pasul de crestere a stivei
public:
CStack( ); // constructor
virtual ~CStack(); // destructor
int IsEmpty() const; // test stiva goala
void Push(const T &item); // introducere in stiva
T Pop(); // extragere din stiva
};
// Constructori
template <class T > CStack<T>::CStack()
{
m_p=0;
m_nStored=0;
m_nDepth=0;
}
template <class T > CStack<T>::~ CStack()
{
delete []m_p;
}
// Operatii
template <class T > int CStack<T>::IsEmpty() const
{
return m_nStored==0;
}
template <class T > void CStack<T>::Push(const T &item)
{
if(m_nStored==m_nDepth) // stiva alocata s-a umplut
{
T *p=new T[m_nDepth+GROW_BY]; // trebuie o stiva mai mai mare
for (int i = 0; i<m_nDepth; i++) // stiva se replica in cea noua
{
p[i]=m_p[i];
}
m_nDepth+=GROW_BY; // dimensiunea temporara creste
delete [ ]m_p; // stiva anterioara este eliberata
m_p=p;
}
m_p[m_nStored]=item; // introducerea in stiva
m_nStored ++; // si avansul indicatorului de varf stiva
}
template <class T > T CStack<T>::Pop( )
{
m_nStored--; // indicatorul de varf al stivei merge inapoi
return m_p[m_nStored]; // scoaterea din stiva
}
…
CStack <int> stiva_val_cit; // utilizare (stiva de intregi pentru valorile citite)
5.7. PROIECTAREA CIRCUITELOR DIGITALE DEDICATE
5.7.1. Să se implementeze în VHDL, cu componente, entitatea Ansablu descrisă de schema
hardware din figură care cuprinde două componente: C1 inclusă în biblioteca IEEE şi NR cu
funcţia de numărător înainte de 2 biţi, sincron pe front crescător al Clock-ului, cu Reset
asincron prioritar, care va fi implementat cu procese.
C1 NR
A
B
C
F D
count
2
O1
Rst
Clk
I3 I4 I5
I1
I2
Ansamblu
Soluţie
library IEEE, COMPASS_LIB;
use IEEE.STD_LOGIC_1164.all;
use COMPASS_LIB.COMPASS.all;
entity ANSAMBLU is
port (I1, I2, I3, I4, I5: in STD_LOGIC;
O1: out STD_LOGIC_Vector(1 downto 0) );
end ANSAMBLU;
architecture A1 of ANSAMBLU is
component C1
port (A, B, C: in STD_LOGIC;
F: out STD_LOGIC);
end component;
component NR
port (D, Clk, Rst: in STD_LOGIC;
Count: out STD_LOGIC_Vector(1 downto 0));
end component;
signal S: STD_LOGIC;
begin
Et1: C1 port map(I1, I2, I3, S);
Et2: NR port map(S, I4, I5, O1);
end A1;
------------------------------
entity NR is
port (D, Clk, Rst: in STD_LOGIC;
Count: out STD_LOGIC_Vector(1 downto 0));
end NR;
architecture V1 of NR is
Count := ”00”;
begin
process (Clk, Rst)
begin
if Rst = '0' then
Count <= "00";
elsif RISING_EDGE(Clk) then
Count <= Count + '1';
end if;
end process;
end V1;
5.7.2. a) Să se implementeze în VHDL automatul cu stări finite (ASF) descris prin diagrama
de stări din figură folosind templet-ul Registru plus Logica pentru Noua stare şi Ieşiri (cu 2
procese). Automatul are intrările D, Rst, Clk şi iesirea Y, este sincron pe frontul coborâtor al
clock-ului, şi are Reset prioritar asincron activ pe zero. (D este ieşirea unui convertor paralel
serie).
b) Precizaţi care este funcţiunea automatului.
c) Precizaţi numărul de bistabile implementate de Sinteza automată.
S0
Q=0
S1
Q=0
S3
Q=1
S2
Q=0
Rst
D=0
D=1
D=1
0
0
01
1
ASF
D
Clk
Rst
Y
a) b)
Soluţie a)
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity ASF is
port (D, Clk, Rst: in bit; Y: out bit);
end ASF;
architecture A1 of ASF is
type STATE is (S0, S1, S2, S3);
signal PR_state, NX_state: STATE;
begin
Registru: process (Rst, Clk)
begin
if (Rst='0') then PR_state <= S0;
elsif (Clk'event and Clk='0') then
PR_state <= NX_state;
end if;
end process;
------------------------------
Logica NX_state si OUT: process (D, PR_state)
begin
case PR_state is
when S0 => Y <= '0';
if (D='1') then NX_state <= S1;
else NX_state <= S0;
end if;
when S1 => Y <= '0';
if (D='1') then NX_state <= S2;
else NX_state <= S0;
end if;
when S2 => Y <= '0';
if (D='1') then NX_state <= S3;
else NX_state <= S0;
end if;
when S3 => Y <= '1';
if (D='0') then NX_state <= S0;
else NX_state <= S3;
end if;
end case;
end process;
end A1;
b) Funcţia realizată de ASF:
Detecţie şi semnalizare a faptului că pe perioada a 3 tacte consecutive D a fost 1.
c) Număr minim de bistabile date de Sinteza automată = 4.
5.8. TEORIA SISTEMELOR II
5.8.1. Se consideră sistemului de reglare cu schema bloc din figură. Să se determine condiţia
ca sistemul să fie asimptotic stabil. 0RK este amplificarea regulatorului iar 0IT timpul
integrator.
Soluţie: Rezolvarea problemei se bazează pe aplicarea criteriului Hurwitz. Se parcurg
următorii paşi: i) Determinarea polinomului caracteristic al sistemului pe baza funcţiei de
transfer; ii) Determinarea condiţiilor de stabilitate asimptotică pe baza aplicării criteriului lui
Hurwitz..
i) Sistemul are ordinul n=3. Pentru orientarea yw funcţia de transfer a sistemului este
RRIII
RIR
I
R
I
R
KsKTsTsT
KsTK
sssTK
sssTK
s10)101(25
)(10...
125
10)
11(1
125
10)
11(
)(23
2
2
. Pentru
analiza stabilităţii considerăm polinomul caracteristic adus în formă monică:
I
RR
RRIII
T
KsKsss
KsKTsTsTs
2)101(2.04.0)(
10)101(25)(
23
23
ii) Deoarece prin ipoteză 0RK , 0IT rezultă că toţi coeficienţii )s( sunt strict pozitivi.
Deci prima condiţie a criteriului Hurwitz este îndeplinită. Determinantul Hurwitz este
I
R
R
I
R
T
K.
)K(.T
K.
2400
0101201
0240
3 . În consecinţă,
040401 .. ,
)K(.T
K.
R
I
R
101201
240
2
I
RR
T
K)K(.
2101080 > 0 (1)
23
2
I
R
T
K.
Ca urmare condiţia de stabilitate asimptotică a sistemului este 2 >0.
Dezvoltând rezultă:
)K(.
KT
T
K)K(.
T
K)K(.
R
RI
I
RR
I
RR
101080
21010800
2101080
= >
R
RI
K101
K25T
.
Relaţia încadrată reprezintă rezultatul cerut.
)1
1(sT
KI
R 125
102 ss
-
w a c y
RG-PI Procesul condus
5.8.2. Enunţaţi criteriul de stabilitate Jury, dând explicaţiile necesare construirii schemei
Jury, şi utilizaţi enunţul pentru a analiza stabilitatea sistemului în timp discret cu orientarea
uy:
]t[x021]t[y
]t[u
0
1
0
]t[x
5.020
5.011
201
]1t[x .
Soluţie: Se consideră un sistem liniar în timp discret, invariant în timp, cu polinomul
caracteristic nn
nn azazazaz
1
1
10 ...)( (1). Cu coeficienţii din (1) se construieşte
o schema de calcul numită schema Jury. Ea este alcătuită din n-1 perechi de linii. In cadrul
fiecărei perechi, a doua linie din pereche o reproduce pe prima prin parcurgere în sens invers.
Elementul general al schemei îl notam cu klj ( k – indicele liniei, l- indicele coloanei ). În
stânga barei din schemă apare coeficientul Jury. Ei sunt notaţi cu ib2 , i reprezentând numărul
de ordine al perechii de linii.
Coeficienţii Jury ib2 se calculează cu formula 1,2
1,12
2
li
li
ij
jb . Aplicarea formulei este sugerată
în schema următoare în care cele 2 linii alcătuiesc perechea ‘i’:
- 1,12 ij ……………………
ib2 1,2ij …………………….
Prima linie a primei perechi se alcătuieşte din coeficienţii polinomului caracteristic în ordinea
021 ,...,, aaaa nnn (de la gradul 0 la gradul n).
Începând cu a doua pereche de linii, prima linie a perechii se completează pe baza perechii
anterioare folosind formula: 1,221,12,12 liilili jbjj . Fiecare nouă pereche de linii are o
coloană mai puţin decât perechea precedentă. Criteriul stabilităţii Jury are următorul enunţ:
Sistemul liniar in timp discret cu polinomul caracteristic (1) este asimptotic stabil dacă sunt
îndeplinite următoarele condiţii:
i) 0)1(
ii) 0)1()1( n
iii) 12 ib pentru 1n;1i (toţi coeficienţii Jury trebuie să fie subunitari în modul).
Pentru aplicaţia dată la început calculăm polinomul caracteristic, apoi analizăm succesiv dacă
cele trei condiţii din enunţul criteriului Jury sunt îndeplinite:
5.4zz5.1z5z)5.0z)(1z2z(
)1z(4)5.0z()1z(
5.0z20
5.01z1
201z
)z(
232
2
i) 05.415.11)1(
ii) 0)5.415.11()1()1( 3 => sistemul este instabil.
Nu mai este necesar să construim schema Jury.
Rezultatul rezolvării problemei este: sistemul dat este instabil.
5.8.3. Sistemele descrise prin ecuaţiile Fam şi MJ modelează matematic mecanisme
de translaţie, respectiv de rotaţie, fără frecare. Semnificaţia notaţiilor este următoarea: m –
masa mecanismului de translaţie, F – forţa rezultantă care acţionează asupra mecanismului,
a - acceleraţia imprimată de forţa F, J – momentul de inerţie al mecanismului de rotaţie, M –
Linia 1 a perechii ‘i’
Linia 2 a perechii ‘i’
momentul exterior care se exercită asupra mecanismului, - acceleraţia unghiulară
imprimată de momentul M. Fie p poziţia momentană a mecanismului de translaţie şi
poziţia mecanismului de rotaţie. În ipoteza că sistemele au orientările F p, respectiv M
, se cere: i) Să se calculeze funcţiile de transfer ale celor două sisteme; ii) Ecuaţiile de stare
ale celor două sisteme.
Soluţie:
i) Fie v viteza mecanismului de translaţie. Atunci avem:
pv , va , iar modelul dat devine Fpm
Pentru a calcula funcţia de transfer trecem egalitatea în domeniul operaţional:
)s(F)s(psmFpm 2
Întrucât, prin definiţie )s(F
)s(p)s(H , rezultă că sistemul are funcţia de transfer
2
1
sm)s(H
.
Fie viteza unghiulară a mecanismului de rotaţie. Atunci avem:
, , iar modelul dat devine J
Pentru a calcula funcţia de transfer trecem egalitatea în domeniul operaţional:
)s(M)s(sJJ 2
Întrucât, prin definiţie )s(M
)s()s(H
, rezultă că sistemul are funcţia de transfer
2
1
sJ)s(H
.
Relaţiile încadrate reprezintă funcţiile de transfer ale celor două sisteme.
ii) Ca variabile de stare ale sistemului de translaţie se adoptă poziţia p şi viteza v. Ele
caracterizează procese de acumulare de energie potenţială şi de energie cinetică. Ca urmare, o
primă ecuaţie de stare este vp . A doua ecuaţie de stare se obţine din Fam şi va .
Rezultă Fm
v1
. Matriceal, avem:
F
mv
p
v
p
10
00
10
.
Ca variabile de stare ale sistemului de rotaţie se adoptă poziţia unghiulară şi viteza
unghiulară . Ele caracterizează procese de acumulare de energie potenţială şi de energie
cinetică. Ca urmare, o primă ecuaţie de stare este . A doua ecuaţie de stare se obţine din
MJ şi . Rezultă MJ
1 . Matriceal, avem:
M
J
10
00
10
.
Relaţiile încadrate reprezintă ecuaţiile de stare ale celor două sisteme.
5.9. BAZE DE DATE
5.9.1. Se consideră două tabele (ale unei baze de date Oracle), cu numele PERSONAL (având
coloanele CNP, NUME si SALAR), respectiv CONTABILITATE (având coloanele
DATA_ACTUALIZARE, SALAR_MEDIU). Să se scrie comenzile SQL pentru crearea celor
două tabele, permiţând stocarea de date referitoare la categoriile de informaţii precizate prin
numele coloanelor (CNP, NUME, SALAR, DATA_ACTUALIZARE, SALAR_MEDIU). Se
vor prevedea şi constrângerile necesare pentru asigurarea integrităţii / coerenţei logice a
datelor / informaţiilor anterior referite, considerate obligatorii (tip, dimensiuni, plaja valori,
constrângeri).
Se cere să se scrie secvenţa de cod PL/SQL implementând un trigger (declanşator) care, la
orice operaţie de modificare/actualizare a conţinutului/datelor tabelei PERSONAL, calculează
valoarea medie de pe coloana SALAR (din PERSONAL), salvând-o în tabela
CONTABILITATE (in coloana SALAR_MEDIU), împreună cu data curentă calendaristică
aferenta operaţiei (în coloana DATA_ACTUALIZARE).
Solutie:
CREATE TABLE PERSONAL (
CNP char(13) primary key,
NUME varchar(20) NOT NULL,
SALAR int CHECK (SALAR>0));
CREATE TABLE CONTABILITATE (
DATA_ACTUALIZARE date default SYSDATE,
SALAR_MEDIU number);
CREATE or REPLACE trigger declansator
AFTER insert or update or delete on PERSONAL
DECLARE
sal number;
BEGIN
SELECT AVG(salar) into sal from PERSONAL;
INSERT into CONTABILITATE (Salar_mediu) values(sal);
END;
/
Solutie 2 –obligatorie dacă în tabela CONTABILITATE nu este prevăzută constrângerea de
dată curentă DEFAULT SYSDATE:
CREATE or REPLACE trigger declansator
AFTER insert or update or delete on PERSONAL
DECLARE
sal number;
BEGIN
SELECT AVG(salar) into sal from PERSONAL;
INSERT into CONTABILITATE values(sysdate, sal);
END;
/
5.9.2. Scrieţi o comandă SQL pentru crearea unei tabele PERSONAL permiţând stocarea de
date referitoare la următoarele categorii de informaţii: NR_MATRICOL, NUME,
PRENUME, DATA_NAŞTERII, SALAR_BAZA. Se vor prevedea şi constrângerile necesare
pentru asigurarea integrităţii / coerenţei logice a datelor / informaţiilor anterior referite,
considerate obligatorii (tip, dimensiuni, plaja valori, constrângeri). Scrieţi comenzile SQL
pentru adăugarea a două noi linii (cu orice date valorice). Scrieţi comenzile SQL pentru
ştergerea conţinutului tabelei, respectiv ştergerea tabelei.
Solutie:
CREATE TABLE PERSONAL
(NR_MATRICOL char(6) primary key,
NUME varchar(20) NOT NULL,
PRENUME varchar(20) NOT NULL,
DATA_NAST date NOT NULL,
SALAR_BAZA INT CHECK (SALAR_BAZA >0 AND SALAR_BAZA<10000));
INSERT INTO PERSONAL VALUES(‘LM1245’, ‘Ion’, ‘Ion’, ’12.12.1990’, 1000);
INSERT INTO PERSONAL VALUES(‘LM2568’, ‘Ioni’, ‘Ioni’, ’14.07.1990’, 2000);
DELETE FROM PERSONAL;
DROP TABLE PERSONAL;
Varianta alternativa posibilă pentru definiţia coloanei SALAR_BAZA:
- SALAR_BAZA INT CHECK (SALAR_BAZA BEWEEN 1 AND 10000)
- SALAR_BAZA NUMERIC(5) CHECK (SALAR_BAZA >0)
5.10. COMUNICAŢII DE DATE
5.10.1. Prezentaţi şi explicaţi funcţionarea transceiverului pe magistrala CAN folosind
schema din figură.
Soluţie:
Magistrala CAN constă din două linii, notate CANH (Can High line) şi CANL (CAN Low
line), la care se adaugă masa. Transmisia pe aceasta magistrala este de tip diferenţial.
În figură este reprezentat un transceiver de CAN. Dacă la intrarea driverului semnalul TxD
are valoarea 1 logic (starea 1), ambele tranzistoare vor fi blocate şi cele două linii se vor afla
la potenţialul 0,5·Vcc. Dacă se comandă valoarea 0 logic (starea 0), ambele tranzistoare vor fi
deschise şi între cele două linii apare o diferenţă de potenţial, ce va fi detectată de receiver.
Starea 0 este numită „dominantă” (cîştigă), iar starea 1 este denumită “recesivă” (pierde).
Aceast fapt este folosit pentru arbitrarea magistralei. Transceiverele de mare viteză (1Mbps)
sînt diferite de cele de mică viteză (125Kbps). Ultimele sînt tolerante la defecte. Căderea
uneia dintre cele două linii, prin întreruperea ei sau prin scurtcircuitarea la masă sau la Vcc nu
duce la căderea totală a comunicaţiei. Caracterul diferenţial al transmisiei şi filtrele
încorporate în receivere duc la un grad scăzul de interferenţă electromagnetică şi o bună
imunitate la zgomotul de mod comun (cel care se manifestă identic pe ambele linii, raportat la
masă.)
5.10.2. Prezentaţi comparativ metodele de codare a informaţiei de tip NRZ si AMI pentru
transmiterea datelor. Codaţi prin cele două metode secvenţa 101100.
Soluţie:
Metoda NRZ (Non Return to Zero). Aceasta este codarea "naturală", adică bitul 0 se codează
printr-un palier scăzut de tensiune, iar bitul 1 printr-un palier ridicat. Numim celulă de bit
durata alocată transmiterii unui bit de informaţie. În sistemul NRZ nivelul de tensiune este
eşantionat la mijlocul celulei de bit, pentru a determina valoarea numerică binară a
semnalului. Dezavantajul metodei este că sincronizarea de bit este o problemă dificil de
rezolvat.
Metoda AMI (Alternate Mark Inversion). Metoda foloseşte trei nivele de tensiune: pozitiv,
zero şi negativ. Bitul 0 este codificat prin absenţa unui impuls în celula de bit, iar bitul 1 prin
prezenţa impulsului. Codarea prin impuls, faţă de palier, este mai fiabilă în raport cu
perturbaţiile, dar dublează banda de frecvenţă necesară. Avantajul alternării este că nivelul
mediu de tensiune pe canal este constant, ceea ce simplifică situaţia din punctul de vedere al
perturbaţiilor legate de deriva de nul pe firul de masă.
5.10.3. Prezentaţi echipamentele componente ale unei celule de telefonie mobilă,
funcţionarea acesteia şi modalităţile de comunicare între celulă şi centrală.
Soluţie
Celula are următoarele componente
BTS (Base Transceiver Station – Staţia de bază de emisie/recepţie) constă din antena şi
echipamentul radio de emisie/recepţie care defineşte, în funcţie de puterea sa, aria de
cuprindere a celulei. Acest echipament conectează terminalul mobil la centrala de telefonie
celulara;
BSC (Base Station Controler – Controlerul staţiei de bază). Conţine partea digitală a
echipamentului celulei. Această componentă translatează semnalul de voce de 13 Kbit/sec în
standardul PCM de 64Kbit/sec şi administrează resursele radio ale BTS.
În funcţie de tipul celulei, rurală sau metropolitană, şi de alte condiţii, BTS se poate afla în
aceeaşi construcţie cu BSC sau la distanţă de acesta. În concentrările urbane, cu trafic foarte
intens, celulele au dimensiuni foarte mici (sute de metri) şi se pot lega mai multe transceivere
la un controler.
Antena serveşte doar pentru legătura între terminale şi BTS. Legătura între BTS şi centrala
de comutare se face prin canalele specifice telefoniei:
circuite analogice pe 2 fire. Situaţia este specifică celulelor foarte mici, care nici măcar nu
se leagă la o centrală, ci direct la o linie telefonică comutată din PSTN (Public Switched
Telephone Network);
circuite digitale pe cablu de cupru. Este cel mai răspîndit mod de comunicare între celule şi
centrale şi se realizează pe lungimi ce pot varia între interiorul unei clădiri şi distanţe de
ordinul kilometrilor;
fibra optică, permite legături la distanţe mari, pînă la 40 Km fără a folosi repetoare;
microunde.
Codarea NRZ
0 0 1 1 0 1
1 0 1 1 0 0
Codarea AMI
5.11. SISTEME INCORPORATE
5.11.1. Să se scrie un program în limbaj de asamblare pentru un microcontroler 8051, care
să accepte cereri de întreruperi externe pe liniile /INT0 si /INT1. Întreruperile sunt active pe
front căzător. În rutina de tratare a întreruperii /INT0 se va seta bitul 0 al portului P1 (P1.0),
iar în rutina de tratare a întreruperii pentru /INT1 se va reseta bitul P1.0.
Programul principal va rula în buclă infinita, după ce s-a realizat programarea sistemului de
întreruperi.
Soluţie
Programul corespunzător este:
ORG 0h
LJMP PP ;salt la PP
ORG 03h ;adresa de start a rutinei de tratare a intreruperii INT0
RUT_0: SETB P1.0 ;setare bit P1.0
RETI ;revenire din rutina de tratare a intreruperii INT0
ORG 13h ;adresa de start a rutinei de tratare a intreruperii INT1
RUT_1: CLR P1.0 ;resetare bit P1.0
RETI ;revenire din rutina de tratare a intreruperii INT1
ORG 100h ;adresa de start a programului principal
PP: CLR IE.7 ;invalidare globala a sistemului de intreruperi
SETB IE.0 ;validare intrerupere INT0
SETB TCON.0 ;activare front cazator pentru INT0
SETB IE.2 ;validare intrerupere INT1
SETB TCON.2 ;activare front cazator pentru INT1
SETB IE.7 ;validarea globala a sistemului de intreruperi
SJMP $ ;bucla infinita
5.12.2. Să se scrie un program în limbaj de asamblare pentru un microcontroler 8051, care
să asigure comunicaţia seriala în ecou (data recepţionată este transmisa înapoi) cu un
partener de „dialog”, prin intermediul sistemului UART integrat, la viteza de 9600
bauds/sec, ştiind ca frecventa oscilatorului este de 12 MHz.
Programul trebuie conceput astfel încât, microcontrolerul să gestioneze recepţia prin
intermediul întreruperii specifice sistemului de comunicaţie serială.
Fiecare octet recepţionat la un moment dat, va fi depus în memoria de date externă (MDX), la
adresa 1000h.
Soluţie
Formula de calcul a constantei de timp necesare programarii timerului T1 (generatorul de
baud-rate) este:
ratebaudTH
fOSC
SMOD
_384256)1(
2
Pentru o viteza de transfer de 12 MHz constanta de timp este:
25332563686400
12000000256
9600384
10122256)1(
60
TH
exprimat in hexazecimal: (TH1) = FDh
Structura cuvantului de comanda TMOD pentru programarea timerului T1 in modul 2 este:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 0 0 0 0
Exprimat in hexazecimal: (TMOD) = 20h
Programul corespunzator este:
ORG 0h
LJMP PP ;salt la PP
ORG 23h ;adresa de start a rutinei de tratare a intreruperii ES
RUT_SER: CLR IE.4 ;invalideaza intreruperile ES
MOV A,SBUF ;transfera in acumulator octetul receptionat
MOVX @DPTR,A ;transfera in MDX la adresa 1000h caracterul
receptionat
CLR SCON.0 ;resetare fanion RI
MOV SBUF,A ;trensmite inapoi octetul receptionat
JNB SCON.1 ;asteapta incheierea transferului prin testarea
fanionului TI
CLR SCON.1 ;resetare fanion TI
SETB IE.4 ;valideaza cererile de intrerupere provenite de la
ES
RETI ;revenire din rutina de tratare a intreruperii ES
ORG
100h
;adresa de start a programului principal
PP: CLR IE.7 ;invalidare globala a sistemului de intreruperi
MOV TMOD,#20h ;transfera cuvantul de comanda pentru timerul 1
MOV TL1,#0FDh ;transfera constanta de timp in TL1
MOV TH1,#0FDh ;transfera constanta de timp in TH1
SETB SCON.6 ;pozitioneaza pe 1 bitul 6 din registrul SCON
(Modul 1)
CLR SCON.7 ;pozitioneaza pe 0 bitul 7 din registrul SCON
(Modul 1)
SETB SCON.4 ;validare receptie
SETB TCON.4 ;pornire soft timer T1
SETB IE.4 ;validare intreruperi de la sistemul de comunicatie
seriala
MOV DPTR,#1000h ;incarcare in DPTR a adresei din MDX unde se
depune octetul ;receptionat
SETB IE.7 ;validarea globala a sistemului de intreruperi
SJMP $ ;bucla infinita
5.11.3. Pentru un sistem cu microcontroler 8051, care dispune de:
Memorie program externă de 16 Koct, implementată cu circuite de capacitate de
4Kx8;
Memorie de date externă de 32 Koct, implementată cu circuite de capacitate de 8Kx8,
se cere:
i) Să se prezinte harta corespunzătoare memoriei program şi harta corespunzătoare memoriei
de date externă, în cadrul sistemului considerat.
ii) Să se deseneze schema de implementare a decodificatorul de adrese, pentru obtinerea
semnalelor de chip_select (/CSx – semnale de chip select „0” active). Circuitul decodificator
utilizat este 74LS138 (tabela de adevar si schema bloc a circuitului 74LS138 sunt prezentate
in figura de mai jos).
Soluţie:
i) Harta memoriei
a) Memoria program
Numărul de circuite necesare: N = 16/4 = 4 circuite
Linii de adresa utilizate pentru selectia locatiilor de memorie din circuite: 12 (A0...A11)
Linii de adresa utilizate la generarea semnalelor de chip select: 4 (A12...A15)
Harta memoriei program este sintetizata in tabelul de mai jos:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
–
0FFFh /CS_E0 . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000h
–
1FFFh /CS_E1 . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h
–
2FFFh /CS_E2 . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000h
–
3FFFh /CS_E3 . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1
b) Memoria de date externa
Numarul de circuite necesare: N = 32/8 = 4 circuite
Linii de adresa utilizate pentru selectia locatiilor de memorie din circuite: 13 (A0...A12)
Linii de adresa utilizate la generarea semnalelor de chip select: 3 (A13...A15)
Harta memoriei program este sintetizata in tabelul de mai jos:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h
–
1FFFh /CS_X0 . . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h
–
3FFFh /CS_X1 . . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000h
–
5FFFh /CS_X2 . . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 6000h
–
7FFFh /CS_X3 . . . . . . . . . . . . .
1 1 1 1 1 1 1 1 1 1 1 1 1
ii) Implementarea decodificatoarelor de adrese
a) Pentru memoria program
5.12. SISTEME DE OPERARE
5.12.1. Realizaţi un program în C ce funcţionează pe baza următorului scenariu: Un proces P
afişează repetitiv cifre de la 0 la 9. Afişarea va începe cu cifra 0 (cifra va fi afişată în buclă,
de câte ori e posibil într-o secundă), iar la fiecare secundă va incrementa cifra afişată.
Procesul de afişare se va încheia când se ajunge la 10 şi va afişa numărul total de cifre tipărite.
Soluţie:
#include<unistd.h>
#include<signal.h>
#include<sys/wait.h>
#include<sys/types.h>
void handler(int sig);
int number, counter;
int main(int argc, char** argv){
number = 0;
counter = 0;
signal(SIGALRM, &handler);
alarm(1);
while(number < 10)
{
printf("%d", number);
counter++;
}
printf("Total:%d", counter);
return 0;
}
void handler(int sig){
number++;
alarm(1);
}
5.12.2. Realizaţi un program C ce funcţionează pe baza următorului scenariu: se va crea un
proces părinte P şi un proces fiu F. Procesul P va citi conţinutul unui fişier primit ca şi
argument şi îl va trimite printr-un pipe procesului F. F va număra caracterele primite într-un
contor pe care îl va afisa în terminal.
Soluţie:
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
int main(int argc, char**argv){
int ppf[2];//pipes
int fd;//file descriptor
char buffer[2];
pipe(ppf);
if(fork()){
//close unused pipe ends
close(ppf[0]);
//open file
fd = open(argv[1], O_RDONLY);
if(fd == -1){
perror("File read error");
_exit(1);
}
int n;
while((n = read(fd,buffer, strlen(buffer)+1)) != 0){
write(ppf[1], buffer, n);
}
close(ppf[1]);
int rc;
wait(&rc);
}else{
//close pipe ends
close(ppf[1]);
int contor = 0,n;
while((n = read(ppf[0],buffer, strlen(buffer)+1)) != 0){
contor += n;
}
printf("\nContor:%d\n",contor);
}
return 0;
}
5.12.3. Realizaţi un program shell script ce va primi ca şi argument un nume de director D şi
un cuvânt C. Programul va căuta cuvântul C parcurgând recursiv directorul D, iar pentru
fiecare fişier întâlnit care conţine cuvântul C va afişa calea relativă a acestuia.
Soluţie:
#!/bin/sh
word=$2
lst(){
for i in $1/*
do
if [ -d $i ]
then
lst $i
elif [ -f $i ]
then
count=`grep $word $i | wc -l`
if [ $count -gt 0 ]
5.13. SECURITATEA INFORMATIEI
5.13.1 (Structura unei chei pentru criptosistemul RSA în .NET) Fie o cheie de RSA exportată
din .NET, incluzând parametrii private, aşa cum reiese din Figura 1. De asemenea, fie
valorile artificiale de dimensiune redusă: modul n=115 şi exponent public e=3. Se cere:
Pentru cheia RSA din figură indicaţi care dintre valorile D, DP, DQ, Exponent, InverseQ,
Modulus, P şi Q sunt parametrii publici şi privaţi precum şi dimensiunea acestora în biţi.
Pentru modulul şi exponentul de dimensiune redusă calculaţi ceilalţi parametrii care se
regăsesc în structura unei chei de RSA în .NET. Eplicaţi ce exponent se foloseşte pentru
fiecare din cele 4 operaţii: criptare, decriptare, semnare, verificare, atunci când aceste
operaţii sunt efectuate modulo n.
Figura 1. Cheie RSA în mediul .NET
Solutie:
Parametrii publici ai cheii din .NET din figură sunt:
- modulul Modulus de 128*8=1024 biţi,
- exponentul Exponent care este reprezentat pe 3 bytes aşa cum se observă în structură, adică
24 de biţi dar care poate fi reprezentat pe doar 17 biţi corespunzând valorii 65537.
Parametrii privaţi ai cheii din .NET din figură sunt:
Exponentul D folosit la criptare având 128 de bytes adică 1024 biţi,
Exponenţii de decriptare DP şi DQ având 64 de bytes adică 512 biţi,
Inversul multiplicativ al lui Q modulo P adică InverseQ având 64 de bytes adică 512 biţi.
Factorii primi ai modulului P şi Q având fiecare câte 64 de bytes adică 512 biţi.
Pentru modulul n=115 factorizarea acestuia este n=5*23 de unde P=5 şi Q=23. Funcţia Euler
Phi este 4*22=88 de unde inversul multiplicativ al lui 3 este 59 deoarece 3*59=1 mod 88 şi
deci D=59. De aici exponenţii DP şi DQ urmează imediat ca: DP=59 mod 4 =3 şi DQ = 59
mod 22 =15, inversul multiplicativ al lui Q modulo P este 2 deoarece 2*23 = 1 mod 5 şi deci
InverseQ=2. Sumarizând: D = 59, DP = 3, DQ = 15, Exponent = 3, InverseQ = 2, Modulus =
115, P = 5, Q = 23.
La criptare şi respectiv verificarea semnăturii digitale se foloseşte exponentul e= 3 iar la
decriptare şi respectiv semnare digitală exponentul d = 59 (cu mentiunea ca atunci cand
operatia cu cheie privata se efectueaza conform CRT se vor folosi desigur DP exponentii si
DQ modulo P si Q).
5.13.2. (Structura unei chei pentru algoritmul de semnătură digitală DSA în .NET) Fie o
cheie de DSA exportată din .NET, incluzând parametrii private, aşa cum reiese din Figura 1.
De asemenea, fie valorile artificiale de dimensiune redusă: modul P=31, generator G=3 şi
Y=17. Se cere:
Pentru cheia DSA din figură indicaţi care dintre valorile G, P, X şi Y sunt parametrii publici
şi privaţi precum şi dimensiunea acestora în biţi.
Pentru parametrii de dimensiune redusă calculaţi cheia secretă X. Dacă valoarea Y ar fi
parte a unui schimb de cheie Diffie-Hellman în care a fost primit de la partenerul de
comunicare Y’=29, explicaţi care va fi cheia comună de sesiune.
Figura 1. Cheie DSA în mediul .NET
Solutie:
Parametrii publici ai cheii DSA din .NET din figură sunt:
- modulul P de 64*8=512 biţi,
- generatorul G de 64*8=512 biţi,
- valoarea Y de 64*8=512 biţi.
Parametrii privaţi ai cheii din .NET din figură sunt:
Exponentul X aplicat asupra generatorului G modulo P pentru calculul valorii Y având 20 de
bytes adică 160 biţi. Limitarea acestuia la 160 biţi se datorează folosirii funcţiei SHA1 la
semnare care are 160 biţi la output.
Pentru modulul P=31, generator G=3 şi Y=17 ştim că GXmod P=17 şi prin calcule succesive
(deşi nu cea mai eficientă metodă) avem 30mod 31=1, 31mod 31=3, 32mod 31=9, 33mod
31=27, 34mod 31=19, 35mod 31=26, 36mod 31=16, 37mod 31=17, de unde parametrul secret
este X=7.
Pentru schimbul de cheie Diffie-Hellman, având Y’=20 trebuie să îl aflăm pe X’ pentru care
va trebui să continuăm succesiunea de calcule de mai sus, din fericire după doar 2 paşi avem
38mod 31=20, 39mod 31=29 de unde X’=9. Aceasta înseamnă că avem cheia comună 37*9mod
31 iar cum calculele se efectuează modulo modulo 31 exponenţii pot fi reduşi modulo 30
(vezi Teorema lui Euler) şi deci 37*9mod 31 = 33mod 31=27 aceasta fiind cheia de sesiune
Diffie-Hellman.
5.13.3 (Autentificarea cu parole în sistemul de operare Linux). Fie secvenţa de mai jos din
fişierul criptat de parole aparţinând unei distribuţii de Ubuntu. Se cer următoarele
următoarele:
Cum se numeşte şi unde se găseşte acest fişier în sistemul de operare Ubuntu, respectiv cum
se adaugă un nou utilizator şi o parolă?
Care este valoarea de salt pentru parola utilizatorului ubuntu şi care este hash-ul acesteia
respectiv cum au fost calculate acesta?
Explicaţi dacă funcţia de criptare pentru parola userului ubuntu şi alice este acceaşi?
Care este funcţia cu ajutorul căreia se pot genera programatic parole?
ubuntu:$1$js9ai3VX$iFbR5uTfv3JMmFCladdcn1:16459:0:99999:7:::
tom:$6$vIkXOyrz$CMiFB8meMfTANianaS7z5f8yMfplk/TtncZs/7b0es65XZSIyz3kai
SwN/61sBdrPhT9B0RulJ9tWEnE7kpJC/:16470:0:99999:7:::
alice:$6$gpOJXcSy$AVrdUKBdSM8NlGmrbexoyetS2LhRgg3qkaTbZdMh4mj.Yps3
UxIkrtGDQfEGA.yNDhlIPG3m1hupX3b0I0Vs3.:16470:0:99999:7:::
bob:$6$5IPGOooA$J6rZ74NUpCVx9C2mpesKKr0iBjkHNCxz8Io3aPj5W6mwVKK
vnhWIbq0H91T9bDcWmDE3/6Ageoa3olcVe2nKY0:16470:0:99999:7:::
Figura 1. Secvenţă dintr-un fişier de parole Linux
Solutie:
Este vorba despre fişierul shadow aflat în /etc/shadow iar un nou user şi o nouă parolă se pot
adăuga cu urmatoare secventa de comenzi fiind necesare privilegii de root:
sudo useradd -m tom
sudo passwd tom
Valoarea salt pentru utilizatorul ubuntu este
js9ai3VX
iar cea a hashului
iFbR5uTfv3JMmFCladdcn1
fiind obţinută prin aplicarea unei funcţii one-way peste salt şi parola utilizatorului.
Nu, pentru utilizatorul ubuntu se foloseşte o funcţie bazată pe MD5 iar pentru alice una bazată
pe SHA512, distingem despre care dintre acestea este vorba din valoarile $1$ şi $6$ care
arată că este vorba de o generarare bazată pe MD5 respectiv SHA512.
Funcţia pentru generare a parolelor este char *crypt(const char *key, const char *salt)
5.14. REŢELE DE CALCULATORE
5.14.1. Se consideră adresa IP v4 172.16.0.150 având masca 255.255.255.192. Se cere:
a) Adresa reţelei, respectiv adresa de broadcast a reţelei din care face parte adresa IP;
b) Adresa subreţelei, respectiv adresa de broadcast a subreţelei din care face parte adresa
IP;
c) Numărul de hosturi din subreţeaua din care face parte adresa IP;
d) Numărul de subreţele definite de masca adresei IP dată.
Soluţie:
a) Adresa IP defineşte o reţea de clasa B. Rezultă că masca reţelei este 255.255.0.0 . Făcând
operaţiile pe biţi vom avea:
10101100.00010000.00000000.10010110 Adresa IP
11111111 .11111111 .00000000.00000000 Mască reţea
--------------------------------------------------
10101100.00010000.00000000.00000000 Adresa reţelei
--------------------------------------------------
10101100.00010000.11111111 .11111111 Adresa de broadcast a reţelei
Adresa reţelei este 172.16.0.0
Adresa de broadcast a reţelei este 172.16.255.255
b) Făcând operaţiile pe biţi vom avea:
10101100.00010000.00000000.10010110 Adresa IP
11111111 .11111111 .11111111 .11000000 Masca subreţea
--------------------------------------------------
10101100.00010000.00000000.10000000 Adresa subreţelei
--------------------------------------------------
10101100.00010000.00000000.10111111 Adresa de broadcast a subreţelei
Adresa subreţelei este 172.16.0.128
Adresa de broadcast a subreţelei este 172.16.0.191
c) Numărul de hosturi din subreţea: NH = 26-2 = 62 hosturi
d) Numărul de subreţele: NSR = 210-2 = 1022 subreţele
5.14.2. Se consideră adresa IP v4 192.168.10.125/28. Se cere:
a) Adresa reţelei, respectiv adresa de broadcast a reţelei definite de perechea adresă IP/
mască reţea.
b) Numărul de hosturi din reţeaua determinată la punctul a).
Soluţie:
a) Făcând operaţiile pe biţi vom avea:
11000000.10101000.00001010.01111101 Adresa IP
11111111 .11111111 .11111111 .11110000 Masca reţea
--------------------------------------------------
11000000.10101000.00001010.01110000 Adresa de reţea
--------------------------------------------------
11000000.10101000.00001010.01111111 Adresa de broadcast a reţelei
Adresa reţelei este 192.168.10.112.
Adresa de broadcast a reţelei este 192.168.10.127.