7.2. Odczyt danych z licznika

Dane przychodzące z licznika można przedstawić w następujący sposób

[0x02]REJESTR(WARTOŚĆ)[0x0D][0x0A]
Protokół ten jest protokołem typu <-ASCII_D-> (zobacz Rozdział 16)

Przykładowy ciąg znaków wygląda następująco:

[0x02]1.8.0(21.3)1.7.3*1(10.5)[0x0D][0x0A]

Implementacja algorytmu odczytującego dane jest stosunkowo prosta, gdyż znakami oddzielającymi dane od rejestrów są nawiasy okrągłe. Przykładowy fragment kodu wartość z rejestru 1.8.0 z powyższego przykładu można przedstawić następująco:

char start_rejestr = 1 ;         /* znacznik początku rejestru */
char start_dana = 0 ;            /* znacznik początku danych */
char bufor [100] ;               /* Tu jest przechowywana ramka z danymi */
int i = 0 ;                      /* licznik */
const rejestr char[] = "1.8.0" ; /* numer rejestru do odczytu */
int wartosc ;                    /* do tej zmiennej zostanie zapisana wartość z rejestru 1.8.0 */
char wartosc_str[100] ;          /* zmienne pomocnicze */
char rejestr_str[100] ;          /* -//- */
int j=0, k=0 ;                   /* -//- */
...
while (bufor[i]!=0x0A){
 if (bufor[i]==")"){
    start_rejestr = 1 ;
    start_dana = 0 ;
    j = 0 ; k = 0 ;
    i++ ;       
 }
 if (bufor[i]=="("){
    start_rejestr = 1 ;
    start_dana = 0 ;
    j = 0 ; k = 0 ; 
    i++ ;    
 }
 if (start_rejestr){
    rejestr_str[j] = bufor[i] ;
    j++ ;
    rejestr_str[j] = NULL ;
 } 
 if (start_wartosc){
    wartosc_str[k] = bufor[i] ;
    k++ ;
    wartosc_str[k] = NULL ;
 }  
 if (strcmp (rejestr_str, rejestr) == 0){
    wartosc = atoi(wartosc_str) ;
 }
 i++ ;
}