www.label.pl | LAB-EL Elektronika Laboratoryjna
Elektronika Laboratoryjna

Format ramki interfejsu S300 ver. 2.3

1 Założenia

  1. Format w wesji 2 musi być odróżnialny od wersji 1.
  2. Format musi przenosić informację o zawartości ramki.
  3. Format musi dawać możliwość zbudowania w przyszłości kolejnych wersji opartych o conajmniej takie założenia.

2 Definicja

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

0x000

  • oznaczenie zarezerwowane


0x001 <NUL> <ONE> tt ss <CR>

     
    • długość: 0
    • zawartość: pusty rekord
    • zastosowanie: na razie brak - zdefiniowany na rozgrzewkę


0x002 <NUL> <ONE> tt c nnnn hhh zttttt ss <CR>

     
    • długość: 14
    • 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


0x003

    <NUL> <ONE> tt c nnnn zpppp ss <CR>

  • długość: 10
  • 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

0x004

    <NUL> <ONE> tt c nnnn zpppp ss <CR>

  • długość: 10
  • 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


0x005 - nie wykorzystywany

    <NUL> <ONE> tt c nnnn kkkk tttttt ss <CR>

  • długość: 15
  • 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 +


0x006

    <NUL> <ONE> tt c nnnn tttttt ss <CR>

  • długość: 11
  • 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 +


0x007

    <NUL> <ONE> tt c nnnn tttttt uuuuuu ss <CR>

  • długość: 17
  • 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 +


0x008

    <NUL> <ONE> tt a b c nnnn ppppp uuuuu ss <CR>

  • długość: 17
  • 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

0x009

    <NUL> <ONE> tt c nnnn zttttt ss <CR>

  • długość: 11
  • zawartość: temperatura
  • zastosowanie: LB-520 dla wersji 2.04 dla rozszerzonego zakresu temperatur.
  • opis:
    • c        flagi statusowe w formacie 110ctr
      •             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 z ttttt w formacie :
    • z występuje znak -, albo 0
    • ttttt wartoć temperatury - dziesiętnie


0x00a

    <NUL> <ONE> tt c a nnnn ppppp ss <CR>

  • długość: 11
  • 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


0x00b

    <NUL> <ONE> tt c nnnn ppppp ss <CR>

  • długość: 10
  • 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


0x00c

    <NUL> <ONE> tt c nnnn ppppp ss <CR>

  • długość: 10
  • 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


  0x00d

    oznaczenie wykluczone

  0x04d

    oznaczenie wykluczone

  0x08d

    oznaczenie wykluczone

  0x0cd

    oznaczenie wykluczone


0xfff

  • oznaczenie zarezerwowane