SZARP PLC HOWTO | ||
---|---|---|
Poprzedni | Rozdział 7. Protokół komunikacyjny licznika energii elektrycznej LandisGyr ZMD405CT44.2407 | Następny |
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)
REJESTR - Symboliczne oznaczenie rejestru z którego została przesłana WARTOŚĆ. Rejestry są oznaczane w następujący sposób X.Y.Z lub X.Y.Z*A, gdzie X,Y,Z,A są odpowiednimi oznaczeniami rejestru w postaci cyfr zapisanych w kodzie ASCII. Przykładowym oznaczeniem rejestru może być: 1.8.1. Szczegółowe oznaczenie wszystkich rejestrów można znaleźć w dokumentacji do licznika.
WARTOŚĆ - Aktualnie przesyłana wartość z rejestru.
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++ ; }
Poprzedni | Spis treści | Następny |
Protokół komunikacyjny licznika energii elektrycznej LandisGyr ZMD405CT44.2407 | Początek rozdziału | Tabela funkcji licznika |