Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • televizori
  • Primjer vodiča programera informacionog sistema. Tehnička dokumentacija

Primjer vodiča programera informacionog sistema. Tehnička dokumentacija

Uputstvo za upotrebu je sastavljeno na osnovu GOST 19.504-79. Programerski vodič je razvijen u tri slučaja:

– softverski proizvod, po svojoj osnovnoj nameni, je razvojno okruženje ili biblioteka (kao Delphi ili Qt);

– složen ili softverski proizvod služi kao platforma za razvoj programa ili sistema određenog tipa (poput 1C ili Axapta);

– program se distribuira zajedno sa izvornim kodom ili ga sami programeri stalno modificiraju.

Očigledan zadatak menadžmenta programera je da programeru pruži informacije koje će mu biti dovoljne da kreira sopstvene programe ili sisteme zasnovane na razvijenom softverskom proizvodu.

Priručnik za programera treba da objasni:

– S kojim objektima se programer bavi, gdje se nalaze, koliko dugo postoje i kako međusobno djeluju. Koje od njih sam kreira, a koje mu inicijalno pružaju okruženje, okvir, biblioteka.

– Koji drugi razvojni alati (osim razvijenog softverskog proizvoda) su potrebni da bi se kreirala aplikacija ili sistem. Na primjer, ako je razvijeni softverski proizvod biblioteka, programeru će biti potreban kompajler, neka vrsta razvojnog okruženja i drugi alati.

– U kom okruženju aplikacija ili sistem radi. Koji će biti njeni minimalni sistemski zahtjevi? Da li će vam trebati bilo kakav dodatni softver da ga pokrenete: okviri, runtimes, interpretatori.

– Šta čini minimalnu operativnu aplikaciju ili minimalno operativni sistem. Koje objekte treba kreirati i kojim redoslijedom, kako ih međusobno povezati kako bi aplikacija mogla izvršiti neki od svojih minimalnih izlaza.

– Kako (korak po korak) sastaviti radnu aplikaciju ili implementirati radni sistem.

Osim toga, priručnik za programere mora sadržavati potpune opise svih objekata koji se nalaze u softverskom proizvodu. Ako su to funkcije, onda treba dati njihov sinopsis, ako su klase, zatim opise njihovih interfejsa, itd.

Ako softverski proizvod uključuje upotrebu originalnog programskog jezika i opremljen je vlastitim kompajlerom ili interpretatorom, njegov opis mora biti uključen u priručnik za programera.

U tekstu priručnika se moraju poštovati sljedeća pravila:

– Prilikom uvođenja novog koncepta treba se osloniti samo na one pojmove koji su ranije uvedeni ili su čitaocu očito poznati.

– Uvođenje svakog koncepta mora biti na neki način opravdano.

Glavni zahtjev pri opisivanju pojedinačnih objekata je potpunost opisa svakog od njih.


Prilikom opisivanja objekata posebnu pažnju treba obratiti na sljedeće aspekte:

– Šta mora nužno prethoditi stvaranju i upotrebi objekta.

– Koje su nuspojave pristupa objektu.

– Karakteristike interpretacije podataka koji mu se prenose od strane objekta.

– Gdje se “fizički” (u kojoj datoteci, u kojoj biblioteci) objekt nalazi.

– Preporučljivo je dati primjere korištenja za svaki objekt, male fragmente koda koji demonstriraju stvaranje objekta (ako mora biti kreiran prije upotrebe), prosljeđivanje ulaznih podataka objektu, primanje izlaznih podataka i njihovu interpretaciju.

Moguće je izvršiti programerski priručnik u hipertekstu.

Struktura vodiča za programere:

1. Svrha i uslovi korišćenja programa.

2. Karakteristike programa.

3. Pristup programu.

4. Ulazni i izlazni podaci.

5. Poruke.

Vodič za programera može biti upotpunjen raznim dijagramima, na primjer, dijagramima baze podataka, dijagramima klasa, grafovima poziva

Kao primjer, prikazan je sadržaj priručnika sistemskog programera e-port distributera. Protokol klijent-server.

Sistem “e-port dealer” je dizajniran za primanje i vršenje instant plaćanja prilikom plaćanja usluga mobilnih komunikacija, pristupa internetu itd. Centralni server sistema pripada grupi e-port i svako može otvoriti punkt za primanje plaćanja. tako što će ga instalirati na svoj računar (povezan na Internet) klijentski program. Razmjena podataka između centralnog servera i klijentskog programa vrši se pomoću posebnog protokola. Protokol je otvoren, što omogućava raznim organizacijama: bankama, maloprodajnim lancima, mrežama platnih terminala da vrše plaćanja direktno iz vlastitih sistema. Protokol je razvila e-port Group, a tehničku dokumentaciju naručio je Philosoft.

UVOD

e-port diler sistem: klijent-server protokol. Svrha i pregled mogućnosti

Ciljevi protokola

Glavne prednosti korištenja protokola

1 implementacija protokola (gateway)

1.1 Opće informacije

1.2 Struktura aplikacije

2. Kako funkcioniše gateway

2.1 Registracija i izvještavanje

2.1.1 Registracija

2.1.2 Izvještavanje

2.2 Razmjena podataka sa serverom

2.2.1 Struktura paketa

2.2.2 Imenici

2.2.3 Nalog za razmjenu paketa

2.3 Ciklus obrade operacije

2.3.2 Red čekanja

2.3.3 Analiza odgovora servera

2.3.4 Nestandardne situacije

3 Specifikacija protokola

3.1 Strukturni elementi paketa

3.2 Zaglavlje zahtjeva

3.3 Zaglavlje odgovora

3.4 Dopuna računa

3.5 Kupovina PIN koda

3.6 Prekid procesa obrade transakcije

3.7 Transakciona svojstva operacije

3.9 Imenik

3.11 Status rada

3.11.1 Primjeri poruka o statusu transakcije

3.11.2 Statusni kodovi za transakcije na čekanju ili dovršene transakcije

3.11 Sistemska obavještenja

4 GLOSAR

APLIKACIJE

Dodatak 1. XML zahtjev DTD i komentar

Priručnik za programere odnosi se na operativnu i tehničku dokumentaciju. Takav dokument se razvija za softverske proizvode. Namijenjeno za upoznavanje programera koji će rješavati određene probleme vezane za rad ovog programa.

Kada je potrebno vođenje programera?

Programersko vodstvo je potrebno u nekoliko slučajeva:

Program za koji se sastavlja dokumentacija je razvojno okruženje ili biblioteka.
Ovaj softverski proizvod pruža platformu za pisanje standardnih programa ili sistema.
Proizvod se distribuira zajedno sa programskim kodom ili ga programer stalno modificira.

Uz pomoć takvog dokumenta, programeru treba pružiti sve potrebne informacije koje može koristiti za kreiranje vlastitih softverskih proizvoda baziranih na ovom sistemu. Informacije se moraju dostaviti u dovoljnoj količini. Programeri, uz pomoć programskog priručnika, imaju priliku da snime trenutno stanje puštenog proizvoda kako bi se izbjegla zabuna prilikom izdavanja novih proizvoda.

Tipični zadaci takvog dokumenta uključuju:

Pojašnjenje i objašnjenje specijalistu trenutnog stanja objekata, njihove lokacije i načina interakcije. Takođe, menadžment programera mora jasno razlikovati objekte koji su inicijalno uključeni u sistem i objekte koje programer kreira samostalno.
Spisak dodatnih razvojnih alata koji će biti potrebni za rad, pored trenutnog proizvoda.
Pojašnjenje sistemskih zahtjeva, softverskog okruženja i alata potrebnih za pokretanje.

Ispod je primjer (uzorak) dokumenta " Korisnički vodič“, razvijen na osnovu smjernica RD 50-34.698-90.

Ovaj dokument formira informatičar, ili funkcionalni stručnjak, ili tehnički pisac tokom izrade radne dokumentacije za sistem i njegove dijelove u fazi „Radna dokumentacija“.

Za kreiranje korisničkog priručnika, alat je uzet kao primjer Oracle Discoverer informaciono-analitički sistem "Corporate Data Warehouse".

Ispod je sastav korisničkog priručnika u skladu sa GOST-om. Ukratko unutar svakog odjeljka Dati su zahtjevi za sadržaj i tekst primjera popunjavanja.(naglašeno okomitom linijom).

Odjeljci korisničkog priručnika:

1. Uvod

U odjeljku "Uvod" navedite:

  1. područje primjene;
  2. kratak opis mogućnosti;
  3. nivo obuke korisnika;
  4. spisak operativne dokumentacije koju korisnik treba da pročita.

1.1. Područje primjene

Zahtjevi ovog dokumenta primjenjuju se kada:

  • preliminarni sveobuhvatni testovi;
  • probni rad;
  • testovi prihvatanja;
  • industrijska operacija.

1.2. Kratak opis karakteristika

Informaciono-analitički sistem Corporate Data Warehouse (IAS KHD) je dizajniran da optimizuje tehnologiju za donošenje taktičkih i strateških upravljačkih odluka od strane krajnjih poslovnih korisnika na osnovu informacija o svim aspektima finansijskih i ekonomskih aktivnosti Kompanije.

IAS QCD pruža mogućnost rada sa regulisanim i neregulisanim izveštavanjem.

Prilikom rada sa izvještavanjem koristi se korisnički alat Oracle Discoverer Plus koji pruža sljedeće mogućnosti:

  • generiranje tabelarnih i tabelarnih izvještaja;
  • konstruisanje raznih dijagrama;
  • izvoz i uvoz rezultata analiza;
  • štampanje rezultata analize;
  • diseminacija rezultata analize.

1.3. Korisnički nivo

Korisnik IAS QCD mora imati iskustvo u radu sa MS Windows OS (95/98/NT/2000/XP), vještine u radu sa Internet Explorerom, softverom Oracle Discoverer, kao i sljedeća znanja:

  • poznaju relevantnu predmetnu oblast;
  • poznaju osnove multivarijantne analize;
  • razumiju višedimenzionalni model relevantne predmetne oblasti;
  • poznaju i poseduju veštine u radu sa analitičkim aplikacijama.

Kvalifikacije korisnika moraju omogućiti:

  • generiranje izvještaja u Oracle Discoverer Plus;
  • izvrši analizu podataka.

1.4. Spisak operativne dokumentacije koju korisnik treba da pročita

  • Informaciono-analitički sistem “Korporativno skladište podataka”. PASSPORT;
  • Informaciono-analitički sistem “Korporativno skladište podataka”. OPŠTI OPIS SISTEMA.

2. Svrha i uslovi korišćenja Oracle Discoverer Plus

U odeljku "Svrha i uslovi upotrebe" navedite:

  1. vrste aktivnosti, funkcije za čiju je automatizaciju namijenjen ovaj alat za automatizaciju;
  2. uslove, po čijem ispunjavanju (ispunjavanju, nastanku) je obezbeđeno korišćenje opreme za automatizaciju u skladu sa njenom namenom (na primer, vrsta računara i konfiguracija tehničkih sredstava, operativno okruženje i opšti sistemski softver, ulazne informacije, skladištenje mediji, baza podataka, uslovi za obuku specijalista itd. P.).

Oracle Discoverer Plus kao deo IAS QCD dizajniran je da automatizuje pripremu i prilagođavanje obrazaca za izveštavanje za indikatore učinka, kao i za dubinsko istraživanje podataka zasnovano na informacijama iz korporativnog skladišta podataka.

Rad sa Oracle Discoverer Plus kao dijelom IAS QCD moguć je kad god postoji potreba za dobijanjem informacija za analizu, kontrolu, praćenje i donošenje odluka na osnovu njih.

Rad sa Oracle Discoverer Plus kao dijelom IAS QCD dostupan je svim korisnicima sa uspostavljenim pravima pristupa.

3. Priprema za rad

U odjeljku "Priprema za rad" navedite:

  1. sastav i sadržaj medija za distribuciju;
  2. redoslijed učitavanja podataka i programa;
  3. postupak za provjeru funkcionalnosti.

3.1. Sastav i sadržaj medija za distribuciju

Za rad sa IAS QCD neophodan je sledeći softver:

  1. Internet Explorer (uključen uz Windows operativni sistem);
  2. Oracle JInitiator se automatski instalira kada korisnik prvi put pristupi QCD IAS.

3.2. Redoslijed učitavanja podataka i programa

Prije nego počnete raditi sa IAS QCD na radnom mjestu korisnika, morate izvršiti sljedeće korake:

  1. Morate otići na web stranicu IAS QCD ias-dwh.ru.
  2. Tokom pokretanja, pojavit će se prozor "Sigurnosno upozorenje" koji će sadržavati sljedeće: "Da li želite da instalirate i pokrenete "Oracle JInitiator"..." Kliknite na dugme "Da".
  3. Tada će početi instalacija Oracle JInitiator-a na vašem računaru. Odaberite dugme Dalje, a zatim OK.

3.3. Procedura za provjeru funkcionalnosti

Da biste provjerili dostupnost IAS QCD-a sa radnog mjesta korisnika, morate izvršiti sljedeće korake:

  1. Otvorite Internet Explorer; da biste to uradili, kliknite na prečicu „Internet Explorer“ na radnoj površini ili je pozovite iz menija „Start“.
  2. Unesite adresu: ias-dwh.ru u adresnu traku Internet Explorera i kliknite na "Idi".
  3. U obrazac za autentifikaciju unesite svoje korisničko ime i lozinku. Kliknite na dugme „Dalje“.
  4. Uvjerite se da je aplikacija Oracle Discoverer Plus otvorena u prozoru.

Ako se aplikacija Oracle Discoverer Plus ne pokrene, trebate kontaktirati podršku.

4. Opis operacija

U odjeljku "Opis operacija" navedite:

  1. opis svih izvršenih funkcija, zadataka, skupova zadataka, procedura;
  2. opis operacija tehnološkog procesa obrade podataka neophodnih za obavljanje funkcija, skupovi zadataka (zadataka), procedure.

Za svaku operaciju obrade podataka navedite:

  1. Ime;
  2. uslove pod kojima se operacija može izvesti;
  3. pripremne radnje;
  4. glavne radnje u potrebnom redoslijedu;
  5. završne radnje;
  6. sredstva utrošena na operaciju.

4.1. Izvršene funkcije i zadaci

Oracle Discoverer Plus kao dio IAS QCD obavlja funkcije i zadatke prikazane u donjoj tabeli:

4.2. Opis tehnološkog procesa operacije obrade podataka neophodne za obavljanje zadataka

Ispod je opis korisničkih operacija za obavljanje svakog zadatka.

Zadatak: “Vizuelizacija izvještavanja”

Operacija 1: Registracija na IAS QCD portalu

  1. Korisnički računar je povezan na korporativnu mrežu.
  2. IAS QCD portal je dostupan.
  3. IAS QCD radi u normalnom režimu.

Pripremni koraci:

Na računaru korisnika potrebno je izvršiti dodatna podešavanja data u stavu 3.2 ovog dokumenta.

  1. Dvaput kliknite levim tasterom miša na ikonu “IAS QCD” na radnoj površini.
  2. U prozoru koji se otvori unesite korisničko ime u polje „Prijava“, a u polje „Lozinka“ unesite korisničku lozinku. Kliknite na dugme „Dalje“.

Završni koraci:

Nije potrebno.

15-30 sekundi.

Korak 2: Odaberite izvještaj

Uslovi pod kojima se operacija može izvesti:

Uspješna registracija na IAS QCD portalu.

Pripremni koraci:

Nije potrebno.

Osnovne radnje u potrebnom redoslijedu:

1. U prozoru „Čarobnjak za kreiranje radne sveske“ koji se pojavi, stavite tačku pored stavke „Otvori postojeću radnu svesku“.


2. Odaberite željenu radnu svesku i kliknite na dugme “Otvori”:


Završni koraci:

Nakon završetka rada sa izvještajem, morate odabrati stavku menija “Datoteka”, a zatim odabrati stavku “Zatvori”.

Sredstva utrošena na operaciju:

15 sekundi.

Zadatak: “Generacija tabelarnih i grafičkih izvještajnih obrazaca”

Popunite po analogiji.

5. Vanredne situacije

U rubrici "Vanredne situacije" naznačiti: 1. radnje u slučaju neusklađenosti sa uslovima tehnološkog procesa, uključujući dugotrajne kvarove tehničke opreme; 2. radnje za vraćanje programa i/ili podataka u slučaju kvara magnetnog medija ili otkrivanja grešaka u podacima; 3. postupanje u slučajevima otkrivanja neovlašćenog ometanja podataka; 4. postupanje u drugim vanrednim situacijama.

Ako se tokom rada IAS QCD pojave greške koje nisu opisane u nastavku u ovom odjeljku, morate kontaktirati zaposlenika jedinice tehničke podrške DIT-a (HelpDesk) ili odgovornog administratora IAS QCD-a.

Klasa greške Greška Opis greške Potrebne radnje korisnika kada dođe do greške
IAS QCD portal Server nije pronađen. Stranica se ne može prikazati Može doći do problema s mrežom ili pristupom IAS QCD portalu. Da biste riješili probleme s mrežom, kontaktirajte djelatnika tehničke podrške (HelpDesk). U drugim slučajevima, kontaktirajte administratora IAS KHD.
Greška: potrebno je važeće korisničko ime Prilikom registracije na IAS QCD portal nije uneseno korisničko ime. Unesite svoje korisničko ime.
Greška: potrebna je lozinka za registraciju Prilikom registracije na IAS QCD portal nije unesena lozinka. Unesite svoju lozinku.
Greška: Autentifikacija nije uspjela. Pokušaj ponovo Uneseno korisničko ime ili lozinka je netočna, ili račun nije registriran. Morate ponovo unijeti svoje korisničko ime i lozinku, ali nakon trećeg neuspješnog pokušaja registracije, vaš račun je zaključan. Ako je vaš nalog blokiran, potrebno je da kontaktirate IAS KHD administratora.
Nestanak struje radne stanice Nema napajanja na radnoj stanici ili je došlo do nestanka struje. Radna stanica se isključila ili ponovo pokrenula.

- pritisnite dugme “Start”.
- odaberite “Run”


Pokušajte se ponovo povezati (prijaviti se) na IAS QCD
LAN greška Ne postoji mrežna interakcija između radne stanice i IAS QCD aplikacijskog servera Ne postoji mogućnost početka (nastavka) rada sa QCD IAS. Ne postoji mrežna veza sa IAS KHD serverom Ponovo pokrenite radnu stanicu.
Provjerite dostupnost IAS KHD servera na portu 80 pokretanjem sljedećih naredbi:
- pritisnite dugme “Start”.
- odaberite “Run”
- u liniju za unos upišite naredbu telnet ias_dwh.ru 80
- ako se otvori Telnet prozor, onda je veza moguća.
Nakon što se lokalna mreža vrati, pokušajte ponovo da se povežete (prijavite se) na IAS QCD.

Kovtun M.V. januar 2012.

Softver i hardver
blokiranje i zaštita nivoa vode

Programerski vodič
Struktura programa kontrolera

ANOTATION

Ovaj dokument opisuje svrhu, uslove upotrebe i karakteristike aplikativnog softvera (ASW) programabilnog logičkog kontrolera (PLC). Aplikacioni softver industrijskog računara (PC) opisan je u Uputstvu za upotrebu. U ovom dokumentu se po potrebi nalaze veze do PC softvera.

SADRŽAJ
1. SVRHA I USLOVI KORIŠĆENJA PROGRAMA
1.1.Svrha softverskog PLC-a
1.2.Uvjeti za korištenje PPO PLC-a
2. KARAKTERISTIKE PROGRAMA
2.1. PPO PLC struktura

2.3. Prilagođeni funkcionalni blokovi koji se koriste u softveru Unity
3. PRISTUP PROGRAMU
4. ULAZNI I IZLAZNI PODACI
5. PORUKE

1. SVRHA I USLOVI KORIŠĆENJA PROGRAMA
PTS blokade i zaštite nivoa vode u parogeneratorima blokova 1, 2 elektrane je projektovan za zaštitu cevnog sistema parogeneratora pri smanjenju nivoa vode, kao i za zaštitu sistema od dotoka hrane vode u protočni dio turbine kada se nivo u generatoru pare poveća.
Zaštita tehnološkog procesa je obezbeđena kompleksom tehnološke opreme:
Priključci na glavnom dovodu napojne vode (VP-9);
Priključci na glavnom dovodu napojne vode (VP-10);
Priključci na liniji za pročišćavanje (U5-01);
Priključci na liniji za pročišćavanje (U5-02);
Priključci na bajpas liniji napojne vode (VP11);
Komande za uključivanje elektro pumpe za hitne slučajeve (APEN-1);
Komande za uključivanje elektro pumpe za hitne slučajeve (APEN-2);
Komanda gašenja turbogeneratora (TG3);
Komanda gašenja turbogeneratora (TG4);
Izdavanje procesnih alarma pri smanjenju nivoa u 4 od 6 parogeneratora
Izdavanje procesnog alarma za aktiviranje zaštite na +300mm
Naredba za isključivanje regulatora snage na liniji za pročišćavanje +75mm
Naredba za isključivanje regulatora snage na liniji za pročišćavanje od 500 tona
Izdavanje procesnih alarma na +125mm
Izdavanje procesnih alarma na +75mm
Izdavanje procesnih alarma ±50mm
Izdavanje procesnih alarma na -120mm
Izdavanje procesnih alarma na 500t/sat

Funkcionisanje sistema je obezbeđeno aplikativnim softverom (ASW).
Softver uključuje industrijski računalni aplikativni softver (PC softver) i softver za programiranje kontrolera (PLC softver).

1.1. Svrha PPO PLC
PPO PLC kao dio PTS-a implementira sljedeće funkcije:
– redundantnost kontrolora;
– prijem i obrada I/O signala iz tri identične I/O korpe;
– Prima i filtrira ulazne diskretne signale od mogućih „odbijajućih“ kontakata.
– Prima i obrađuje ulazne analogne signale:
omogućava kontrolu da li signal prelazi dozvoljene granice (nepouzdanost signala);
skalira analogni signal;
vrši histerezu graničnih vrijednosti;
analizira stanja tri signala iz korpi i bira pouzdane vrijednosti;
filtrira signal na osnovu brzine povećanja ili smanjenja vrijednosti signala.
– Izdavanje diskretnih signala opremi (pokretanje zaštite);
– Praćenje odstupanja parametara od zadataka i postizanje zadatih vrednosti;
– Izdavanje izvršnih radnji na procesne alarmne lampe u kontrolnoj sobi;
– Implementacija algoritama zaštite i blokiranja;
– Razmjena podataka sa susjednim sistemima preko Modbus/TCP/IP kanala;
– Provjera grešaka u modulima kontrolera i generiranje poruka za radnu stanicu o stanju opreme kontrolera, kao i za centralu kontrolne sobe;
– Praćenje vanrednih situacija opreme sistema;
– PPO PLC pruža mogućnost primanja ključeva sa industrijskog računara, kao i sa kontrolne sobe, koji onemogućavaju određene zaštite i sistemske blokade.

1.2. Uvjeti za korištenje PPO PLC-a
Opšta arhitektura sistema prikazana je na slici 1.

Slika 1. Opća arhitektura softvera

PTS kompleks uključuje sljedeće hardverske i kupljene softverske komponente:
1) Dva QUANTUM programabilna logička kontrolera (PLC) bazirana na P266 CPU procesoru, koji rade u režimu vrućeg mirovanja. Runtime okruženje Unity Pro 4.1 XL.
2) Industrijski računar koji se sastoji od:
– personalni računar (ugrađeni industrijski računar);
– operativni sistem Windows XP Pro SP3;
– CITECT 7 paket za vizualizaciju
PLC-ovi komuniciraju sa eksternim podsistemima preko Ethernet mreže (sa strane PLC-a) i preko I/O kanala.
Interakcija između PLC-a i industrijskog računara se odvija preko Ethernet mreže.
PTS uključuje komponente aplikativnog softvera razvijene u skladu sa ovim projektom:
Unity Pro aplikacija instalirana na PLC-u.
Citect aplikacija instalirana na računaru.

2. KARAKTERISTIKE PROGRAMA
2.1. PPO PLC struktura
PLC aplikativni softver je implementiran kao aplikacija (vidi sliku 1) napisana u okruženju Unity v.4.1. Naziv aplikacije je upg.stu.
Upg.stu aplikacija omogućava implementaciju sistemske funkcionalnosti implementirane na PLC-u za sve načine rada.
Aplikacija sadrži:
konfiguracija hardvera i softvera;
skup funkcionalnih modula, od kojih je svaki implementiran u sekcije napisane na jeziku LD (ljestvičasti dijagram);
skup funkcionalnih blokova razvijenih u okviru projekta;
baza podataka;
animacijske tabele.
Aplikacija uključuje sljedeće funkcionalne module, od kojih svaki sadrži jedan ili više softverskih modula prikazanih u tabeli 1.
Tabela 1

Init Sekcija se izvršava tokom prvog ciklusa nakon pokretanja i osigurava da su svim parametrima dodijeljene početne vrijednosti.
AI_to_AM Sekcija za obradu ulaznih analognih signala. Poziva se odgovarajući signalni blok da dodijeli vrijednost internoj varijabli i provjeri valjanost kanala.
DI_to_DM Sekcija za obradu ulaznih diskretnih varijabli. Odgovarajući funkcijski blok signala se poziva da dodijeli vrijednost internoj varijabli i provjeri valjanost kanala.
Odeljak za poređenje za poređenje primljenih vrednosti iz tri različite distribuirane I/O korpe. Signali se upoređuju koristeći 2 od 3 logike. Ako su dva signala identična, a treći različit, onda se potonji smatra nevažećim.
Naziv odjeljka Funkcionalnost
Alarmi Odjeljak za obradu diskretnih i analognih signala kako bi se utvrdilo da li su dostignute granične vrijednosti. Izrada alarma i komandi za izvršenje blokade i zaštite.
INTERLOCK Sekcija za generisanje algoritma blokiranja i zaštite. U ovom odjeljku, zapisi su napravljeni za varijable povezane sa aktuatorima.
SIM Sekcija za upravljanje simulacijskim i testnim modovima kontrolera.
DIJAGNOSTIKA Odjeljak za generiranje dijagnostičkih informacija kontrolera.

Unutar sekcija se koriste sljedeće potprograme:
tabela 2
Naziv odjeljka Funkcionalnost
CompAI Funkcionalni blok dizajniran za upoređivanje tri različite analogne vrijednosti, izlaz rezultujuće vrijednosti, kao i dijagnostičke informacije za svaki kanal.
CompDI Funkcionalni blok dizajniran za upoređivanje tri diskretna signala koji dolaze iz tri različite korpe, izlaz rezultujuće vrijednosti, kao i dijagnostičke informacije za svaki kanal.
BlockF Funkcionalni blok dizajniran za snimanje neprihvatljivo brzog pada ili povećanja analogne vrijednosti. U slučaju prekida ili kratkog spoja, ovaj FB će ukloniti ovaj signal iz obrade, što neće omogućiti zaustavljanje tehnološkog procesa.
GetDI Funkcionalni blok dizajniran za primanje i obradu diskretnih signala. Filtrira odbijanje kontakta.

Naziv odjeljka Funkcionalnost
HLLA4 Funkcionalni blok dizajniran da generiše četiri kršenja praga iz jednog analognog signala (HH, H, L, LL). FB uzima u obzir parametre histereze i mrtve zone za evidentiranje prekršaja.
GetAI Funkcionalni blok dizajniran za primanje i obradu analognih signala. Izvodi skaliranje vrijednosti i također izvodi funkcije djelomične glatke.
SIMPMEHA Funkcijski blok dizajniran za generiranje sinusnih smetnji. Ovaj šum se „miješa“ u simulirani signal kako bi se dodao realizam pri radu s načinima kao što je „test“.
SIMPULSE Funkcionalni blok dizajniran za izdavanje impulsa određenog trajanja u sistemu.
SIMPV Funkcijski blok dizajniran da simulira analognu vrijednost pri radu s načinima kao što je "sonda".
2.2. Strukture podataka softverskog PLC-a
Ukupno, svaki energetski blok sadrži šest generatora pare i softverski elementi softvera su identično napravljeni za svaki od njih.
Softverski projekat kontrolera koristi sljedeće tipove podataka:
Statusna riječ analognog kanala – tip riječi;
Riječ statusa diskretnog kanala – tip riječi;
Riječ koja definira vrijednost analognog kanala je pravi tip (riječi od dvije riječi);
Statusna riječ QUANTUM kontrolera je tipa riječi (dvije riječi su rezervirane ukupno);
Riječ statusa kršenja – vrsta riječi;
Riječ statusa zaključavanja – vrsta riječi;
Deblokiranje ključne statusne riječi – vrsta riječi;

Industrijski računar dozvoljava kontrolne radnje samo na otključavanju ključeva promenom stanja bitova kroz kontrolnu reč. PLC saopštava svoj status preko statusne riječi. Opis pojedinačnih polja (bitova) reči podataka dat je u Vodiču za programere.

Varijable u PLC-u su kodirane na sljedeći način:
AI – analogni ulaz za PLC;
AIM – interni analogni ulaz PLC/PC;
DI – diskretni ulaz u PLC;
DM – interni diskretni ulaz PLC/PC;

2.3. Prilagođeni funkcionalni blokovi koji se koriste u softveru Unity
2.3.1 Funkcijski blok CompAI analognog poređenja kanala

.

Slika 2. Funkcijski blok za poređenje analognog kanala CompAI

Ovaj FB se koristi za poređenje tri različite analogne vrijednosti. Ako jedan od analognih parametara padne izvan prosječne vrijednosti druga dva, tada se njegova vrijednost ne uzima u obzir i poruka o grešci se upisuje u svojstvo ovog kanala. Ako su sva tri kanala zdrava (u okviru prihvatljive tolerancije neusklađenosti), onda će rezultirajuća vrijednost biti veća od postojećih vrijednosti.

2.3.2 Funkcijski blok za usporedbu analognih kanala CompDI


Slika 3. Funkcijski blok za usporedbu diskretnih kanala CompDI

Ovaj FB se koristi za poređenje tri para diskretnih signala. Ako su dvije vrijednosti u paru signala iste, to će ukazivati ​​na prekid ili kratki spoj. U ovom slučaju, ovaj par se ne uzima u obzir i uklanja se iz prometa. Sistem prikazuje poruku o prirodi kršenja koja ga je izazvala. Ako se ukupna vrijednost u tri različita para razlikuje, tada blok algoritam uklanja iz prometa one koji ne odgovaraju prethodna dva.
2.3.3 Funkcijski blok za izračunavanje brzine opadanja analogne vrijednosti BlockF

Slika 4. Funkcijski blok za izračunavanje brzine opadanja analogne vrijednosti BlockF

Ovaj FB se koristi za izračunavanje brzine porasta i pada vrijednosti na analognim kanalima. Ako dođe do prekida žice na analognom senzoru ili oštrog pada fizičke vrijednosti, očitani parametar sa ovog senzora počet će naglo opadati. Ovaj FB je dizajniran za snimanje događaja o kratkom spoju ili prekidu i za snimanje znaka greške u statusnoj riječi kanala. To jest, ako dođe do prekida ili kratkog spoja, ovaj kanal će biti povučen iz cirkulacije.

2.3.4 Funkcijski blok GetAI analognog skaliranja kanala


Slika 5. Funkcijski blok za skaliranje analognog kanala GetAI

Ovaj FB se koristi za pretvaranje programskih jedinica kontrolera (INT) u vrijednosti stvarnih procesnih jedinica (REAL). Ako parametar prelazi granice dozvoljene greške (OFFSET), greška se ne generira na kanalu i parametar se zaustavlja na maksimalnoj ili minimalnoj vrijednosti. Ako se parametar ističe jačim od normalizirane greške, na kanalu se generiše greška s dekodiranjem prirode kršenja.

2.3.5 Funkcijski blok za obradu diskretnog kanala GetDI

Slika 6. Funkcijski blok za obradu diskretnog kanala GetDI

Ovaj FB se koristi za filtriranje "odbijanja" na diskretnom kanalu. U slučaju gubitka veze sa kanalom, navedena vrijednost se upisuje na ulaz ovog FB-a, zbog čega će vrijednost specificirana po defaultu biti upisana na rezultirajući izlaz na izlazu funkcionalnog bloka.

2.3.6 Funkcionalni blok za generiranje prekoračenja praga HLLA4


Slika 7. Funkcionalni blok za generisanje kršenja praga HLLA4

Ovaj FB se koristi za implementaciju četiri prekršaja praga, koji se mogu koristiti i za izdavanje sistemskih povreda i za njihovu implementaciju u algoritme za implementaciju blokiranja i zaštite. Kako bi se osiguralo da kršenje ne nestane odmah pri vraćanju u područje zadane vrijednosti, predviđena je funkcija histereze koja utječe na prirodu izdavanja signala kršenja.

2.3.7 Funkcionalni blok za generiranje sinusoidnih smetnji SIMPMEHA


Slika 8. Funkcionalni blok za generiranje sinusoidnih smetnji SIMPMEHA

Ovaj FB se koristi za implementaciju režima kontrolera povezanih sa otklanjanjem grešaka i simulacijom rada instalacije. Ovaj signal na dijagramu izgleda kao sinusoidna kriva, sa rasponom širenja određenim granicama (ulazne varijable). Ova interferencija je dizajnirana da se „doda“ veličini analognog signala i da mu daju dinamička svojstva i vizuelni realizam.

2.3.8 Funkcionalni blok za generiranje impulsa zadane dužine SIMPULSE


Slika 9. Funkcionalni blok za generisanje impulsa zadate dužine SIMPULSE

Ovaj FB se koristi za implementaciju režima kontrolera povezanih sa otklanjanjem grešaka i simulacijom rada instalacije. Ovaj signal na grafikonu izgleda kao meandar, sa različitim rasponima vrhova i padova. Privremene vrijednosti vrhova meandra određene su vremenskim ograničenjima (ulaznim varijablama).

2.3.9 Funkcijski blok za generiranje analogne varijable SIMPV

Slika 10. Funkcijski blok za generiranje analogne varijable SIMPV

Ovaj FB se koristi za generiranje analognih signala za modove simulacije rada uređaja i otklanjanja grešaka u kontroleru.
3. PRISTUP PROGRAMU
Prilikom rada na licu mjesta, program je konfiguriran da se pokreće automatski kada se uključi kontroler. Status programa se prikazuje na displeju kontrolera. Parametri programa se mogu konfigurisati sa laptop računara koji je uključen u isporuku sistema.

4. ULAZNI I IZLAZNI PODACI
Ulazni podaci sistema su informacije primljene od upravljačkog objekta do PTS-a preko komunikacionih uređaja sa objektom (distribuisana periferija), kao i komande koje operater unosi sa računara.
Izlazni podaci sistema su informacija koja se prenosi do upravljačkog objekta od PTS-a preko komunikacionog uređaja sa objektom. Informacije se prikazuju na računaru u obliku ekranskih obrazaca i šalju se kao alarm na centralu kontrolne sobe.

5. PORUKE
Poruke koje se prenose preko PLC-PC sučelja opisane su u dokumentu „Vodič za programere. Dio 2. PLC-PC sučelje." Poruke koje se izdaju operateru opisane su u dokumentu „Priručnik za operatera“.

#Manual, #programer, #description, #PLC, #PTS, #interface, #analog, #controller

Programerski priručnik se odnosi na operativnu i tehničku dokumentaciju i potreban je u slučajevima kada sistem na ovaj ili onaj način pruža mogućnost pisanja, uređivanja ili korištenja programskog koda.

Primjeri uključuju:

– biblioteka funkcija;

– platforma ili okruženje za razvoj softvera;

– Softver otvorenog koda.

Dokument mora sadržavati sve potrebne informacije kako bi programer mogao iskoristiti mogućnosti sistema. Da bi se riješio ovaj problem, sadržaj dokumenta može uključivati:

– svrha, struktura ulaznih i izlaznih podataka softverskih funkcija;

– mogućnosti kreiranja programskog koda, karakteristike njegove interpretacije i kompilacije;

– sintaktičke karakteristike korišćenog programskog jezika;

– moguća pravila i ograničenja u radu sa programskim kodom;

– razna uputstva za rad sa programom.

Lista mogućih tema nije ograničena na ovo, sve zavisi od karakteristika određenog sistema. Mora se reći da priručnik za programere može biti veoma koristan za programere sistema, služeći kao referenca za trenutnu implementaciju operativne logike softvera.

Sastav standardnog programskog priručnika

U skladu sa zahtjevima GOST-a, priručnik programera mora sadržavati sljedeće odjeljke:

Svrha i uslovi korišćenja programa , gdje su naznačeni obim softvera i tehnički zahtjevi potrebni za njegov rad.

Karakteristike programa , gdje opisuju način rada programa, njegove indikatore brzine i druge karakteristike važne za korištenje.

Pristup programu , gdje ukazuju na metode i parametre za pokretanje programa;

Ulazni i izlazni podaci , gdje opisuju format, način organizacije i druge zahtjeve za ulazne i izlazne podatke;

Poruke , koji pruža tekstove poruka koje program izdaje u različitim situacijama i radnje koje je potrebno poduzeti.

Preporučljivo je navesti različite primjere, ilustracije i tabele u prilozima uz dokument.

Standardi vodiča za programere

GOST-ovi također reguliraju ovaj dokument, u ovom slučaju to je GOST 19.504. (Prilog 1) U skladu sa njim utvrđuje se struktura i sadržaj Vodiča za programere.

Koristio sam Microsoft Visual Studio za razvoj aplikacije. Da biste započeli razvoj, kliknite na Datoteka --- Novo --- Kreiraj projekat --- WPF aplikacija. Otvara se prazan obrazac. Na formular sam postavio pozadinu (prethodno sam učitao sliku za pozadinu u resurse budućeg programa), komponente Label (svojstvo sadržaja dobrodošlice), TextBox (ovdje će biti upisano ime osobe koja se testira), Button dugmad za pozivanje pomoći i pokretanje testa. Grupiram sve komponente obrasca u Canvas. Klikom na dugme „Pomoć“ poziva se formular za pomoć na kojem se nalazi TextBox sa pomoći pri korišćenju programa i dugme za povratak na početni obrazac.

Hello.Visibility = Visibility.Hidden;//Sakrij elemente početne forme

Spravka.Visibility = Visibility.Visible;//Prikaži prozor pomoći

Hello.Visibility = Visibility.Visible;//prikaži prozor početnog obrasca

Spravka.Visibility = Visibility.Hidden;//sakrij elemente obrasca pomoći

Kada kliknete na dugme „Pokreni test“, pod uslovom da je polje za unos imena popunjeno, otvara se prozor za testiranje u kojem se nalazi TextBox, gde su prikazana pitanja, ListBox, gde su prikazane opcije odgovora i „ Sledeće pitanje” i „Prethodno pitanje”. Ako polje za unos imena nije popunjeno, prikazuje se poruka da obavezna polja nisu popunjena.

subjectName = User.Text;

if (!string.IsNullOrEmpty(subjectName) && !string.IsNullOrEmpty(testFilePath)) // provjerite da li je polje popunjeno

xmlLoad(); //učitaj fajl sa pitanjima

MessageBox.Show("Obavezna polja nisu popunjena");//prikaži poruku o grešci

countSteps = qstns.Count();

Answer.Items.Clear();

Na kraju testiranja otvorit će se formular za rezultate testiranja u kojem se nalazi TextBox sa rezultatom testiranja, te dugmad „Počni ispočetka“ i „Izlaz“.

if (_step == countSteps)

Prev.Content = "Izlaz";

Questions.Text = poruka;

loadStep(_step, beforeStep);

Kompletan programski kod sa komentarima nalazi se u Dodatku 2


ZAKLJUČAK

Tokom stažiranja, proširio sam svoje veštine u okruženju za razvoj programskog jezika C#.

Svi ciljevi treninga su postignuti:

¾ proširenje, produbljivanje i sistematizacija znanja stečenih u procesu teorijske obuke;

¾ konsolidacija praktičnih vještina u razvoju i modifikaciji informacionih sistema;

¾ formiranje profesionalnih kompetencija.

Odradio sve vežbe i to:

¾ Upoznao se sa uslovima rada preduzeća i njegovog radnog mjesta, odnosno sa internim pravilima, sigurnosnim zahtjevima, fiziološkim i higijenskim osnovama procesa rada i sanitarnim zahtjevima;

¾ proučavanje normativno-metodološke građe, osnovne i periodične literature u skladu sa individualnim zadatkom;

¾ korištene informacione i komunikacione tehnologije;

¾ izabrao alat za razvoj softvera;

¾ obavio individualni zadatak (razvio program testiranja);

¾ pripremio izvještaj o praksi.


SPISAK IZVORA

1. Jon Skeet. C# za profesionalce: suptilnosti programiranja, 3. izdanje, novi prevod = C# u dubini, 3. izd.. - M.: Williams, 2014. - 608 str.

2. Christian Nagel i ostali C# 5.0 i .NET 4.5 platforma za profesionalce = Professional C# 5.0 i .NET 4.5. - M.: “Dijalektika”, 2013. – 1440 str.

3. Joseph Albahari, Ben Albahari. C# 6.0. Imenik. Potpuni opis jezika = C# 5.0 ukratko: definitivna referenca. - M.: “Williams”, 2015. – 1008 str.

4. https://habrahabr.ru/

5. http://www.cyberforum.ru/


APLIKACIJE

DODATAK 1

G O S U D A R S T V E N N Y S T A N D A R T S O Y W A S S R

Jedinstveni sistem programske dokumentacije GOST 19.504-79* (ST SEV 2095-80)
VODIČ ZA PROGRAMIRANJE. ZAHTJEVI ZA SADRŽAJ I DIZAJN
Jedinstveni sistem programske dokumentacije. Vodič za programere.Zahtjevi za sadržaj i oblik prezentacije

Rezolucijom Državnog komiteta za standarde Vijeća ministara SSSR-a od 12. januara 1979. br. 74, utvrđen je datum uvođenja

Od 01.01. 1980

Ovaj standard utvrđuje zahtjeve za sadržaj i dizajn programskog dokumenta "Vodič za programere", definiranog GOST 19.101-77.

Standard je u potpunosti usklađen sa ST SEV 2095-80.

OPĆE ODREDBE

1.1. Struktura i format dokumenta utvrđeni su u skladu sa GOST 19.105-78.

Izrada informativnog dijela (napomene i sadržaj) je obavezna.

1.2. Priručnik za programera treba da sadrži sljedeće odeljke:

· svrha i uslovi primjene programa;

· karakteristike programa;

· pristup programu;

· ulazni i izlazni podaci;

· poruke.

U zavisnosti od specifičnosti dokumenata, moguće je kombinovati pojedinačne sekcije ili uvesti nove.

2.1. U odeljku „Svrha i uslovi korišćenja programa“ mora biti naznačena svrha i funkcije koje program obavlja, uslovi neophodni za izvršavanje programa (količina RAM-a, zahtevi za sastav i parametri

perifernih uređaja, softverskih zahtjeva itd.).

2.2. Odjeljak „Karakteristike programa“ treba da sadrži opis glavnih karakteristika i karakteristika programa (vremenske karakteristike, način rada, način praćenja ispravnog izvršavanja i samooporavka programa, itd.).

2.3. Odjeljak „Pristup programu“ treba da sadrži opis procedura za pozivanje programa (metode prenosa parametara kontrole i podataka itd.).

2.4. Odjeljak “Ulazni i izlazni podaci” treba da opiše organizaciju korištenih ulaznih i izlaznih informacija i, ako je potrebno, njihovo kodiranje.

2.5. Odjeljak „Poruke“ treba da navede tekstove poruka koje se izdaju programeru ili operateru tokom izvršavanja programa, opis njihovog sadržaja i radnje koje se moraju poduzeti kao odgovor na te poruke.

2.6. Dodatak priručniku za programera može sadržavati dodatne materijale (primjere, ilustracije, tabele, grafikone, itd.).

* Ponovno izdanje (novembar 1987.) sa promjenom br. 1, odobreno u septembru 1981. (IUS 11-81)


DODATAK 2

koristeći System.Collections.Generic;

koristeći System.IO;

koristeći System.Linq;

koristeći System.Text;

koristeći System.Threading.Tasks;

koristeći System.Windows;

koristeći System.Windows.Controls;

koristeći System.Windows.Data;

koristeći System.Windows.Documents;

koristeći System.Windows.Input;

koristeći System.Windows.Media;

koristeći System.Windows.Media.Imaging;

koristeći System.Windows.Navigation;

koristeći System.Windows.Shapes;

koristeći System.Xml;

koristeći System.Xml.Linq;

imenski prostor Self-tester

///

/// Logika interakcije za MainWindow.xaml

///

javna parcijalna klasa MainWindow: Window

string subjectName = "";//Ime varijable osobe koja se testira

private int _step;// Varijabla koraka lokalnog testiranja

int countSteps;// Broj pitanja u testu (dobiva se dinamički iz odabrane datoteke za testiranje)

XDocument mainXml = novi XDocument(); // Inicijaliziranje objekta XML dokumenta za čitanje test datoteke

Lista lista pitanja = nova lista (); // Lista pitanja, popunjena iz datoteke za testiranje

Lista odgovori = nova lista (); // Lista odgovora

Lista rezultat = nova lista (); // Broj postignutih poena

//string testFilePath = "";

int step // Globalna varijabla koraka

return _step;// Dobiti vrijednost lokalne varijable step

var beforeStep = _step; // Postavite prethodni korak

Korak = vrijednost; // Postavite trenutni korak

if (_step == countSteps + 1) // Provjera da li je trenutni korak jednak ukupnom broju koraka, radnja na gumbu za ponovno pokretanje

score.Clear();// Obrišite akumulirane bodove

Answer.Visibility = Visibility.Visible; // Prikaži ListBox u kojem prikazujemo odgovore na trenutno pitanje

Korak = 0;//Idite ponovo na nulti korak

if (_step == 0) // Provjeravamo da li je naš korak nula

Prev.Content = "Izlaz";// Dodijelite gumbu "Prethodno pitanje" vrijednost "Izlaz"

inače ako (_step< 0)// Проверяем шаг меньше ли нуля

Close();//Zatvaranje programa

Prev.Content = "Nazad"; // Dodeljivanje vrednosti dugmetu "Prethodno pitanje" Nazad "Prethodno pitanje"

if (_step > 0) // Ako je korak veći od nule

var _answers = answers[_step - 1].Elements().ToList();// Upišite sve opcije odgovora na trenutno pitanje u varijablu

var selectedIndex = Answer.SelectedIndex; // Pogledajmo koja je opcija odgovora odabrana u zadnjem koraku

var indeks = beforeStep;

var val = (selectedIndex != -1) ? (_answers.Attribute("true-answer") != null && _answers.Attribute("true-answer").Vrijednost == "true") ? 1: 0: 0;// Проверяем был ли ответ правильным!}

if (score.Contains(_step))// Hajde da vidimo da li smo ranije odgovorili na pitanje

score[_step] = val;// Set za prethodno pitanje na koje smo tačno odgovorili

score.Add(val);// Set za prethodno pitanje na koje smo tačno odgovorili

/*Izlaz ako su rezultati testa odgovorili na posljednje pitanje*/

if (_step == countSteps)

Next.Content = "Počni ispočetka";

Prev.Content = "Izlaz";

string zbroj = rezultat.Sum().ToString();

string numeric = GetDeclension(int.Parse(sum), "tačan odgovor", "tačni odgovori", "tačni odgovori");

string message = "Poštovani " + subjectName + ". Hvala što ste pristupili testu. Vaš rezultat je " + zbroj + " " + numerički + " od " + countSteps;

Questions.Text = poruka;

Answer.Visibility = Vidljivost.Hidden;

loadStep(_step, beforeStep);

string testFilePath = "Resources/testTest.xml";

javni glavni prozor()

InitializeComponent();

Test.Visibility = Visibility.Hidden;

void loadStep(int _locStep, int beforeStep)

foreach (var curEl u mainXml.Root.Element("questions").Elements())

Questions.Text = questionsList[_locStep];

Answer.Items.Clear();

var currentAnswers = odgovori[_locStep];

foreach (var odgovor u currentAnswers.Elements())

Answer.Items.Add(answer.Value);

javni statički string GetDeclension(int broj, niz nominativ, string genetiv, string plural)

broj = broj % 100;

ako (broj >= 11 && broj<= 19)

var i = broj % 10;

return nominative;

private void prevButton_Click(pošiljalac objekta, RoutedEventArgs e)

if (Prev.Content.ToString().Trim() == "Izlaz")

private void nextButton_Click(pošiljalac objekta, RoutedEventArgs e)

mainXml = XDocument.Load(testFilePath);

var qstns = mainXml.Root.Element("pitanja").Elementi();

countSteps = qstns.Count();

foreach (var pitanje u qstns)

questionsList.Add(question.Element("text").Value);

answers.Add(question.Element("odgovori"));

private void Button_Click(pošiljalac objekta, RoutedEventArgs e)

subjectName = User.Text;

if (!string.IsNullOrEmpty(subjectName) && !string.IsNullOrEmpty(testFilePath))

Start.Visibility = Visibility.Hidden;

Test.Visibility = Visibility.Visible;

MessageBox.Show("Obavezna polja nisu popunjena");

private void spravkaButton_Click(pošiljalac objekta, RoutedEventArgs e)

Hello.Visibility = Visibility.Hidden;

Help.Visibility = Visibility.Visible;

private void closeSpravkaButton_Click(pošiljalac objekta, RoutedEventArgs e)

Hello.Visibility = Visibility.Visible;

Help.Visibility = Visibility.Hidden;

Najbolji članci na ovu temu