Format ramki interfejsu S300 ver. 2.3
1 Założenia
- Format w wesji 2 musi być odróżnialny od wersji 1.
- Format musi przenosić informację o zawartości ramki.
- Format musi dawać możliwość zbudowania w przyszłości kolejnych wersji opartych o conajmniej takie założenia.
2 Definicja
Typowa ramka ma następującą zawartość:
<NUL> <ONE> tt c nnnn x..x ss <CR>
gdzie:
- <NUL>
- znak 0x00 z wyzerowanym bitem nieparzystości
- <ONE>
- znak 0x01
- tt
- typ rekordu - dwa znaki określające strukturę i znaczenie danych c nnnn x..x w ramce
- c
- znak złożony z flag statusowych
- nnnn
- numer seryjny urządzenia
- x..x
- blok danych - dowolna struktura ograniczona max. dlugością rekordu
- ss
- suma kontrolna
- <CR>
- znak 0x0d
3 Wyjaśnienia
3.1 Ramka znaku
Znaki są 7-bitowe i wszystkie oprócz <NUL> zawierają w sobie bit nieparzystości, w związku z tym dysponują 6 bitami danych.
3.2 Nagłówek ramki S300v2
W nagłówku ramki występuje znak <ONE> zaraz po <NUL>. W ramce S300v1 jako drugi znak był transmitowany zbiór flag statusowych i nigdy nie był on jednakowy ze znakiem <ONE>, co zapewnia rozróżnialność formatów v1 i v2.
3.3 Typ rekordu
Na zakodowanie typu rekordu przewidziane są dwa znaki, co daje możliwość wygenerowania 4096 różnych oznaczeń. Użyte oznaczenia powinny być dopisywane do listy typów rekordów wraz z podaniem formatu rekordu. Liczba określająca typ rekordu jest 12-bitowa i rozbita na dwa znaki po 6 bitów, przy czym pierwszy znak typu przenosi bardziej znaczącą część tej liczby. Przy podawaniu typu rekordu w opisie należy stosować oznaczenie w postaci 3 cyfr hexadecymalnych. Przykład:
Typ rekordu
0x123
po rozpisaniu na bity jest to
0001 0010 0011
po podzieleniu na znaki 6-bitowe otrzymujemy
0x04 0x23
więc nagłówek rekordu będzie wyglądał następująco:
<NUL><ZERO><0x04><0x23>...Typy rekordów 0x000 i 0xfff są zarezerwowane dla dalszych rozszerzeń formatu.
Ze względu na specjalne znaczenie znaku <CR> nie może on wystąpić w polach typu rekordu, a zatem użycie typów rekordu 0x?0d, 0x?4d, 0x?8d, 0x?cd, 0x34?, 0x35?, 0x36?, 0x37? jest zabronione.
3.3 Rekord danych
W skład rekordu danych wchodzą pola oznaczone c nnnn x..x. Jest to sugerowany format i jeżeli nie będzie mógł być zachowany, to nie musi. Rekord danych może mieć dowolną długość. Wymagane jest, aby wszystkie znaki rekordu miały kody >= 0x20 (spacja).
3.4 Suma kontrolna
Suma kontrolna jest naliczana od początku ramki <NUL> do końca rekordu danych jako suma kodów znaków modulo 256 - sumować należy siedem bitów znaku (wraz z bitem nieparzystości). Ośmiobitowa suma jest następnie dzielona na dwie nibble, do każej nibbli dodawana jest wartość 0x30 i jako znak swysyłana. Pierwszy znak koduje bardziej znaczącą część sumy kontrolnej. Przykładowa procedura sprawdzania sumy kontrolnej (zwraca -1 jeżeli wystąpił błąd sumy kontrolnej i 0 jeśli suma kontrolna ramki jest poprawna):
int test_frame_checksum (unsigned char * frame, int len) {
unsigned acc,
int i;
for (i=0, acc=0 ; i<len-3 ; i++) {
acc += frame[i] & 0x7f;
}
return (acc & 0xff) == ((frame[len-2]&0x0f) | (frame[len-3]&0x0f) << 4) ? 0 : -1;
}
4 Lista typów rekordów stosowanych przy transmisji S300v2
typ 0x000
- oznaczenie zarezerwowane
typ 0x001
- format: <NUL> <ONE> tt ss <CR>
- długość: 7
- zawartość: pusty rekord
- zastosowanie: na razie brak - zdefiniowany na rozgrzewkę
typ 0x002
- format: <NUL> <ONE> tt c nnnn hhh zttttt ss <CR>
- długość: 21
- zawartość: wilgotność i temperatura w szerokim zakresie i dużej precyzji
- zastosowanie: LB-705 od ver. 1.27 i LB-725 od ver. 2.26 jako opcjonalny format
- opis:
- c zbiór flag statusowych w formacie 110etr
- e flaga błędu kalibracji
- t flaga błędu pomiaru temperatury
- r flaga błędu pomiaru wilgotności
- nnnn numer seryjny sondy LB-701 podłączonej do panelu - format numeru seryjnego
- hhh wilgotność względna [promile] - dziesiętnie
- z znak temperatury ; może być '-', '<spacja>','0'
- ttttt temperatura [°C/100] - dziesiętnie
typ 0x003
- format: <NUL> <ONE> tt c nnnn zpppp ss <CR>
- długość: 17
- zawartość: natężenie promieniowania słonecznego
- zastosowanie: LB-900 w wersji 1.1
- opis:
- c zbiór flag statusowych w formacie 11mebr
- m flaga mnożnika wartości promieniowania : m = 0 - x 10, m = 1 - x 1
- e flaga błędu kalibracji
- b flaga jednostki promieniowania : b = 0 - W/m2, b = 1 - kLx
- r flaga błędu pomiaru promieniowania
- nnnn numer seryjny LB-900 - format numeru seryjnego
- z znak lub najbardziej znacząca cyfra wyniku promieniowania; może być '-','0','1','2'
- pppp wartoć promieniowania[W/m2 lub kLx] - dziesiętnie
typ 0x004
- format: <NUL> <ONE> tt c nnnn zpppp ss <CR>
- długość: 17
- zawartość: ciśnienie proporcjonalne do wilgotnosci gleby
- zastosowanie: LB-920 (miernik wilgotności gleby) w wersji 1.0
- opis:
- c zbiór flag statusowych w formacie 110e0p
- e flaga błędu kalibracji
- p flaga błędu pomiaru napięcia
- nnnn numer seryjny LB-920 - format numeru seryjnego
- z znak lub najbardziej znacząca cyfra wyniku promieniowania; może być '-','0',..,'9'
- pppp wartoć cinienia [10 x kPa] - dziesiętnie
typ 0x005
- format: <NUL> <ONE> tt c nnnn kkkk tttttt ss <CR>
- długość: 22
- zawartość: współczynnik regulacji i temperatura
- zastosowanie: LB-472 f/v 1.0, 1.1
- opis:
- c flagi statusowe w formacie 1100kt
- t flaga błędu pomiaru temperatury
- k flaga błedu regulacji
- nnnn numer seryjny - format numeru seryjnego
- kkkk współczynnik sterowania w [%/10] w zakresie 0..1000
- tttttt temperatura w [°C/100] w zakresie -20000..55000
- uwagi: pola kkkk i tttttt w formacie:
- wiodące zera zamieniane są na spacje
- występuje znak -, albo +
typ 0x006
- format: <NUL> <ONE> tt c nnnn tttttt ss <CR>
- długość: 18
- zawartość: temperatura
- zastosowanie: LB-472 f/v >= 1.2
- opis:
- c flagi statusowe w formacie 110c0t
- t flaga błędu pomiaru temperatury
- c flaga błedu kalibracji
- nnnn numer seryjny - format numeru seryjnego
- tttttt temperatura w [°C/100] w zakresie -20000..55000
- uwagi: pole tttttt w formacie:
- wiodące zera zamieniane są na spacje
- występuje znak -, albo +
typ 0x007
- format: <NUL> <ONE> tt c nnnn tttttt uuuuuu ss <CR>
- długość: 24
- zawartość: temperatura, temperatura2
- zastosowanie: LB-474
- opis:
- c flagi statusowe w formacie 110cut
- t flaga błędu pomiaru temperatury
- u flaga błędu pomiaru temperatury2
- c flaga błedu kalibracji
- nnnn numer seryjny - format numeru seryjnego
- tttttt temperatura w [°C/100] w zakresie -20000..55000
- uuuuuu temperatura2 w [°C/100] w zakresie -20000..55000
- uwagi: pola tttttt i uuuuuu w formacie:
- wiodące zera zamieniane są na spacje
- występuje znak -, albo +
typ 0x008
- format: <NUL> <ONE> tt a b c nnnn ppppp uuuuu ss <CR>
- długość: 24
- zawartość: natężenie promieniowania
- zastosowanie: LB-901 w wersji 1.0
- opis:
- a zbiór flag statusowych w formacie 11kefg
- k flaga ważnosci danych w kanale 2 : k=1 kanał 2 aktywny, k=0 kanał 2 wyłączony,
- e flaga błędu kalibracji
- f flaga błędu pomiaru promieniowania w kanale 2
- g flaga błędu pomiaru promieniowania w kanale 1
- b zbiór flag statusowych dla kanału 1 w formacie 11mxxx
- m flaga mnożnika wartości promieniowania w kanale 1 : m = 0 - x 10, m = 1 - x 1
- xxx zakodowana jednostka promieniowania kanału 1 : xxx = 0 - W/m2, xxx = 1 - kLx, xxx = 2 - umol/sm2, xxx = 3 - 0,01 x W/m2, pozostałe wartoci xxx to rezerwa na inne nieznane jeszcze czujniki.
- c zbiór flag statusowych dla kanału 1 w formacie 11mxxx
- m flaga mnożnika wartości promieniowania w kanale 2 : m = 0 - x 10, m = 1 - x 1
- xxx zakodowana jednostka promieniowania kanału 1 : xxx = 0 - W/m2, xxx = 1 - kLx, xxx = 2 - umol/sm2, xxx = 3 - 0,01xW/m2, pozostałe wartoci xxx to rezerwa na inne nieznane jeszcze czujniki.
- nnnn numer seryjny LB-901 - format numeru seryjnego
- ppppp wartoć promieniowania kanału 1 - dziesiętnie
- uuuuu wartoć promieniowania kanału 2 - dziesiętnie
typ 0x009
- format: <NUL> <ONE> tt c nnnn zttttt ss <CR>
- długość: 18
- zawartość: temperatura
- zastosowanie: LB-520 dla wersji 2.04 dla rozszerzonego zakresu temperatur.
- opis:
- c flagi statusowe w formacie 110ctr
- r flaga stosowanej rozdzielczosci (0 - najmniej znacząca cyfra bez znaczenia - zawsze wyzerowana, 1 - najmniej znacząca cyfra jest znacząca)
- t flaga błędu pomiaru temperatury
- c flaga błedu kalibracji
- nnnn numer seryjny - format numeru seryjnego
- zttttt temperatura w [°C/100] w zakresie -20000..55000
- uwagi: pole zttttt w formacie :
- z występuje znak -, albo 0
- ttttt wartoć temperatury - dziesiętnie
typ 0x00a
- format: <NUL> <ONE> tt c a nnnn ppppp ss <CR>
- długość: 18
- zawartość: stężenie gazu
- zastosowanie: miernik stężenia gazu LB-905 w wersji 1.0
- opis:
- c zbiór flag statusowych w formacie 11mebr
- m flaga mnożnika wartości stężenia : m = 0 - x 10, m = 1 - x 1
- e flaga błędu kalibracji
- b flaga jednostki stężenia : b = 0 - %, b = 1 - ppm
- r flaga błędu pomiaru stężenia
- a kod rodzaju gazu (0 - tlen),
- nnnn numer seryjny LB-905 - format numeru seryjnego
- ppppp wartoć promieniowania[% lub ppm] - dziesiętnie
typ 0x00b
- format: <NUL> <ONE> tt c nnnn ppppp ss <CR>
- długość: 17
- zawartość: rezystancja czujnika powierzchniowego
- zastosowanie: LB-910 w wersji 3.0
- opis:
- c zbiór flag statusowych w formacie 110ebr
- e flaga błędu kalibracji
- b flaga błędu pomiaru wewnętrznej temperatury
- r flaga błędu pomiaru rezystancji
- nnnn numer seryjny LB-910 - format numeru seryjnego
- ppppp wartość rezystancji dziesiętnie w zakresie 0..65535 Ohm
typ 0x00c
- format: <NUL> <ONE> tt c nnnn ppppp ss <CR>
- długość: 17
- zawartość: dystans
- zastosowanie: LB-471D w wersji 1.0
- opis:
- c zbiór flag statusowych w formacie 11aebr
- a flaga mnożnika wartości dystansu : a = 0 - x 10, a = 1 - x 1
- e flaga błędu kalibracji
- b flaga jednostki dystansu : b = 0 - m, b = 1 - mm
- r flaga błędu pomiaru dystansu
- nnnn numer seryjny LB-471D - format numeru seryjnego
- ppppp wartoć dystansu [m lub mm] - dziesiętnie
typ 0x01f
- format: <NUL> <ONE> tt e f nnnn xxxxx sttt ss <CR>
- długość: 22
- zawartość: promieniowanie i temperatura
- zastosowanie: LB-390
- opis:
- e zbiór flag statusowych w formacie 11r00c
- r flaga praku gotowości - rozruch (ustawiona przez 20 sekund po uruchomieniu urządzenia)
- c błąd kalibracji
- f zbiór flag statusowych w formacie 110000
- nnnn numer seryjny LB-390 - format numeru seryjnego
- xxxxx wynik pomiaru promieniowania w 0,01*uSv/h ; zakres 0 .. 99999
- sttt wynik pomiaru temperatury wenętrznej w 0,1*(deg)C ; s - znak ; zakres -99,9 .. +99,9