Przejdź do treści

Własna aplikacja do INTEGRY – analiza protokołu RS-232 w LCD (część 1)

Jak niestandardowo wykorzystać RS-232 w manipulatorze INT-KLCD?

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.

Artykuł ma tylko zasygnalizować możliwość integracji i stanowi bazę do dalszych, własnych działań. Znajomość zagadnień prezentowanych w artykule wykracza poza zakres, który instalator znać powinien. Jest to więc seria dedykowana dla integratorów systemów oraz tych czytelników, którzy są żądni niestandardowej wiedzy.

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):

0xFF0xFFd1d2dncrc1crc20xFF0xAA

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)

satel int-klcd rs-232
Fragment dokumentacji protokołu INT-KLCD (RS-232)

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:

Chcemy posłużyć się hasłem „1111”, więc 8 bajtów w zapisie szesnastkowym (hex) zapisujemy jako:

Hasło:1111AAAAAAAAAAAA

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.

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:87654321
Bit:________

Dla drugiego bajta:

Numer strefy:161514131211109
Bit:________

Dla trzeciego bajta:

Numer strefy:2423222120191817
Bit:________

Dla czwartego bajta:

Numer strefy:3231302928272625
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:87654321
Bit:00000001

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.

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):

701111AAAAAAAAAAAA0100000000

A pełna ramka, razem z początkiem, sumą kontrolną i końcem wygląda następująco:

FFFF701111AAAAAAAAAAAA01000000007100FFAA

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.

Chcemy posłużyć się hasłem „1111”, więc 8 bajtów w zapisie szesnastkowym (hex) zapisujemy jako:

Hasło:1111AAAAAAAAAAAA

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:87654321
Bit:________

Dla drugiego bajta:

Numer wyjścia:161514131211109
Bit:________

Dla trzeciego bajta:

Numer wyjścia:2423222120191817
Bit:________

Dla czwartego bajta:

Numer wyjścia:3231302928272625
Bit:________

Dla piątego bajta:

Numer wyjścia:4039383736353433
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:87654321
Bit:10000000

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):

751111AAAAAAAAAAAA80000000000000000000000000000000

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.

Ważne
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”).

Oceń
Dodaj poradę do ulubionych

Dodaj komentarz

Możliwość komentowania dostępna jest dla zalogowanych użytkowników