Własna aplikacja do INTEGRY – analiza protokołu RS-232 w LCD (część 1)
Dariusz Bembenek
W firmie zajmuje się sprawami technicznymi, które dotyczą systemów alarmowych. Prowadzi warsztaty z systemów Perfecta oraz Integra.
Kontakt
Ta seria artykułów będzie dotyczyć budowy aplikacji (Windows), która ma za zadanie zarządzać pracą centrali Integra. Wspólnie zajrzymy do uproszczonego protokołu integracji, który dostępny jest w złączu PIN5 manipulatorów INT-KLCD.
Przegląd protokołów integracji dla systemów INTEGRA
Rozróżniamy dwa protokoły integracji. W zależności od potrzeb i sprzętu, jakim dysponujemy:
- rozbudowany protokół (pełne zarządzanie, tj. załączanie/wyłączanie czuwania, blokowanie wejść, statusy i sterowanie wyjściami, pamięć zdarzeń, użytkownicy itd.) – wymaga ETHM-1 lub INT-RS
- uproszczony protokół (kilka funkcji, tj. załączanie i wyłączanie czuwania, blokowanie wejść, statusy i sterowanie wyjściami, awarie) – dostępny w INT-KLCD w złączu PIN5. Tym protokołem zajmiemy się w ramach artykułu.
Dokumentacja pierwszego dostępna jest na stronie producenta (www.satel.pl), natomiast dokumentacja uproszczonego protokołu (RS-232 w INT-KLCD) do pobrania jest poniżej.
Rozpoczynamy: wstępny Przegląd dokumentacji protokołu RS-232 w INT-KLCD
Proponuję ściągnąć powyższy plik PDF. W ramach opisywanego protokołu, rozróżniamy dwa modele ramek transmisyjnych. Stary i nowy protokół. Zajmiemy się starym protokołem, ponieważ jest łatwiejszy w implementacji (2 bajtowa suma kontrolna) i występuje znacznie większa kompatybilność wsteczna. Przesiadka ze starego na nowy protokół polega na wyliczaniu bardziej złożonej sumy kontrolnej (w nowym protokole są to 4 bajty) i kończenia ramki sekwencją bajtów 0xFF, 0x99 (zamiast 0xFF, 0xAA).
Wzór ramki transmisyjnej (bajty w HEX):
0xFF | 0xFF | d1 | d2 | … | dn | crc1 | crc2 | 0xFF | 0xAA |
---|
W powyższej ramce możemy wyróżnić następujące bajty:
- 0xFF, 0xFF – początek ramki
- d1.. dn – dane
- crc1 crc2 – suma kontrolna
- 0xFF, 0xAA – koniec ramki
Jeżeli więc chcemy np. załączyć wyjście w centrali, należy przesłać ramkę w powyższym formacie (o tym jak wysyłać ramki, jakim programem, jakim kablem – napiszę w kolejnej części). W tej części mamy jedną misję – zrozumieć koncepcję tego protokołu.
przykład 1 : Projektujemy ramkę, która załączy czuwanie
Załączenie czuwania:
Spójrzmy w dokumentację: załączenie czuwania to komenda 0x70 (czyli d1 = 0x70)
Aby załączyć czuwanie, należy w ramce (d1 … dn) uwzględnić następujące dane:
- 8 bajtów – w tych bajtach należy przesłać kod, czyli hasło (pozostałe cyfry wypełniamy znakami „A”)
- 4 bajty, czyli 32 bity – strefy do uzbrojenia (na 4 bajtach podajemy, które strefy mają się uzbroić)
- 1 bajt – typ czuwania, tutaj podajemy rodzaj uzbrojenia (0 = tryb pełny, czyli full arm)
Ok, w takim razie do dzieła.
-
8 bajtów, które opisują hasło
Chcemy posłużyć się hasłem „1111”, więc 8 bajtów w zapisie szesnastkowym (hex) zapisujemy jako:
Hasło: | 11 | 11 | AA | AA | AA | AA | AA | AA |
---|
Jeżeli hasło użytkownika to np. 24680, to ramka będzie wyglądała następująco: 24 68 0A AA AA AA AA AA.
-
4 bajty, które opisują strefę
Następnie należy podać informacje o tym, które strefy chcemy załączyć. Integra obsługuje max. 32 strefy (a więc 32 bity), dlatego możemy podać tę informację w postaci 4 odpowiednio zapisanych bajtów. Schemat obsadzania stref widoczny jest w poniższej tabeli:
Dla pierwszego bajta:
Numer strefy: | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla drugiego bajta:
Numer strefy: | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla trzeciego bajta:
Numer strefy: | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla czwartego bajta:
Numer strefy: | 32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Załączenie tylko pierwszej strefy będzie wyglądać następująco (pierwszy bajt). Czyli tam, gdzie chcemy załączyć strefę, za „bit” podstawiamy wartość „1”.
Numer strefy: | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Bit: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Pozostałe bity (bajty) będą miały wartość 0. Finalnie, część ramki dotycząca stref (a konkretnie pierwszej strefy), po przekształceniu z zapisu binarnego do zapisu szesnastkowego (hex), będzie miała postać:
01 00 00 00 |
---|
Dla przykładu, załączenie stref 1 i 2 w zapisie bajtowym (hex) to: 03 00 00 00. Tutaj bez wątpienia konieczna jest umiejętność przeliczania liczb zapisanych w formatach binarnych i szesnastkowych. Jeżeli ktoś nie czuje się w tym biegły, to może skorzystać z wbudowanego w system operacyjny kalkulatora. Wystarczy go przestawić do trybu pracy: programista.
-
1 bajt, który opisuje typ załączenia strefy
Tutaj wystarczy podać tylko 1 bajt, który posiada postać (zgodnie z powyższą tabelą) – 0, 1, 2 lub 3 (zapis dziesiętny). W zapisie szesnastkowym będzie to odpowiednio:
- 00 (tryb 0, pełny)
- 01 (tryb 1)
- 10 (tryb 2)
- 11 (tryb 3)
Jeżeli chcemy załączyć czuwanie w trybie pełnym, to musimy za nasz bajt podstawić wartość 00.
Podsumujmy powyższe informacje. Fragment ramki, który załącza 1 strefę w trybie pełnym i hasłem „1111” wygląda następująco (wartości HEX):
70 | 11 | 11 | AA | AA | AA | AA | AA | AA | 01 | 00 | 00 | 00 | 00 |
---|
a pełna ramka, razem z początkiem, sumą kontrolną i końcem wygląda następująco:
FF | FF | 70 | 11 | 11 | AA | AA | AA | AA | AA | AA | 01 | 00 | 00 | 00 | 00 | 71 | 00 | FF | AA |
---|
Wysyłając taki zestaw bajtów do portu RS-232 w manipulatorze INT-KLCD, załączamy czuwanie w strefie 1. Padła tutaj kwestia tzw. sumy kontrolnej.
Co to jest suma kontrolna?
Suma kontrolna to liczba (zestaw liczb), które są obliczane na podstawie danych zawartych w ramce. Urządzenie wysyłające oblicza sumę kontrolną i załącza ją do ramki. Urządzenie odbiorcze (manipulator/centrala) otrzymując ramkę, również oblicza jej sumę kontrolną. Jeżeli obie sumy się zgadzają, tzn., że transmisja przebiegła prawidłowo i nie doszło do przekłamania transmisji.
Sposób, w jaki suma kontrolna jest obliczana to zawsze kwestia indywidualna. Producenci oprogramowania mogą stosować swoje metody na liczenie tych wartości.
Na potrzeby naszej ramki, 2-bajtowa suma kontrolna CRC wynosi : 71 00. To, w jaki sposób należy obliczyć sumę kontrolną, zostanie przedstawione w kolejnej części.
przykład 2 : Projektujemy ramkę, która załączy wyjście
Załączenie wyjścia:
Spójrzmy w dokumentację: załączenie wyjścia to komenda 0x75 (czyli d1 = 0x75)
Aby załączyć wyjście, należy w ramce (d1 … dn) uwzględnić następujące dane:
- 8 bajtów – w tych bajtach należy przesłać kod, czyli hasło (pozostałe cyfry wypełniamy znakami „A”)
- 16 bajtówy, czyli 128 bitów – wyjścia do załączenia (na 16 bajtach podajemy, które wyjścia mają się załączyć)
Ok, w takim razie do dzieła.
-
8 bajtów, które opisują hasło
Chcemy posłużyć się hasłem „1111”, więc 8 bajtów w zapisie szesnastkowym (hex) zapisujemy jako:
Hasło: | 11 | 11 | AA | AA | AA | AA | AA | AA |
---|
-
16 bajtów, które opisują wyjścia
Następnie należy podać informację o tym, które wyjścia chcemy załączyć. Integra obsługuje max. 128 wyjść (256 w Integrze Plus) i każde wyjście jest reprezentowane przez 1 bit. Dlatego 128 bitów / 8 = 16 bajtów. Schemat obsadzania wyjść w poszczególnych bajtach widoczny jest w poniższej tabeli:
Dla pierwszego bajta:
Numer wyjścia: | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla drugiego bajta:
Numer wyjścia: | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla trzeciego bajta:
Numer wyjścia: | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla czwartego bajta:
Numer wyjścia: | 32 | 31 | 30 | 29 | 28 | 27 | 26 | 25 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
Dla piątego bajta:
Numer wyjścia: | 40 | 39 | 38 | 37 | 36 | 35 | 34 | 33 |
---|---|---|---|---|---|---|---|---|
Bit: | _ | _ | _ | _ | _ | _ | _ | _ |
dla pozostałych bajtów (6.. 16) sprawa wygląda analogicznie jak wyżej.
Załączenie tylko np. 8 wyjścia będzie wyglądać następująco (pierwszy bajt). Czyli tam, gdzie chcemy załączyć wyjście, za „bit” podstawiamy wartość „1”.
Numer strefy: | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|
Bit: | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Pozostałe bity (bajty) będą miały wartość 0. Finalnie, część ramki dotycząca wyjść (a konkretnie ósmego wyjścia), po przekształceniu z zapisu binarnego do zapisu szesnastkowego (hex), będzie miała postać:
80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
---|
Dla przykładu, załączenie wyjść 7 i 8 (jednocześnie) w zapisie bajtowym (hex) to:
C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
---|
a jednoczesne załączenie wyjść np. 7,8,9,12,15 to ramka (hex):
C0 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
---|
Tutaj bez wątpienia konieczna jest umiejętność przeliczania liczb zapisanych w formatach binarnych i szesnastkowych. Jeżeli ktoś nie czuje się w tym biegły, to może skorzystać z wbudowanego w system operacyjny kalkulatora. Wystarczy go przestawić do trybu pracy: programista.
Podsumujmy powyższe informacje. Fragment ramki, który załącza 8 wyjście, z hasłem „1111” wygląda następująco (wartości HEX):
75 | 11 | 11 | AA | AA | AA | AA | AA | AA | 80 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
---|
do powyższego należy pamiętać o dołożeniu początku (FF FF), końca (FF AA) i 2 bajtowej sumy kontrolnej (przed końcem ramki), która wynosi: F5 08.
Jeżeli w ramce danych (oprócz znaczników początku i końca) pojawi się bajt o wartości: 0xFF, to zaraz po nim powinien być dodatkowo wysłany bajt 0x00. Jest to spowodowane tym, że bajty o wartości „FF” są zarezerwowane dla początku i końca ramki.Jeżeli powyższe nie jest jasne, to nic straconego. W kolejnej części będzie można ściągnąć program, który sam projektuje za nas pełną ramkę i oblicza dla niej sumę kontrolną.
Czas na testy – wysyłamy ramki do centrali
To już jest zadanie na kolejny odcinek tej serii artykułów. Proponuję przejrzeć powyższe ramki i sposoby ich projektowania. Dodam jeszcze, że tak naprawdę człowiek ręcznie tych ramek nie ustala. W docelowym rozwiązaniu programista pisze kod, który za nas projektuje wygląd takich ramek. Temat jednak jest na tyle złożony, że odpuścimy lekcje programowania i skupimy się na gotowych rozwiązaniach. Może jedynie zahaczymy o ten wątek, ale tylko w podstawowym stopniu.
W kolejnej części będziemy wysyłać ramki do centrali. Przyda się centrala Integra z manipulatorem INT-KLCD, przewód USB-RS, program do obsługi portu RS-232 (np. „Bray Terminal”).
Powiązane produkty
INT-KLCD-BL Manipulator LCD
- Rodzaj manipulatora: LCD
- Kolor podświetlenia: niebieski
- Współpraca z centralami: INTEGRA
- Ilość wejść: 2
- Klasa środowiskowa: II
- Temperatura pracy: -10…+55 °C
- Certyfikat EN50131: Grade 3
- Napięcie zasilania (± 15%): 12 V
- Pobór prądu (gotowość): 17 mA
- Max pobór prądu: 101 mA
- Wymiary: 140 x 126 x 26 mm
INT-RS Plus Konwerter danych
- Rodzaj: Konwerter danych
- Napięcie zasilania: 12 V
- Pobór prądu: 40 mA
- Wymiary: 57 x 80 mm
- Temperatura pracy: -10…+55 °C
ETHM-1 Plus Moduł ethernetowy
- Rodzaj: Moduł Ethernetowy
- Współpraca: INTEGRA, VERSA
- Program serwisowy: DLOADX
- Program do obsługi: Integra Control, GuardX
USB-RS Kabel do łączenia urządzeń Satel z komputerem
- Typ urządzenia: Konwerter do programowania
- Współpraca: Urządzenia z gniazdami RS-232 / RS-232 (TTL)
- Inne: Kabel USB typu B (1.8 m)
Powiązane porady
Własna aplikacja do INTEGRY – liczymy sumę kontrolną CRC i testujemy (część 2)
Zgodnie z wcześniejszą zapowiedzią, w tej części będziemy wysyłać testowe ramki do manipulatora i będziemy sprawdzać, czy to działa. Zanim jednak to przetestujemy, musimy nauczyć się obliczać sumę kontrolną CRC. Jaki jest wzór na obliczenie sumy kontrolnej dla INT-KLCD? W dokumentacji protokołu można znaleźć opis, jak należy tego dokonać. Obliczenie sprowadza się do wykonania następujących … Czytaj więcej »
Własna aplikacja do INTEGRY – odbieramy dane z centrali (część 3)
Do tej pory zajmowaliśmy się nadawaniem danych do centrali, korzystając ze złącza PIN5 w LCD. I to zadziałało (patrz część 2 serii). Jednak RS-232 to nie tylko nadawanie, ale też odbieranie danych. W ramach złącza PIN5 również zostało to uwzględnione. Trzecia część tej serii artykułów ma za zadanie wyjaśnić, co oznaczają poszczególne bajty odbierane z … Czytaj więcej »
Integracja centrali INTEGRA z zewnętrznym programem – protokół integracji ETHM-1
Moduł ethernetowy ETHM-1 Plus oprócz standardowych funkcji i możliwości, udostępnia specjalny protokół integracyjny. W naszych zasobach dostępny jest również artykuł, który zawiera program do liczenia sumy kontrolnej. Polecamy to narzędzie jako pomocnik przy pisaniu własnej aplikacji. Link do wspomnianego programu dostępny jest na dole tego artykułu. ETHM-1 plus – ethernetowy moduł komunikacyjny Protokół integracyjny został stworzony … Czytaj więcej »
Integracja SATEL INTEGRA z systemem KNX EIB
Aktualnie mamy do czynienia z kilkoma możliwościami integracji systemów alarmowych SATEL INTEGRA z zewnętrznymi systemami. Dzisiaj skupimy się na rozwiązaniach integrujących system alarmowy INTEGRA z siecią KNX. Uwaga! Aktualnie dostępny jest moduł INT-KNX-2 (zamiast tandemu INT-KNX i BTM-KNX). Połączenie centrali INTEGRA z siecią KNX Systemy KNX (dawniej EIB) to rozbudowana struktura urządzeń, która spotykana jest … Czytaj więcej »