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