| 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 |