povratak na index stranicu
| ppmps/projekt/grupa3

GENERIRANJE PODATAKA O VREMENU
Simulacija receiver-a weather station-a

Zadatak: Generirati podatke koji će simulirati weather station. Ti podaci će se koristiti za rad ostalih grupa.

Materijali:

Manual za komunikaciju sa baznom stanicom
Komunikacijski protokol - detalji

 

REZULTATI RADA

UVOD

Meterološka mjerna stanica daje sljedeće podatke: 8 vrijednosti o temperaturi i vlažnosti, vrijednost o količini padalina(kiše), vrijednost o brzini vjetra i smjeru, vrijednost o tlaku zraka, vrijednost o osvjetljenju i vrijednost o dnevnoj količini zračenja. Svi podatci o vremenu smještaju se u zapis ukupne dužine 32 B pri čemu je ukupni broj zapisa 1024. Zapisi se smještaju u cirkularu memoriju iz koje je se, ovisno o zahtjevu prijemne strane dohvaća prvi spremljeni zapis ili trenutni te podatak o trenutnom vremenu(mjesec, dan, sat, minuta i sekunda). Nakon dohvaćanja zapisa, on se šalje bajt po bajt putem serijskog porta. Svako slanje zapisa odvija se tako da se oni obilježavaju zaglavljima koji zajedno sa zapisima čine okvir podataka. Okviri se međusobno razlikuju po ukupnoj dužini u bajtovima.


Program je osmišljen tako da e otvore dva procesa pomoću naredbe "fork". Jedan proces radi s podatcima, čita ih iz memorije dok drugi proces obavlja komunikaciju s prijemnom stranom. U memoriji je deklariran spremnik veličine 1024 memorijske lokacije u kojeg se spremaju podatci. To je cirkularna memorija u koju se spremaju zapisi. Na početku programa su dvije funkcije: void Send (int fd, unsigned char* poruka, int size) i unsigned char Receive (int fd, int* time). Funkcija recive služi za primanje poruka koje šalje prijemna strana i iz tih poruka čita komande koje prijemna strana zahtjeva. Prijemna strana šalje zahtjeve u ASCII kodu: '0' - aktivacija komunikacije, '1' - zahtjev za trenutnim vremenom, '2' - označi prvi sačuvani zapis, '3' - označi sljedeći zapis, '4' traži zapis, '5' - traži status i 'D' - inicijalizacija sučelja. Funkcija send šalje tražene podatke, naredbom write (fd, poruka_for_send, m+4) na serijski port. Podatci se generiraju sinusnom razdiobom kao slučajni niz i spremaju u polje tipa karakter dužine 32, odnosno to odgovara broju podataka koji se šalju i spremaju u zapis dužine 32 bajta. U funkciji send se provjerava ispravnost poruke i ukoliko se pojavi neki od nedopuštenih simbola u oni se zamjenjuju drugim simbolima definiranim prema formatu u priručniku[1]. Recive funkcija provjerava ispravnost prenesene poruke ispitivanjem testnog bajta.


Funkcija int time_to_send (unsigned char* stme) dohvaća sistemsko vrijeme i pakira ga u zadani oblik prema priručniku[1]. Kod funkcije vrijeme to su: sati, minute, sekunde, dan u mjesecu i dan u tjednu te mjesec.U glavnom programu otvara se datoteka za komunikaciju sa serijskim portom u koju se pišu i iz koje se čitaju podatci koji trebaju biti odaslani.
Parametri serijskog porta su: 19 200 bit/s, neparni paritet, 8 bita i 2 stop bita.

DOKUMENTIRANI KOD:

Kod možete dobaviti u obliku C datoteke ovdje.