Kako postaviti pametne telefone i računala. Informativni portal

Korištenje uvjetnih varijabli za upravljanje sinkronizacijskim odnosima. dodatak

Kako bi se logika mogla implementirati u program, koriste se uvjetni operatori. Konceptualno, ovi operatori se mogu predstaviti kao čvorne točke, dostižući koje program bira u kojem od mogućih smjerova će se kretati dalje. Na primjer, trebate odrediti sadrži li neka varijabla arg pozitivan ili negativan broj i prikazati odgovarajuću poruku na ekranu. Da biste to učinili, možete koristiti if naredbu (if), koja obavlja slične provjere.

U najjednostavnijem slučaju, sintaksa za dati if izraz je sljedeća:

ako (izraz)

Ako je vrijednost parametra "expression" "true", naredba se izvršava, inače je program preskače. Treba napomenuti da je "izraz" uvjetni izraz u kojem se provjerava neki uvjet. Stol 2.1 predstavlja varijante jednostavnih logičkih izraza if naredbe.

Tablica 2.1. Jednostavni Booleovi izrazi

Navedimo primjer korištenja if operatora grananja. Sljedeći program omogućuje određivanje predznaka unesene varijable.

Listing 2.1. Prvi program za određivanje predznaka unesenog broja.

#uključiti
int main ()
{
float x;
printf ("Unesite broj:");
scanf (“% f”, & x);
ako je (x> = 0)

Vrati 0;
}

Analiza zadanog programskog teksta pokazuje da se dva uvjetna operatora mogu zamijeniti jednim pomoću konstrukcije

ako (izraz)

što se tako tumači. Ako je "izraz" istinit, tada se izvršava "izjava1", u suprotnom se izvršava "izjava2". Prepišimo prethodno navedeni primjer određivanja predznaka broja pomoću ove konstrukcije.

Listing 2.2. Drugi program za određivanje predznaka unesenog broja.

#uključiti
int main ()
{
float x;
printf ("Unesite broj:");
scanf (“% f”, & x);
if (x printf (“Uneseni broj% f je negativan. \ n”, x);
drugo
printf (“Uneseni broj% f nije negativan. \ n”, x);

Vrati 0;
}

U prikazanim primjerima, nakon if i else naredbi, postoji samo jedna funkcija printf (). U slučajevima kada je potrebno napisati više od jednog operatora kada je uvjet ispunjen, moraju se koristiti vitičaste zagrade, tj. koristiti konstrukciju poput

ako (izraz)
{

}
drugo
{

Treba napomenuti da nakon ključne riječi else možete formalno staviti još jedan if uvjetni izraz, kao rezultat toga dobivamo još fleksibilniju konstrukciju uvjetnih prijelaza:

ako (izraz1)
inače ako (izraz2)
drugo

Listing 2.3 prikazuje program koji implementira posljednju uvjetnu granu konstrukciju.

Listing 2.3. Treći program za određivanje predznaka unesenog broja.

#uključiti
int main ()
{
float x;
printf ("Unesite broj:");
scanf (“% f”, & x);
if (x printf (“Uneseni broj% f je negativan. \ n”, x);
inače ako (x> 0)
printf (“Uneseni broj% f je pozitivan. \ n”, x);
drugo
printf (“Uneseni broj% f nije negativan. \ n”, x);

Vrati 0;
}

Do sada smo razmatrali jednostavne uvjete kao što je x && - logično I
|| - logično ILI
! - logično NE

Na temelju ove tri logičke operacije mogu se generirati složeniji uvjeti. Na primjer, ako postoje tri varijable exp1, exp2 i exp3, tada one mogu činiti logičke konstrukcije prikazane u tablici. 2.2.

Tablica 2.2. Primjer složenih logičkih izraza

Kao i operacije množenja i zbrajanja u matematici, logičke operacije I ILI NE, također imaju svoje prioritete. Operacija NE ima najveći prioritet, t.j. takva se operacija najprije izvodi. Operacija AND ima niži prioritet, a konačno operacija OR ima najniži prioritet. Ovi se prioriteti moraju uzeti u obzir pri izradi složenih uvjeta. Na primjer, stanje

if (4 6 || 5 je testiran na ovaj način. If 4 6 OR 5 if (4 6 || 5 if izraz olakšava pisanje programa u kojima trebate birati između malog broja mogućih opcija. Međutim, ponekad program treba odabrati jednu opciju od mnogih mogućih. Formalno, možete koristiti if else if ... else konstrukciju. Međutim, u mnogim slučajevima se ispostavi da je prikladnije koristiti naredbu C++ switch. sintaksa ovog operatora je sljedeća:

prekidač (varijabilan)
{
konstanta slučaja1:

Konstanta slučaja 2:

...
zadano:

Ovaj operator sekvencijalno provjerava jednakost varijable s konstantama iza ključne riječi case. Ako niti jedna od konstanti nije jednaka vrijednosti varijable, tada se izvršavaju naredbe iza riječi default. Naredba switch ima sljedeću posebnost. Pretpostavimo da je vrijednost varijable jednaka vrijednosti konstante1 i da se naredbe nakon ključne riječi prvog case izvršavaju. Nakon toga će se izvođenje programa nastaviti provjeravanjem varijable jednakosti konstante2, što često dovodi do nepotrebnog trošenja računalnih resursa. Da biste izbjegli ovu situaciju, trebali biste upotrijebiti naredbu break da premjestite program na sljedeći izraz nakon prebacivanja.

Listing 2.4 prikazuje primjer programiranja izraza uvjetnog prekidača.

Listing 2.4. Primjer korištenja naredbe switch.

#uključiti
int main ()
{
int x;
printf ("Unesite broj:");
scanf (“% d”, & x);
prekidač (x)
{
slučaj 1: printf (“Unesen broj 1 \ n”); prekid;
slučaj 2: printf (“Unesen broj 2 \ n”); pauza;
zadano: printf (“Unesen još jedan broj \ n”);
}
char ch;
printf ("Unesite znak:");
scanf ("% c", & ch);
prekidač (ch)
{
case 'a': printf ("Unesen je znak a \ n"); pauza;
case 'b': printf ("Unesen znak b \ n"); pauza;
zadano: printf (“Unesen je još jedan znak \ n”);
}
vrati 0;
}

Ovaj primjer pokazuje dva različita slučaja upotrebe za naredbu switch. U prvom slučaju analizira se unesena znamenka, u drugom se analizira uneseni znak. Treba napomenuti da ovaj operator može napraviti izbor samo na temelju jednakosti svog argumenta s jednom od navedenih vrijednosti slučaja, t.j. provjera izraza kao što je x

Uvjetne varijable

Uvjetna varijabla je semafor koji se koristi za signaliziranje događaja koji se dogodio. Jedan ili više procesa (ili niti) iz drugih procesa ili niti mogu čekati signal da se dogodio događaj. Trebali biste razumjeti razliku između uvjetnih varijabli i mutex semafora o kojima smo gore raspravljali. Svrha mutex semafora i brava čitanja/pisanja je sinkronizacija pristupa podacima, dok se varijable uvjeta obično koriste za sinkronizaciju niza operacija. Ovom prilikom u svojoj knjizi UNIX mrežno programiranje W. Richard Stevens je to vrlo dobro rekao: “ Mutexe treba koristiti za blokiranje, a ne za čekanje ».

U Listingu 4.6, potrošački tok sadržavao je petlju:

15 dok (TextFiles.empty ())

Nit "potrošača" ponavljala se kroz petlju do reda Tekstualne datoteke bilo je elemenata. Ova se petlja može zamijeniti uvjetnim re m nennaya. Nit proizvođača signalizira potrošaču da su stavke stavljene u red čekanja. Potrošačka nit može pričekati dok ne primi signal, a zatim nastavlja s obradom reda.

Uvjetna varijabla je tipa pthread_cond_t. Sljedeće su vrste operacija koje može izvesti:

Inicijalizacija;

Uništenje;

Očekivanje;

Čekanje s vremenskim ograničenjem;

Adresabilna signalizacija;

Opći alarm;

Operacije inicijalizacije i uništavanja izvode se pomoću varijabli uvjeta, slično kao i kod drugih muteksa. Funkcije razreda pthread_cond_t, koje provode ove operacije navedene su u tablici. 5.7.

Tablica 5.7. Funkcije klase pthread_cond_t koje implementiraju operacije uvjetnih varijabli

Uvjetne varijable koriste se zajedno s mutexima. Ako pokušate zaključati mutex, nit ili proces će se blokirati dok se mutex ne oslobodi. Nakon deblokiranja, nit ili proces će primiti mutex i nastaviti svoj rad. Kada koristite uvjetnu varijablu, ona mora biti vezana za mutex.

pthread_mutex_lock (& ​​Mutex);

pthread_cond_wait (& EventMutex, & Mutex);

pthread_mutex_unlock (& ​​Mutex);

Dakle, neki zadatak pokušava zaključati mutex. Ako je mutex već zaključan, tada je ovaj zadatak blokiran. Nakon otključavanja, zadatak će osloboditi mutex Mutex a istovremeno će čekati signal za uvjetnu varijablu EventMutex . Ako mutex nije zaključan, zadatak će neograničeno čekati na signal. Kada čeka s vremenskim ograničenjem, zadatak će čekati signal unutar navedenog vremenskog intervala. Ako ovo vrijeme istekne prije nego što zadatak primi signal, funkcija će vratiti kod pogreške. Zadatak će tada ponovno zatražiti mutex.

Izvođenjem signalizacije adrese, zadatak obavještava drugu nit ili proces da se dogodio događaj. Ako zadatak čeka signal za danu uvjetnu varijablu, taj će zadatak biti otključan i primiti mutex. Ako nekoliko zadataka čeka signal za danu uvjetnu varijablu odjednom, tada će samo jedan od njih biti otključan. Ostali zadaci čekat će u redu i bit će deblokirani prema korištenoj strategiji rasporeda. Kada se izvrši globalna signalizacija, svi zadaci koji čekaju signal za navedenu varijablu stanja će dobiti obavijest. Kada je više zadataka otključano, oni će se natjecati za vlasništvo nad mutexom prema korištenoj strategiji raspoređivanja. Za razliku od operacije čekanja, zadatak signalizacije ne zahtijeva vlasništvo nad mutexom, iako bi trebao.

Uvjetna varijabla također ima atributni objekt čije su funkcije navedene u tablici. 5.8.

Tablica 5.8. Atributske funkcije pristupa objektu za uvjetnu varijablu tipa pthread_cond_t


Int pthread_condattr_init(pthread_condattr_t * attr) Inicijalizira objekt atributa uvjetne varijable specificiran attr na zadane vrijednosti za sve atribute definirane implementacijom;

Int pthread_condattr_destroy(pthread_condattr_t * attr); Uništava objekt atributa uvjetne varijable naveden parametrom attr. Ovaj se objekt može ponovno inicijalizirati pozivom pthread_condattr_init ()

Int pthread_condattr_setpshared(pthread_condattr_t * attr, int pshared);

Int pthread_condattr_getpshared(const pthread_condattr_t * ograničiti attr, int * ograničiti pshared); Postavlja ili vraća proces-dijeljeni atribut objekta atributa uvjetne varijable specificiran parametrom attr. Pshared parametar može sadržavati sljedeće vrijednosti:

PTHREAD_PROCESS_SHARED(dopušta brave čitanja i pisanja koje dijele sve niti koje imaju pristup memoriji dodijeljenoj za ovu uvjetnu varijablu, čak i ako niti pripadaju različitim procesima);

PTHREAD_PROCESS_PRIVATE(Uvjetna varijabla se dijeli između niti istog procesa)

Int pthread_condattr_setclock(pthread_condattr_t * attr, clockid_t clock_id);

Int pthread_condattr_getclock(const pthread_condattr_t * ograniči attr, clockid_t * ograniči clock_id); Postavlja ili vraća atribut sat objekt atributa uvjetne varijable specificirane parametrom attr... Atribut sat je identifikator sata koji se koristi za mjerenje vremenskog ograničenja u funkciji pthread_cond_timedwait (). Atribut sata je zadani identifikator sistemskog sata.

Obavijest

Varijabilna Je količina koja ima ime i značenje. Varijable se deklariraju pomoću riječi var: var x = 12, y; Ovdje se uvode dvije varijable s imenima x i y, vrijednost 12 upisuje se u varijablu x, a varijabla y je nedefinirana, odnosno naredba trace trace (y); vratit će nedefinirano (nedefinirana vrijednost). Naredba trace (z) daje isti rezultat; jer varijabla z uopće nije poznata. Kako biste razlikovali postojeću varijablu od nepoznate, možete u nju upisati posebnu null vrijednost null: var y = null;

Ako tip varijable nije eksplicitno naveden, može poprimiti bilo koju vrijednost. Na primjer:

var x = 1; // broj x = "Ku-ku!" ; // niz x = false; // boolean

Međutim, prilikom deklariranja, bolje je eksplicitno navesti tip varijable. To omogućuje otkrivanje mnogih pogrešaka čak i prije nego što se program izvrši. Postoje tri jednostavne vrste:

  • Broj - broj;
  • String - niz;
  • Boolean je logička vrijednost.
Tip varijable je označen nakon njenog naziva odvojen dvotočkom var x: Broj = 0, y: String = "qq", b: Boolean = false; U varijablama tipa String možete pisati nizove znakova zatvorene u navodnike ili pojedinačne apostrofe: var s1: String = "qq1", s2: String = "qq2"; Booleove varijable uzimaju samo dvije vrijednosti: true i false: var b: Boolean = false; b = istina; b = (a U potonjem slučaju, b će biti istinit ako je uvjet desno od znaka jednakosti istinit.

Ako pokušate upisati vrijednost pogrešnog tipa u varijablu, dobit ćete poruku o pogrešci odmah kada se program prevede (to jest, kada se prevede u strojne kodove), a ne tijekom izvođenja. Na primjer, kod poput ovog izaziva pogrešku:

var x: Broj = 1; x = "Ku-ku!" ;

Promjenjiva vidljivost

Postoje tri vrste varijabli: Globalne varijable se deklariraju pomoću _global specifikacije: _global .x = 12; Imajte na umu da ovdje ne morate koristiti riječ var, takve se varijable tretiraju kao svojstva _global objekta. Varijabli x, koja je deklarirana gore, može se pristupiti iz bilo koje funkcije i iz koda bilo kojeg isječka jednostavno po imenu.

Ako u opsegu postoji nekoliko varijabli s istim imenom, prvo se traži lokalna varijabla, zatim varijabla trenutnog isječka, a tek onda globalna varijabla.

Varijable drugih isječaka su "nevidljive"; da biste se odnosili na njih, morate eksplicitno navesti roditeljski isječak:

Mc.x = 1; _korijen .x = 12; _roditelj .x = 123;

Zadatak

Za dodjelu nove vrijednosti varijabli koristite znak =. Lijevo od njega upišite naziv varijable, a desno - izraz: a = 4 * (c + 2) + 3 / (r - 4 * w) + d% 3; Znak * označava množenje, / znak označava dijeljenje, a % označava ostatak dijeljenja.

U izrazu se aritmetičke operacije izvode sljedećim redoslijedom:

  • radnje u zagradama;
  • množenje, dijeljenje i uzimanje ostatka (s lijeva na desno);
  • zbrajanje i oduzimanje (s lijeva na desno).
Ovaj red se zove prioritet(starost) aritmetičke operacije.

Nizovi znakova mogu se "spojiti" pomoću + operatora:

Ne = 20; s = "Vasya" + "otišao u šetnju." ; qq = "Objekat" + ne; Ako su u izraz uključeni podaci različitih tipova, dolazi do automatske konverzije u isti tip. Dakle, u zadnjem retku redak Object20 je upisan u varijablu qq.

Operateri ++ ( prirast, povećavajući varijablu za 1, i - ( dekrement, smanjujući varijablu za 1). Operateri

ja ++; k -; znači isto kao i = i + 1; k = k - 1; Postoji i stenografski zapis za aritmetičke operacije: a + = 20; b - = c - d; c * = a + b; d / = 2 * c; f% = 12; Ovaj kod se može zamijeniti sljedećim operatorima u "normalnom" obliku: a = a + 20; b = b - (c - d); c = c * (a + b); d = d / (2 * c); f = f% 12

Objekti

Objekt je nešto što ima svojstva i metode. U okolišu Bljesak postoje ugrađeni objekti (npr. Array, MovieClip, Key). Osim toga, možete izgraditi vlastite objekte: var car = new Object (); auto.v = 10; auto.god. = 1998; U okolišu Bljesak možete koristiti objektno orijentirano programiranje, odnosno kreirati vlastite klase objekata, obdariti ih svojstvima i metodama (vidi temu 13).

Glavna značajka objekata je takozvano referentno adresiranje. Odnosno, prilikom deklariranja

var obj = novi objekt (); varijabla obj ne pohranjuje sam objekt, već samo njegov adresa(referenca objekta). Stoga je operator dodjele obj2 = obj; ne stvara novi objekt u memoriji koji je kopija obj, već jednostavno kopira adresu prvog objekta u obj2. Nakon toga, obj i obj2 upućuju na isti objekt. Ako stvarno želimo izgraditi kopiju objekta čija je adresa pohranjena u obj, možemo učiniti sljedeće: var obj2 = new Object (); za (prop u obj) obj2 = obj; Ovdje petlja ponavlja sva svojstva prvog objekta i kopira ih u drugi. Varijabla prop (niz znakova) je naziv sljedećeg svojstva. Obj znači " svojstvo objekta obj čije je ime pohranjeno u prop».

Uvjetne varijable

Varijabla uvjeta (condvar - skraćenica od varijabla uvjeta) koristi se za blokiranje niti za bilo koji uvjet tijekom izvršavanja kritičnog dijela koda. Uvjet može biti složen koliko god želite i ne ovisi o uvjetnoj varijabli. Međutim, varijabla uvjeta uvijek se treba koristiti zajedno s mutexom za testiranje uvjeta.

Uvjetne varijable podržavaju sljedeće funkcije:

Čekanje na uvjetnu varijablu (čekajte) ( pthread_cond_wait ());

Deblokiranje jednog toka (signal) ( pthread_cond_signal ())

Deblokiranje višestrukih streamova (emitiranje) ( pthread_cond_broadcast ()),

Evo primjera tipične upotrebe varijable uvjeta:

pthread_mutex_lock (& ​​m); - ...

dok (! proizvoljan uvjet) (

pthread_cond_wait (& cv, & m);

pthread_mutex_unlock (& ​​m);

U ovom primjeru, hvatanje mutexa događa se prije provjere uvjeta. Dakle, provjereni uvjet se odnosi samo na trenutnu nit. Sve dok je ovaj uvjet istinit, ovaj dio koda blokira poziv čekanja dok neka druga nit ne izvede operaciju deblokiranja jedne ili više niti na varijablu uvjeta.

Dok petlja u gornjem primjeru potrebna je iz dva razloga. Prvo, posix standardi ne jamče da nema lažnih buđenja (na primjer, na višeprocesorskim sustavima). Drugo, ako neka druga nit promijeni uvjet, morate je ponovno testirati kako biste bili sigurni da promjena zadovoljava prihvaćene kriterije. Kada je nit koja čeka blokirana, funkcija atomski oslobađa mutex povezan s uvjetnom varijablom pthread_cond_wait () tako da druga nit može ući u kritični dio programskog koda.

Nit koja izvodi jedno deblokiranje na niti deblokirat će nit najvišeg prioriteta koja je u redu čekanja na varijablu uvjeta. Operacija otključavanja više niti otključava sve niti u redu čekanja na uvjetnoj varijabli. Mutex povezan s uvjetnom varijablom oslobađa atomski deblokirana nit s najvišim prioritetom. Nakon obrade kritičnog dijela koda, ova nit mora osloboditi mutex.

Druga vrsta operacije koja čeka uvjetnu varijablu ( pthread__cond_timedwair ()) omogućuje postavljanje vremenskog ograničenja. Na kraju tog razdoblja, nit čekanja može se deblokirati.

Barijere

Barijera je mehanizam sinkronizacije koji vam omogućuje koordiniranje rada nekoliko interakcijskih niti na takav način da se svaka od njih zaustavlja u određenoj točki dok čeka druge niti prije nego što nastavi svoj rad.

Za razliku od funkcije pthreadjoin () u kojem nit čeka da se završi druga nit, barijera prisiljava niti upoznati u određenom trenutku. Nakon što navedeni broj niti dosegne postavljenu barijeru, svi ove niti će se deblokirati i nastaviti s radom. Barijera se stvara pomoću funkcije pthread_barrier_init ():

#uključiti

pthread_barrier_init (pthread_barrier_t * barijera, const pthread_barrierattr_t * attr, unsigned int count);

Kao rezultat izvršavanja ovog koda, na zadanoj adresi se stvara barijera (pokazivač na barijeru je u argumentu barijere) i s atributima postavljenim argumentom attr. Argument count specificira broj niti za pozivanje pthread_barrier_wait ().

Nakon što je barijera stvorena, svaka nit poziva funkciju pthread_barrier_wait (), čime signalizira završetak ove radnje:

#uključiti

int pthread_barrier_wait (pthread_barrier_t "barijera);

Kada nit pozove funkciju pthread_barrier_wait (), blokira se do broja niti koji je specificirao funkcija pthread_barrier_init (), neće pozvati funkciju pthread_jbarrier_wait () i, sukladno tome, neće biti blokiran. Nakon navedenog broja niti poziva funkciju pthread_barrier_wait (), svi se otključavaju istovremeno.

#uključiti

#uključiti

#uključiti

#uključiti

pthread_barrier_t barijera; // sinkronizacijski objekt tipa "barijera".

main () // zanemarimo argumente

time_t sada; // stvorite barijeru s vrijednosti brojača 3

pthread_barrier_init (& barijera, NULL, 3); // pokreće dvije niti - threadl i thread2

pthread_create (NOLL, NOLL, threadl, NULL); // izvršavaju se niti threadl i thread2

pthread_create (NDLL, NDLL, thread2, NDLL); // čekati završetak

printf ("main () čeka barijeru na% s", ctime (& sada));

pthread_barrier_wait (& barrier); // nakon ove točke sve tri niti su prekinute

printf ("barijera u mainO učinjena na% s", ctime (& sada));

navoj (praznina * nije korištena)

vrijeme (& sada); // obavljati izračune

printf ("threadl starting at% s", ctime (& sada)); // pauza

pthread_barrier_wait (& barrier); // nakon ove točke sve tri niti su prekinute

printf ("barijera u threadl () učinjeno na% s", ctime (& sada));

nit2 (nevažeći * nije__upotrijebljen)

vrijeme (& sada); // obavljati izračune

printf ("thread2 starting at% s", ctime (& sada)); // pauza

pthread_barrier_wait (& barijera);

// nakon ove točke sve tri niti su gotove

printf ("barijera u thread2 () učinjeno na% s", ctime (& sada));

U primjeru iz listinga, glavna nit stvara barijeru, nakon čega počinje brojati broj niti blokiranih na barijeri za sinkronizaciju. U ovom slučaju, broj sinkroniziranih niti je postavljen na 3: glavna () nit, nit1 () i nit2 ().

Thread1 () i thread2 () su pokrenuti. Radi jasnoće, u toku je postavljena pauza za simulaciju procesa izračunavanja. Za izvođenje sinkronizacije, glavna nit se blokira na barijeri i čeka na deblokiranje koje se događa nakon što joj se druge dvije niti ne pridruže na ovoj barijeri.



Zaključavanja na čekanju

Sleepon brave rade na sličan način kao i uvjetne varijable, osim nekoliko detalja. Poput uvjetnih varijabli koje čekaju zaključavanje ( pthread_sleepon_lock ()) može se koristiti za blokiranje niti dok uvjet ne postane istinit (slično promjeni vrijednosti memorijske lokacije). Ali za razliku od uvjetnih varijabli (koje moraju postojati za svaki uvjet koji se testira), zaključavanja na čekanju primjenjuju se na jedan mm.text i dinamički kreiranu uvjetnu varijablu, bez obzira na broj uvjeta koji se testiraju. Maksimalni broj uvjetnih varijabli u konačnici je jednak maksimalnom broju blokiranih niti.

TAU - teorija automatskog upravljanja

TS - tehnički sustav

OU - kontrolni objekt

UU - upravljački uređaj

SU - sustav upravljanja

IO - izvršni organ

IU - izvršni uređaj

D - senzor

OS - povratna informacija

PC - prijenosni omjer

PF - prijenosna funkcija

APFC - amplitudno-fazni frekvencijski odziv

Frekvencijski odziv - amplitudno-frekvencijska karakteristika

LFCH - logaritamska amplitudno-frekvencijska karakteristika

Fazno-frekvencijska karakteristika - fazno-frekvencijska karakteristika

2. Simboli osnovnih varijabli i funkcija

x(t) - ulazni signal CS elementa, izlazni signal OS i CS (kontrolirana vrijednost)

y(t) Je li izlazni signal CS elementa, ulazni signal OS (kontrolno djelovanje)

x s ( t) Je li utjecaj na podešavanje upravljačkog sustava

z(t) Je li ometajući učinak na upravljački sustav

(t) - signal greške (neusklađenost) u upravljačkom sustavu

1(t) - radnja u jednom koraku

(t) - jednostruko impulsno djelovanje

x m ,y m- amplitudske vrijednosti signala x(t) i y(t)

str - Laplaceov operator, operator diferencijacije

 - kružna frekvencija, operator Fourierove transformacije

x(str) - kontinuirana slika signala x(t) prema Laplaceu

x(j) - kontinuirani prikaz signala x(t) prema Fourieru

k - PC veza (ili veze veze)

W(str) - PF veza (ili veza veza)

W(j) - AFC veze (ili veza veza)

A() - AFC veze (ili veza veza)

 () - fazno-frekvencijska karakteristika veze (ili veze veza)

F ( R) - PF zatvorenog sustava upravljanja

h(t) - prijelazna funkcija (karakteristika) veze ili upravljačkog sustava

w(t) - impulsna (težina) funkcija (karakteristika) veze ili CS-a

UVOD

Teorija automatskog upravljanja (TAU)- znanstvena disciplina čiji su predmet informacijski procesi koji se odvijaju u sustavima upravljanja tehničkim i tehnološkim objektima. TAU otkriva opće obrasce funkcioniranja automatskih sustava različite fizičke prirode i na temelju tih obrazaca razvija principe izgradnje visokokvalitetnih sustava upravljanja.

Pri proučavanju upravljačkih procesa u TAU apstrahiraju od fizičkih i projektnih značajki sustava i umjesto stvarnih sustava razmatraju njihove adekvatne matematičke modele. Što točnije (potpunije) matematički model odgovara fizičkim procesima koji se odvijaju u stvarnom sustavu, to će projektirani sustav upravljanja biti savršeniji.

Glavne metode istraživanja na TAU-u su matematičko modeliranje, teorija običnih diferencijalnih jednadžbi, operativni račun i harmonijska analiza. Pogledajmo na brzinu svaki od njih.

Metoda matematičkog modeliranja, kombinirajući široku paletu metoda i tehnika za opisivanje i prezentaciju fizičkih objekata i pojava, može se uvjetno, shematski prikazati korištenjem najčešće korištene tehnike - grafičke slike jednostavnog objekta s jednim ulaznim signalom. x(t) i jedan izlazni signal y(t), u obliku pravokutnika (slika B. 1, a). Simbol A unutar pravokutnika znači neki matematički operator (funkcija, integral itd.) koji povezuje ulazne i izlazne signale koji se mijenjaju u vremenu.

Riža. U 1. Shematski prikaz matematičkih metoda korištenih u TAU-u

Teorija običnih diferencijalnih jednadžbi, usredotočujući se na fizičke aspekte i primjenu dobivenih rješenja, služi kao glavna metodološka osnova TAU-a, a same obične diferencijalne jednadžbe su najopćenitiji i najpotpuniji oblik matematičkog opisa elemenata i upravljačkih sustava. Diferencijalne jednadžbe povezuju vremenski promjenjive ulazne i izlazne varijable i njihove derivate. U najjednostavnijem slučaju, diferencijalna jednadžba ima oblik

dy(t)/dt=f[x(t),y(t)]. (U 1)

Metoda operativnog računa, koji se temelji na Laplaceovoj transformaciji

(U 2)

omogućuje vam algebriziranje diferencijalnih jednadžbi - idite na tzv. operatorske jednadžbe povezujući slike x(str) i Y(str) ulaznih i izlaznih signala kroz prijenosnu funkciju W(str) (slika B. 1, b)

W(str)=Y(str)/x(str). (AT 3)

Metoda harmonijske analize temelji se na Fourierovoj transformaciji poznatoj iz kolegija matematike koja ima oblik

(AT 4)

Pomoću Fourierove transformacije (V. 4), slike se pronalaze x(j) i Y(j) ulazni i izlazni signali x(t) i y(t) karakterizirajući frekvencijske spektre ovih signala. Slike Fourierovih signala su povezane (slika B. 1, v) prijenosna funkcija frekvencije

W(j) = Y (j) / X (j). (AT 5)

Sve četiri metode, ukratko prikazane gore, čine matematički aparat TAU-a. Na temelju toga razvijen je kompleks "vlastitih" metoda TAU-a, predstavljenih u ovom kolegiju.

TAU zajedno s teorijom konstrukcije i funkcioniranja elemenata upravljačkih sustava (senzora, regulatora, aktuatora) čini širu granu znanosti – automatizaciju. Automatizacija je pak jedna od grana tehničke kibernetike. Tehnička kibernetika proučava složene automatizirane upravljačke sustave za tehnološke procese (APCS) i poduzeća (APCS), izgrađene pomoću upravljačkih računala (CFM).

Tehnička kibernetika, uz biološka i socioekonomska, sastavni je dio kibernetike, koju je njezin utemeljitelj, američki matematičar N. Wiener, 1948. definirao kao znanost o upravljanju i komunikaciji u tehničkim sustavima i živim organizmima.

Prvi industrijski regulatori pojavili su se između 1765. i 1804. godine. (I. Polzunov, J. Watt, J. Jacquard).

Prve teorijske studije regulatora pojavile su se u razdoblju 1868-1893. (J. Maxwell, I. Vyshnegradsky, A. Stodola). Ruski znanstvenik i inženjer I.A.Vyshnegradskii proveo je niz znanstvenih studija u kojima su parni stroj i njegov regulator prvi put analizirani matematičkim metodama kao jedinstveni dinamički sustav. Djela A. A. Andronova, V. S. Kulebakina, I. N. Voznesenskog, B. V. Bulgakova, A. A. Feldbauma, B. N. Petrova, N. N. Krasova odigrala su važnu ulogu u formiranju ruske škole TAU. , AA Voronova, Ya. Z. Tsypkina, VS Pugache ...

Razvoj suvremene teorije upravljanja iz takozvane "klasične" teorije regulacije, temeljene na četiri gore navedene temeljne istraživačke metode TAU-a, te formiranje njezinih najnovijih metoda shematski su prikazani na sl. U 2.

Riža. U 2. Razvoj sadržaja i metodologije teorije upravljanja

Trenutno, TAU, zajedno s najnovijim dijelovima opće teorije upravljanja (operativno istraživanje, inženjering sustava, teorija igara, teorija čekanja), igra važnu ulogu u poboljšanju i automatizaciji upravljanja tehnološkim procesima i industrijama.

Vrhunski povezani članci