Elektronika Laboratoryjna - Monitoring temperatury i wilgotności
www.label.pl | LAB-EL Logo | tel. +48 22 753 61 30 | fax +48 22 753 61 35
LAB-EL » Dokumenty » Protokoły komunikacji » LB-750
Lista rozkazów rozpoznawanych przez barometr LB-750 --------------------------------------------------- # dotyczy baromertu LB-750 o wersji 2.0 .. 2.10 1. Komunikacja: 9600bps ; 1 bit startu + 8 bitów danych + 1 bit stopu - bez synchronizacji 2. Konwencja języka komend: rozkaz: <mnem> [ <sp><arg> [<sp><arg>] ] <eol> odpowiedź: <mnem><:><answ><eol> <mnem> - mnemonik rozkazu w postaci 2..4 znaków <sp> - spacja - znak o kodzie 0x20 <arg> - argument rozkazu <eol> - znak końca linii LF o kodzie 0x0a albo ciąg CR LF o kodach 0x0d 0x0a, w odpowiedzi wysyłany jest ciąg CR LF <:> - dwukropek - znak o kodzie 0x3a <answ> - odpowiedź urządzenia zależna od rozkazu - na nierozpoznany rozkaz barometr odpowiada: error<eol> ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 3. Rozkazy użytkownika ------------------------------------------------------------------------------- 3a. identyfikacja przyrządu rozkaz: id<eol> odpowiedź: id:Barometr Lb-750 Lab-El v<vmaj>.<vmin>/<eol> gdzie: <vmaj> - bardziej znacząca część numeru wersji - decymalnie <vmin> - mniej znacząca część numeru wersji - decymalnie przykład: id:Barometr Lb-750 Lab-El v2.3/ - oznacza barometr LB-750 w wersji 2.3 ------------------------------------------------------------------------------- 3a-1. rozszerzona identyfikacja przyrządu (dla wer. >= 2.9) rozkaz: idx<eol> odpowiedź: idx:<a.b>:<c.d> gdzie: <a.b> - wersja z ktora bieżaca wersja jest w pełni zgdona <c.d> - wersja z ktora bieżaca wersja jest zgodna na poziomie rozkazow użytkowniak uwagi: Format zapisu wersji tak jak opisano w 3a. ------------------------------------------------------------------------------- 3b. odczyt aktualnej wartości ciśnienia rozkaz: prs<eol> odpowiedź: prs:<pval><eol> gdzie: <pval> - wartość ciśnienia podana decymalnie w dziesiątych częściach hPa przykład: prs:10706 - oznacza, że wartość ciśnienia wynosi 1070.6 hPa ------------------------------------------------------------------------------- 3b-1. odczyt aktualnej wartości ciśnienia w [mmHg] (dla wer. >= 2.8) rozkaz: prh<eol> odpowiedź: prh:<pval><eol> gdzie: <pval> - wartość ciśnienia podana decymalnie w dziesiątych częściach mmHg ------------------------------------------------------------------------------- 3c. odczyt komórki (lokacji) pamięci konfiguracji/kalibracji eeprom rozkaz: erd <addr><eol> odpowiedź: erd:<eval><eol> gdzie: <addr> - adres lokacji z zakresu 0..127 - decymalnie <eval> - zawartość lokacji z zakrsu 0..255 - decymalnie ------------------------------------------------------------------------------- 3c-1. odczyt bloku pamięci konfiguracji/kalibracji eeprom (dla wer. >= 2.9) rozkaz: ebl <addr> <len><eol> odpowiedź: ebl:<eval>:..:<eval><eol> gdzie: <addr> - adres lokacji z zakresu 0..127 - decymalnie <len> - długość bloku z zakresu 0..128-<addr> - decymalnie <eval> - zawartość kolejnych lokacji (<len> wartości) - hexadecymalnie ------------------------------------------------------------------------------- 3d. odczyt lokacji zegara rtc (dla wer. >= 2.1) rozkaz: rtc <raddr><eol> odpowiedź rtc:<rval><eol> gdzie: <raddr> - adres lokacji z zakresu 0..4: - decymalnie <rval> - zawartość lokacji - decymalnie ------------------------------------------------------------------------------- 3e. zapis lokacji do zegara rtc (dla wer. >= 2.1) rozkaz: rtc <raddr> <rval><eol> odpowiedź rtc:<rval><eol> gdzie: <raddr> - adres lokacji z zakresu 0..4: - decymalnie <rval> - zawartość lokacji - decymalnie ------------------------------------------------------------------------------- 3f. odczyt czasu z zegara rtc rozkaz: tim<eol> odpowiedź: tim:<day>:<mon>:<hour>:<min>:<sec><eol> gdzie: <day> - numer dnia miesiąca 1..31 - decymalnie <mon> - numer miesiąca 1..12 - decymalnie <hour> - godzina 0..23 - decymalnie <min> - liczba minut 0..59 - decymalnie <sec> - liczba sekund 0..59 - decymalnie ------------------------------------------------------------------------------- komentarz do pp 3d., 3e., 3f.: Z lokacjami zegara związane są następujące wielkości: <raddr> zakres <rval> 0 - godzina 0..23 1 - minuty 0..59 2 - numer dnia miesiąca 1..31 3 - numer miesiąca 1..12 4 - liczba sekund 0..59 - wszysyko decymalnie Zapis do zegara powinien odbywać się wg. następującej sekwencji: - zapis do lokacji sekund wartości 0 - zapis numeru dnia, miesiąca - zapis liczby minut - zapis liczby godzin - zapis liczby sekund Odczyt z rtc w programie użytkownika najlepiej przeprowadzać rozkazem `tim', gdyż gwarantuje on integralność odczytanej zawartości zegara. ------------------------------------------------------------------------------- 3g. inicjacja barometru rozkaz: rst<eol> brak odpowiedzi ------------------------------------------------------------------------------- 3h. odczyt numeru cyklu pomiarowego rozkaz: ady<eol> odpowedź: ady:<val><eol> gdzie: <val> - numer cyklu z zakresu 0..FFFF - hexadecymalnie W skład jednego cyklu pomiarowego wchodzą pomiary w trzech kanałach oraz obliczenie wartości ciśnienia - cykl trwa średnio ok. 1 sekundy. ------------------------------------------------------------------------------- 3i. odczyt informacji o rejestracji rozkaz: sts<eol> odpowiedź: sts:<val><eol> gdzie: <val> - liczba z zakresu 0..FFFF reprezentująca informacje o rejestracji - hexadecymalnie znaczenie poszczególnych bitów informacji: 0 - włączona rejestracja - bit ustawiony 1 - rejestracja z kontynuacją - jeśli bit ustawiony, to następny zapis po zapisaniu danych do ostatniego rekordu odbędzie się do rekordu pierwszego - jeśli bit skasowany, to po zapisaniu danych do ostatniego rekordu rejestracja jest blokowana 14 - stan ostatniego rekordu rejestracji - jeśli bit ustawiony to ostatni rekord zawiera dane z rejestracji - co oznacza wypełnienie pamięci rejestrującej w 100% 15 - ustawiony oznacza, że wystąpił nieusuwalny błąd danych w pamięci rejestrującej - dane z pamięci można tylko skasować i nie są one wiarygodne ------------------------------------------------------------------------------- 3j. ustawienia parametrów rejestracji rozkaz: sts <val1><eol> odpowiedź: sts:<val2><eol> gdzie: <val1> - liczba z zakresu 0..3 - decymalnie, znaczenie bitów jak w poprzednim punkcie <val2> - liczba z zakresu 0..0003 - powtórzenie wysłanego parametru - hexadecymalnie ------------------------------------------------------------------------------- 3k. odczyt strony pamięci rejestrującej rozkaz: mem <pno><eol> odpowiedź: mem:<pno><sp><memblk><eol> gdzie: <pno> - numer strony pamięci rejestrującej z zakresu 0..127 - decymalnie <memblk> - blok danych strony w postaci: <word0><sp><word1><sp>...<word96><sp><wordsum> gdzie: <wordX> to zapisana heksadecymalnie 16-bitowa lokacja za strony pamięci - strona zawiera 96[decymalnie] lokacji <wordsum> to suma po wszystkich <wordX> modulo 65536 zapisana heksadecymalnie - suma ta jest wyliczana w przyrządzie w czasie transmitowania strony i służy do weryfikacji poprawności danych odebranych ------------------------------------------------------------------------------- 3l. odczyt interwału rejestracji rozkaz: ime<eol> odpowiedź: ime:<mintv><eol> gdzie: <mintv> - interwał rejestracji w minutach z zakresu 0..05A0 - heksadecymalnie ------------------------------------------------------------------------------- 3m. ustawienie interwału rejestracji rozkaz: ime <dmintv><eol> odpowiedź: ime:<mintv><eol> gdzie: <dmintv> - nowy interwał rejestracji w minutach z zakresu 1..1440 - decymalnie <mintv> - nowy interwał rejestracji w minutach z zakresu 0..05A0 - heksadecymalnie ------------------------------------------------------------------------------- 3n. odczyt wartości wskaźnika rejestracji rozkaz: xme<eol> odpowiedź: xme:<pval><eol> gdzie: <pval> - wartość wskaźnika z zakresu 0..0FFF - heksadecymalnie ------------------------------------------------------------------------------- 3o. kasowanie pamięci rejestrującej rozkaz: xme 2750<eol> odpowieź: xme:done<eol> ------------------------------------------------------------------------------- komentarz do pp 3i..3o: - rejestracja może być aktywna albo zablokowana - rejestracja może odbywać się w trybie `z kontynuacją' albo `z blokowaniem' co oznacza odpowiednio: rejestrację ciągłą z nadpisywaniem najstarszych rekordów po zapełnieniu pamięci, albo rejestrację do momentu wypełnienia pamięci - aktywację/dezaktywację oraz tryb rejestracji ustawia/odczytuje się przy pomocy rozkazu `sts' - pamięć rejestrująca zorganizowana jest w 128 stron po 32 rekordy po 3 lokacje po 16 bitów - z punktu widzenia barometru pamięć rejestrująca jest ciągłą tablicą o 4096 rekordach - wskaźnik rejestracji pokazuje na następny rekord przeznaczony do zapisania - kodowanie rekordu rejestracji rozpisane na bity lokacja 0: P.15 P.14 P.13 P.12 P.11 P.10 P.09 P.08 <- bajt 0 P.07 P.06 P.05 P.04 P.03 P.02 P.01 P.00 <- bajt 1 lokacja 1: D.04 H.06 H.05 H.04 H.03 H.02 H.01 H.00 <- bajt 2 M.07 M.06 M.05 M.04 M.03 M.02 M.01 M.00 <- bajt 3 lokacja 2: D.03 D.02 D.01 D.00 O.03 O.02 O.01 O.00 <- bajt 4 S.07 S.06 S.05 S.04 S.03 S.02 S.01 S.00 <- bajt 5 gdzie: P - ciśnienie wyrażone w [hPa*10] H - godzina czasu rejstracji 0..23 M - minuty czasu rejestacji 0..59 D - numer dnia miesiąca 1..31 O - numer miesiąca 1..12 S - suma kontrolna rekordu liczona jako: negacja bitowa ( (sumy zawartości bajtów rekordu od 0 do 4) modulo 256 ) ------------------------------------------------------------------------------- 3p. odczyt wartości z tablicy historii pomiarów rozkaz: his <val><eol> odpowiedź: prs:<pval><eol> gdzie: <val> - wiek pomiaru w minutach z zakresu 0..180 - decymalnie <pval> - wartość ciśnienia podana decymalnie w dziesiątych częściach hPa Barometr prowadzi rejestrację pomiarów z ostatnich 180 minut z rozdzielczością 1 minuty. Przy pomocy tego rozkazu można odczytać wartość ciśnienia zmierzoną przed x minutami, gdzie 0 <= x <= 180. Jeżeli w odpowiedzi otrzyma się wartość 0 to należy interpretować ją jako wartość niedostępną. Ta rejestracja jest niezależna od prowadzenia pamięci rejestrującej. Wyłączenie zasilania powoduje wyzerowanie całej tablicy historii pomiarów. ------------------------------------------------------------------------------- 3r. odczyt statusu przyrządu rozkaz: err<eol> odpowiedź: err:<eval><eol> gdzie: <eval> - bitowa reprezentacja błędów - podana heksadecymalnie znaczenie bitów (jeśli są ustawione): 0 - brak/uszkodzenie zegara rtc 1 - błąd ustawienia czasu rtc 2 - przekroczenie zakresu pomiaru 3 - błąd kalibracji 4 - błąd czujnika #0 5 - błąd czujnika #1 6 - błąd czujnika #2 7 - brak/uszkodzenie pamięci eeprom Interpretacja błędów - ustawienie bitu 0 niekoniecznie oznacza uszkodzenie przyrządu, może być zinterpretowane jako brak zegara rtc na wyposażeniu barometru, jednak w takim wypadku niemożliwa jest rejestracja wyników - błąd ustawienia czasu rtc uniemożliwia prowadzenie rejestracji wyników - błędy 3,4,5,6,7 powinny być traktowane jako krytyczne - uniemożliwiające korzystanie z barometru ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 4. Rozkazy serwisowe ------------------------------------------------------------------------------- 4a. zapis do komórki (lokacji) pamięci konfiguracji/kalibracji eeprom rozkaz: ewr <addr> <eval><eol> odpowiedź: ewr:<eval><eol> gdzie: <addr> - adres lokacji z zakresu 0..255 - decymalnie <eval> - zawartość lokacji z zakrsu 0..255 - decymalnie ------------------------------------------------------------------------------- 4b. odczyt wartości napięcia na czujniku ciśnienia (kanale pomiarowym) rozkaz: adc <sno><eol> odpowiedź: adc:<val><eol> gdzie: <sno> - numer czujnika z zakresu 0..2 <val> - wartość napięcia z zakresu 0..FFFF - hexadecymalnie ------------------------------------------------------------------------------- 4c-1. odczyt współczynnika czułości kanału pomiarowego rozkaz: crs <sno><eol> odpowiedź: crs:<val><eol> gdzie: <sno> - numer czujnika z zakresu 0..2 <val> - wartość współczynnika z zakresu 0..FFFF - hexadecymalnie ------------------------------------------------------------------------------- 4c-2. odczyt współczynnika offsetu kanału pomiarowego rozkaz: cro <sno><eol> odpowiedź: cro:<val><eol> gdzie: <sno> - numer czujnika z zakresu 0..2 <val> - wartość współczynnika z zakresu 0..FFFF - hexadecymalnie ------------------------------------------------------------------------------- 4d. odczyt współczynnika korekcji kanału pomiarowego rozkaz: cor <sno><eol> odpowiedź: cor:<val><eol> gdzie: <sno> - numer czujnika z zakresu 0..2 <val> - wartość współczynnika z zakresu 0..FFFF - hexadecymalnie ------------------------------------------------------------------------------- 4e. zblokowany odczyt pomiarów (wygodny przy kalibracji) rozkaz: deb<eol> odpowiedź: deb:<val0>:<val1>:<val2>:<prs><eol> gdzie: <val?> - bieżąca wartość adc kanału ? - hexadecymalnie <prs> - ciśnienie obliczone przez barometr w [0.1*hPa] - hexadecymalnie ------------------------------------------------------------------------------- 4e-1. zapis wartości pomiarowych adc rozkaz: deb <sno> <val><eol> odpowiedź: deb:<val><eol> gdzie: <sno> - numer kanału adc 0..2 <val> - wartość do zapisu - decymalnie Rozkaz ustawia wartość pomiaru adc i wyłącza odświeżanie pomiarów adc do resetu przyrządu. Rozkaz jest przeznaczony do wykorzystania tylko w programach serwisowych. ------------------------------------------------------------------------------- 4e-2. odczyt wartości pomiarowych adc - rzeczywistych (od wer. 2.9) rozkaz: raw<eol> odpowiedź: raw:<val0>:<val1>:<val2>:<val3><eol> gdzie: <val?> - bieżąca wartość adc kanału ? (3 - kanał temperaturowy) - hexadecymalnie Od wersji 2.9 wartosci podawane na rozkazy: 'adc' i 'deb' są wartosciami skompensowanymi temperaturowo. Rzeczywiste wartości pomiarów adc można uzyskać tym rozkazem. ------------------------------------------------------------------------------- 4e-3. zapis rzeczywistych wartości pomiarowych adc (od wer. 2.9) rozkaz: raw <sno> <val><eol> odpowiedź: raw:<val><eol> gdzie: <sno> - numer kanału adc 0..3 <val> - wartość do zapisu (3 - kanał temperaturowy) - decymalnie Uwagi jak w punkcie 4e-2. ------------------------------------------------------------------------------- 4f. przejście w tryb kalibracji (dotyczy wer. 2.6, 2.7 - rozpoznawany w trybie pomiaru) rozkaz: calibur<LF> brak odpowiedzi Wersje 2.6, 2.7 nie stosują opisanegu tu języka rozkazów podczas normalnej pracy (pomiar). Rozpoznawany jest tylko ten rozkaz i powoduje `miękki' reset urządzenia, po czym przechodzi ono w tryb kalibracji i powraca do normalnego trybu komunikacji. Rzeczony rozkaz należy wysyłać do skutku, tzn. aż uzyskamy odpowiedź `error<eol>' oznaczającą, że barometr przeszedł w mod kalibracji. W trybie pomiaru barometr wysyła (bez odpytywania) dużą ilość danych, które nie przystają do opisywanego tu języka. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 5. Rozkazy testowe - ważne tylko ze zworą testową ------------------------------------------------------------------------------- srv - strojenie pętli 15/25 mA help - wyświetlenie krótkiej pomocy na terminalu trim - strojenie rtc eep - test eeprom ram - test ram rom - test rom wdt - test watchdoga pfl - test powerfaila sta - test stosu sum - obliczenie sumy kontr. kalibracji deba - procedura wykorzystana do debugingu ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 6. Mapa pamięci kalibracji/konfiguracji (eeprom) ------------------------------------------------------------------------------- odczyt bajtu: rozkazem `erd' zapis bajtu: rozkazm `ewr' - w zapisie obowiazuje konwencja `big endian': MSB...LSB - jeśli nie zaznaczono inaczej to zmienne są kodowane binarnie, bez znaku 0,1: numer seryjny przyrządu 2,3: nachylenie (czułość) ch-ki czujnika #0 4,5: nachylenie (czułość) ch-ki czujnika #1 6,7: nachylenie (czułość) ch-ki czujnika #2 8,9: offset ch-ki czujnika #0 (ze znakiem: U2) 10,11: offset ch-ki czujnika #1 (ze znakiem: U2) 12,13: offset ch-ki czujnika #2 (ze znakiem: U2) 14: flagi 15: typ barometru (rodzaj czujników, zakres pomiarowy) 16,17: współczynnik kompensacji nieliniowości czujnika #0 (ze znakiem: U2) 18,19: współczynnik kompensacji nieliniowości czujnika #1 (ze znakiem: U2) 20,21: współczynnik kompensacji nieliniowości czujnika #2 (ze znakiem: U2) 22,23: suma kontrolna kalibracji - do wer.2.7 flagi nie mają znaczenia - od wer.2.8 0x01 - flaga oznacza tryb wyświetlania w [hPa] i [mmHg] - numer seryjny == 0 jest nieważny (traktować jako błąd) - wersja barometru: - 0: nieważny (traktować jako błąd) - 1: typ W - 2: typ B (ważne od wer.2.1) - 3: typ V (ważne od wer.2.6) zachodzi następująca nieregularność: - jeżeli wersja barometru == 2.0 to niezależnie od zawartości lokacji `typ barometru' jest to typ W. -------------------------------------------------------------------------------