Protokół komunikacji z LB-702/705/725
Komunikacja z panelami LB-702 / LB-705 / LB-725
-----------------------------------------------
rozkazy użytkownika dla wersji:
LB-702 od 3.20
LB-705 od 1.20
LB-725 od 2.20
1. Dane sprzętowe:
a. interfejs wg. standardu EIA-232.
b. komunikacja: 9600 bps, 1 bit startu, 8 bitów danych, 1 bit stopu;
bez synchronizacji, z jednym wyjątkiem - dla panelu LB-702 musi zostać
podany sygnał DTR aby uaktywnić interfejs (musi również pozostać na czas
komunikacji), DTR powinien zostać podany na jakiś czas przed wysłaniem
czegokolwiek do panelu (500ms powinno wystarczyć)
2. Ogólnie o komunikacji
a. Odbywa się na zasadzie zapytanie odpowiedź. Wysyłany rozkaz ma format:
MMPP<cr>, gdzie MM to mnemonik a PP jest opcjonalnym parametrem. Odpowiedź
zazwyczaj składa się z powtórzonego mnemonika oraz danych i zakończona jest
sekwencją <cr><lf>. Istnieje jeden wyjątek w starszych wersjach paneli,
gdzie na rozkaz `DC' nie ma żadnej odpowiedzi. Po rozkazie którego panel
nie zrozumiał odsyła odpowiedź ?<cr><lf>.
3. Szczegółowo o komunikacji
a. Podane tu rozkazy są `rozkazami użytkownika', oprócz nich istnieją jeszcze
rozkazy serwisowe, których nie należy wysyłać bo może to spowodować
rozkalibrowanie sondy -- dotyczy to głównie grupy rozkazów `B0' .. `BF'
oraz `*'.
b. <EOL> oznacza dalej sekwencję: <cr> - przy zapytaniu, <cr><lf> - przy
odpowiedzi.
c. Dla kodowania wartości heksadecymalnych używane są tylko wielkie litery
d. Określenie `wszystkie panele' oznacza dalej panele:
LB-702 o wersji (v) >= 3.20
LB-705 v >= 1.20
LB-725 v >= 2.20
rozkazy odczytu wyników pomiarowych ( `F0' .. `F3' ) można stosować dla
wszystkich wersji ww. urządzeń (nawet starszych wersji), pozostałe rozkazy
nie powinny być wydawane dla starszych wersji niż powyżej wymieniono.
e. Lista rozkazów
--------------------------------------------------------------------------
--------------------------------------------------------------------------
- odczyt słowa statusowego
dotyczy: wszystkich paneli
rozkaz: C4<EOL>
odpowiedź: C4:xxxx<EOL>
xxxx - cztery cyfry hexadecymalne kodujące status, bity:
0 - błąd pomiaru temperatury
1 - błąd pomiaru wilgotności
2 - błąd wyznaczenia punktu rosy
3 - błąd wyznaczenia wilgotności bezwzględnej [ppm_obj]
4 - brak/błąd zegara czasu rzeczywistego
5 - zarezerwowane
6 - zegar czasu rzeczywistego nieustawiony
7 - zarezerwowane
8 - zarezerwowane
9 - błąd pamięci danych kalibracyjnych (błąd hardware)
10 - błąd danych kalibracyjnych (błąd logiczny)(błąd kalibracji)
11 - zarezerwowane
12 - brak sondy
13 - zarezerwowane
14 - brak/błąd pamięci rejestrującej
15 - zarezerwowane
przykład: C4<EOL>
C4:400F<EOL> - brak pamięci oraz błąd wszystkich
pomiarów
uwagi: priorytet sygnalizacji użytkownikowi błędów powinien być
następujący:
1. bit 9 == uszkodzenie sondy
2. bit 12 == brak sondy
3. bit 10 == błąd kalibracji, implikuje błąd wszystkich
pomiarów
4. bity 0..3 == błędy pomiarowe, przy czym ustawienie
bitu 0 lub bitu 1 implikuje ustawienie bitów 2 oraz 3.
należy sygnalizować użytkownikowi błąd zegara bit 6
(niefatalny)
ustawienie bitów 4 i 14 nie należy traktować jako błąd,
ale informację o tym, że nie został zainstalowany zegar
i/lub pamięć rejestrująca.
--------------------------------------------------------------------------
- inicjacja panelu
dotyczy: wszystkich paneli
rozkaz: DC<EOL>
dla: LB-702 v: 3.20, 3.21
LB-705 v: 1.20, 1.21
LB-725 v: 2.20, 2.21
odpowiedź: brak odpowiedzi !
dla: LB-702 v > 3.21
LB-705 v > 1.21
LB-725 v > 2.21
odpowiedź: DC<EOL>
uwagi: przyrząd wykonuje inicjację co może poskutkować nawet
kilkusekundowym brakiem możliwości skomunikowania się.
--------------------------------------------------------------------------
- identyfikacja panelu
dotyczy: wszystkich paneli
rozkaz: EX<EOL>
odpowiedź: LB-aaa Vb.bb<EOL>
aaa - symbol urządzenia
b.bb - wersja software
przykład: EX<EOL>
LB-705 V1.22<EOL>
--------------------------------------------------------------------------
- identyfikacja sondy (termohigrometru LB-701)
dotyczy: wszystkich paneli
rozkaz: EY<EOL>
odpowiedź: EY:xx<EOL>
xx - wersja sondy: `02', `03', `04'
przykład: EY<EOL>
EY:03<EOL> - sonda LB-701p3
uwagi: numer wersji sondy można jako informację podać użytkownikowi,
nazwa sondy jest konstruowana jak w przykładzie: LB-701pV
--------------------------------------------------------------------------
- odczytanie ustawień użytkownika
dotyczy: wszystkich paneli
rozkaz: @a<EOL>
odpowiedź: @a:bb<EOL>
a - numer lokacji ustawień użytkownika
bb - wartość zapisana heksadecymalnie
uwagi: adresy lokacji i sens odczytywanych wartości będą podane
w oddzielnych punktach
--------------------------------------------------------------------------
- zapisanie ustawień użytkownika
dotyczy: wszystkich paneli
rozkaz: @abb<EOL>
odpowiedź: @a:bb<EOL>
a - numer lokacji ustawień użytkownika
bb - wartość zapisana heksadecymalnie
uwagi: adresy lokacji i sens zapisywanych wartości będą podane
w oddzielnych punktach
--------------------------------------------------------------------------
- odczytanie ustawień użytkownika z pamięci stałej do operacyjnej
dotyczy: wszystkich paneli
rozkaz: @R<EOL>
odpowiedź: @R<EOL>
uwagi: Wpisanie niektórych parametrów pracy dokonuje się tylko
do pamięci stałej i nie ma natychmiastowego skutku w
działaniu panelu. Wysłanie tego rozkazu powoduje uaktualnienie
zawartości pamięci operacyjnej. Bez wysłania rozkazu nowe
wartości parametrów odczytane zostałyby dopiero przy inicjacji
panelu. Konieczność użycia rozkazu `@R' będzie sygnalizowana w
odpowiednich punktach.
--------------------------------------------------------------------------
- odczytanie bajtu z tablicy kalibracji
dotyczy: wszystkich paneli
rozkaz: Aa<EOL>
odpowiedź: Aa:bb<EOL>
a - numer lokacji tablicy kalibracji (0..F)
bb - wartość zapisana heksadecymalnie
uwagi: adresy lokacji i sens odczytywanych wartości będą podane
w oddzielnych punktach
--------------------------------------------------------------------------
--- rozkazy odczytu pomiarów -----------------------------------------
--------------------------------------------------------------------------
uwagi dla czterech następnych rozkazów:
- w zależności od wersji software wiodące zera w odpowiedziach mogą
być zastąpione spacjami
- pierwsza litera odpowiedzi sygnalizuje poprawność wyniku pomiaru,
stan ten jest identyczny z bitami 0..3 słowa statusowego
--------------------------------------------------------------------------
- odczyt wartości temperatury
dotyczy: wszystkich paneli
rozkaz: F0<EOL>
odpowiedź: xTAsab.c<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
s - znak '+' albo '-'
a - dziesiątki wartości temperatury w [st C]
albo 'spacja' (którą należy traktować jak znak `0')
b - jedności wartości temperatury w [st C]
c - dziesiąte wartości temperatury w [st C]
przykład: F0<EOL>
NTA- 4.1<EOL> - temperatura -4.1 st C
--------------------------------------------------------------------------
- odczyt wartości wilgotności względnej
dotyczy: wszystkich paneli
rozkaz: F1<EOL>
odpowiedź: xRH ab.c<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
a - dziesiątki wartości wilgotności w [%]
albo 'spacja' (którą należy traktować jak znak `0')
b - jedności wartości wilgotności w [%]
c - dziesiąte wartości wilgotności w [%]
przykład: F1<EOL>
ORH 99.9<EOL> - błąd wartości wilgotności
--------------------------------------------------------------------------
- odczyt wartości temperatury punktu rosy
dotyczy: wszystkich paneli
rozkaz: F2<EOL>
odpowiedź: xDPsab.c<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
s - znak '+' albo '-'
a - dziesiątki wartości temperatury w [st C]
albo 'spacja' (którą należy traktować jak znak `0')
b - jedności wartości temperatury w [st C]
c - dziesiąte wartości temperatury w [st C]
przykład: F2<EOL>
NDP+ 15.3<EOL> - temp. punktu rosy 15.3 st C
--------------------------------------------------------------------------
- odczyt wartości wilgotności bezwzględnej - zawartości pary wodnej
w [ppm obj]
dotyczy: wszystkich paneli
rozkaz: F3<EOL>
odpowiedź: xPMabcde<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
a, b, c, d, e - kolejne cyfry zapisanego dziesiętnie
wyniku w [ ppm'ach objętościowych ],
wiodące zera mogą być zastąpione spacjami
przykład: F3<EOL>
NPM 9745<EOL> - wilgotność 9745 ppm obj.
--------------------------------------------------------------------------
--- obsługa zegara czasu rzeczywistego -------------------------------
--------------------------------------------------------------------------
uwagi dla rozkazów obsługi zegara:
- zegar sprzętowy (rtc) jest układem scalonym odmierzającym czas
rzeczywisty i wymaga podtrzymania bateryjnego - jeśli rtc nie
miał ciągłego podtrzymania, to gubi swą zawartość i zgłasza
błąd: `zegar nieustawiony'
- zainstalowanie rtc jest opcjonalne w panelach LB-702 i LB-705,
w LB-725 jest zainstalowany zawsze (stąd błąd braku zegara w LB-725
należy traktować jako uszkodzenie)
- panele mają zaimplementowane programowe odmierzanie czasu - zegar
systemowy
- zegar systemowy jest inicjowany najpierw na 1 stycznia, godz. 00:00:00,
potem jeśli zdetekowany został rtc (i jest ustawiony) następuje
ewentualna synchronizacja
- rozkazy `F4' i `F5' czytają zawartość zegara systemowego
- rozkazy `BH', `BM', `BY', `BO' zapisują wartość do rtc - nie ma
możliwości zapisu do zegara systemowego
- rtc nie liczy lat
- rtc liczy sekundy ale nie ma możliwości ich odczytania - przy
synchronizacji licznik sekund zegara systemowego jest ustawiony na zero
- przy zapisie nowej wartości czasu licznik sekund rtc jest zerowany
--------------------------------------------------------------------------
- odczyt czasu zegara panelu
dotyczy: wszystkich paneli
rozkaz: F4<EOL>
odpowiedź: Tx hh:mm:ss<EOL>
x - status zegara: jeśli zainstalowany jest zegar sprzętowy 'h',
jeśli zegar programowy 's' (brak zegara sprzętowego sygnalizowany
jest również w słowie statusowym)
hh - godzina (dziesiętnie)
mm - minuty (dziesiętnie)
ss - sekundy (dziesiętnie)
uwagi: jeśli zegar sprzętowy jest nieustawiony bądź nie zainstalowany
to zegar programowy startuje od 00:00:00 przy każdej inicjacji
przykład: F4<EOL>
Th 15:34:11<EOL>
--------------------------------------------------------------------------
- odczyt daty zegara panelu
dotyczy: wszystkich paneli
rozkaz: F5<EOL>
odpowiedź: Dx dd.mm<EOL>
x - status zegara: jeśli zainstalowany jest zegar sprzętowy 'h', jeśli
tylko programowy 's'
dd - numer dnia (dziesiętnie 1 .. 31)
mm - numer miesiąca (dziesiętnie 1 .. 12)
uwagi: jeśli zegar sprzętowy jest nieustawiony bądź nie zainstalowany
to zegar programowy startuje od 01.01 przy każdej inicjacji
przykład: F5<EOL>
Dh 10.08<EOL>
--------------------------------------------------------------------------
- ustawienie minut zegara czasu rzeczywistego
dotyczy: wszystkich paneli
rozkaz: BMxx<EOL>
odpowiedź: BM:xx<EOL>
xx - minuty zapisane decymalnie (0 .. 59)
przykład: BM22<EOL>
BM:22<EOL>
--------------------------------------------------------------------------
- ustawienie godziny zegara czasu rzeczywistego
dotyczy: wszystkich paneli
rozkaz: BHxx<EOL>
odpowiedź: BH:xx<EOL>
xx - godzina zapisana decymalnie (0 .. 23)
przykład: BH09
BH:09<EOL>
--------------------------------------------------------------------------
- ustawienie numeru dnia zegara czasu rzeczywistego
dotyczy: wszystkich paneli
rozkaz: BYxx<EOL>
odpowiedź: BY:xx<EOL>
xx - numer dnia zapisany decymalnie (1 .. 31)
przykład: BY11<EOL>
--------------------------------------------------------------------------
- ustawienie miesiąca zegara czasu rzeczywistego
dotyczy: wszystkich paneli
rozkaz: BOxx<EOL>
odpowiedź: BO:xx<EOL>
xx - miesiąc zapisane decymalnie (1 .. 12)
przykład: BH06<EOL>
--------------------------------------------------------------------------
- synchronizacja zegara sprzętowego i zegara systemowego
dotyczy: wszystkich paneli
rozkaz: BZ<EOL>
odpowiedź: BZ<EOL>
uwagi: rozkaz powinien zostać wywołany po ustawieniu zegara
rtc
--------------------------------------------------------------------------
--- rozkazy do obsługi pamięci rejestrującej w LB-702 i LB-705 -------
--------------------------------------------------------------------------
uwagi dotyczące pamięci rejestrującej:
- organizacja pamięci rejestrującej w panelach LB-702 i LB-705 jest
identyczna, inną organizacją charakteryzuje się LB-725
- możliwe są 3 warianty: brak zainstalowanej pamięci, pamięć 24C02 (która
daje możliwość zapisu ca 80 punktów pomiarowych (pp)), pamięć 24C16
(640pp)
- pamięć jest zorganizowana w 256B strony: 80pp posiada 1 stronę, 640pp
posiada 8 stron (odczytywać pamięć można po 1 stronie)
- niezależnie od ilości stron zapisy traktują pamięć jako obszar ciągły
- pierwsza lokacja pamięci addr:0x000 (1B) zawiera zakodowany aktualnie
ustawiony interwał rejestracji, od adresu:0x001 zaczyna się obszar
rejestracji
- kod interwału 0x00 oznacza blokadę rejestracji
- maksymalna wartość kodu interwału wynosi 0xEF
- występują dwa formaty rekordów zapisywanych do pamięci: format nagłówka i
format danych
- przy każdej inicjacji panelu (jeśli rejestracja jest aktywna) zapisywany
jest nagłówek z informacjami o czasie startu rejestracji i interwale
- pierwszy rekord danych zapisywany jest 1 minutę po starcie, następne w
zależności od interwału.
- całość ważnego obszaru danych terminowana jest bajtem 0xFF, który nie
pojawia się w innym kontekście.
format nagłówka:
- bajt: 0xF0 (wartość 0xF0 nie występuje w innym kontekście)
- bajt: minuty startu rejestracji
- bajt: godzina startu rejestracji
- bajt: dzień startu rejestracji
- bajt: miesiąc startu rejestracji
- bajt: interwał rejestracji - kodowanie interwału opisano przy
rozkazie `@4'
format rekordu danych (3 bajty rozpisane na bity):
- 0 TA.10 TA.9 TA.8 RH.7 TA.7 RH.9 RH.8
- 0 TA.6 TA.5 TA.4 TA.3 TA.2 TA.1 TA.0
- 0 RH.6 RH.5 RH.4 RH.3 RH.2 RH.1 RH.0
gdzie TA oznacza temperaturę a RH wilgotność, numer po kropce jest numerem
bitu (liczonym od 0). Zdekodowana wartość wilgotności względnej podana jest
w promilach. Zdekodowana wartość temperatury jest zawyżona o 400 i podana w
dziesiątych stopnia C. Po zdekodowaniu otrzymuje się wartości zapisane
binarnie.
--------------------------------------------------------------------------
- odczyt typu pamięci rejestrującej
dotyczy: LB-702, LB-705
rozkaz: GT<EOL>
odpowiedź: GT:xx<EOL>
xx - `02' dla pamięci o pojemności 80pp i `16' dla pamięci
o pojemności 640pp
przykład: GT:16<EOL>
uwagi: przed wydaniem tego rozkazu (jak i innych dotyczących pamięci)
należy sprawdzić w słowie statusowym, czy pamięć została
zainstalowana -- jeśli nie -- nie wydawać rozkazów
--------------------------------------------------------------------------
- odczytanie interwału rejestracji
dotyczy: LB-702, LB-705
rozkaz: @4<EOL>
odpowiedź: @4:xx<EOL>
xx - kod interwału zapisana jako dwie cyfry hexadecymalne
kod '00' wyłącza rejestrację, max. kod to `EF'
przykład: @43E<EOL>
@4:3E<EOL>
uwagi:
dla: LB-702 3.20 <= v <= 3.24
LB-705 1.20 <= v <= 1.23
interwał rejestracji jest wielokrotnością 10min -- kod 0x01
oznacza 10min, 0x02 - 20min, etc... , aż do 0xEF - 2390min.
dla: LB-702 v > 3.24
LB-705 v > 1.23
od 1min do 90min kwant interwału wynosi 1min, powyżej 90min kwant
wynosi 10min, czyli: kod 0x01 to interwał 1min, 0x02 to 2min,
..., 0x5A to 90min, 0x5B to 100min, 0x5C to 110min, ..., 0xEF to
1590min.
--------------------------------------------------------------------------
- ustawienie nowego interwału rejestracji
dotyczy: LB-702, LB-705
rozkaz: GIxx<EOL>
odpowiedź: GI:xx<EOL>
xx - kod nowego interwału zapisany jako dwie cyfry hexadecymalne
w zakresie 0x00..0xEF, wartość '00' wyłącza rejestrację
przykład: GI3E<EOL>
GI:3E<EOL>
uwagi: Zapis nowego interwału dokonuje się do pamięci stałej nie
zmieniona zostaje jednak wartość interwału zapisana w
pamięci operacyjnej, jeśli więc nie zostanie wykonana inicjacja
panelu, to rejestracja będzie się odbywać ze starym interwałem.
Można wykonać rozkaz odczytania ustawień użytkownika (do
których zalicza się wartość interwału rejestracji) `@R', ale
to spowoduje tylko tyle, że panel przyjmie nową wartość
interwału i jeśli będzie ona inna od poprzedniej to zablokuje
rejestrację. Można przyjąć następującą procedurę: wpisujemy
nowy interwał rozkazem `GI', wykonujemy rozkaz `@R',
informujemy użytkownika, że zmiana interwału spowoduje blokadę
rejestracji i niech sam zdecyduje czy ją teraz wykonać.
Co prawda interwał należy do ustawień użytkownika i odczytuje
się go komendą `@4' ale zapis interwału nie może być wykonany
komplementarną komendą `@4xx' tylko `GIxx'.
--------------------------------------------------------------------------
- kasowanie zawartości pamięci rejestrującej
dotyczy: LB-702, LB-705
rozkaz: GC<EOL>
odpowiedź: GC<EOL>
uwagi: po skasowaniu pamięci rejestracja jest blokowana do momentu
ponownej inicjacji panelu (na przykład rozkazem 'DC') - o tym
powinien poinformować program użytkownika po wykonaniu
kasowania
--------------------------------------------------------------------------
- odczyt strony pamięci rejestrującej
dotyczy: LB-702, LB-705
rozkaz: GSxx<EOL>
odpowiedź: GS:xx dd dd ... dd<EOL>
xx - numer 256 bajtowej strony pamięci zapisany jako dwie cyfry
hexadecymalne (numerowane od zera).
dd - kolejne lokacje pamięci zapisane hexadecymalnie (256 lokacji)
przykład: GS00<EOL>
GS:00 23 F0 12 44 .... 44 71<EOL>
----------------------
256 wartości
uwagi: wysłanie rozkazu odczytu nieistniejącej strony spowoduje
trwały błąd odczytu pamięci, tzn. panel będzie sygnalizował
brak pamięci -- aż do ponownej inicjacji
--------------------------------------------------------------------------
uwaga dotycząca ustawiania czasu rtc podczas aktywnej rejestracji:
- ponieważ format rejestracji zakłada jednokrotny zapis bloku nagłówka
zawierającego datę i godzinę, to zmiana czasu podczas trwania rejestracji
nie zostanie uwzględniona aż do momentu przeinicjowania panelu, o czym
należy poinformować użytkownika
--------------------------------------------------------------------------
--------------------------------------------------------------------------
- zmiana trybu wyświetlania czas <--> zaw. pary wodnej
dotyczy: LB-702
polega na: zmianie wartości 7-mego bitu 3-ciej lokacji ustawień
użytkownika
procedura: odczytać 3-cią lokacje rozkazem `@3'
zmienić stan 7-mego bitu
zapisać lokację rozkazem `@3'
wymusić odczytanie ustawień użytkownika rozkazem `@R'
przykład: rozkaz: @3<EOL>
odp: @3:94<EOL>
rozkaz: @314<EOL>
odp: @3:14<EOL>
rozkaz: @R
odp: @R
uwagi: nie należy zmieniać wartości innych bitów
--------------------------------------------------------------------------
- odczytanie numeru seryjnego sondy
dotyczy: wszystkich paneli
polega na: odczytaniu lokacji 0xD i 0xE tablicy kalibracji
procedura: odczytać lokacje 0xD i 0xE przy pomocy rozkazów: AD i AE, numer
z przedziału 0 .. 9999 jest zapisany w postaci BCD przy czym w
lokacji 0xE znajduje się bardziej znacząca jego część
--------------------------------------------------------------------------
- odczytanie daty ostatniej kalibracji
dotyczy: wszystkich paneli
polega na: odczytaniu lokacji 0xC tablicy kalibracji
procedura: odczytać lokację 0xC przy pomocy rozkazu AC, rok zapisany jest
w starszej połowie bajtu jako (4-bitowa) liczba lat od roku
1993, numer miesiąca zapisany w młodszej połowie przy czym
styczniowi odpowiada 0
--------------------------------------------------------------------------
- odczytanie zakresu pomiaru wilgotności
dotyczy: wszystkich paneli
polega na: odczytaniu lokacji 0xA tablicy kalibracji
procedura: odczytać lokację 0xA przy pomocy rozkazu AA, rodzaj czujnika
zainstalowanego w sondzie identyfikuje się na podstawie
wartości zapisanej w dolnej połowie bajtu: 1 dla zakresu
rozszerzonego, 2 dla zakresu podstawowego, 0 brak informacji na
temat zakresu
uwagi: jeśli zdetekowano wersję sondy p2 to zawartość tej lokacji nie
ma znaczenia - sonda ta nie posiada informacji o obsługiwanym
zakresie
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- rozkazy do obsługi pamięci rejestrującej w LB-725 ----------------
--------------------------------------------------------------------------
- odczyt typu pamięci rejestrującej
dotyczy: LB-725
rozkaz: GT<EOL>
odpowiedź: GT:xx<EOL>
xx - `80' dla pamięci o pojemności 4000pp
przykład: GT<EOL>
GT:80<EOL>
uwagi: panel LB-725 zawsze posiada pamięć rejestrującą, do obecnej
wersji jest to zawsze pamięć mieszcząca 4000 punktów
rejestracji pomiarów
--------------------------------------------------------------------------
- odczytanie interwału rejestracji
dotyczy: LB-725
rozkaz: @4<EOL>
odpowiedź: @4:xx<EOL>
xx - kod interwału zapisana jako dwie cyfry hexadecymalne
kod '00' wyłącza rejestrację, max. kod to `EF'
przykład: @43E<EOL>
@4:3E<EOL>
uwagi:
interwał rejestracji jest wielokrotnością 10min -- kod 0x01
oznacza 10min, 0x02 - 20min, etc... , aż do 0xEF - 2390min.
--------------------------------------------------------------------------
- ustawienie nowego interwału rejestracji
dotyczy: LB-725
rozkaz: GIxx<EOL>
odpowiedź: GI:xx<EOL>
xx - kod nowego interwału zapisany jako dwie cyfry hexadecymalne
w zakresie 0x00..0xEF, wartość '00' wyłącza rejestrację
przykład: GI3E<EOL>
GI:3E<EOL>
uwagi: Zapis nowego interwału dokonuje się do pamięci stałej nie
zmieniona zostaje jednak wartość interwału zapisana w pamięci
operacyjnej. Należy wykonać rozkaz odczytania ustawień
użytkownika (do których zalicza się wartość interwału
rejestracji) `@R'. Panel LB-725 (w odróżnieniu od LB-702 i
LB-705) nie blokuje rejestracji po zmianie interwału
Co prawda interwał należy do ustawień użytkownika i odczytuje
się go komendą `@4' ale zapis interwału nie może być wykonany
komplementarną komendą `@4xx' tylko `GIxx'.
--------------------------------------------------------------------------
- kasowanie zawartości pamięci rejestrującej
dotyczy: LB-725
rozkaz: GC<EOL>
odpowiedź: GC<EOL>
uwagi: po skasowaniu pamięci rejestracja jest blokowana do momentu
ponownej inicjacji panelu (na przykład rozkazem 'DC') - o tym
powinien poinformować program użytkownika po wykonaniu
kasowania
--------------------------------------------------------------------------
uwagi nt. pamięci rejestrującej w LB-725:
- Pamięć rejestrująca przyrządu jest fragmentem pamięci ram zainstalowanej
w panelu. Numer pierwszej strony pamięci przeznaczonej na rejestrację
należy odczytać rozkazem `GB'. Koniec obszaru aktualnie zapełnionego
ważnymi danymi należy odczytać rozkazem `GP'. Na podstawie wartości
uzyskanych przy pomocy ww. rozkazów można obliczyć liczbę rekordów
rezydujących w pamięci.
- Długość rekordu jest stała = 8B.
- Format rekordu:
1. numer dnia (1B) - binarnie
2. numer miesiąca (1B) - binarnie (+ znacznik power fail)
3. godzina (1B) - binarnie
4. minuty (1B) - binarnie
5. temperatura (2B)
6. wilgotność (2B) (+ bity kontrolne)
ad 2.) - do numeru miesiąca należy uwzględnić bity 0..6
- wartość 1 oznacza styczeń
- na 7. bicie kodowany jest znacznik `zaniku zasilania'
(1=nastąpił zanik zasilania)
ad 5.) - temperatura zapisana binarnie w dziesiątych stopnia
w kodzie U2, pierwszy bajt = MSB
ad 6.) - do wilgotności należy uwzględnić bity 0..11
- wilgotność zapisana binarnie w promilach, pierwszy bajt = MSB
- najstarsze 4 bity zawierają sumę kontrolna rekordu obliczoną
jako zanegowaną bitowo sumę po pozostałych nibblach rekordu
--------------------------------------------------------------------------
- odczyt strony pamięci rejestrującej
dotyczy: LB-725
rozkaz: GSxx<EOL>
odpowiedź: GS:xx dd dd ... dd<EOL>
xx - numer 256 bajtowej strony pamięci zapisany jako dwie cyfry
hexadecymalne (numerowane od zera).
dd - kolejne lokacje pamięci zapisane hexadecymalnie (256 lokacji)
przykład: GS03<EOL>
GS:03 23 F0 12 44 .... 44 71<EOL>
----------------------
256 wartości
--------------------------------------------------------------------------
- odczytanie numeru pierwszej strony pamięci rejestrującej
dotyczy: LB-725
rozkaz: GB<EOL>
odpowiedź: GB:xx<EOL>
xx - numer pierwszej strony (hexadecymalnie) pamięci rejestrującej
uwagi: ten numer jest zawsze większy niż 0x00, aktualnie zawsze
jest równy 0x03
--------------------------------------------------------------------------
- odczytanie aktualnego wskaźnika zapisu do pamięci rejestrującej
dotyczy: LB-725
rozkaz: GP<EOL>
odpowiedź: GP:xxxx<EOL>
xxxx - adres aktualnego wskaźnika zapisu do pamięci rejestrującej
(hexadecymalnie)
uwagi: Starszy bajt jest numerem strony. Wskaźnik pokazuje na rekord
następny do zapisu -- a więc jeszcze nieaktualny. Przy każdym
zapisie wskaźnik jest zwiększany o 8 (rozmiar rekordu
rejestracji).
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- rozkazy do obsługi progów regulacji LB-725 -----------------------
--------------------------------------------------------------------------
uwagi nt. progów regulacji:
- istnieją 3 tryby regulacji:
0 - regulacja wyłączona - wszystkie urządzenia (regulowane) wyłączone
1 - regulacja z wykorzystaniem progów: tn~, tn_, to~, to_,
Hn~, Hn_, Ho~, Ho_
2 - regulacja z wykorzystaniem progów: t0, d, H,
Hn~, Hn_, Ho~, Ho_
- każdy próg zajmuje 2B
- progi temperatury kodowane są w U2, wilgotności bez znaku
- wartości wilgotności i temperatury podane są w dziesiątych [%] i [st.C]
- przyjęta jest konwencja `big endian'
- oprócz progów w tablicy zapamiętany jest aktualny tryb regulacji
(też 2 bajty) oznaczany jako SET
- tablica progów jest ulokowana na 1. stronie pamięci panelu i zaczyna
się od pierwszego bajtu (od adresu 0x0100), progi regulacji zaczynają
się od adresu 0x0104
- długość tablicy można odczytać rozkazem `IL'
- ostatnią lokację tablicy zajmuje nastawa trybu regulacji SET
- kolejność progów regulacji w tablicy:
0x0100 .. 0x0103 zarezerwowane
0x0104 tn~ włączenie nagrzewacza
0x0106 tn_ wyłączenie nagrzewacza
0x0108 to~ włączenie ochładzacza
0x010a to_ wyłączenie ochładzacza
0x010c H histereza kompresora
0x010e d histereza zaworu
0x0110 t0 temperatura stabilizowana
0x0112 Hn~ włączenie nawilżacza
0x0114 Hn_ wyłączenie nawilżacza
0x0116 Ho~ włączenie osuszacza
0x0118 Ho_ wyłączenie osuszacza
..... obszar zarezerwowany o dlugosci wynikającej z odczytu
rozkazem `IL' (np. w wersji 2.22 dlugość jest 0)
ostatnia lokacja SET tryb regulacji (np. w wersji 2.22 jest
to adres 0x011a)
- program użytkownika powinien zapewnić poprawność wartości progów
wpisanych do panelu:
-40.0 < tn~ <= to_ <= tn_ <= to~ < 85.0
0.0 < Hn~ <= Ho_ <= Hn_ <= Ho~ < 100.0
0.0 < H <= d < 85.0
-40.0 < t0 < 85.0
- zapis nowych wartości progów do panelu wymaga odpowiedniej sekwencji
rozkazów: wyłączenie sprawdzania sumy kont. tablicy `IM', wysłanie
nowych nastaw `IW', obliczenie nowej sumy kontrolnej i włączenia
sprawdzania `IS'.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
- odczyt strony pamięci zawierającej tablicę progów regulacji
dotyczy: LB-725
rozkaz: GS01<EOL>
odpowiedź: GS:01 dd dd ... dd<EOL>
dd - kolejne lokacje pamięci zapisane hexadecymalnie (256 lokacji)
--------------------------------------------------------------------------
- odczyt długości tablicy progów regulacji
dotyczy: LB-725
rozkaz: IL<EOL>
odpowiedź: IL:xx<EOL>
xx - liczba bajtow tablicy progów regulacji (hexadecymalnie)
uwagi: jest to bajtów a nie liczba pozycji tablicy
--------------------------------------------------------------------------
- nałożenie blokady sprawdzania sumy kontr. tablicy progów
dotyczy: LB-725
rozkaz: IM<EOL>
odpowiedź: IM<EOL>
uwagi: rozkaz należy wysłać przed rozpoczęciem uaktualniania
tablicy
--------------------------------------------------------------------------
- wysłanie bajtu do tablicy progów regulacji
dotyczy: LB-725
rozkaz: IWxx<EOL>
odpowiedź: IW:xx<EOL>
xx - wartość bajtu (hexadecymalnie)
uwagi: Po wysłaniu rozkazu `IM' należy wysłać zawartość wyedytowanej
tablicy progów regulacji. Każdy rozkaz `IW' przenosi jeden
bajt tej tablicy. Należy wysłać dokładnie tyle bajtów, ile
wynika z odpowiedzi na rozkaz `IL'. W obecnej wersji można
edytować 11 progów i wartość określającą tryb regulacji (SET),
aby zachować zgodność z ewentualnymi przyszłymi wersjami
program użytkownika powinien wysyłać pozostałe wartości tablicy
(jeśli takie będą) tak jak je odczytał. Bezpośrednio po
wysłanie wszystkch bajtów tablicy należy wysłać rozkaz `IS'
--------------------------------------------------------------------------
- obliczenie sumy kontrolnej nowej tablicy progów regulacji i włączenie
kontroli poprawności tej sumy
dotyczy: LB-725
rozkaz: IS<EOL>
odpowiedź: IS<EOL>
uwagi: rozkaz należy wysłać bezpośrednio po wysłaniu ostatniego
bajtu tablicy progów regulacji
--------------------------------------------------------------------------
- odczytanie stanu przekaźników panelu i aktualnego trybu regulacji
dotyczy: LB-725
rozkaz: IR<EOL>
odpowiedź: IR:yx<EOL>
y - numer trybu regulacji (hexadecymalnie)
x - stan przekaźników (hexadecymalnie), bity:
0 - włączony przekaźnik chłodzenia
1 - włączony przekaźnik nawilżania
2 - włączony przekaźnik osuszania
3 - włączony przekaźnik nagrzewania / kompresora
uwagi: w 2. trybie sterowania bit 3 opisuje stan przekaźnika
kompresora w 1. trybie nagrzewania (tak powinny być opisane
przekaźniki w programie użytkownika)
--------------------------------------------------------------------------
Dodatki:
// ---------------------------------------------------------------------------
// Funkcja sprawdza poprawnosc sumy kontrolnej w rekordzie rejestracji LB-725
// zwraca: 0-OK, 1-zle
// ---------------------------------------------------------------------------
int test_chsum ( unsigned char * t ) {
unsigned a = 0;
int i;
for ( i=0 ; i<8 ; i++ ) {
a += t[i] & 0x0f;
if (i != 6) a += (t[i] & 0xf0) >> 4; }
a ^= 0xffff; a &= 0x000f;
return (a << 4) != (t[6] & 0xf0); }
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// zwraca: wartosc interwalu rejestracji w minutach na podstawie kodu
// ---------------------------------------------------------------------------
int decode_interval (
int v, // wartosc kodu interwalu [0..255]
int thtype, // jeden z 702, 705, 725
int softv // wersja software panelu
) {
int r = 0;
if ( ( (thtype == 705) && (softv >= 124) ) ||
( (thtype == 702) && (softv >= 325) ) )
{
if ( v > 90 ) r = (v-90) * 10 + 90;
else r = v;
}
else r = 10 * v;
return r; }
// ---------------------------------------------------------------------------
// dekodowanie zawartosci pamieci rejestrujacej dla LB-702 i LB-705
// zwraca: ilosc zdekodowanych rekordow
// ---------------------------------------------------------------------------
enum { H_SKIP, H_MIN, H_HOUR, H_DAY, H_MON, H_INTERV, M_PARTS, M_TA, M_RH };
struct memo_record {
time_t ti;
float rh, ta; };
// ---------------------------------------------------------------------------
int memo_decode_702 (
unsigned char * mt, // tablica z obrazem pamieci panelu
int l, // dlugosc ww. tablicy
memo_record * memotab, // docelowa tablica z wynikami
int thtype, // jeden z 702, 705, 725
int softv // wersja software panelu
) {
int i=1, next=H_SKIP, recno=0, j=0;
time_t ti; // time_t jest zdefiniowane jako long i ma wymiar
// sekund, co bede dalej wykorzystywal w obliczeniach
struct tm st;
long iv;
int cta, crh;
while ( i < l )
{
if( mt[i] == 0xf0 ) { next = H_MIN; i++; continue; }
if( mt[i] == 0xff ) break;
switch (next)
{
case H_SKIP:
i++; break;
case H_MIN:
ti = time( NULL );
memmove( &st, localtime( &ti ), sizeof(struct tm) );
st.tm_min = mt[i++]; next = H_HOUR; break;
case H_HOUR:
st.tm_hour = mt[i++]; next = H_DAY; break;
case H_DAY:
st.tm_mday = mt[i++]; next = H_MON; break;
case H_MON:
st.tm_sec = 0;
st.tm_mon = mt[i++]-1; next = H_INTERV;
ti = mktime( & st ) + 60L; break;
case H_INTERV:
iv = 60L * (long) decode_interval ( mt[i++], thtype, softv );
next = M_PARTS; break;
case M_PARTS:
cta = 256 * ( mt[i] >> 4 );
crh = 256 * ( mt[i] & 0x03 );
if( mt[i] & 0x08 ) crh += 128;
if( mt[i++] & 0x04 ) cta += 128;
next = M_TA; break;
case M_TA:
cta += mt[i++]; next = M_RH; break;
case M_RH:
crh += mt[i++]; next = M_PARTS;
memotab[j].ti = ti;
memotab[j].rh = crh;
memotab[j++].ta = cta;
ti += iv; recno ++;
break;
}
}
return recno; }
// ---------------------------------------------------------------------------
Uzupełnienia:
--------------------------------------------------------------------------
--- rozkazy związane z ulepszonym pomiarem temperatury ------------------
--------------------------------------------------------------------------
- odczyt statusu kalibracji sondy LB-701p4
dotyczy: LB-702: v >= 3.27
LB-705: v >= 1.25
LB-725: v >= 2.24
opis: Jeżeli podłączona jest sonda LB-701 w wersji p4, to istnieje
możliwość, że została skalibrowana w procedurze rozszerzonej
kalibracji temperatury jest wtedy sens czytać wynik pomiaru
ze zwiększoną rozdzielczością (do 0.01). Odczyt (i prezentacja
w programie użytkownika) wyniku temperatury z rozdzielczością
0.01 jest sugerowana przy ustawionym 7. bicie 9. lokacji
tablicy kalibracji termohigrometru LB-701p4 (odczytać
rozkazem 'A9').
uwagi: Oczywiście ustalenie stanu 7. bitu 9. lokacji jest możliwe
również w starszych wersjach paneli i dla sond innych niż
LB-701p4, ale znaczenie tego bitu może być zupełnie różne.
--------------------------------------------------------------------------
- odczyt wyniku temperatury z rozdzielczością 0.01
dotyczy: LB-702: v >= 3.27
LB-705: v >= 1.25
LB-725: v >= 2.24
rozkaz: F6<EOL>
odpowiedź: xTEsab.cd<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
s - znak '+' albo '-'
a - dziesiątki wartości temperatury w [st C]
albo 'spacja' (którą należy traktować jak znak `0')
b - jedności wartości temperatury w [st C]
c - dziesiąte wartości temperatury w [st C]
c - setne wartości temperatury w [st C]
przykład: F6<EOL>
NTA- 4.12<EOL> - temperatura -4.12 st C
uwagi: Odczyt temperatury z rozdzielczością 0.01 ma sens tylko
dla sondy LB-701p4 i tylko wtedy, gdy status kalibracji
sugeruje taki odczyt, patrz: 'odczyt statusu kalibracji
sondy LB-701p4'.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- nowe rozkazy dla LB-702 wer >= 3.30 - (obsługa barometru) ---------
--------------------------------------------------------------------------
- odczyt słowa statusowego barometru
dotyczy: LB-702: v >= 3.30
rozkaz: JV<EOL>
odpowiedź: JV:xxxx<EOL>
xxxx - cztery cyfry hexadecymalne kodujące status, bity:
0 - koduje jednostkę prezentacji ciśnienia: jeśli ustawiony
to [mmHg], jeśli zgaszony to [hPa]
2,1 - kodują sposób wykorzystania 4. pola wyświetlacza
0,0 - brak 4. parametru
0,1 - temperatura punktu rosu
1,0 - zawartość pary wodnej
1,1 - czas
3 - zarezerwowany
4 - zarezerwowany
5 - zarezerwowany
6 - zarezerwowany
7 - zarezerwowany
8 - sygnalizuje, że moduł barometru został zainstalowany
9 - sygnalizuje błąd pomiaru/obliczeń ciśnienia
10 - sygnalizuje błąd (hardware'owy) pamięci kalibracji
barometru
11 - sygnalizuje błąd sumy kontrolnej pamięci kalibracji
barometru
12 - zarezerwowany
13 - zarezerwowany
14 - zarezerwowany
15 - zarezerwowany
uwagi: brak ustawionego 8. bitu oznacza, że moduł baro nie został
zamontowany i zawartość innych bitów słowa statusowego
traci sens oraz to, że nie należy wydawać innych poleceń
dla barometru (rozkazów z grupy Jx)
jeżeli moduł baro jest zamontowany to traci ważność
ustawienie 'czas <-> zaw.pary wodnej' 7.bit wartości
czytanej/pisanej rozkazem '@3' na rzecz ustawień
wykonywanych rozkazem 'JV'
--------------------------------------------------------------------------
- ustawienia użytkownika dotyczące barometru
dotyczy: LB-702: v >= 3.30
rozkaz: JVxx<EOL>
odpowiedź: JV:xx<EOL>
xx - dwie cyfry hexadecymalne kodujące ustawienia, których
sens jest identyczny z LSB rozkazu 'JV<EOL>' (bity 0..7)
uwagi: bity określone jako 'zarezerwowane' powinny pozostać
nie zmienione w stosunku do odczytanych rozkazem 'JV<EOL>'
--------------------------------------------------------------------------
- odczyt numeru cyklu pomiarowego barometru
dotyczy: LB-702: v >= 3.30
rozkaz: JL<EOL>
odpowiedź: JL:yy<EOL>
yy - dwie cyfry hexadecymalne kodujące numer cyklu pomiarowego
barometru - numeracja modulo 16
--------------------------------------------------------------------------
- odczyt danych kalibracyjnych z pamięci stałej do ram
dotyczy: LB-702: v >= 3.30
rozkaz: JR<EOL>
odpowiedź: JR<EOL>
uwagi: rozkaz zapisu danych kalibracyjnych powoduje zapis
do pamieci stałej bez uwzględnienia nowej kalibracji
w procesie obliczeniowym, ten rozkaz odczytuje
dane z pamieci stalej do ram, co umożliwia ich uwzglednianie
przy obliczaniu ciśnienia, alternatywnie można użyć rozkazu
inicjacji 'DC'
--------------------------------------------------------------------------
- odczyt bajtu z wektora kalibracji barometru
dotyczy: LB-702: v >= 3.30
rozkaz: Jx<EOL>
odpowiedź: Jx:yy<EOL>
x - numer lokacji zapisany jako jedna cyfra hex z zakresu
0..B
yy - wartość bajtu spod lokacji 'x' zapisana jako dwie cyfry hex
uwagi: w programie użytkownika może zaistnieć potrzeba odczytania
jakiegoś parametru kalibracji i zinterpretowania go - taka
konieczność będzie sygnalizowana w osobnych punktach
--------------------------------------------------------------------------
- odczyt wartości ciśnienia w [hPa]
dotyczy: LB-702: v >= 3.30
rozkaz: F7<EOL>
odpowiedź: xPRabcd.e<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
a - tysiące wartości ciśnienia w [hPa]
albo 'spacja' (którą należy traktować jak znak '0')
b - setki wartości ciśnienia w [hPa]
c - dziesiątki wartości ciśnienia w [hPa]
d - jedności wartości ciśnienia w [hPa]
e - dziesiąte wartości ciśnienia w [hPa]
przykład: F7<EOL>
NPR 998.3<EOL> - ciśn. 998.3 hPa
--------------------------------------------------------------------------
- odczyt wartości ciśnienia w [mmHg]
dotyczy: LB-702: v >= 3.30
rozkaz: F8<EOL>
odpowiedź: xPGabcd.e<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
a - tysiące wartości ciśnienia w [mmHg]
albo 'spacja' (którą należy traktować jak znak '0')
b - setki wartości ciśnienia w [mmHg]
c - dziesiątki wartości ciśnienia w [mmHg]
d - jedności wartości ciśnienia w [mmHg]
e - dziesiąte wartości ciśnienia w [mmHg]
przykład: F8<EOL>
NPG 741.4<EOL> - ciśn. 741.4 mmHg
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- rozszerzenia w obsłudze pamięci rejestrującej LB-702/LB-705 ----------
--------------------------------------------------------------------------
dotyczy: LB-702: v >= 3.30
To co napisano w punkcie 'rozkazy do obsługi pamięci rejestrującej
w LB-702 i LB-705' pozostaje w mocy. Dodano nowy format rejestracji
dla panelu wyposażonego w moduł barometryczny. Odróżnienie formatu
rozszerzonego o ciśnienie możliwe jest przy interpretacji początkowego
bajtu nagłówka.
format nagłówka:
- bajt: 0xF1 (wartość 0xF1 nie występuje w innym kontekście)
- bajt: minuty startu rejestracji
- bajt: godzina startu rejestracji
- bajt: dzień startu rejestracji
- bajt: miesiąc startu rejestracji
- bajt: interwał rejestracji - kodowanie interwału opisano przy
rozkazie `@4'
format rekordu danych (5 bajtów rozpisanych na bity):
- 0 TA.10 TA.9 TA.8 RH.7 TA.7 RH.9 RH.8
- 0 TA.6 TA.5 TA.4 TA.3 TA.2 TA.1 TA.0
- 0 RH.6 RH.5 RH.4 RH.3 RH.2 RH.1 RH.0
- 0 PR.7 PR.13 PR.12 PR.11 PR.10 PR.9 PR.8
- 0 PR.6 PR.5 PR.4 PR.3 PR.2 PR.1 PR.0
gdzie TA oznacza temperaturę, RH wilgotność a PR ciśnienie, numer po
kropce jest numerem bitu (liczonym od 0). Zdekodowana wartość
wilgotności względnej podana jest w promilach. Zdekodowana wartość
temperatury jest zawyżona o 400 i podana w dziesiątych stopnia C.
Zdekodowana wartość ciśnienia podana jest w dziesiątych hPa. Po
zdekodowaniu otrzymuje się wartości zapisane binarnie.
W pojedynczej sesji odczytu pamięci rejestrującej możliwe jest
odczytanie bloków danych w formacie TA/RH i TA/RH/PR, co za tym idzie
należy po każdym nagłówku rejestracji pamiętać jaki jest format rekordu
danych.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- ustalenie zgodności wstecz dla interpretacji rozkazów ---------------
--------------------------------------------------------------------------
- odczyt wersji zgodności rozkazów użytkownika
dotyczy: LB-702: v >= 3.30
rozkaz: KU<EOL>
odpowiedź: KU:v.rr<EOL>
v.rr - numer wersji panelu (równy albo niższy niż bieżący)
z którą format i znaczenie rozkazów użytkownika są
zgodne w bieżącej wersji
uwagi: przykład: jeżeli pracujemy z panelem LB-702 w wersji
3.32 a z rozkazu 'KU' dowiadujemy się, że występuje zgodność
z wersją 3.30, to można założyć, że wszystkie rozkazy
użytkownika ważne w wersji 3.30 będą tak samo poprawne
w 3.32.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- nowe rozkazy dla LB-705 wer >= 1.26 --------------------------------
--------------------------------------------------------------------------
Dodane zostały rozkazy pojawiające się w LB-702 v.3.30. Oto szczegóły:
- rozkazy 'KU' i 'KC', działają tak jak opisano dla LB-702.
- interpretowany jest rozkaz 'JV' mimo, że LB-705 nie przewiduje
obsługi modułu barometrycznego; odpowiedź na ten rozkaz wykazuje
brak zainstalowanego modułu baro (8. bit jest wyzerowany).
- interpretowane są rozkazy 'F7' i 'F8' i zwracają status 'OPR' i 'OPG'.
Format rekordu rejestracji z bajtem nagłówkowym 0xf1 (jak opisano dla
LB-702 v.3.30) jest obowiązujący również dla LB-705 od v.1.26. Pojawiają
się również nowe formaty o których dalej.
--------------------------------------------------------------------------
- odczyt zakresu pomiarowego temperatury
dotyczy: LB-705: v >= 1.26
opis: Panel LB-705 od wersji 1.26 może współpracować z sondą
przeznaczoną do pomiaru temperatury w szerokim zakresie
(-200..+550 stC). W tym zakresie temperatur może pracować
tylko sonda LB-701p4 (sprawdzić rozkazem 'EY'), z ustawionym
3. bitem w 0xb. lokacji wektora kalibracji (sprawdzić
rozkazem 'AB').
--------------------------------------------------------------------------
- odczyt temperatury w szerokim zakresie
dotyczy: LB-705: v >= 1.26
rozkaz: F9<EOL>
odpowiedź: xTXsabc.de<EOL>
x - status: dla wyniku poprawnego 'N', dla błędnego 'O'
s - znak '+' albo '-'
a - setki wartości temperatury w [st C]
albo 'spacja' (którą należy traktować jak znak `0')
b - dziesiątki wartości temperatury w [st C]
albo 'spacja' (którą należy traktować jak znak `0')
c - jedności wartości temperatury w [st C]
d - dziesiąte wartości temperatury w [st C]
e - setne wartości temperatury w [st C]
przykład: F9<EOL>
NTX-174.15<EOL> - temperatura -174.15 st C
uwagi: Rozkazu tego można używać w zastępstwie 'F0' i 'F6'.
Podawana jest wartość temperatury z dwoma miejscami
po przecinku niezależnie od statusu kalibracji sondy
i niezależnie od wersji sondy.
Jeżeli do panelu podłączona została sonda p2 albo p3,
albo status kalibracji sondy p4 nie sugeruje wyświetlania
wyniku pomiaru temperatury ze zwiększoną precyzją, program
użytkownika powinien zaokrąglić wynik pomiaru do jednego
miejsca po przecinku.
Jeżeli sonda ma ustawiony bit szerokiego zakresu pomiarowego
to tylko ten rozkaz daje w pełni poprawną wartość tempera-
tury. Dla sondy szerokozakresowej nie należy używać rozkazów
'F0' i 'F6', ponieważ format ich odpowiedzi nie jest
w stanie przenieść pełnej wartości temperatury. Przy
ustawionym bicie szerokiego zakresu odpowiedź na rozkaz
'F0' i 'F6' ma zawsze status 'O' mimo, że wartość może
być poprawna.
--------------------------------------------------------------------------
- odczyt aktywnoci toru pomiarowego
dotyczy: LB-705: v >= 1.26
opis: Panel LB-705 od v.1.26 interpretuje ustawienie bitu:
- 5. w 0xb. lokacji wektora kalibracji jako wyłączenie
toru pomiarowego wilgotności
- 4. w 0xb. lokacji wektora kalibracji jako wyłączenie
toru pomiarowego temperatury
uwagi: Reakcją programu użytkownia na wyłączenie toru pomiarowego
powinno być wygaszenie wyświetlacza adekwatnej wartości albo
inna sygnalizacja, różna od sygnalizacji błędu. Opisana
interpretacja bitów zachodzi jedynie dla sondy LB-701p4.
Odczyt wartości pomiaru z wyłączonego toru rozkazami 'Fx'
daje w odpowiedzi status 'O', również odpowiednie bity
słowa statusowego (rozkaz 'C4') pozostają ustawione.
--------------------------------------------------------------------------
- odczyt strony pamięci rejestrującej z sumą kontrolną
dotyczy: LB-705: v >= 1.26
rozkaz: GXxx<EOL>
odpowiedź: GX:xx dd dd ... dd ss<EOL>
xx - numer 256 bajtowej strony pamięci zapisany jako dwie cyfry
hexadecymalne (numerowane od zera).
dd - kolejne lokacje pamięci zapisane hexadecymalnie (256 lokacji)
ss - suma kontrolna transmisji zapiasana jako dwie cyfry
hexadecymalne
przykład: GX00<EOL>
GX:00 23 F0 12 44 .... 44 71 F2<EOL>
----------------------
256 wartości
uwagi: suma kontrolna ma taką wartość, że suma po wszystkich
wartościach lokacji na stronie plus wartość sumy kontrolnej
modulo 256 daje wartość 0xff, co można przedstawić tak:
(dd[0] + dd[1] + .. + dd[0xff] + ss) % 0x100 == 0xff
wysłanie rozkazu odczytu nieistniejącej strony spowoduje
trwały błąd odczytu pamięci, tzn. panel będzie sygnalizował
brak pamięci -- aż do ponownej inicjacji
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- rozszerzenia w obsłudze pamięci rejestrującej LB-702/LB-705 ----------
--------------------------------------------------------------------------
dotyczy: LB-705: v >= 1.26
To co napisano w punkcie 'rozkazy do obsługi pamięci rejestrującej
w LB-702 i LB-705' pozostaje w mocy. Dodano nowy format rejestracji
dla panelu wyposażonego w sonde LB-701p4 z ustawioną flagą szerokiego
zakresu pomiaru temperatury (-200..+550). Odróżnienie formatu możliwe
jest przy interpretacji początkowego bajtu nagłówka.
format nagłówka:
- bajt: 0xF2 (wartość 0xF2 nie występuje w innym kontekście)
- bajt: minuty startu rejestracji
- bajt: godzina startu rejestracji
- bajt: dzień startu rejestracji
- bajt: miesiąc startu rejestracji
- bajt: interwał rejestracji - kodowanie interwału opisano przy
rozkazie `@4'
format rekordu danych (2 bajty rozpisane na bity):
- 0 0 TX.7 TX.12 TX.11 TX.10 TX.9 TX.8
- 0 TX.6 TX.5 TX.4 TX.3 TX.2 TX.1 TX.0
gdzie TX oznacza temperaturę, numer po kropce jest numerem bitu
(liczonym od 0). Zdekodowana wartość temperatury jest zawyżona
o 2000 i podana w dziesiątych stopnia C. Po zdekodowaniu otrzymuje
się wartości zapisane binarnie.
W pojedynczej sesji odczytu pamięci rejestrującej możliwe jest
odczytanie bloków danych w różnych formatach, co za tym idzie
należy po każdym nagłówku rejestracji pamiętać jaki jest format
rekordu danych.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- nowe rozkazy dla LB-725 wer >= 2.26 --------------------------------
--------------------------------------------------------------------------
Dodane zostały rozkazy pojawiające się w LB-702 v.3.30:
- rozkazy 'KU' i 'KC', działają tak jak opisano dla LB-702.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--- nowe rozkazy dla LB-702 wer >= 3.31 - (obsługa barometru) ---------
--------------------------------------------------------------------------
- odczyt słowa statusowego barometru (zmiana odpowiedzi rozkazu)
dotyczy: LB-702: v >= 3.31
rozkaz: JV<EOL>
odpowiedź: JV:xxxx<EOL>
xxxx - cztery cyfry hexadecymalne kodujące status, bity:
0..14 - jak w poprzedniej definicji
15 - zezwolenie na brak sondy LB-701
uwagi: jak w poprzedniej definicji
Zezwolenie na brak sondy jest parametrem konfigurowanym podczas
produkcji panelu - przy braku sondy LB-701 panel nie sygnalizuje
'braku sondy'. Program użytkownika powinien testować ten bit i
jeśli jest ustawiony, to nie sygnalizować braku sondy LB-701
jako błąd mimo, że sondy faktycznie nie podłączono.
Jeśli ustawione jest zezwolenie na brak sondy i występuje brak
sondy, to stosuje się inny format wyswietlania wyników:
ciśnienia w hPa, mmHg oraz zegar i bity 0..2 nie mają znaczenia.
--------------------------------------------------------------------------