iControl. System automatyki domowej. cz. 1

iControl. System automatyki domowej. cz. 1
Pobierz PDF Download icon
W swojej praktyce konstruktora-programisty kilkukrotnie podejmowałem wyzwanie skonstruowania prostego systemu sterowania i kontroli typu "inteligentny dom", stosując w tym celu różne interfejsy w roli medium umożliwiającego współpracę specjalizowanych modułów. Jednym z przykładów takiego dość rozbudowanego i nowoczesnego projektu może być system intelli-Dom opublikowany na łamach Elektroniki Praktycznej 10...11/2011, który wykorzystywał specjalizowane i bardzo dobrze wyposażone moduły modemów ZigBee. System ten, mimo nie dawał jednak pełnej elastyczności w zakresie konfigurowania sieci modułów wykonawczych, gdyż korzystał z predefiniowanej funkcjonalności tychże modułów nazywanych tam "modułami pokojowymi", a poza tym używał transmisji bezprzewodowej o ograniczonym zasięgu, realizowanej w paśmie 2,4 GHz, opartej na standardzie IEEE 802.15.4. Czas więc na projekt zaawansowany, w pełni konfigurowalny i pozbawiony poprzednich ograniczeń a dodatkowo wyposażony w ultranowoczesny interfejs użytkownika. Rekomendacje: projekt przyda się jako baza dla rozbudowanego systemu zarządzania inteligentnym budynkiem.

Pierwszym, naturalnym wyborem, z którym musiałem się zmierzyć, był oczywiście wybór rodzaju medium transmisyjnego. Tym razem i nie bez dłuższego namysłu, zdecydowałem się na wybór technologii znanej pod nazwą PLC (Power Line Communication). Jest to technologia transmisji danych oparta na przesyłaniu równolegle z napięciem zasilającym o częstotliwości 50 (lub 60) Hz sygnału o wiele wyższej częstotliwości (od kilku kiloherców do kilkudziesięciu megaherców) zawierającego dane.

Pomysł wykorzystania medium, którym jest kabel sieci elektrycznej nie jest nowy i zrodził się już wiele lat temu, zaś jego początki związane były z potrzebą zapewnienia taniego sposobu dostępu do Internetu w miejscach, gdzie inne możliwości były niedostępne. Sieci PLC zostały podzielone na PLC wąskopasmowe (NPL - Narrow Powerline Communication) i szerokopasmowe (BPL - Broadband Power Line).

Wąskopasmowe sieci PLC odniosły sukces dzięki wykorzystaniu w systemach telemetrii i inteligentnych sieciach elektroenergetycznych (tzw. Smart Grid). Współcześnie ich głównym zastosowaniem jest zdalny odczyt liczników, sterowanie ruchem ulicznym, oświetleniem itp. Szerokopasmowe sieci PLC wykorzystywano również do transmisji danych w zakresie dostępu do Internetu i w lokalnych sieciach domowych.

Mimo pewnych wad tej technologii, jakimi może być zakłócone środowisko, niezbyt szybki transfer danych i problemy ze spełnieniem wymogów kompatybilności elektromagnetycznej, jest ona nadal rozwijana w wielu krajach, w tym także i w Polsce. Dużym przełomem w rozwoju szerokopasmowego PLC było ratyfikowanie w 2010 r. przez organizację IEEE standardu 1901.

W najnowszych generacjach urządzeń opartych na tym standardzie wyeliminowano problemy z wolnym tempem transmisji danych, niewielkim zasięgiem oraz ograniczeniami związanymi z nieprzenikaniem sygnału pomiędzy fazami elektrycznymi w sieciach trójfazowych. Nowoczesne urządzenia wykorzystujące szerokopasmowe PLC mają prędkość fizyczną do 500 Mbit/s i zasięg aż do 500 metrów. Działają niezawodnie bez względu na stosowane fazy energii elektrycznej.

Rysunek 1. Schemat blokowy układu CY8CPLC10

W takim razie pora na wybór rozwiązania układowego. Poszukiwania rozpocząłem od przejrzenia oferty producentów półprzewodników w zakresie gotowych układów scalonych pełniących rolę modemów PLC.

Szybko okazało się, że nader często stosowanym układem pełniącym rolę interfejsu PLC jest TDA5051 firmy NXP (wcześniej Philips) będący zintegrowanym modemem PLC zapewniającym transmisję danych opartą o modulację ASK (Amplitude Shift Keying) z maksymalną prędkością na poziomie 1200 bitów na sekundę.

Układ ten, mimo że dość chętnie stosowany (choć już "leciwy"), ma dwie podstawowe wady. Po pierwsze, zastosowana modulacja ASK jest stosunkowo podatna na różne zakłócenia występujące w sieci elektroenergetycznej (zwłaszcza zakłócenia komutacji i generowane przez odbiorniki o charakterze indukcyjnym), a po drugie, nie zaimplementowano w nim żadnego stosu komunikacyjnego zapewniającego chociażby wielodostęp do medium transmisyjnego pozostawiając to zadanie po stronie projektanta systemu. Mimo to, zacząłem projektowanie systemu oraz oprogramowywanie prostego stosu komunikacyjnego z wykorzystaniem kodowania typu Manchester jako remedium na zakłócenia sieciowe.

Problemem, z którym musiałem się zmierzyć, był wybór mechanizmu zapewniającego wielodostęp do medium transmisyjnego oraz fakt, że w rozwiązaniach wykorzystujących modulację ASK i układy z rodziny TDA5051 użyteczna transmisja danych jest przeprowadzana w krótkim oknie czasowym tuż przed i tuż po przejściu napięcia zasilającego przez zero w celu zminimalizowania wpływu zakłóceń na transmisję użytecznych danych (sposób stosowany na przykład w protokole X10 przeznaczonym do sterowania urządzeniami domowymi).

Ta właściwość powoduje, że zmniejsza się użyteczna, wynikowa prędkość transmisji danych, co pogarsza właściwości użytkowe tak skonstruowanej sieci. Mimo że moje prace w tym kierunku były już dość zaawansowane, zacząłem poszukiwania lepszego rozwiązania układowego. I właśnie w tym czasie natknąłem się na doskonałe rozwiązanie firmy Cypress, którym jest układ scalony CY8CPLC10. Chip ten jest scalonym, zaawansowanym i kompletnym rozwiązaniem modemu PLC wykorzystującym modulację FSK (Frequency Shift Keying), mającym zaimplementowany stos komunikacyjny.

Rysunek 2. Schemat funkcjonalny wbudowanego w układ CY8CPLC10 modemu PLC

Układ CY8CPLC10 charakteryzuje się następującymi, wybranymi cechami użytkowymi:

  • Zintegrowany interfejs fizyczny modemu PLC (Physical Layer Interface).
  • Modulacja FSK zapewniająca prędkość transmisji na poziomie 2400 bitów na sekundę.
  • Kompletny protokół komunikacyjny zoptymalizowany dla sieci PLC zapewniający realizację wszystkich warstw komunikacji (Data Link, Transport i Network Layers).
  • Komunikacja dwukierunkowa typu half duplex z korekcją błędów (8 bitowe CRC) i sygnałem potwierdzenia (ACK).
  • Wbudowany mechanizm wielodostępu do medium komunikacyjnego (CSMA - Carrier Sense Multiple Access).
  • Zintegrowany interfejs sterujący I²C pracujący w trybie high-speed (400 kHz).
  • Wsparcie dla sieci zmiennoprądowych AC 110...240 V i stałoprądowych DC 12...24 V.
  • Wsparcie dla wielu trybów transmisji danych w sieci: master-slave, peer-to-peer i multimaster.
  • 3 tryby adresowania urządzeń sieciowych: logiczny (8-bitów), rozszerzony logiczny (16-bitów) i fizyczny (64-bity).
  • 2 tryby rozgłaszania adresów urządzeń: indywidualny i grupowy (możliwość przyporządkowania urządzeń do jednej z 256 grup i sterowania grupowego).
  • Szereg kilkudziesięciu rejestrów kontrolnych/ sterujących dających pełną kontrolę nad transmisją danych.
  • Wbudowany detektor BIU (Band-In-Use) zgodny ze standardem CENELEC EN 50065-1.
  • Zgodność ze standardem CENELEC EN50065-1:2001 i FCC part 15 (dla Ameryki Północnej).

Rysunek 3. Rozmieszczenie wyprowadzeń układu CY8CPLC10

Już z pobieżnej analizy długiej listy możliwości widać, że układ idealnie wpisuje się w potrzeby bieżącego projektu zwalniając nas jednocześnie z konieczności rozwiązania wielu problemów technicznych wynikających z konstrukcji stosu komunikacyjnego i mechanizmów dostępu do medium transmisyjnego.

Na rysunku 1 pokazano diagram obrazujący schemat blokowy układu CY8CPLC10, natomiast na rysunku 2 diagram obrazujący schemat funkcjonalny wbudowanego modemu PLC.

Warto na chwilę zatrzymać się nad schematem funkcjonalnym modemu PLC, aby poznać sposób nadawania i odbioru pakietów danych. W konstrukcji nadajnika modemu PLC wykorzystano modulator, który "zasilany" kolejnymi bitami przesyłanych danych generuje sygnał wyjściowy o dwóch możliwych częstotliwościach, zależnych od wartości aktualnie przetwarzanego bitu danych. Dla bitu równego "0" jest to częstotliwość 133,3 kHz, zaś dla bitu o wartości "1" - 131,8 kHz (lub 130,4 kHz - w zależności od ustawień konfiguracyjnych). Wyjście modulatora jest połączone ze wzmacniaczem sygnału o regulowanym programowo wzmocnieniu, a następnie wyprowadzone na zewnątrz układu (pin FSK_OUT) dostarczając w ten sposób sygnał o modulacji FSK.

W części odbiorczej mamy do czynienia z dużo bardziej rozbudowanym układem. Zmodulowany, sieciowy sygnał wejściowy (pin FSK_IN) jest wprowadzany do wewnętrznego filtru pasmowoprzepustowego, który zawęża pasmo sygnału użytecznego do 125 kHz...140 kHz, po czym ten sygnał "zasila" demodulator zbudowany z prostego miksera, lokalnego generatora częstotliwości wzorcowej, filtra częstotliwości pośredniej i korelatora.

Sygnał wyjściowy korelatora, który zawiera już zdemodulowany przebieg wyjściowy odpowiadający przesyłanym danym z komponentami o wyższych częstotliwościach, wchodzi na wejście zewnętrznego filtra dolnoprzepustowego (piny RXCOMP_IN i RXCOMP_OUT) o częstotliwości odcięcia równej 7,5 kHz, a następnie na wejście kolejnego, wewnętrznego filtra dolnoprzepustowego, który tłumi wszystkie wyższe składowe częstotliwości generowane w procesie korelacji.

Sygnał z wyjścia tego filtra przechodzi jeszcze przez układ komparatora z histerezą, który służy eliminowania potencjalnych zakłóceń i korygowania opóźnienia wnoszonego przez korelator. Wyjście z komparatora "zasila" rejestr przesuwny, który zamienia strumień szeregowy na wyjściowe pakiety danych poddawane następnie analizie przez mechanizmy warstwy sieciowej stosu komunikacyjnego. Rozmieszczenie wyprowadzeń układu CY8CPLC10 pokazano na rysunku 3 zaś ich opis funkcjonalny umieszczono w tabeli 1.

Tabela 1. Opis wyprowadzeń układu CY8CPLC10

Można zauważyć jak wiele komponentów warstwy fizycznej jest zaangażowanych w proces dekodowania sygnału PLC, który w dalszej kolejności trafia do części logicznej, odpowiedzialnej za właściwą interpretację danych, ich integralność oraz odpowiednią synchronizację.

Warstwa sieciowa korzysta z ciekawej konstrukcji ramki pakietu danych, której to wygląd pokazano na rysunku 4. Można zauważyć, że struktura ramki składa się z nagłówka o zmiennej długości (6 do 20 bajtów) zależnej od typu przesyłanych adresów urządzenia źródłowego (SA Type) i urządzenia docelowego (DA Type), dołączonych danych o długości od 0 do 31 bajtów oraz sumy kontrolnej CRC8. Pierwszy bajt nagłówka (0x00) zawiera następujące informacje, determinujące logiczny podział całego pakietu danych:

  • Pole SA Type (bit 7) określa rodzaj przesyłanego adresu urządzenia źródłowego (wysyłającego pakiet danych) według następującej specyfikacji: 0 → adres logiczny (8-bitów), 1 → adres fizyczny (unikalne 64-bity zdefiniowane przez producenta układu).
  • Pole DA Type (bity 6..5) określa rodzaj przesyłanego adresu urządzenia docelowego (będącego adresatem przesyłanego pakietu danych) według następującej specyfikacji: 0 → adres logiczny (8-bitów), 1 → adres grupowy (8-bitów), 2 → adres fizyczny (unikalne 64-bity zdefiniowane przez producenta układu).
  • Pole Service Type (bit 4) określa konieczność (jeśli ustawione) potwierdzania wysyłanych pakietów danych determinując generowanie sygnału ACK przez strony transmisji.
  • Pole Response (bit 1) determinuje czy przesyłany pakiet jest odpowiedzią na żądanie przesłania danych (jeśli ustawione) czy też "zwykłą" transmisją danych.

Znaczenie kolejnych pól danych pozostałych bajtów pakietu przedstawia się następująco:

  • Bajt(y) Destination Address (0x01) określa(ją) adres urządzenia docelowego. Ponieważ dopuszczalne są 3 sposoby adresowania różniące się długością (8 lub 64 bity), offset kolejnych bajów w zakresie nagłówka pakietu danych może podlegać zmianie.
  • Bajt(y) Source Address (0x02) określa(ją) adres urządzenia źródłowego. Ponieważ dopuszczalne są 3 sposoby adresowania różniące się długością (8 lub 64 bity), offset kolejnych bajów w zakresie nagłówka pakietu danych może podlegać zmianie.
  • Bajt Command (0x03) określa rodzaj przesyłanego rozkazu w ramach predefiniowanych rozkazów stosu komunikacyjnego, które to mogę powodować podjęcie różnych akcji automatycznych lub też powodować zmiany konfiguracji urządzenia docelowego, jak też w ramach zdefiniowanych przez użytkownika własnych rozkazów sterujących właściwych dla implementowanej aplikacji.
  • Pole Payload Length (bity 4...0 bajtu 0x04) określa długość (w bajtach) pakietu dołączonych danych.
  • Pole Seq Num (bity 7...4 bajtu 0x05) jest używane przez stos komunikacyjny w wypadku retransmisji pakietu danych, na skutek błędów transmisji. Pole to podlega inkrementacji za każdym razem, gdy przesyłany jest zupełnie nowy pakiet danych, natomiast pozostaje bez zmian w przypadku retransmisji pakietu bieżącego. Dopuszczalna liczba retransmisji podlega konfiguracji ze strony użytkownika. Dzięki takiej konstrukcji stosu komunikacyjnego unika się duplikacji odbieranych danych po stronie kontrolera- -hosta w przypadkach ich wielokrotnych retransmisji.
  • Pole Powerline Packet Header CRC (bity 3...0 bajtu 0x05) zawiera sumę kontrolną nagłówka pakietu danych (wykorzystywaną przez mechanizmy stosu komunikacyjnego).
  • Bajty Payload to użyteczne dane przesyłanego pakietu danych (dane użytkownika).
  • Bajt Powerline Transceiver Packet CRC zawiera sumę kontrolną CRC8 całego pakietu danych, w tym nagłówka i danych użytecznych (wykorzystywaną przez mechanizmy stosu komunikacyjnego).

Rysunek 4. Budowa ramki pakietu danych układu CY8CPLC10

Firma Cypress zastosowała bardzo przemyślaną strukturę pakietu danych, co zaowocowało dużą elastycznością funkcjonalną układu zastosowanego w tym projekcie, otwierając nowe możliwości stosu komunikacyjnego. Kilka słów uwagi należy w tym miejscu poświęcić sposobom adresowania urządzeń w tak skonstruowanej sieci PLC.

Każdy układ CY8CPLC10 ma stały, nadany przez producenta w procesie produkcji, unikalny, 64-bitowy adres fizyczny (wzorem adresu MAC), który jednoznacznie identyfikuje go w sieci. Aby jednak zmniejszyć ruch w sieci spowodowany wysyłaniem dłuższych pakietów danych, które zawierają 64-bitowe adresy urządzenia źródłowego i docelowego, możliwe jest nadanie każdemu z modemów unikalnego, 8-bitowego adresu logicznego, co jednocześnie powoduje, że maksymalna liczba urządzeń, które mogą współpracować w tak skonfigurowanej sieci wyniesie wtedy 256. Jako opcjonalny rodzaj adresu, jeśli wymagana przez nas liczba urządzeń przekracza wartość 256, jest możliwe ustawienie rozszerzonego, 16-bitowego adresu logicznego, co powoduje zwiększenie liczby możliwych urządzeń do 65536. Jakby tego było mało, dostępne są 3 sposoby ustawienia 8-bitowego adresu logicznego:

  • Przez kontrolera-hosta przy udziale magistrali I²C.
  • Poprzez odpowiednie skonfigurowanie wyprowadzeń układu oznaczonych LOG_ADDR_2...LOG_ADDR_0 (jednak wtedy dostępnych jest wyłącznie 8 adresów).
  • Zdalnie, za pomocą innego modemu PLC korzystającego z predefiniowanych rozkazów stosu PLC pod warunkiem, że modem odbierający tego rodzaju rozkaz jest skonfigurowany w taki sposób by nie ignorował go!

Oprócz możliwości adresowania indywidulanych urządzeń w implementacji stosu komunikacyjnego przewidziano możliwość pracy rozgłoszeniowej, to znaczy możliwość wysyłania pakietów danych do wielu urządzeń docelowych w jednym czasie (tzw. multicast messages). Jakby tego było mało, przewidziano dwa sposoby adresowania grupowego, które mogą być aktywne dla każdego urządzenia w tym samym czasie.

Każde z urządzeń wyposażonych w układ CY8CPLC10 może być skonfigurowane w taki sposób by było członkiem jednej z 256 dostępnych grup urządzeń lub też może zostać przydzielone do 8 grup w tym samym czasie. Co oczywiste, z założenia przy wysyłaniu wiadomości grupowej wyłączone zostaje potwierdzanie wysyłanych pakietów danych bo w tym wypadku traci ono sens. Imponujące możliwości, nieprawdaż?

Rejestry konfiguracyjne CY8CPLC10

W tym miejscu dysponujemy już sporą dawką wiedzy na temat naszego modemu PLC, jednak by w pełni zrozumieć "drzemiące" w nim możliwości nie sposób nie przedstawić, choćby po krótce, najważniejszych rejestrów konfiguracyjnych, przy udziale których mamy dostęp do pełnej funkcjonalności układu.

Znaczenie poszczególnych bitów rejestru INT_ENABLE przedstawia się następująco:

  • Bit INT_CLEAR jest ustawiany przez układ CY8CPLC10 za każdym razem, gdy zajdzie zdarzenie, dla którego uruchomiono generowanie przerwań na wyprowadzeniu HOST_INT. Użytkownik powinien wyzerować ten bit po odczytaniu rejestru statusu INT_STATUS, który przechowuje flagi zdarzeń (spowoduje to wykasowanie flag tegoż rejestru za wyjątkiem flag: STATUS_RX_PACKET_DROPPED i STATUS_RX_DATA_AVAILABLE).
  • Bit INT_POLARITY decyduje o polaryzacji sygnału na wyjściu HOST_INT: 0 → aktywny stan wysoki, 1 → aktywny stan niski.
  • Bit INT_UNABLE_TO_TX uruchamia (gdy ustawiony) generowanie przerwań w przypadku, gdy modem PLC nie jest w stanie wysłać pakietu danych (upływa maksymalny czas w jakim modem PLC stara się wysłać pakiet danych sprawdzając ustawicznie zajętość magistrali).
  • Bit INT_NO_ACK uruchamia (gdy ustawiony i wybrano potwierdzanie pakietów danych) generowanie przerwań w przypadku nieotrzymania potwierdzenia odbioru pakietu danych (od adresata wiadomości).
  • Bit INT_NO_RESP uruchamia (gdy ustawiony) generowanie przerwań w przypadku, gdy modem nie otrzymał (w ustalonym czasie) odpowiedzi od adresata, od którego zażądał wysłania danych (wybrane, predefiniowane rozkazy stosu komunikacyjnego).
  • Bit INT_RX_PACKET_DROPPED uruchamia (gdy ustawiony) generowanie przerwań w wypadku przepełnienia (nadpisania) bufora danych odbiorczych.
  • Bit INT_DATA_AVAIBLE uruchamia (gdy ustawiony) generowanie przerwań w przypadku odebrania pakietu danych.
  • Bit INT_DATA_SENT uruchamia (gdy ustawiony) generowanie przerwań w przypadku pomyślnego wysłania pakietu danych.

Wartość rejestru LOCAL_LA_LSB określa 8-bitowy adres logiczny modemu PLC lub młodszy bajt 16-bitowego, rozszerzonego adresu logicznego (w przypadku korzystania z tego typu adresacji).

Wartość rejestru LOCAL_LA_MSB określa starszy bajt 16-bitowego, rozszerzonego adresu logicznego (w przypadku korzystania z tego typu adresacji).

Wartość rejestru LOCAL_GROUP określa 8-bitowy adres grupy, do której przyporządkowano modem PLC (w przypadku odbioru wiadomości typu multicast).

Wartość każdego z bitów rejestru LOCAL_GROUP_HOT określa przynależność modemu PLC do dodatkowo zdefiniowanych grup (o numerach od 7 do 0, odpowiednio dla każdego z bitów rejestru). Na przykład, wpisanie do tego rejestru wartości 0b00010001 spowoduje, iż modem PLC należeć będzie do dodatkowych grup o numerach #5 i #1.

Rejestr PLC_MODE określa podstawowe właściwości sprzętowe modemu PLC. Poszczególne bity tegoż rejestru mają następujące znaczenie funkcjonalne:

  • Bit TX_ENABLE uruchamia (gdy ustawiony) nadajnik modemu PLC.
  • Bit RX_ENABLE uruchamia (gdy ustawiony) odbiornik modemu PLC.
  • Bit LOCK_CONFIG uniemożliwia (gdy ustawiony) zdalną (przy udziale innego modemu PLC) zmianę konfiguracji modemu PLC
  • Bit DISABLE_BIU wyłącza (gdy ustawiony) detektor zajętości magistrali PLC (mechanizm Band-In-Use).

Ustawienie bitu RX_OVERWRITE powoduje, iż nowe dane odebrane przez modem nadpisują dane ostatnio odebrane, nawet, jeśli nie zostały jeszcze odczytane. Wartość bitu SET_EXT_ADDRESS określa rodzaj stosowanego adresu logicznego: 0 → 8-bitowy adres logiczny, 1 → 16-bitowy, rozszerzony adres logiczny. Wartość bitu PROMISCUOUS_MASK określa sposób interpretowania danych odbieranych przez modem PLC: 0 → modem PLC ignoruje wszystkie dane, jeśli adres przeznaczenia nie jest zgodny z jego adresem (logicznym lub fizycznym), 1 → modem PLC odbiera wszystkie dane niezależnie od adresu ich przeznaczenia, jeśli tylko zaopatrzone zostały w poprawna sumę kontrolna CRC8. Wartość bitu PROMISCUOUS_CRC_MASK określa mechanizmy kontroli poprawności przesyłanych danych: 0 → modem PLC ignoruje wszystkie dane, dla których przesłano niepoprawną wartość sumy kontrolnej CRC8, 1 → modem PLC odbiera wszystkie dane niezależnie od wartości sumy kontrolnej CRC8 (jeśli tylko adres przeznaczenia przesyłanych danych zgadza się z adresem modemu).

Rejestr TX_MESSAGE_LENGTH określa długość pakietu danych przeznaczonych do wysłania (użytecznych danych użytkownika) → bity D4...D0 oraz inicjuje, poprzez ustawienie bitu SEND_MESSAGE, transmisję danych. Należy mieć na uwadze, iż przed inicjacją transmisji danych należy ustawić wartości wszystkich rejestrów odpowiedzialnych za parametry tejże transmisji jak i wartości samych danych, tj. rejestry: TX_CONFIG, TX_DA, TX_COMMAND_ID i TX_DATA.

Rejestr TX_CONFIG określa podstawowe parametry nadajnika modemu PLC. Poszczególne bity tego rejestru mają następujące znaczenie:

  • Bit TX_SA_TYPE określa rodzaj adresu urządzenia źródłowego (wysyłającego dane): 0 → adres logiczny, 1 → adres fizyczny.
  • Bity TX_DA_TYPE określają rodzaj adresu urządzenia docelowego (urządzenia, dla którego przeznaczone są wysyłane dane): 0 → adres logiczny, 1 → adres grupowy, 2 → adres fizyczny.
  • Bit TX_SERVICE_TYPE określa konieczność (jeśli ustawiony) potwierdzania wysyłanych pakietów danych determinując generowanie sygnału ACK przez strony transmisji.
  • Bity TX_RETRY określają liczbę dopuszczalnych retransmisji pakietu danych w przypadku niepowodzenia tejże transmisji.

Rejestr TX_DA określa adres urządzenia docelowego (jeśli wybrany wcześniej rodzaj adresu rządzenia docelowego to adres logiczny lub grupowy) lub też definiuje najstarszy bajt 64-bitowego, fizycznego adresu urządzenia docelowego. W tym drugim wypadku, kolejne rejestry o adresach 0x09...0x0F definiują pozostałe bajty adresu fizycznego.

Rejestr TX_COMMAND_ID determinuje rodzaj przesyłanego rozkazu do urządzenia docelowego. Predefiniowane rozkazy o numerach 0x01...0x0F powodują podjęcie przez modem docelowy różnych akcji automatycznych lub też generują zmiany jego konfiguracji, np. zdalną zmianę adresu logicznego modemu docelowego, żądanie danych, zdalny odczyt adresu fizycznego modemu docelowego itd i są ściśle określone w specyfikacji stosu komunikacyjnego. Rozkazy o numerach 0x30...0xFF nie są zdefiniowane przez stos komunikacyjny i przeznaczone są do swobodnego wykorzystania przez docelową aplikację użytkownika.

Rejestr TX_DATA określa początek obszaru (od 0x11 do 0x2F) przeznaczonego na użyteczne dane przeznaczone do transmisji.

Rejestr THRESHOLD_NOISE określa parametry dla mechanizmu detekcji zajętości magistrali danych PLC (detektora BIU). Bity BIU_THRESHOLD_CONSTANT określają predefiniowany poziom sygnału (w dBmVrms), dla którego przyjmuje się, iż magistrala danych jest zajęta przez inne urządzenie PLC. Wartość domyślna (0x03) odpowiada ustawieniu 87 dBmVrms. Ustawienie bitu AUTO_BIU_THRESHOLD wymusza automatyczny dobór poziomu sygnału detektora BIU.

Rejestr MODEM_CONFIG określa podstawowe parametry modemu PLC. Poszczególne bity rejestru mają następujące znaczenie funkcjonalne:

  • Bity TX_DELAY określają opóźnienie, jakie wprowadzane jest przez modem przed każdą transmisja danych: 0 → 7 ms, 1 → 13 ms, 2 → 19 ms, 3 → 25 ms.
  • Bit MODEM_FSKBW_MASK determinuje wartości częstotliwości modulacji odpowiadające poziomom logicznym "0" i "1": 0 → 133,3 kHz dla "0" i 131,8 kHz dla "1", 1 → 133,3 kHz dla "0" i 130,4 kHz dla "1". Co oczywiste, ustawienie to musi być takie same dla wszystkich urządzeń PLC komunikujących się w obrębie projektowanej sieci.
  • Bity MODEM_BPS_MASK określają prędkość transmisji modemu PLC: 0 → 600 bps, 1 → 1200 bps, 2 → 1800 bps, 3 → 2400 bps (ustawienie domyślne). Co oczywiste, ustawienie to powinno być takie same dla wszystkich urządzeń PLC w obrębie projektowanej sieci.

Rejestr TX_GAIN determinuje predefiniowane wzmocnienie sygnału dla wbudowanego w modem PLC nadajnika. Dostępne wartości z przedziału 0x00...0x0E odpowiadają ustawieniom 55 mVp-p...3.5 Vp-p (domyślna wartość 0x0B odpowiada ustawieniu 1.55 Vp-p). Zmiany ustawień tego rejestru niezbędne są w przypadku implementacji dodatkowego, zewnętrznego wzmacniacza sygnału nadajnika jak też dla spełnienia wymagań dotyczących poziomu sygnału transmisji PLC w zakresie odpowiednich norm.

Rejestr RX_GAIN determinuje predefiniowane wzmocnienie sygnału dla wbudowanego w modem PLC odbiornika. Dostępne wartości z przedziału 0x00...0x07 odpowiadają ustawieniom 5 mVrms...125 mVrms (domyślna wartość 0x00 odpowiada ustawieniu 5 mVrms). Zmiany ustawień tego rejestru niezbędne są w przypadku implementacji dodatkowego, zewnętrznego wzmacniacza sygnału odbiornika.

Rejestr RX_MESSAGE_INFO udostępnia informacje na temat właściwości odebranego pakietu danych. Poszczególne bity tegoż rejestru mają następujące znaczenie funkcjonalne:

  • Bit NEW_RX_MSG jest flagą odebrania nowego pakietu danych. Bit ten powinien być wyzerowany przez aplikację użytkownika po odczytaniu przesłanych danych by umożliwić dalszy odbiór pakietów danych. Wyzerowanie tego bitu powoduje także skasowanie flag STATUS_VALUE_CHANGE, STATUS_ RX_PACKET_DROPPED i STATUS_RX_ DATA_AVAILABLE w rejestrze flag przerwań INT_STATUS_REGISTER.
  • Bit RX_DA_TYPE przechowuje informację o rodzaju adresu urządzenia docelowego, jaki zdefiniowano dla odebranego pakietu danych: 0 → adres logiczny/fizyczny, 1 → adres grupowy.
  • Bit RX_SA_TYPE przechowuje informację o rodzaju adresu urządzenia źródłowego, jaki zdefiniowano dla odebranego pakietu danych: 0 → adres logiczny, 1 → adres fizyczny.
  • Bity RX_MSG_LENGTH przechowuje informację o długości danych użytecznych w odebranym pakiecie danych.

Rejestr RX_SA określa adres urządzenia źródłowego, które wysłało do naszego modemu PLC pakiet danych. W zależności od wartości bitu RX_SA_TYPE w rejestrze RX_MESSAGE_INFO adres ten stanowi wartość wyłącznie rejestru 0x41 dla rodzaju adresu typu logicznego, wartości rejestrów 0x41 i 0x42 (jako MSB) dla rozszerzonego adresu logicznego i wartości rejestrów 0x41...0x48 (jako LSB) dla adresu fizycznego.

Rejestr RX_COMMAND_ID przechowuje informację o rodzaju przesłanego rozkazu w bieżącym pakiecie odebranych danych.

Rejestr RX_DATA określa początek obszaru (od 0x4A do 0x68), który zawiera użyteczne dane przesłane w bieżącym pakiecie danych.

Rejestr INT_STATUS jest rejestrem flag przerwań związanych z funkcjonowaniem modemu PLC. Aby skasować flagi w tym rejestrze (za wyjątkiem flag STATUS_RX_PACKET_DROPPED i STATUS_RX_DATA_AVAILABLE) należy wyzerować bit INT_CLEAR w rejestrze INT_ENABLE. Z kolei, aby skasować flagi STATUS_RX_PACKET_DROPPED, STATUS_ RX_DATA_AVAILABLE i STATUS_VALUE_ CHANGE należy wyzerować bit NEW_RX_ MSG w rejestrze RX_MESSAGE_INFO.

Poszczególne bity rejestru INT_STATUS mają następujące znaczenie funkcjonalne:

  • Bit STATUS_VALUE_CHANGE ustawiany jest za każdym razem, gdy odebrano nowe dane.
  • Bit STATUS_BUSY ustawiany jest za każdym razem, gdy nie ma możliwości przesłania pakietu danych z uwagi na zajętość magistrali danych PLC (timeout 1,1...3 s w zależności od ustawień detektora BIU).
  • Bit STATUS_TX_NO_ACK ustawiany jest za każdym razem, gdy w czasie 500 ms od przesłania pakietu danych nie odebrano potwierdzenia odebrania tegoż pakietu danych po stronie urządzenia docelowego (w przypadku konfiguracji sieci obejmującej potwierdzanie pakietów danych).
  • Bit STATUS_TX_NO_RESP ustawiany jest w przypadku wybranych rozkazów stosu komunikacyjnego, jak na przykład rozkazów, które wymuszają przesłanie przez urządzenie docelowe danych (żądanie przesłania danych wysłane przez urządzenie źródłowe, np. rozkaz SEND_REMOTE_DATA) lub rozkazu zdalnej zmiany adresu logicznego urządzenia docelowego, a dane takie nie zostaną przez to urządzenie przesłane w czasie 1.5 s od przesłania rozkazu.
  • Bit STATUS_RX_PACKET_DROPPED ustawiany jest w przypadku nadpisania bufora odbiorczego nowymi danymi, gdy dane poprzednie nie zostały jeszcze odczytane.
  • Bit STATUS_RX_DATA_AVAILABLE ustawiany jest za każdym razem, gdy modem PLC odbierze nowy pakiet danych.
  • Bit STATUS_TX_DATA_SENT ustawiany jest wyłącznie wtedy, gdy bieżąca transmisja danych zakończy się powodzeniem.

Rejestr LOCAL_PA określa początek obszaru (od 0x6A do 0x71), który zawiera unikalny, 64-bitowy, fizyczny adres modemu PLC.

Funkcje sterujące pracą modemu CY8CPLC10

Listing 1. Funkcje obsługujące interfejs TWI

Przebrnęliśmy przez szczegółowy opis rejestrów konfiguracyjnych układu CY8CPLC10, dzięki czemu dysponujemy już niezbędną wiedzą by przejść do konfiguracji naszego systemu. Zanim jednak, opiszę szczegóły implementacyjne tego, konkretnego rozwiązania, warto pokazać, choćby po krótce, funkcje, za pomocą których jest możliwe sterowanie pracą modemu.

Na początek opiszę podstawowe funkcje, dzięki którym jest możliwa komunikacja przy udziale interfejsu TWI mikrokontrolera, przy czym należy zaznaczyć, iż są to najprostsze implementacje poszczególnych funkcjonalności niewyposażone np. w mechanizm obsługi błędów, który moim zdaniem, nie jest elementem niezbędnym w tak prostych i niewielkich systemach mikroprocesorowych.

Ciała funkcji odpowiedzialnych za obsługę interfejsu TWI pokazano na listingu 1.

Listing 2. Ciała funkcji odpowiedzialnych za zapis/odczyt rejestrów układu CY8CPLC10

Myślę, że nie wymagają one dodatkowego komentarza, gdyż ich nazwy są na tyle wymowne, iż nie pozostawiają wątpliwości, co do realizowanych przez nie funkcjonalności. Przejdźmy, zatem do podstawowych funkcji umożliwiających zapis i odczyt pojedynczych rejestrów modemu PLC, jak i całych grup rejestrów, które to pokazano na listingu 2.

Oczywiście, można by było zastosować jeden rodzaj funkcji dla odczytu/ zapisu zarówno pojedynczych rejestrów jak i całych ich grup, jednak takie rozwiązanie powoduje optymalizację kodu wynikowego zarówno pod względem szybkości wykonania jak i wielkości generowanego kodu.

Pora na przedstawienie kluczowych funkcji umożliwiających konfigurację podstawowych parametrów naszego modemu PLC. Na początek dwie funkcje, jedna przeznaczona do ustawienia typów adresów urządzenia źródłowego i docelowego pakietu danych PLC, zaś druga do ustawienia samego adresu urządzenia docelowego. Funkcje te przedstawiono na listingu 3.

Kolejne, dwie, bardzo krótkie funkcje narzędziowe, które pokazano na listingu 4 służą do ustawienia adresu logicznego modemu PLC jak i adresu grupy, do której przyporządkowujemy nasze urządzenie.

Listing 3. Ciała funkcji odpowiedzialnych za ustawienie rodzaju adresów urządzenia źródłowego i docelowego modemu PLC oraz funkcji umożliwiającej ustawienie adresu urządzenia docelowego

Pora na funkcje użyteczne w przypadku odbioru pakietu danych PLC. Pierwsza z nich, przedstawiona na listingu 5 służy do ustalenia typów adresów urządzenia źródłowego i docelowego, które zostały przesłane w odebranym pakiecie danych PLC, zaś druga z nich służy do odczytania adresu urządzenia źródłowego.

Do "kompletu" brakuje nam funkcji, która umożliwia odczytanie przesłanego pakietu danych, towarzyszącego im rozkazu oraz określenie długości tegoż pakietu danych. Ciało tej funkcji pokazano na listingu 6.

Dodatkowo, w przypadku odbioru pakietu danych PLC, przydatna może być funkcja, która pozwala nam na ustalenie zdarzenia, jakie spowodowało wyzwolenie przerwania odpowiedzialnego za obsługę pakietów danych. Ciało tej funkcji pokazano na listingu 7.

No i już zupełnie na koniec, funkcja, która pozwala na pełne skonfigurowanie modemu PLC. Ciało tej funkcji pokazano na listingu 8.

Listing 4. Ciała funkcji umożliwiających ustawienie adresu logicznego i adresu grupowego modemu PLC

Dla porządku przedstawię również listing pliku nagłówkowego modemu PLC, który jak zwykle konstruuję w taki sposób, by bez potrzeby zaglądania do dokumentacji układu, zorientować się w dostępnej liście możliwości.

Zawartość tego pliku nagłówkowego pokazano na listingu 9.

Założenia projektowe, funkcjonalność systemu

Listing 5. Ciała funkcji umożliwiających ustalenie typów adresów urządzenia źródłowego i docelowego przesłanego pakietu danych PLC jak i samego adresu urządzenia źródłowego

Na tą chwilę dysponujemy już kompletną wiedzą, która daje nam możliwość obsługi modemu PLC w związku, z czym pora przejść do konkretnej implementacji systemu iControl.

Podstawowe założenia systemu iControl przedstawiają się następująco:

W ramach jednej sieci systemu iControl (jednego mieszkania lub domu) zakłada się współistnienie maksymalnie 64 modułów wykonawczych (typu Slave) o adresach logicznych z zakresu 0x00...0x3F oraz maksymalnie 16 modułów sterujących (typu Master), wyposażonych w interfejs użytkownika z wyświetlaczem TFT, o adresach logicznych z zakresu 0xF0÷0xFF.

Listing 6. Ciało funkcji umożliwiającej odczytanie przesłanego pakietu danych PLC

Adresy logiczne modułów wykonawczych nadawane są automatycznie przez moduły sterujące podczas konfigurowania sieci, zaś adresy logiczne modułów sterujących nadawane są przez użytkownika przy pomocy interfejsu użytkownika GUI.

Każdy moduł sterujący może zapamiętać i zaadresować maksymalnie 64 moduły wykonawcze (staje się wtedy tzw. "rodzicem" modułu wykonawczego).

Wszystkie moduły wykonawcze zapamiętane przez dany moduł sterujący mogą zostać połączone w maksymalnie 8 grup, dowolnie podczas konfiguracji sieci, reprezentujących pomieszczenia, nad którymi moduł ten ma kontrolę (np. pokoje).

Listing 7. Ciało funkcji umożliwiającej ustalenie zdarzenia, jakie spowodowało wyzwolenie przerwania odpowiedzialnego za obsługę pakietów danych

Każdy moduł wykonawczy, którego dany moduł sterujący jest "rodzicem" może być współdzielony innemu modułowi sterującemu, dzięki czemu w jednym czasie kilka modułów sterujących może mieć kontrolę nad jednym i tym samym modułem wykonawczym (daje to możliwość sterowania np. oświetleniem w kilku pokojach z jednego modułu sterującego umieszczonego w innym miejscu), przy czym w takim wypadku, moduły sterujące wymieniają się na bieżąco parametrami nadzorowanego modułu sterującego by stan tego modułu był znany każdemu z nich.

Listing 8. Ciało funkcji umożliwiającej kompletną konfigurację modemu PLC void initPLCdevice(uint8_t nodeLA)

W ramach graficznego interfejsu użytkownika modułu sterującego, każdy moduł wykonawczy identyfikowany jest przez unikalną nazwę nadaną przez użytkownika systemu. Podobnie, każda z 8 możliwych grup (pomieszczeń), w które mogą być zebrane moduły wykonawcze podlega konfiguracji (aktywacji/ dezaktywacji, nadaniu nazwy) w ramach wspomnianego interfejsu użytkownika.

Przewidziano 5 rodzajów modułów wykonawczych, automatycznie rozpoznawanych przez moduły sterujące, co determinuje wygląd tego modułu w ramach interfejsu użytkownika oraz sposób sterowania: wyłącznik 1-biegunowy, wyłącznik 2-biegunowy, ściemniacz, sensor temperatury, sterownik oświetlenia RGB LED.

System iControl sygnalizuje dołączenie nowych, jeszcze nieskonfigurowanych, modułów wykonawczych w sieci (zapamiętuje do 16 nowych modułów wykonawczych) jak również wystąpienie błędów transmisji (sterowania modułem wykonawczym).

Listing 9. Plik nagłówkowy modemu PLC

System iControl umożliwia usuwanie modułów wykonawczych z sieci, a co za tym idzie - rekonfigurowanie sieci.

Zakłada się następującą kolejność czynności w ramach konfiguracji sieci: podłączone i skonfigurowane (nadany adres logiczny) wszystkie, planowane moduły sterujące a w każdym z nich zdefiniowana przynajmniej jedna z grup (pomieszczeń).

Następnie, dołączamy i konfigurujemy każdy, kolejny moduł sterujący, przy czym dla uproszczenia procedury konfiguracji z punktu widzenia użytkownika, zakłada się, iż kolejny moduł wykonawczy zostanie dołączony do sieci dopiero po zakończeniu konfigurowania modułu ostatnio dołączonego (pozwala to łatwiej zorientować się, który moduł fizycznie jest aktualnie konfigurowany).

Znając logiczną strukturę systemu iControl pora na przedstawienie konstrukcji pakietów danych (przesyłanych rozkazów i towarzyszących im danych) w ramach konfiguracji sieci jak i jej "normalnego" funkcjonowania. Opiszę je i zaprezentuję schematy i projekty płytek drukowanych w drugiej części artykułu.

Robert Wołgajew, EP

Artykuł ukazał się w
Elektronika Praktyczna
styczeń 2015
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik kwiecień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio maj - czerwiec 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje kwiecień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna kwiecień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich maj 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów