povratak na index stranicu
| ppmps/projekt/grupa4

GRUPA 4 - ČITANJE PODATAKA
READING MODUL

Zadatak: Ostvariti komunikaciju RS-232 protokolom između stanice i računala.

Materijali:

Manual za komunikaciju sa baznom stanicom
Komunikacijski protokol - detalji

 

REZULTATI RADA

RAD PROGRAMA

Program iako sadrži funkcije za aktivaciju komunikacije i postavljanje pokazivača na prvi podatak nikada ih ne koristi, da bismo bili u skladu s timom 3. Aktivacija komunikacije i resetiranje pokazivača se, stoga, događa samo jednom, kada se zatraži vrijeme od meterološke stanice, odnosno kada se izvrši funkcija request_time_date. U for petlji se zatim čitaju podaci bajt po bajt, i obrađuju tako da više ne budu u BCD formatu već u nekom čitljivijem formatu radi tima 5. Svi podaci se pohranjuju u strukturu koja se na kraju zapisuje u datoteku. Na koncu se pomiče pokazivač na podacima u meterološkoj postaji pozivajući funkciju select_next. To se događa u svakoj iteraciji for petlje.

POPIS STRUKTURA

Strukture koje smo koristili u našem programu navedene su slijedno u daljnjem tekstu. To je ovdje posebno naglašeno s obzirom da nisu definirane identično kao i u dokumentu "manualF.pdf" koji smo koristili prilikom pisanja ovog programa.

typedef struct WSPC_TEMP_FEUCHTE{
short temp;
unsigned char feuchte;
unsigned char flag;
}wspc_temp_feuchte;

typedef struct WSPC_DRUCK{
short druck;
short temp;
unsigned char feuchte;
unsigned char flag;
} wspc_druck;

typedef struct WSPC_WIND{
short staerke;
short richtung;
unsigned char breite;
unsigned char flag;
} wspc_wind;

typedef struct WSPC_REGEN{
short zaehler;
unsigned char flag;
} wspc_regen;

typedef struct WSPC_HELL_PYR{
int wert;
unsigned char flag;
} wspc_hell_pyr;

typedef struct WSPC_TIME{
char hr;
char min;
char sec;
char day;
char month;
char day_in_week;
char year;
} wspc_time;

typedef struct WSPC_SENSORS{
char sensor1;
char sensor2;
char sensor3;
char sensor4;
char sensor5;
char sensor6;
char sensor7;
char sensor8;
char sensor9;
char sensor10;
char sensor11;
char sensor12;
char sensor13;
} wspc_sensors;

typedef struct WSPC_DATA{
wspc_sensors sensors;
wspc_time zeit;
wspc_temp_feuchte temp[8];
wspc_druck druck;
wspc_wind wind;
wspc_regen regen;
wspc_hell_pyr helligkeit;
wspc_hell_pyr pyrano;
} wspc_data;

POPIS KONSTANTI
...koje su korištene u programu u svrhu komunikacije:

#define SOH 0x01
#define STX 0x02
#define ETX 0x03
#define EOT 0x04
#define ENQ 0x05
#define ACK 0x06
#define DLE 0x10
#define DC2 0x12
#define DC3 0x13
#define NAK 0x15

DATA FORMATS

Data transfer: 19,200 Baud, Even Parity, 8 Bit, 2 Stop
Data frames for commands from the PC to the PC radio interface
<SOH> <Comm> [Para] <Test> <EOT>

Data frame for responses from the interface:
<STX> <length> [message] <test total> <ETX>

- ovi formati podataka su korišteni i u našem programu. U funkciji request_data se ovi podaci primaju kao što je navedeno u "responses from the interface". Ti podaci dolaze kodirani s namjerom da se izbjegne pojavljivanje start bayta i stop bayta unutar slijeda podataka. To dekodiranje je također učinjeno unutar funkcije request_data.
Description of the commands and responses

Ovdje je definiran slijed bytova koji definira naredbe za komunikaciju sa meterološkom postajom, zahtjeve i odgovore.

Activate communication
<SOH> '0' (-total) <EOT>

Request time and date
<SOH> '1' (-total) <EOT>

Select next data record
<SOH> '2' (-total) <EOT>

Select first data record
<SOH> '3' (-total) <EOT>

Request data record
<SOH> '4' (-total) <EOT>

Response from the interface: (36 byte)
1. no data available:
<DLE>
2. data available:
[time Lo] [time Hi] (32 byte data record)

Request status
<SOH> '5' (-total) <EOT>

Interface init
<SOH> 'D' [interval] [V wind/rain] [V brightn./pyrano] [V indoor/version] (-total) <EOT>

Response from the interface: (5 byte)!!!

<STX> 1 ACK <-total> <ETX>

 

Naš program slijedi upute dane u "manulaF.pdf" sa slijedećim iznimkama:

Response from the interface: odgovor se šalje kao 5 bytova, sa STX na početku i ETX na kraju poruke.

Request data record: podatak [block number Lo] [block number Hi] se ne koriste.
Prilikom primanja podataka koji su kodirani s namjerom da se izbjegne pojavljivanje znaka koji označava početak i kraj poruke u funkciji koja prima podatke mi te podatke ponovno odkodiravamo te iz njih vadimo bitove koji označavaju stvarne vrijednosti podataka koje web server koristi.

KOMENTIRANI KOD:

Kod možete dobaviti u obliku C datoteke ovdje.