Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

„Dacă citiți inscripția „bivol” de pe cușca unui elefant, nu vă credeți ochilor.” Kozma Prutkov

În anteriorul articol despre Model-Based Design s-a arătat de ce este nevoie de un model de obiect și s-a dovedit că fără acest model de obiect se poate vorbi doar despre design bazat pe model ca pe un viscol de marketing, fără sens și fără milă. Dar când apare un model al unui obiect, inginerii competenți au întotdeauna o întrebare rezonabilă: ce dovezi există că modelul matematic al obiectului corespunde obiectului real.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

Un exemplu de răspuns la această întrebare este dat în articol despre proiectarea pe bază de model a acționărilor electrice. În acest articol vom analiza un exemplu de creare a unui model pentru sistemele de climatizare a aeronavelor, diluând practica cu câteva considerații teoretice de natură generală.

Crearea unui model de încredere al obiectului. Teorie

Pentru a nu amâna, vă voi spune imediat despre algoritmul pentru crearea unui model pentru design bazat pe model. Este nevoie de doar trei pași simpli:

Pasul 1. Dezvoltați un sistem de ecuații algebrice-diferențiale care descriu comportamentul dinamic al sistemului modelat. Este simplu dacă cunoașteți fizica procesului. Mulți oameni de știință au dezvoltat deja pentru noi legile fizice de bază numite după Newton, Brenoul, Navier Stokes și alți Stangel, Compas și Rabinovici.

Pasul 2. Selectați în sistemul rezultat un set de coeficienți și caracteristici empirice ale obiectului de modelare care pot fi obținute în urma testelor.

Pasul 3. Testați obiectul și ajustați modelul pe baza rezultatelor experimentelor la scară largă, astfel încât să corespundă realității, cu gradul de detaliu necesar.

După cum puteți vedea, este simplu, doar două trei.

Exemplu de implementare practică

Sistemul de aer condiționat (ACS) dintr-o aeronavă este conectat la un sistem automat de menținere a presiunii. Presiunea din avion trebuie să fie întotdeauna mai mare decât presiunea exterioară, iar rata de schimbare a presiunii trebuie să fie astfel încât piloții și pasagerii să nu sângereze din nas și urechi. Prin urmare, sistemul de control al intrării și ieșirii aerului este important pentru siguranță, iar sistemele de testare scumpe sunt puse pe teren pentru dezvoltarea lui. Ele creează temperaturi și presiuni la altitudinea de zbor și reproduc condițiile de decolare și aterizare pe aerodromuri de diferite altitudini. Și problema dezvoltării și depanării sistemelor de control pentru SCV-uri crește la potențialul maxim. Cât timp vom rula bancul de testare pentru a obține un sistem de control satisfăcător? Evident, dacă instalăm un model de control pe un model al unui obiect, atunci ciclul de lucru pe bancul de testare poate fi redus semnificativ.

Un sistem de climatizare a aeronavei constă din aceleași schimbătoare de căldură ca orice alt sistem termic. Bateria este o baterie și în Africa, doar un aparat de aer condiționat. Dar din cauza limitărilor asupra greutății la decolare și dimensiunilor aeronavelor, schimbătoarele de căldură sunt realizate cât mai compacte și cât mai eficiente pentru a transfera cât mai multă căldură de la o masă mai mică. Ca urmare, geometria devine destul de bizară. Ca și în cazul în cauză. Figura 1 prezintă un schimbător de căldură cu plăci în care este utilizată o membrană între plăci pentru a îmbunătăți transferul de căldură. Lichidul de răcire cald și rece alternează în canale, iar direcția de curgere este transversală. Un lichid de răcire este furnizat pe tăietura frontală, celălalt - în lateral.

Pentru a rezolva problema controlului SCR, trebuie să știm câtă căldură este transferată de la un mediu la altul într-un astfel de schimbător de căldură pe unitate de timp. Rata de schimbare a temperaturii, pe care o reglementăm, depinde de aceasta.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 1. Diagrama unui schimbător de căldură de aeronavă.

Probleme de modelare. Piesa hidraulica

La prima vedere, sarcina este destul de simplă; este necesar să se calculeze debitul de masă prin canalele schimbătorului de căldură și debitul de căldură dintre canale.
Debitul masic al lichidului de răcire în canale este calculat folosind formula Bernouli:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
ΔP – diferența de presiune între două puncte;
ξ – coeficientul de frecare a lichidului de răcire;
L – lungimea canalului;
d – diametrul hidraulic al canalului;
ρ – densitatea lichidului de răcire;
ω – viteza lichidului de răcire în canal.

Pentru un canal de formă arbitrară, diametrul hidraulic este calculat prin formula:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
F – zona de curgere;
P – perimetrul umed al canalului.

Coeficientul de frecare este calculat folosind formule empirice și depinde de viteza de curgere și de proprietățile lichidului de răcire. Pentru diferite geometrii, se obțin diferite dependențe, de exemplu, formula pentru curgerea turbulentă în conducte netede:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
Re – numărul Reynolds.

Pentru curgerea în canale plate, se poate folosi următoarea formulă:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

Din formula lui Bernoulli, puteți calcula căderea de presiune pentru o anumită viteză sau invers, calculați viteza lichidului de răcire în canal, pe baza unei căderi de presiune date.

Schimb de caldura

Fluxul de căldură dintre lichidul de răcire și perete se calculează prin formula:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
α [W/(m2×deg)] – coeficientul de transfer termic;
F – zona de curgere.

Pentru problemele de curgere a lichidului de răcire în conducte, s-au efectuat cercetări suficiente și există multe metode de calcul și, de regulă, totul se reduce la dependențe empirice pentru coeficientul de transfer de căldură α [W/(m2×deg)]

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
Nu – numărul Nusselt,
λ – coeficientul de conductivitate termică a lichidului [W/(m×grade)] d – diametrul hidraulic (echivalent).

Pentru a calcula numărul Nusselt (criteriul), sunt utilizate dependențe de criterii empirice, de exemplu, formula pentru calcularea numărului Nusselt al unei țevi rotunde arată astfel:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

Aici vedem deja numărul Reynolds, numărul Prandtl la temperatura peretelui și temperatura lichidului și coeficientul de neuniformitate. (Sursă)

Pentru schimbătoarele de căldură cu plăci ondulate formula este similară ( Sursă ):
Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

în cazul în care:
n = 0.73 m = 0.43 pentru flux turbulent,
coeficientul a - variază de la 0,065 la 0.6 în funcție de numărul de plăci și regimul de curgere.

Să luăm în considerare că acest coeficient este calculat doar pentru un punct din flux. Pentru următorul punct, avem o temperatură diferită a lichidului (s-a încălzit sau s-a răcit), o temperatură diferită a peretelui și, în consecință, toate numerele Reynolds și numerele Prandtl plutesc.

În acest moment, orice matematician va spune că este imposibil să calculeze cu exactitate un sistem în care coeficientul se modifică de 10 ori și va avea dreptate.

Orice inginer practic va spune că fiecare schimbător de căldură este fabricat diferit și este imposibil să se calculeze sistemele și, de asemenea, va avea dreptate.

Dar designul bazat pe modele? Este totul pierdut cu adevărat?

Vânzătorii avansați de software occidental din acest loc vă vor vinde supercalculatoare și sisteme de calcul 3D, de genul „nu puteți face fără el”. Și trebuie să rulați calculul pentru o zi pentru a obține distribuția temperaturii în 1 minut.

Este clar că aceasta nu este opțiunea noastră; trebuie să depanăm sistemul de control, dacă nu în timp real, atunci cel puțin în timpul previzibil.

Rezolvare la întâmplare

Se fabrică un schimbător de căldură, se efectuează o serie de teste și se stabilește un tabel cu eficiența temperaturii în regim de echilibru la debitele date de lichid de răcire. Simplu, rapid și de încredere deoarece datele provin din testare.

Dezavantajul acestei abordări este că nu există caracteristici dinamice ale obiectului. Da, știm care va fi fluxul de căldură în stare de echilibru, dar nu știm cât timp va dura să se stabilească atunci când treceți de la un mod de funcționare la altul.

Prin urmare, după ce au calculat caracteristicile necesare, configurăm sistemul de control direct în timpul testării, ceea ce am dori inițial să-l evităm.

Abordare bazată pe model

Pentru a crea un model de schimbător de căldură dinamic, este necesar să se utilizeze datele de testare pentru a elimina incertitudinile din formulele empirice de calcul - numărul Nusselt și rezistența hidraulică.

Soluția este simplă, ca totul ingenios. Luăm o formulă empirică, efectuăm experimente și determinăm valoarea coeficientului a, eliminând astfel incertitudinea din formulă.

De îndată ce avem o anumită valoare a coeficientului de transfer de căldură, toți ceilalți parametri sunt determinați de legile fizice de bază ale conservării. Diferența de temperatură și coeficientul de transfer de căldură determină cantitatea de energie transferată în canal pe unitatea de timp.

Cunoscând fluxul de energie, se pot rezolva ecuațiile de conservare a masei și impulsului energiei pentru lichidul de răcire din canalul hidraulic. De exemplu aceasta:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Pentru cazul nostru, fluxul de căldură dintre perete și lichid de răcire - Qwall - rămâne incert. Puteți vedea mai multe detalii Aici…

Și, de asemenea, ecuația derivată a temperaturii pentru peretele canalului:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
în cazul în care:
ΔQwall – diferența dintre fluxul de intrare și cel de ieșire către peretele canalului;
M este masa peretelui canalului;
Cpc – capacitatea termică a materialului peretelui.

Precizia modelului

După cum sa menționat mai sus, într-un schimbător de căldură avem o distribuție a temperaturii pe suprafața plăcii. Pentru o valoare constantă, puteți lua media peste plăci și o puteți utiliza, imaginându-vă întregul schimbător de căldură ca un punct concentrat în care, la o diferență de temperatură, căldura este transferată prin întreaga suprafață a schimbătorului de căldură. Dar pentru regimurile tranzitorii este posibil ca o astfel de aproximare să nu funcționeze. Cealaltă extremă este să facem câteva sute de mii de puncte și să încărcăm Super Computer, care, de asemenea, nu este potrivit pentru noi, deoarece sarcina este de a configura sistemul de control în timp real, sau mai bine zis, mai rapid.

Se pune întrebarea, în câte secțiuni ar trebui împărțit schimbătorul de căldură pentru a obține o precizie și o viteză acceptabile de calcul?

Ca întotdeauna, întâmplător am avut la îndemână un model de schimbător de căldură cu amine. Schimbătorul de căldură este un tub, un mediu de încălzire curge în țevi, iar un mediu încălzit curge între saci. Pentru a simplifica problema, întregul tub schimbător de căldură poate fi reprezentat ca o țeavă echivalentă, iar țeava în sine poate fi reprezentată ca un set de celule de calcul discrete, în fiecare dintre care se calculează un model punctual al transferului de căldură. Diagrama unui model cu o singură celulă este prezentată în Figura 2. Canalul de aer cald și canalul de aer rece sunt conectate printr-un perete, ceea ce asigură transferul fluxului de căldură între canale.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 2. Modelul celulei schimbătoare de căldură.

Modelul de schimbător de căldură tubular este ușor de configurat. Puteți modifica un singur parametru - numărul de secțiuni de-a lungul lungimii conductei și puteți privi rezultatele calculului pentru diferite partiții. Să calculăm mai multe opțiuni, începând cu o împărțire în 5 puncte de-a lungul lungimii (Fig. 3) și până la 100 de puncte de-a lungul lungimii (Fig. 4).

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 3. Distribuția staționară a temperaturii a 5 puncte calculate.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 4. Distribuția staționară a temperaturii a 100 puncte calculate.

Ca rezultat al calculelor, s-a dovedit că temperatura la starea de echilibru atunci când este împărțită în 100 de puncte este de 67,7 grade. Și atunci când este împărțit în 5 puncte calculate, temperatura este de 72 grade C.

De asemenea, în partea de jos a ferestrei este afișată viteza de calcul relativă în timp real.
Să vedem cum se schimbă temperatura în regim de echilibru și viteza de calcul în funcție de numărul de puncte de calcul. Diferența de temperaturi la starea de echilibru în timpul calculelor cu un număr diferit de celule de calcul poate fi utilizată pentru a evalua acuratețea rezultatului obținut.

Tabelul 1. Dependența temperaturii și a vitezei de calcul de numărul de puncte de calcul de-a lungul lungimii schimbătorului de căldură.

Numărul de puncte de calcul Temperatura constantă Viteza de calcul
5 72,66 426
10 70.19 194
25 68.56 124
50 67.99 66
100 67.8 32

Analizând acest tabel, putem trage următoarele concluzii:

  • Viteza de calcul scade proporțional cu numărul de puncte de calcul din modelul schimbătorului de căldură.
  • Modificarea preciziei de calcul are loc exponențial. Pe măsură ce numărul de puncte crește, rafinamentul la fiecare creștere ulterioară scade.

În cazul unui schimbător de căldură cu plăci cu un lichid de răcire cu flux încrucișat, ca în Figura 1, crearea unui model echivalent din celulele de calcul elementare este puțin mai complicată. Trebuie să conectăm celulele astfel încât să organizăm fluxurile încrucișate. Pentru 4 celule, circuitul va arăta așa cum se arată în Figura 5.

Fluxul de lichid de răcire este împărțit de-a lungul ramurilor calde și reci în două canale, canalele sunt conectate prin structuri termice, astfel încât la trecerea prin canal lichidul de răcire schimbă căldură cu diferite canale. Simulând fluxul încrucișat, lichidul de răcire cald curge de la stânga la dreapta (vezi Fig. 5) în fiecare canal, schimbând secvențial căldură cu canalele lichidului de răcire rece, care curge de jos în sus (vezi Fig. 5). Cel mai fierbinte punct este în colțul din stânga sus, deoarece lichidul de răcire fierbinte schimbă căldură cu lichidul de răcire deja încălzit al canalului rece. Iar cel mai rece este în dreapta jos, unde lichidul de răcire rece schimbă căldură cu lichidul de răcire fierbinte, care s-a răcit deja în prima secțiune.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 5. Model cross-flow a 4 celule de calcul.

Acest model pentru un schimbător de căldură cu plăci nu ține cont de transferul de căldură între celule din cauza conductivității termice și nu ține cont de amestecarea lichidului de răcire, deoarece fiecare canal este izolat.

Dar, în cazul nostru, ultima limitare nu reduce acuratețea, deoarece în proiectarea schimbătorului de căldură membrana ondulată împarte fluxul în multe canale izolate de-a lungul lichidului de răcire (vezi Fig. 1). Să vedem ce se întâmplă cu acuratețea calculului la modelarea unui schimbător de căldură cu plăci pe măsură ce numărul celulelor de calcul crește.

Pentru a analiza acuratețea, folosim două opțiuni pentru împărțirea schimbătorului de căldură în celule de proiectare:

  1. Fiecare celulă pătrată conține două elemente hidraulice (curgeri reci și calde) și un element termic. (vezi Figura 5)
  2. Fiecare celulă pătrată conține șase elemente hidraulice (trei secțiuni în fluxul cald și rece) și trei elemente termice.

În acest ultim caz, folosim două tipuri de conexiune:

  • contracurent debitelor reci și calde;
  • curgere paralelă a fluxului rece și cald.

Un contra-flux crește eficiența în comparație cu un flux transversal, în timp ce un contra-flux o reduce. Cu un număr mare de celule, are loc media asupra fluxului și totul devine aproape de fluxul încrucișat real (vezi Figura 6).

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 6. Model de flux încrucișat cu patru celule, 3 elemente.

Figura 7 prezintă rezultatele distribuției staționare a temperaturii în schimbătorul de căldură la alimentarea cu aer cu o temperatură de 150 °C de-a lungul liniei fierbinți și 21 °C de-a lungul liniei rece, pentru diferite opțiuni de împărțire a modelului. Culoarea și numerele de pe celulă reflectă temperatura medie a peretelui din celula de calcul.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 7. Temperaturi la starea de echilibru pentru diferite scheme de proiectare.

Tabelul 2 arată temperatura în regim de echilibru a aerului încălzit după schimbătorul de căldură, în funcție de împărțirea modelului de schimbător de căldură în celule.

Tabelul 2. Dependența temperaturii de numărul de celule de proiectare din schimbătorul de căldură.

Dimensiunea modelului Temperatura constantă
1 element pe celulă
Temperatura constantă
3 elemente pe celulă
2 × 2 62,7 67.7
3 × 3 64.9 68.5
4 × 4 66.2 68.9
8 × 8 68.1 69.5
10 × 10 68.5 69.7
20 × 20 69.4 69.9
40 × 40 69.8 70.1

Pe măsură ce numărul de celule de calcul din model crește, temperatura finală la starea de echilibru crește. Diferența dintre temperatura de echilibru pentru diferite partiții poate fi considerată un indicator al preciziei calculului. Se poate observa că odată cu creșterea numărului de celule de calcul, temperatura tinde spre limită, iar creșterea preciziei nu este proporțională cu numărul de puncte de calcul.

Apare întrebarea: ce fel de precizie a modelului avem nevoie?

Răspunsul la această întrebare depinde de scopul modelului nostru. Deoarece acest articol este despre proiectarea bazată pe modele, creăm un model pentru a configura sistemul de control. Aceasta înseamnă că acuratețea modelului trebuie să fie comparabilă cu acuratețea senzorilor utilizați în sistem.

În cazul nostru, temperatura este măsurată de un termocuplu, a cărui precizie este de ±2.5°C. Orice precizie mai mare în scopul instalării unui sistem de control este inutilă; sistemul nostru real de control pur și simplu „nu îl va vedea”. Astfel, dacă acceptăm că temperatura limită pentru un număr infinit de partiții este de 70 °C, atunci un model care ne oferă mai mult de 67.5 °C va fi suficient de precis. Toate modelele cu 3 puncte într-o celulă de calcul și modelele mai mari de 5x5 cu un punct într-o celulă. (Evidențiat cu verde în tabelul 2)

Moduri de operare dinamice

Pentru a evalua regimul dinamic, vom evalua procesul de schimbare a temperaturii în punctele cele mai calde și mai reci ale peretelui schimbătorului de căldură pentru diferite variante de scheme de proiectare. (vezi Fig. 8)

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 8. Încălzirea schimbătorului de căldură. Modele de dimensiuni 2x2 si 10x10.

Se poate observa că timpul procesului de tranziție și însăși natura sa sunt practic independente de numărul de celule de calcul și sunt determinate exclusiv de masa metalului încălzit.

Astfel, concluzionăm că pentru modelarea corectă a schimbătorului de căldură în moduri de la 20 la 150 °C, cu precizia cerută de sistemul de control SCR, sunt suficiente aproximativ 10 - 20 de puncte de proiectare.

Crearea unui model dinamic bazat pe experiment

Având un model matematic, precum și date experimentale privind purjarea schimbătorului de căldură, nu ne rămâne decât să facem o corecție simplă și anume să introducem în model un factor de intensificare pentru ca calculul să coincidă cu rezultatele experimentale.

Mai mult, folosind mediul de creare a modelului grafic, vom face acest lucru automat. Figura 9 prezintă un algoritm pentru selectarea coeficienților de intensificare a transferului de căldură. Datele obținute din experiment sunt furnizate la intrare, modelul schimbătorului de căldură este conectat și coeficienții necesari pentru fiecare mod sunt obținuți la ieșire.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 9. Algoritmul de selectare a coeficientului de intensificare pe baza rezultatelor experimentale.

Astfel, determinăm același coeficient pentru un număr Nusselt și eliminăm incertitudinea din formulele de calcul. Pentru diferite moduri de funcționare și temperaturi, valorile factorilor de corecție se pot schimba, dar pentru moduri de funcționare similare (funcționare normală) se dovedesc a fi foarte apropiate. De exemplu, pentru un anumit schimbător de căldură pentru diferite moduri, coeficientul variază de la 0.492 la 0.655

Dacă aplicăm un coeficient de 0.6, atunci în modurile de funcționare studiate eroarea de calcul va fi mai mică decât eroarea de termocuplu, astfel, pentru sistemul de control, modelul matematic al schimbătorului de căldură va fi complet adecvat modelului real.

Rezultatele instalării modelului de schimbător de căldură

Pentru a evalua calitatea transferului de căldură, se utilizează o caracteristică specială - eficiența:

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
în cazul în care:
efffierbinte – randamentul schimbătorului de căldură pentru lichidul de răcire fierbinte;
Tmunțiin – temperatura la intrarea în schimbătorul de căldură de-a lungul căii de curgere a lichidului de răcire fierbinte;
Tmunțiafară – temperatura la ieșirea schimbătorului lor de căldură de-a lungul căii de curgere a lichidului de răcire fierbinte;
Tsalain – temperatura la intrarea în schimbătorul de căldură de-a lungul căii de curgere a lichidului de răcire rece.

Tabelul 3 prezintă abaterea eficienței modelului de schimbător de căldură față de cel experimental la diferite debite de-a lungul liniilor calde și reci.

Tabel 3. Erori în calcularea eficienței transferului de căldură în %
Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion

În cazul nostru, coeficientul selectat poate fi utilizat în toate modurile de operare care ne interesează. Dacă la debite mici, unde eroarea este mai mare, nu se realizează precizia cerută, putem folosi un factor de intensificare variabil, care va depinde de debitul curent.

De exemplu, în Figura 10, coeficientul de intensificare este calculat folosind o formulă dată în funcție de debitul curent în celulele canalului.

Design bazat pe model. Crearea unui model de încredere folosind exemplul unui schimbător de căldură de avion
Figura 10. Coeficient variabil de îmbunătățire a transferului de căldură.

Constatări

  • Cunoașterea legilor fizice vă permite să creați modele dinamice ale unui obiect pentru proiectarea bazată pe modele.
  • Modelul trebuie verificat și reglat pe baza datelor de testare.
  • Instrumentele de dezvoltare a modelului ar trebui să permită dezvoltatorului să personalizeze modelul pe baza rezultatelor testării obiectului.
  • Utilizați abordarea potrivită bazată pe model și veți fi fericit!

Bonus pentru cei care au terminat de citit. Video cu funcționarea unui model virtual al sistemului SCR.

Numai utilizatorii înregistrați pot participa la sondaj. Loghează-te, Vă rog.

Despre ce ar trebui să vorbesc în continuare?

  • 76,2%Cum se demonstrează că programul din model corespunde programului din hardware.16

  • 23,8%Cum să utilizați calcularea supercomputerului pentru proiectarea bazată pe modele.5

Au votat 21 de utilizatori. 1 utilizator s-a abținut.

Sursa: www.habr.com

Adauga un comentariu