Całość jako system umożliwia prezentację danych za pośrednictwem strony internetowej, ale trudno wymagać, by za każdym razem, by sprawdzić aktualny stan, chodzić do piwnicy z telefonem komórkowym. Z tego powodu została przewidziana możliwość lokalnego prezentowania danych w oparciu o typowe siedmiosegmentowe wyświetlacze LED.
Zanim przejdę do szczegółowego opisu modułów realizujących zakładaną funkcjonalność, przedstawię ideę rozwiązania, którą prezentuje rysunek 1.
Do głównej magistrali RS485 przyłączony jest moduł realizujący funkcję specjalizowanego filtru danych. Jego zadaniem jest obserwacja całego ruchu pakietów odbywającego się na głównej magistrali RS485. Specyficzną cechą interfejsu RS485 pracującego w trybie półdupleksowym jest to, że każdy element komunikacyjny przyłączony do magistrali odbiera wszystko, co jest tam transmitowane. Oprogramowanie „filtru pakietów” analizuje każdy odebrany pakiet pod kątem jego znaczenia. W przypadku, gdy pakiet niesie w sobie informacje o danych pomiarowych, jest on retransmitowany do interfejsu RS232.
Przesyłane dane trafiają do kolejnego modułu, którego zadaniem jest gromadzenie w swojej pamięci RAM aktualnych wartości pomiarowych oraz ewentualnie rozdzielanie odpowiednich danych na poszczególne wyświetlacze. Każdy moduł wyświetlający otrzymuje dane za pośrednictwem łącza szeregowego. Istnieje możliwość przyłączenia wielu modułów wyświetlających, co implikuje zastosowanie interfejsów RS485 tworzących lokalną magistralę komunikacyjną, w której właśnie moduł sterujący jednocześnie pełni funkcję typu MASTER (każdy moduł wyświetlający to SLAVE).
Z punktu widzenia sprzętowego filtr pakietów (fotografia 1) bazuje na tym samym rozwiązaniu sprzętowym, które realizuje funkcję procesora komunikacyjnego („Elektronika dla Wszystkich”, 5/2019), toteż obecnie zostanie omówione jedynie oprogramowanie tego modułu. Bazuje ono również na oprogramowaniu procesora komunikacyjnego z tym, że jest znacząco uproszczone. Istotnym elementem w procesorze komunikacyjnym, którego nie znajdziemy w oprogramowaniu filtru pakietu, jest zarządzanie komunikacją na magistrali RS485.
Jednym z głównych zadań realizowanych przez procesor komunikacyjny jest zarządzanie komunikacją na magistrali RS485. W przypadku filtru pakietów ta funkcjonalność nie występuje. Z punktu widzenia ogólnej koncepcji komunikacji realizowanej poprzez magistralę RS485 omawiany moduł trudno jest nawet nazwać elementem typu SLAVE.
Moduł nie realizuje aktywnego dostepu do magistrali (nie nadaje danych), jego funkcjonalność sprowadza się jedynie do nasłuchu transmitowanych danych. Z tego wynika dosyć istotna dla procesora komunikacyjnego własność, nie musi on znać identyfikatora przypisanego modułowi pełniącemu funkcję filtru pakietów. W istocie filtr jest jedynie obserwatorem rzeczywistości występującej na magistrali komunikacyjnej.
Łatwo to zauważyć w oprogramowaniu. Zastosowany mikrokontroler (ATMEGA324) nie zawiera obsługi interfejsu szeregowego z konwerterem do standardu RS485 (jest tylko obsługa przerwań, gdyż każde przerwanie musi mieć swoją funkcję obsługi). Brak funkcjonalności związanej z aktywnym dostępem do magistrali komunikacyjnej oznacza, że moduł nie ma własnego identyfikatora, a to prowadzi do braku bloku konfiguracyjnego zapisanego w pamięci nieulotnej (tak jak we wszystkich dotychczasowych programach stosowanych w modułach). Patrząc na filtr pakietów z punktu widzenia całego systemu, moduł ten jest niekonfigurowalny.
Jedyną czynnością, jaka jest realizowana w oprogramowaniu modułu, jest odebranie kompletnego pakietu z interfejsu RS485 (w mikrokontrolerze jest to UART1). Algorytm odebrania danych z jednoczesną analizą odbieranych treści jest identyczny jak we wszystkich dotychczasowych rozwiązaniach i jest pokazany na listingu 1. Uwaga – wszystkie listingi są dostępne w Elportalu wśród materiałów dodatkowych do tego numeru EdW.
Po odebraniu kompletnego pakietu (każdy jest zakończony znakiem sterującym CR) realizowane jest jego przetwarzanie. Polega ono na tym, że sprawdzana jest treść pola zawierającego identyfikator polecenia. W przypadku, gdy polecenie niesie w sobie dane pomiarowe (polecenie RPV), jest ono retransmitowane do interfejsu RS232 (związanego w mikrokontrolerze z UART0).
Ze względu na skąpe zasoby pamięci RAM w mikrokontrolerach nie jest przechowywane w pamięci oryginalne odebrane polecenie, a jedynie rozpakowane jego części składowe. Retransmisja sprowadza się do ponownego zbudowania z części składowych nowego kompletnego polecenia. Fragment oprogramowania realizujący przetwarzanie odebranych danych zawiera listing 2.
Ze względu na pełnodupleksowy charakter pracy interfejsu RS232 nie zachodzi tu żadne buforowanie ani żadna synchronizacja czasowa związana z fizycznym wytransmitowaniem danych. Finalnie z całego potoku różnych danych krążących na magistrali RS485 na wyjściu w standardzie RS232 pojawią się jedynie dane zawierające zmierzone wartości wielkości fizycznych.
Bazując na tym samym rozwiązaniu sprzętowym, w systemie jest przewidziany filtr pakietów z inną funkcjonalnością. Zapewne wielu Czytelników zastanowił identyfikator „sieci RS485” o brzmieniu HCS. W wyniku konfiguracji każdego modułu pomiarowego lub wykonawczego, które były opisane wcześniej, generują one informacje adresowane do „mitycznego” miejsca docelowego o nazwie HCS.
Wyobraźmy sobie, że w całej instalacji znajduje się komputer PC z zainstalowanym oprogramowaniem bazy danych. W sieci internetowej można odszukać oprogramowanie baz danych przeznaczonych do zastosowań niekomercyjnych (przykładowo MySQL). Oczywiście wymagałoby to w komputerze niewielkiego programu, który odebrałby dane ze swego interfejsu RS232 i dodawał kolejne przychodzące informacje (wraz ze znacznikiem czasowym) do bazy danych.
Wymagany filtr pakietów uzyskuje się również ze sprzętowego rozwiązania przeznaczonego dla procesora komunikacyjnego. Oprogramowanie jest bardzo zbliżone do wyżej opisanego, a jego funkcjonalność sprowadza się do przekierowania danych do interfejsu RS232 jedynie tych pakietów, które jako adresata mają identyfikator HCS. Nie dołączam do materiałów dodatkowych gotowego rozwiązania i liczę, że zainteresowani Czytelnicy sami osiągną cel, bazując na posiadanych informacjach. To nie jest trudne i wymaga jedynie niewielkich przemyśleń.
Kolejnym elementem w łańcuchu modułów jest element odpowiedzialny za prezentację danych pomiarowych. Jego schemat ideowy przedstawiają kolejne ilustracje. Jednostka centralna pokazana jest na rysunku 2. Jest to klasyczna aplikacja mikrokontrolera z rodziny AVR. Do układu U101 (ATmega324) są przyłączone elementy określające częstotliwość sygnału zegarowego: X101, C102 i C103. Zastosowany rezonator kwarcowy pozwala uzyskać każdą standardową prędkość transmisji szeregowej.
Do zaprogramowania wewnętrznej pamięci FLASH przeznaczonej na kod programu przewidziane jest złącze P101 wraz z dodatkowymi elementami, których zadaniem jest wygenerowanie sygnału zerującego mikrokontroler w chwili włączenia napięcia zasilającego (D101, R101 i C101). Dodatkowy mikroprzycisk SW101 pozwala zresetować mikrokontroler w dowolnej chwili. W konstrukcji została przewidziana możliwość przyłączenia zewnętrznego przycisku, którego stan poprzez transoptor U102 i R102 może być odczytany przez mikrokontroler.
Zastosowanie transoptora uodparnia na zakłócenia obsługę przycisku przyłączonego do modułu nawet długim przewodem. Konstrukcja modułu pozwala na realizację różnorodnej funkcjonalności i nie w każdym zastosowaniu jest wykorzystana jego całkowita funkcjonalność sprzętowa (przykładowo w poniżej opisanym programie sterującym nie jest użyty zewnętrzny przycisk wykorzystujący transoptor).
Zastosowany mikrokontroler zawiera w swojej strukturze dwa układy UART. Jeden z nich wyposażony jest w interfejs RS232, którego schemat przedstawia rysunek 3. Jest to typowa aplikacja popularnego układu MAX232, który łączy złącze interfejsu (P201) z układem UART0 mikrokontrolera. Do zestawu dołączone są dwie linie modemowe (wyjściowa i wejściowa), które mogą być przetwarzane przez mikrokontroler.
Drugi interfejs szeregowy (UART1) jest wyposażony w znany już układ SN75C176. Rozwiązanie jest identyczne jak we wszystkich dotychczasowych modułach, gdzie oprócz sygnałów transmisji szeregowej występuje sygnał sterujący kierunkiem transmisji (rysunek 4).
Sygnały magistrali RS485 doprowadzone są do złącza P401, gdzie oprócz sygnałów transmisji szeregowej występuje napięcie zasilające +5V. Pozwala to wyeliminować z małych modułów wyświetlaczy stabilizator napięcia do zasilania mikrokontrolera zarządzającego obsługą wyświetlania danych. Wydajność prądowa zastosowanego układu stabilizatora napięcia LM2575 (rysunek 6) znacząco przekracza zapotrzebowanie modułu na energię, toteż z powodzeniem jako obciążenie mogą być dołączone kolejne moduły wyświetlaczy.
Moduł jest wyposażony w niewielką klawiaturę (osiem przycisków) pozwalającą użytkownikowi na wybór danych prezentowanych na siedmiosegmetowych wyświetlaczach (sam moduł wyświetlacza będzie opisany w dalszej części). Jej schemat pokazuje rysunek 5. Cały PORT A (rysunek 2) poprzez układ U301, pełniący funkcję wzmacniacza oraz złącza P301 i P303 wyprowadzony jest na małą płytkę PCB pełniącą funkcję frontpanelu. Zawiera ona również zespół mikroprzycisków (SW309– SW316) tworzących lokalną klawiaturę finalnie przyłączoną do PORT C (rysunek 2).
Opis budowy modułu zamyka impulsowy stabilizator napięcia, który przetwarza wejściowe napięcie zasilające na napięcie wymagane przez użyte układy cyfrowe (rysunek 6). Rozwiązanie było już wielokrotnie opisywane przy okazji innych modułów. Wyjście stabilizatora napięcia poprzez zworkę P502 zasila wszystkie elementy modułu.
Rysunek płytki drukowanej odzwierciedlającej powyższy schemat ideowy jest na rysunku 7 (strona TOP) i rysunku 8 (strona BOTTOM).
Montaż urządzenia nie należy do bardzo trudnych. Zastosowanie układów SMD wymaga pewnej cierpliwości i staranności. To zawsze później owocuje brakiem problemów przy uruchomieniu modułu. Finał pracy montażowej pokazuje fotografia 2.
Przed pierwszym włączeniem tradycyjnie należy zdjąć zworkę P502 i skontrolować wytwarzane napięcie zasilające. Przy poprawnym montażu napięcie wyjściowe powinno wynosić około 5V. W takiej sytuacji można założyć zworkę P502. W przeciwnym wypadku należy poszukać zimnych lutów (co jest najbardziej prawdopodobne). W dalszej kolejności, przed zaprogramowaniem pamięci FLASH mikrokontrolera, należy odpowiednio ustawić bity konfiguracyjne (fuse) mikrokontrolera. W przypadku korzystania z programu AVR STUDIO 4 wymagany stan bitów fuse pokazuje rysunek 9.
W bloku konfiguracyjnym zapisanym w pamięci nieulotnej znajdują się między innymi informacje określające, jakie dane pomiarowe są monitorowane przez moduł oraz gdzie są one wyświetlane w wyniku naciśnięcia odpowiedniego przycisku na klawiaturze. Struktura tego bloku znajduje się w listingu 3. Wśród przechowywanych tam parametrów znajduje się lista minimodułów
wyświetlających, przyłączonych do lokalnej magistrali RS485 zarządzanej przez moduł sterujący, lista identyfikatorów danych pomiarowych oraz informacja, jakie dane są wyświetlane w wyniku naciśnięcia odpowiedniego przycisku klawiatury, jako kilkuelementowa tablica zawierająca powiązania (element tablicy typu KeyCommDescrRecT): identyfikator modułu, identyfikator parametru i identyfikator przycisku. Przykładową zawartość bloku pokazuje rysunek 10.
Na podstawie tych danych program po uruchomieniu tworzy w pamięci RAM pustą tablicę wartości pomiarowych (zmienna ParamValueArray), jest ona identycznie indeksowana jak tablica zawierająca identyfikatory danych pomiarowych zawarta w bloku pamięci konfiguracyjnej, czyli EEBlock.DisplParamDescr[0] zawiera identyfikator parametru pomiarowego a ParamValueArray[0] zawiera wartość tego parametru.
Struktura jednego elementu tablicy zawiera wartość parametru w postaci znakowej (pole struktury o nazwie ParamValue) oraz dowiązania do identyfikatorów symboli modułów, na których aktualnie należy wyświetlić dane (pole struktury o nazwie SubDeviceLink). Ma to swoje odbicie w realizacji polecenia zawierającego informacje pomiarowe, której implementację pokazuje listing 4.
Algorytm obróbki ilustruje rysunek 11. Załóżmy, że został odebrany pakiet zawierający dane pomiarowe dla parametru o identyfikatorze T01 i wartości 25,0. Program przeszuka tablicę
identyfikatorów parametrów pomiarowych zawartych w bloku konfiguracyjnym (EEBlock.DisplParamDescr) i odnajdzie identyfikator zmiennej pomiarowej uzyskanej z odebranych danych przykładowo na indeksie 2. To oznacza, że w tablicy ParamValueArray[2] należy zapisać wartość parametru uzyskaną z odebranego pakietu.
Pozostaje jeszcze przejrzeć tablicę SubDeviceLink (będącą częścią składową ParamValueArray[2]). Jeżeli zostanie tam znaleziona wartość inna niż 255 (ta stała umownie oznacza brak wskazania), to stanowi to dowiązanie (index) do tablicy identyfikatorów modułów wyświetlających (EEBlock.SubDeviceID) i implikuje wygenerowanie odpowiedniego polecenia wysłanego poprzez lokalną magistralę RS485 do zespołu modułów wyświetlających dane.
Nie ma ograniczenia, by dany parametr pomiarowy mógł być zaprezentowany na jednym wyświetlaczu, stąd pole struktury o nazwie SubDeviceLink jest tablicą. W ten sposób odebranie każdych danych pomiarowych, które są przewidziane do wyświetlania, spowoduje odświeżenie każdego modułu wyświetlającego związanego z mierzoną daną wielkością. Pozostaje wyjaśnić, skąd biorą się odpowiednie wartości w tablicy SubDeviceLink.
Za to odpowiedzialna jest funkcja aktywowana w wyniku naciśnięcia określonego przycisku klawiatury, której postać prezentuje listing 5. Załóżmy, że został naciśnięty przycisk dający kod StandKey0Code. Dzięki temu zostanie przeszukana tablica w bloku konfiguracyjnym (EEBlock.KeyCommTable w wyniku wywołania funkcji LocateKeyCommand, patrz rysunek 10), która zawiera zestawienie kodu klawisza, identyfikatora parametru oraz identyfikatora modułu wyświetlającego.
Może się zdarzyć, że w odpowiedniej tablicy nie zostanie znaleziony poszukiwany element. W takim przypadku nic się nie będzie działo, nie wniesie to żadnych dalszych działań w programie. W przeciwnym wypadku zostaje zmodyfikowana lista SubDeviceLink (rysunek 11) w wyniku wywołania funkcji CreateNewAssociation.
Ta funkcja „zauważy”, że kod klawisza SK0 występuje w powiązaniu zmiennej T01 i T02 odpowiednio z modułem SCR01 i SCR02. Prowadzi to do konieczności modyfikacji elementów tablicy SubDeviceLink. Przykładowo, jeżeli T01 znajduje się w tablicy EEBLOCK.DisplParamDescr na indeksie 2, to również na indeksie 2 w tablicy ParamValueArray w polu struktury o nazwie SubDeviceLink należy zmodyfikować jakikolwiek wolny element (zawierający wartość 255), by wskazał na odpowiedni element tablicy identyfikatorów modułów wyświetlających.
Pozostałe „chwyty” w programie były już opisane przy okazji innych modułów, więc nie ma potrzeby ich powielania. Moduł sterowania wyświetlaniem danych pomiarowych rozpoznaje polecenia (interfejs RS232) wyszczególnione w tabeli 1 (dostępnej w Elportalu).
Po uruchomieniu i zaprogramowaniu modułu należy go odpowiednio skonfigurować. Szczegóły będą opisane w drugiej części.