Flowcode w sieci

Flowcode w sieci
Pobierz PDF Download icon
Aplikacje sieciowe dla mikrokontrolerów są obecnie jednym z gorących tematów. Chociaż rozwiązania stosowane w sieciach LAN nie należą do prostych, to producenci mikrokontrolerów i specjalizowanych układów peryferyjnych robią wszystko, żeby dołączenie mikrokontrolera do sieci było tak łatwe, jak to tylko możliwe.
75ELEKTRONIKA PRAKTYCZNA 11/2010 Flowcode w sieci Aby programistom korzystanie z  Ether- netu i jednocześnie zachęcić ich do stosowa- nia swoich wyrobów niektórzy producenci udostępniają bezpłatnie biblioteki gotowych stosów TCP/IP. Tak postępuje na przykład firma Microchip, w której rozwiązaniu zaim- plementowano większość protokołów z  ro- dziny TCP/IP. Jednak mimo bardzo dobrze przygotowanych przykładów i  materiałów szkoleniowych, korzystanie z programowego stosu wymaga od programisty pewnej wie- dzy i doświadczenia. Początkującemu raczej trudno będzie użyć tej biblioteki. Innym rozwiązaniem są układy peryfe- ryjne z  wbudowanym, sprzętowym stosem TCP/IP. Troszczą się one o warstwę sieciową, transportu oraz mają wbudowane obwody interfejsu Ethernet. Dzięki temu programi- sta może skupić się tylko na tworzeniu war- stwy aplikacji. Jednym z takich układów jest W3100A firmy WIZnet. Oprócz zaimplemen- towanej obsługi protokołów internetowych TCP/IP, UDP, ICMP i ARP, układ wspiera pro- tokoły DLC i MAC, a komunikuje się z mi- krokontrolerem za pomocą interfejsu I2 C lub przez magistralę równoległą. Układ W3100A zastosowano w  jednym z  modułów systemu e-block oferowanym przez firmę Matrix Multimedia, producenta pakietu Flowcode. System e-block dla mi- krokontrolerów PIC składa się płyty głów- nej, na której umieszczono układ zasilania, mikrokontroler i  programator umożliwiają- cy zaprogramowanie mikrokontrolera przez port USB z  menu Flowcode (fotografia  1). Linie portów są dołączone do złącz żeńskich DSUB9. Przy ich użyciu można do płyty głównej dołączyć układy peryferyjne sys- temu e-block: wyświetlacz LCD, przyciski, diody LED, przekaźniki, gniazdo kart SD, układy Bluetooth, RFID i wiele innych. Moduł jest dołączany do płyty głównej za pomocą D-SUB9 (fotografia 2). Do dołą- czenia do sieci LAN służy standardowy kabel ethernetowy z wtykiem RJ-45. Oprócz modułu z układem W3100A, na płytce jest umieszczony stabilizator LDO napięcia 3,3 V, złącze zasilania oraz zworki łączące linie sygnałów sterujących z liniami portów oraz służące do ustawiania adresu slave interfejsu I2 C. Zastosowanie modułu ze stosem sprzętowym umożliwia dołączanie układów interfejsu Ethernet również innych producentów. Mimo iż W3100A zawiera kompletny stos protokółów TCP/IP, to jego programo- wa obsługa nie jest łatwa, jednak Flowcode zdejmuje z  programisty ciężar wnikliwego wczytywania się w dokumentację, poznawa- nia wszystkich rejestrów sterujących i algo- rytmów ich programowania. Układ modelowy Mam do dyspozycji płytę główną e-block dla mikrokontrolerów PIC i  kilka modułów peryferyjnych, w  tym ethernetowy EB-023, więc postanowiłem sprawdzić czy można łatwo i szybko dołączyć mikrokontroler PIC do sieci. Do prób wybrałem mikrokontroler PIC16F877A i  dodatkowo moduły e-block wyświetlacza LCD EB-005 i styków EB-007, które dołączyłem do złącz portów B i D mi- krokontrolera. Moduł ethernetowy korzysta z  interfejsu I2 C i  dlatego dołączyłem go do portu C. Flowcode w sieci Aplikacje sieciowe dla mikrokontrolerów są obecnie jednym z  gorących tematów. Chociaż rozwiązania stosowane w  sieciach LAN nie należą do prostych, to producenci mikrokontrolerów i  specjalizowanych układów peryferyjnych robią wszystko, żeby dołączenie mikrokontrolera do sieci było tak łatwe, jak to tylko możliwe. NOTATNIK KONSTRUKTORA Fotografia 1. Płyta główna e-block przeznaczona dla mikrokontrolerów PIC Fotografia 2. Sposób dołączenia modułów e-block do płyty głównej 76 ELEKTRONIKA PRAKTYCZNA 11/2010 NOTATNIK KONSTRUKTORA chamialiśmy polecenie ipconfig. Adres IP stacji docelowej ustawia funkcja Set_Desti- nation. Jej argumentami są: adres IP i 2 bajty określające numer portu. Po wywołaniu wymienionych funkcji program jest gotowy do przesyłania da- nych z  użyciem ICMP. Wysyłanie danych umieszczonych w polu danych protokołu IP musi być poprzedzone wywołaniem funkcji Tx_start z argumentem określającym numer kanału, w  którym dane będą transmitowa- ne. Następnie można wysyłać kolejne bajty ramki ICMP. Pamiętamy, że stacja inicjująca żądanie echa wysyła ramkę z typem Echo Re- quest (0x08). Program wysyła bajty wywołu- jąc funkcję Tx_sendbyte z argumentami okre- ślającymi numer kanału i przesyłany bajt. Wysłanie żądania echa będzie polegało na wysłaniu sekwencji: ? bajtu 0x08 ? typ Echo Request, ? bajtu 0x00 ? kod, ? 2 bajtów sumy CRC, ? 2 bajtów identyfikatora na przykład 0x10, ? 2 bajtów numeru sekwencyjnego, ? 32 bajtów danych użytkownika. Jeżeli podczas konfigurowania nie popeł- niliśmy błędów, to pakiet powinien być ode- brany przez stację o adresie ustalonym za po- mocą funkcji Set_Destination. Stacja odeśle do naszego modułu potwierdzenie z typem Echo Reply (0x00). Moduł musi to potwier- dzenie odebrać, aby stwierdzić czy realizacja polecenia przebiegła prawidłowo. W  procedurze odbioru musi być rów- nież odbieranie żądania echa wysłanego przez inne stacje. Jeżeli pierwszy odebrany bajt ma wartość 0x08, to oznacza, że moduł odbiera żądanie echa Echo Request wysłane przez inną stację. Jeżeli odebrany bajt jest ze- i  IP modułu oraz maskę pod- sieci. Dodatkowo, ustawia się adres MAC oraz address setup. Ta ostatnia wartość jest adre- sem slave interfejsu I2 C układu W3100A. Ustawienia address setup muszą być takie same, jak ustawienia zworek J8, J9 i  J10 w module EB-023. ?Pingowanie? można wyko- nać łącząc bezpośrednio moduł z  komputerem PC. Można też podłączyć naszą płytkę do ro- utera lub switcha sieciowego. Należy przy tym pamiętać, że proste switche nie mają swoje- go adresu IP, więc musi być do niego dołączone co najmniej jedno urządzenie mające ad- res IP i  obsługujące polecenie PING, np. komputer PC z uru- chomionym systemem Win- dows lub Linux. Dodatkowo, należy zwrócić uwagę na prze- plot kabla Ethernet, który jest konieczny przy bezpośrednim połączeniu z komputerem PC. Ustawienia sieci (brama, maska i  adres IP komputera) odczytujemy z  ekranu kom- putera po wysłaniu komendy ipconfig (rysu- nek 4). W polu IP address w oknie konfiguro- wania komponentu trzeba wpisać dowolny, wolny adres w podsieci, inny niż adres wy- świetlony ipconfig. Nie jest zaimplemento- wany protokół DHCP, więc trzeba to zrobić ręcznie. Po wpisaniu danych w  oknie Pro- perties klikamy Ok. Od tego momentu moż- na już używać makr komponentu TCP_IP w programie. Najpierw trzeba wywołać makro Initiali- ze. Inicjalizuje ono układ W3100A i ustawia wcześniej wpisane w oknie Properties para- metry. Przesyłanie danych musi być poprzedzo- ne zainicjowaniem gniazd transmisji. Można zdefiniować do 4 takich gniazd (sockets). My będziemy przesyłać ramki ICMP protokołem IP i  dlatego musimy zdefiniować socket IP. Do tego celu jest używana funkcja Create IP_Socket z parametrami: gniazdo, protokół, rozgłaszanie (broadcast). Parametr gniazdo może mieć wartość od 0 do 3. W pole pro- tokół wpisujemy 0x01, bo taką wartość ma mieć pole Protocol w  na- główku ramki protokołu IP dla danych ICMP. Rozgła- szanie włącza się wpisując parametr 0x01, a  wyłącza się wpisując 0x00. Na ko- niec pozostaje zdefinio- wanie adresu IP stacji, do której będziemy wysyłać żądanie echa. Najlepiej jest podać adres komputera PC, na którym wcześniej uru- Obsługa modułu ethernetowego jest po- wiązana z komponentem TCP_IP dostępnym w  najnowszej wersji Flowcode v4. Wybiera się go z  zakładki Peripherial. Komponent TCP_IP zawiera wiele makr sprzętowych i  aby go efektywnie używać, trzeba mieć wiedzę na temat protokołów internetowych. Wysyłanie instrukcji PING Polecenie ping jest używane do testo- wanie połączeń pomiędzy dwoma stacjami. Przesyła się je z  użyciem protokołu ICMP. Ramka protokółu ICMP składa się 8-bito- wych pól type i code, 16-bitowej sumy kon- trolnej CRC i opcjonalnego pola danych. Popularne ?pingowanie? jest żądaniem odesłania echa. Stacja wysyłająca żądanie przesyła pakiet ICMP typu 0x08 (Echo Requ- est). Stacja pytana odsyła potwierdzenie typu 0x00 (Echo Reply). Kod ma wartość 0x00, a pole danych zawiera 2-bajtowy identyfika- tor i 2-bajtowy numer sekwencyjny pakietu oraz dowolne, inne dane użytkownika. Sta- cja , która odebrała żądanie echa umieszcza w polu danych te same dane, które odebra- ła. Identyfikator i numer sekwencyjny mogą posłużyć do sprawdzenia czy odebrane po- twierdzenie Echo Reply jest potwierdzeniem wysłanego żądania. Ramka protokołu ICMP jest umieszczana w polu danych ramki IP. W ramce protoko- łu IP interesuje nas pole Protocol, czyli typu protokołu, którym przesyłane są dane. Dla protokołu ICMP pole Protocol ma wartość 0x01, a dla protokołu TCP ma wartość 0x06. Rysowanie programu zaczynamy od postawienia na panelu elementu TCP_IP i  kliknięciu na nim prawym klawiszem. Z menu rozwijanego wybieramy Ext Proper- ties. W oknie Properties (rysunek 3) musimy wpisać wartości adresów bramy domyślnej Rysunek 3. Okno właściwości komponen- tu TCP_IP Rysunek 4. Okno programu ipconfig Rysunek 5. Argumenty funkcji Set_Destination Rysunek 6. Fragment programu odczytującego adres IP z pakietu Echo Request 77ELEKTRONIKA PRAKTYCZNA 11/2010 Flowcode w sieci jednocześnie otwierane. Numer portu jest 16-bitowy (zakres 0...65535). Dla przesyłania stron WWW w protokole HTTP jest zarezer- wowany port 80. Strona umieszczona na serwerze wyma- ga stałego monitorowania żądania dostępu, na przykład dla stwierdzenia czy przeglądar- ka nie żąda odświeżenia strony. Do tego celu służy makro CheckSocketActivity. Argumen- tem wejściowym jest numer kanału. Zależnie od skonfigurowania połączenia sieciowego, przesłanie strony może wymagać jednego lub wielu żądań dostępu. W  zakładkach Web Page 1...4 trzeba umieścić kod strony napisany w  języku łać funkcję Rx_flush_data. Po jej wykonaniu jest moż- liwe odebranie następnego pakietu. Na rysunku 7 pokazano okno z wynikiem realizacji komendy PING do nasze- go modułu mającego adres 172.20.102.115. Przykład użycia komponentu WebServer Mając do dyspozycji moduł EB-023 można użyć innego komponentu dla aplika- cji sieciowych ? WebServer. Umożliwia on zbudowanie własnego serwera stron WWW funkcjonującego w oparciu o mikrokontroler. Komponent WebServer jest łatwy w uży- ciu i nawet niezbyt doświadczony programi- sta jest w stanie go użyć. Pokażę jak skonfigu- rować WebServer i narysować własną aplika- cję wyświetlającą wartość zmiennej w oknie przeglądarki internetowej. Docelowo może to być na przykład temperatura lub napięcie, a  moduł może posłużyć do wykonywania zdalnych pomiarów. Z komponentem WebServer są związane trzy makra sprzętowe: Initalize, CreateSever- Socket, CheckSocketActivity. Makro Initialize zeruje i inicjalizuje mo- duł EB-023 oraz ustawia parametry sieciowe: domyślny adres bramy, maskę podsieci adres IP i adres MAC (rysunek 8). Ustawiana jest też maksymalna liczba stron z zakresu 1...4 i adres interfejsu I2 C układu W3100A. Makro CreateServerSocket tworzy gniaz- do (socket) do wysyłania i odbierania stron internetowych. Argumentami makra są: nu- mer kanału i numer portu. Dla gniazda moż- na zdefiniować do 4 kanałów, które mogą być rowy, to zaczynamy odbierać potwierdzenie Echo Reply na przesłane przez nas żądanie. Ponieważ wiemy jaki wysłaliśmy identyfi- kator i  numer sekwencji, to procedura od- bioru może te wartości testować. Można też sprawdzać prawidłowość sumy CRC pakie- tu. W czasie testu użyłem procedury, która odbiera cała ramkę, ale nie testuje ani iden- tyfikatorów, ani sumy CRC, tylko wyświetla pierwszych 8 znaków ASCII z pola danych. Trochę bardziej skomplikowany jest frag- ment procedury odbioru Echo Request i wy- syłania potwierdzenia do nadawcy żądania. Moduł odbiera pakiet ICMP i umieszcza go w buforze odbiorczym. Żaby wysłać potwier- dzenie Echo Request, trzeba prawidłowo wy- liczyć 2 bajty sumy kontrolnej CRC, a do tego są potrzebne dane z  pakietu ICMP. Liczbę bajtów danych można odczytać funkcją Rx_ readheader. Ta funkcja odczytuje informacje dla każdego ze zdefiniowanych socketów. Dla trybu IP funkcją Rx_readheader z iden- tyfikatorem idx=1 można odczytać liczbę bajtów danych (w naszym przypadku całego pakietu ICMP) i adres IP źródła pakietu IP. Obliczaniem sumy kontrolnej zajmuje się makro programowe CRC. Suma kontrolna jest wyliczana na podstawie odebranych danych pakietu z tym, że pierwsze 4 bajty są wyzero- wane, bo w polu typu jest bajt zerowy (Echo Reply), w polu kodu jest bajt zerowy i nie li- czymy CRC z dwóch bajtów odebranego CRC. Drugim ważnym elementem jest odczy- tanie adresu IP stacji, która wysłała Echo Request po to, by móc do niej odesłać Echo Reply. Ten adres jest zapisany w  nagłówku pakietu IP jako Destination Address. Jak już wspomniałem, do jego odczytania używa się funkcji Rx_readheader z  identyfikatora- mi idx od 2 do 5. Na rysunku  6 pokazano fragment programu odczytywania adresu IP z pakietu Echo Request wysłanego do naszej płytki. Ten adres jest zapamiętywany w  ta- blicy ADR_IP, a potem funkcją Set_Destina- tion wpisywany w polu Destination Address pakietu IP, który zostanie wysłany z  pakie- tem ICMP w polu danych. Mamy już wyliczoną sumę kontrolną i ustawiony adres źródła. Teraz trzeba skom- pletować pakiet ICMP. W  poleceniu Ping w  odsyłanym Echo Reply pole danych po- winno mieć taką samą zawartość, jak w ode- branym Echo Request. Po doczytaniu cały pakiet ICMP jest zapamiętywany w buforze odbiorczym, który jest czytany sekwencyjnie przez funkcję Rx_readbyte. Wykorzystamy to do odesłania tych samych danych, które ode- braliśmy. Żeby ustawić się na odebrane dane odczytujemy zawartość bufora i  dodajemy pierwsze 4 bajty, aby licznik adresowy bufo- ra odbiorczego ustawił się na pierwszy bajt odebranego pola danych. Potem wysyłamy 2 bajty zerowe, 2 bajty wcześniej wyliczonej sumy kontrolnej CRC i wszystkie bajty pola danych. Po wysłaniu danych trzeba wywo- Listing 1. Kod źródłowy strony głównej serwera Main page

Test Webserver Flowcode PIC Micro

Index Home
Page 2 Wyświetl wartość zmiennej .
Page 3 Test strony 3.
Page 4 Test strony 4.

Rysunek 7. Wynik pingowania do aplikacji Rysunek 8. Okno właściwości komponen- tu WebServer 78 ELEKTRONIKA PRAKTYCZNA 11/2010 NOTATNIK KONSTRUKTORA Listing 2. Kod źródłowy strony ?Page 2? Internet E-Block Component

Wartosc zmiennej = %VALUE%

Index

Rysunek 9. Okno komponentu Webserwer z argumentami makra CreateServerSoc- ket Rysunek 12. Fragment strony Page2 umożliwiającej odczyt warto- ści zmiennej Rysunek 11. Okno główne programu serwera stron WWW Rysunek 10. Pro- gram Webserwera HTML. Do prób z  serwerem wyko- rzystałem kod źró- dłowy pokazany na listingu 1. Oprócz modu- łu internetowego użyłem modułu wy- świetlacza LCD do częściowej kontroli poprawności da- nych przesyłanych poprzez sieć. Na po- czątku programu jest inicjalizowany wy- świetlacz LCD i  jest na nim wyświetlany napis ?Webserwer Test?. Po tym jest wy- woływane opisywa- ne wcześniej makro Intialize komponen- tu WebServer. Ponie- waż na zainicjowa- nie modułu potrzeb- ny jest czas, to program odlicza opóźnienie 1 sekundy. W kolejnym kroku jest tworzone gniazdo (socket) do komunikacji z portem 80 przez wywołanie makra CreateServerSocket z  argumentami numer kanału=0 i  numer portu=80 (rysunek 9). Teraz możemy sprawdzić czy klient (przeglądarka) nie żąda dostępu do strony na naszym serwerze. Aby nie było to spraw- dzeniem niczego, to w podstronę page2 zo- stał wbudowany mechanizm przesyłania do klienta wartości 8-bitowej zmiennej inkre- mentowanej co około 100 ms. Kodu źródło- wy page2 pokazano na listingu 2. Żeby dana mogła być przesyłana z  ser- wera do przeglądarki, to najpierw należy zdefiniować w  programie nazwę zmien- nej. W  naszym przypadku jest to 8-bitowa zmienna VALUE. Wartość tej zmien- nej jest przesyłana z  użyciem protoko- łu HTTP do klienta (przeglądarki) po umieszczeniu jej nazwy w  otoczeniu znaków %. W przy- kładzie będzie to li- nijka

Wartosc zmiennej = %VALUE%

. To wystarczy, aby prze- glądarka otrzymała polecenie HTML ?wyświetl war- tość zmiennej VALUE?. Ten bardzo prosty z punktu widzenia użytkownika mechanizm pozwala na odczytywanie z serwera warto- ści dowolnych zmiennych zadeklarowanych w programie po każdym poleceniu odświeże- nia strony w przeglądarce. Na rysunku 10 przedstawiono komplet- ny program narysowany we Flowcode v4 dla mikrokontrolera PIC18F458. Wartość zmien- nej inkrementowanej w nieskończonej pętli jest wyświetlana na wyświetlaczu LCD, tak aby można było sprawdzić czy program wy- świetlania na stronie działa prawidłowo. Do testowania działania Webserwera użyto mikrokontrolera PC18F458. Po jego za- programowaniu trzeba połączyć moduł z sie- cią Ethernet i w przeglądarce wpisać adres IP 172.20.102.115 ustalony dla modułu w trak- cie inicjalizacji. Jeżeli wszystko zostało zro- bione prawidłowo, to powinno wyświetlić się okno strony głównej. Z poziomu strony głównej można przejść do 3 stron nazwanych Page2, Page3 i Page4. Wartość VALUE z modułu serwera jest odczy- tywana na stronie otwierającej się po kliknię- ciu na Page2. Fragment tej strony pokazano na rysunku 11. Zmienna jest odświeżana po kliknięciu na przycisk odświeżania strony w  przeglądarce. Do strony głównej można wrócić klikając na Index. Uwagi końcowe Dzięki pracy wykonanej przez twórców pakietu Flowcode i układu WM3100A apli- kacje sieciowe są tak łatwe, że może je wyko- nać nawet mało zaawansowany programista. Dowodzą tego dwa zademonstrowane tutaj przykłady. Pierwszy z  nich (ping) wymaga trochę szerszej wiedzy na temat protokółów sieciowych, ale nie jest to wiedza trudna do opanowania. Z  kolei projekt WebSerwera jest tak pomyślany, że jest potrzebna tylko znajomość podstaw języka HTML i pakietu Flowcode. Tomasz Jabłoński, EP tomasz.jablonski@ep.com.pl R E K L A M A forum.ep.com.pl
Artykuł ukazał się w
Listopad 2010
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio marzec - kwiecień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje marzec 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich kwiecień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów