Sieciowe możliwości Flowcode

Sieciowe możliwości Flowcode
Pobierz PDF Download icon
Aplikacje sieciowe dla mikrokontrolerów to aktualnie jeden z najgorętszych tematów. Mimo, że rozwiązania stosowane w sieciach komputerowych LAN nie należą do prostych, to producenci mikrokontrolerów i specjalizowanych układów peryferyjnych robią wszystko, żeby połączenie mikrokontrolera do sieci było tak proste, jak to tylko możliwe.
121ELEKTRONIKA PRAKTYCZNA 9/2010 Sieciowe możliwości Flowcode trochę wiedzy na temat protokółów interneto- wych. PING Polecenie PING jest używane do diagnozo- wania połączenia pomiędzy dwoma stacjami. Do jego przesłania służy protokół ICMP. Ramka ICMP składa się 8-bitowych pól: type, code, 16-bitowej sumy kontrolnej i opcjonalnego pola danych. Pole- cenie PING to inaczej żądanie echa. Stacja wysyła- jąca to żądanie wysyła pakiet ICMP z typem 0x08 (Echo Request). Stacja pytana odsyła potwierdzenie z typem 0x00 (Echo Reply). Kod ma wartość 0x00, a  pole danych zawiera 2-bajtowy identyfikator, 2-bajtowy numer sekwencyjny kolejnych pakietów oraz dowolne inne dane. Stacja, która odebrała żą- danie echa, odsyła w polu danych te same informa- cje, które odebrała. Identyfikator i numer sekwen- cyjny mogą służyć do identyfikacji czy odebrane potwierdzenie Echo Reply jest odpowiedzią na konkretne żądanie. Ramka protokółu ICMP jest umieszczana w polu danych protokołu IP. W ramce protokółu IP będzie nas interesowało pole Protocol, czyli typ pro- tokołu, którym przesyłane są dane w polu danych. Dla protokołu ICMP pole Protocol ma wartość 0x01, a dla protokółu TCP ma wartość 0x06. D-SUB9 (fotografia 2). Do połączenia modułu z sie- cią Ethernet służy standardowe gniazdo RJ-45. Oprócz minimodułu z układem W3100A, na płytce umieszczono stabilizator napięcia 3,3  V, złącza zasilania, zwory łączące sygnały sterujące z liniami portów i do ustawiania adresu slave in- terfejsu I2 C. W3100A zawiera kompletny stos protokółów TCP/IP, ale jego programowa obsługa nie jest ba- nalna. Jak łatwo domyślić się, Flowcode zdejmuje z programisty ciężar wnikliwego wczytywania się w dokumentację, poznawania wszystkich rejestrów sterujących i algorytmów ich programowania. Ponieważ dysponuję płytą główną E-block dla mikrokontrolerów PIC i kilkoma modułami peryferyjnymi w tym internetowym modułem EB-023, postanowiłem sprawdzić, czy można w miarę prosto i szybko dołączyć mikrokontro- ler PIC do sieci. Jako pierwszy wybrałem mi- krokontroler PIC16F877A i dodatkowo moduły: wyświetlacza LCD EB-005 (dołączyłem go do portu B) i styków EB-007 (dołączyłem go do por- tu D). Moduł internetowy korzysta z interfejsu I2 C i dlatego został połączony z portem C. Obsługa modułu internetowego jest po- wiązana z  komponentem TCP_IP dostępnym w najnowszej wersji Flowcode V4 dla mikro- kontrolerów PIC. Moż- na go wybrać poprzez zakładkę Peripherial. Komponent TCP_IP zawiera wiele makr sprzętowych i aby móc go efektywnie wyko- rzystać trzeba mieć Niektóre firmy udostępniają gotowe bibliote- ki zawierające stosy TCP/IP. Tak robi na przykład Microchip. Jej rozwiązanie ma szereg trudnych do przecenienia zalet: zaimplementowano większość protokółów z rodziny TCP/IP, a programista może użyć tylko tych, które są mu potrzebne. Jednak (i ta uwaga dotyczy nie tylko Microchipa) pomimo dostępnych, dobrze udokumentowanych przy- kładów i materiałów szkoleniowych, korzystanie z  programowego stosu wymaga od programisty pewnego przygotowania i doświadczenia. Począt- kującemu raczej będzie trudno skorzystać z tego rozwiązania. Dobrą alternatywą są układy peryferyjne z  wbudowanym sprzętowym stosem TCP/IP. Sprzętowy interfejs układu dba o obsługę warstw fizycznej, sieciowej i  transportowej, pozwalając programiście skupić się tylko na warstwie aplika- cji. Jednym z takich układów jest W3100A firmy WIZnet. Oprócz wbudowanych protokółów inter- netowych TCP/IP, UDP, ICMP i ARP, układ wspiera protokóły DLC i MAC interfejsu Ethernet, a komu- nikuje się z nadrzędnym mikrokontrolerem przez interfejs I2 C lub magistralę równoległą. W3100A został zastosowany w jednym z modułów systemu E? block oferowanego przez firmę Matrix Multi- media producenta pakietu Flowcode. Co to jest E-block? System E-block dla mikrokontrolerów PIC składa się płyty głównej, na której umieszczono obwody zasilania, mikrokontroler i  programator z interfejsem USB (fotografia 1). Linie portów dołą- czono do żeńskich, 9-wyprowadzeniowych złączy D-SUB. Przez nie do płyty głównej można dołączyć układy peryferyjne systemu E-block: wyświetlacz LCD, przyciski, diody LED, przekaźniki, gniazdo kart SD, układy Bluetooth, RFID i wiele innych. Wspomniany moduł z  układem W3100A jest również do płyty głównej dołączany złączem NOTATNIK KONSTRUKTORA Sieciowe możliwości Flowcode Aplikacje sieciowe dla mikrokontrolerów to aktualnie jeden z  najgorętszych tematów. Mimo, że rozwiązania stosowane w  sieciach komputerowych LAN nie należą do prostych, to producenci mikrokontrolerów i  specjalizowanych układów peryferyjnych robią wszystko, żeby połączenie mikrokontrolera do sieci było tak proste, jak to tylko możliwe. Fotografia 1. Płyta główna E-block dla mikrokontrolerów PIC z podłączonymi modułami Fotografia 2. Moduł internetowy E-block Dodatkowe materiały na CD i FTP Dodatkowe materiały na CD i  FTP: ftp://ep.com.pl, user: 14635, pass: 6uc6eled 122 ELEKTRONIKA PRAKTYCZNA 9/2010 NOTATNIK KONSTRUKTORA Rysowanie programu Rysowanie programu zaczynamy od umiesz- czenia na panelu elementu TCP_IP i kliknięcia na nim prawym klawiszem. Z rozwijanego menu wy- bieramy Ext Properties. W oknie Properties (rysunek 3) musimy wpisać wartości nastaw bramy domyśl- nej, maski podsieci i adresu IP modułu. Dodatkowo ustawia się tutaj adres MAC oraz wartość Address Setup. Jest to adres slave układu W3100A w magi- strali I2 C. Jego wartość musi być zgodna z ustawie- niami zworek J8, J9 i J10 na module EB-023. Pin- gowanie możemy przeprowadzić łącząc moduł np. bezpośrednio z komputerem PC. Można też moduł wpiąć do routera lub switch?a sieciowego. Obie te metody są odpowiednie dla celów testowych, ale trzeba zwrócić uwagę na kabel połączeniowy, po- nieważ połączenie modułu z komputerem PC wy- maga, aby kabel był z przeplotem. Uwaga: moduł nie ma zaimplementowanej funkcji klienta DHCP i adres trzeba wpisać ręcznie. Po wpisaniu danych w oknie Properties klikamy na Ok i  zamykamy okno. W  tym momencie można używać makr komponentu TCP_IP w programie. Na początku programu trzeba wywołać makro Initialize. Inicjalizuje ono układ W3100A i ustawia wcześniej wpisane w oknie Properties parametry. Przesyłanie danych musi być poprzedzone zainicjowaniem gniazd transmisji. Można zdefi- niować do 4 takich gniazd (sockets). My będzie- my przesyłać ramki ICMP z użyciem protokołu IP i dlatego musimy zdefiniować gniazdo (socket) IP. Do tego celu jest używana funkcja Create IP_Socket z parametrami: numer gniazda, protokół, adres roz- głaszeniowy (brodcast). Numer gniazda może mieć wartości od 0 do 3. W polu protokół wpisujemy 0x01, bo taką wartość będzie miało pole Protocol w nagłówku ramki pro- tokołu IP dla ICMP. Rozgłaszanie włącza się wpi- sując w parametr 0x01, a wyłącza wpisując 0x00. Na koniec pozostaje zdefiniowanie adresu IP stacji, od której będziemy żądać przesłania echa. Adres IP stacji docelowej ustawia się funkcją Set_Destina- tion. Jej argumentami są adres IP i 2 bajty określa- jące numer portu. Po wywołaniu powyższych funkcji, program jest gotowy do przesyłania danych w  protokole ICMP. Wysyłanie danych musi być poprzedzone wywołaniem Tx_start z argumentem określającym numer kanału, w  którym będą transmitowane dane. Potem można już wysyłać kolejne bajty ramki ICMP. Pamiętamy, że stacja, która inicjuje żądanie Listing 2. Kod w html strony page 2 Internet E-Block Component

Wartosc zmiennej = %VALUE%

Index

Rysunek 3. Okno konfigurowania kompo- nentu TCP_IP Rysunek 4. Argumenty funkcji Set Destination Rysunek 5. Ustawienie adresu IP odczytanego z nagłówka Listing 1. Kod źródłowy strony głównej serwera Main page

Test Webserver Flowcode PIC Micro

Index Home
Page 2 Wyswietl wartosc zmiennej .
Page 3 Test strony 3.
Page 4 Test strony 4.

echa (PING) wysyła ramkę z typem Echo Request (0x08). Program przesyła bajty wywołując funkcję Tx_sendbyte z argumentami określającymi numer kanału i przesyłany bajt. Jeżeli w  konfiguracji nie popełniliśmy błędów (adresy, maska, brama), to pakiet po- winien zostać odebrany przez stację o  adresie ustalonym w funkcji Set_destination. Sta- cja odeśle do naszego modułu potwierdzenie z  typem Echo Reply (0x00). Nasz moduł musi teraz to potwierdzenie odebrać, żeby stwierdzić czy realizacja polecenia PING przebiegła pra- widłowo. Procedura odbioru musi również odbierać żądanie echa wysłane przez inna stację. Jeże- li pierwszy odebrany bajt ma wartość 0x08, to oznacza że moduł odbiera żądanie echa Echo Request wysłane przez inną stację (komputer). Jeżeli odebrany bajt jest 0, to zaczy- namy odbierać potwierdzenie Echo Reply na nasze żądanie. Ponieważ wiemy jaki wysła- liśmy identyfikator i  numer sekwencji, to proce- dura odbioru może te wartości testować. Można też sprawdzać prawidłowość sumy CRC pakietu. 123ELEKTRONIKA PRAKTYCZNA 9/2010 Sieciowe możliwości Flowcode zwyw otoczeniuznaków %. U nas będzie to linijka

Wartosc zmiennej = %VALUE%

. Tyle wystarczy, aby przeglądarka otrzyma- ła instrukcję ?wyświetl wartość zmiennej VA- LUE?. Ten bardzo pro- sty mechanizm (prosty z punktu widzenia użyt- kownika) pozwala na odczytywanie z  serwera wartości dowolnych zmiennych zdeklarowa- nych w  programie po każdym poleceniu od- świeżenia strony w prze- glądarce. Na rysunku 7 poka- zano kompletny program w  postaci graficznej utworzony we Flowco- de V4 dla mikrokontro- lerów PIC Microchip. Wartość inkrementowanej zmiennej w  pętli nieskończonej jest wyświetlana na wyświetlaczu LCD, tak aby można było spraw- dzić, czy program wyświetlania na stronie działa prawidłowo. Do testowania działania Webserwera użyto mikrokontrolera PC18F458. Po zaprogramowaniu trzeba połączyć moduł z siecią Ethernet i w prze- glądarce wpisać adres IP 172.20.102.115, ustalony dla modułu w trakcie inicjalizacji. Jeżeli wszystko zostało zrobione prawidłowo, to powinno się wy- świetlić okno strony głównej, takie jak pokazano na rysunku 8. Z poziomu strony głównej można przejść do 3 stron oznaczonych jako Page2, Page3 i Page4. War- tość VALUE z modułu serwera jest odczytywana na stronie 2, otwierającej się po kliknięciu na Page2. Do strony głównej można wrócić klikając na Index. Uwagi końcowe Dzięki pracy wykonanej przez twórców pakie- tu Flowcode i układu WM3100A aplikacje sieciowe są tak proste, że może się próbować z nimi mierzyć nawet mało zaawansowany programista. Dowodzą tego pokazane tutaj dwa przykłady. Pierwszy z nich (ping) wymaga trochę szerszej wiedzy na temat protokołów sieciowych. Z kolei projekt Webserwe- ra jest tak pomyślany, że właściwie potrzebne są tylko podstawy języka HTML i znajomość pakietu Flowcode. Tomasz Jabłoński, EP tomasz.jablonski@ep.com.pl Po wysłaniu wszystkich danych trzeba uru- chomić funkcję Rx_flush_data. Po jej wykonaniu możliwe jest odebranie następnego pakietu. Web Server Jako kolejną aplikację przygotowano WebSe- rver przeznaczony do zbudowania własnego ser- wera stron www. Komponent jest tak zbudowany, że nawet niezbyt zaawansowani użytkownicy są w stanie stworzyć własny serwer stron. Do komponentu WebSerwer przypisano trzy makra sprzętowe: Initalize, CreateSeverSocket i CheckSocketActivity. Makro Initialize zeruje i  inicjalizuje moduł internetowy EB-023 oraz ustawia parametry sie- ciowe: bramę domyślną, maskę podsieci, adres IP i adres MAC. Ustawia się tu też maksymalną liczbę stron (z zakresu 1...4) i adres interfejsu I2 C układu W3100A. Makro CreateServerSocket tworzy gniazdo do wysyłania i  odbierania stron internetowych. Ar- gumentami makra są numer kanału i numer por- tu. Dla gniazda można zdefiniować do czterech kanałów, które mogą być jednocześnie otwierane. Numer portu jest 16-bitowy (zakres 0...65535). Do przesyłania stron www w protokole HTTP jest zare- zerwowany port 80. Strona umieszczona na serwerze wymaga sta- łego monitorowania żądania dostępu na przykład dla stwierdzenia czy przeglądarka nie chce odświe- żenia strony. Do tego celu służy makro CheckSoc- ketActivity. Argumentem wejściowym jest numer kanału. Zależnie od skonfigurowania połączenia sieciowego przesłanie strony może wymagać jedne- go lub więcej żądań dostępu. W zakładkach Web Page 1...4 trzeba umieścić kod strony napisany w  html. Napisanie prostej strony bez grafiki nie jest trudne. Do prób z serwe- rem użyłem kodu źródłowego zamieszczonego na listingu 1. Program serwera jest zaskakująco prosty. Oprócz modułu internetowego użyłem modułu wy- świetlacza LCD do częściowej kontroli poprawno- ści przesyłania danych w sieci. Na początku programu jest inicjalizowany wyświetlacz LCD i wyświetlany napis ?Webserwer Test?. Następnie jest wywoływane makro Intialize komponentu Web Serwer. Ponieważ inicjalizacja trochę trwa, to program odlicza opóźnienie wyno- szące 1 sekundę. W kolejnym kroku przez wywo- łanie makra CreateServerSocket z  argumentami 0 (numer kanału) i 80 (numer portu) jest tworzone gniazdo do komunikacji z portem 80 (rysunek 6). W tym momencie możemy testować, czy klient (przeglądarka) nie żąda dostępu do strony na ser- werze. Żeby test nie był testowaniem ?niczego?, to w podstronę page2 został wbudowany mechanizm przesyłania do klienta wartości 8-bitowej zmiennej inkrementowanej co około 100 ms. Na listingu 2 za- mieszczono kod podstrony page2. Aby dana mogła być przesyłana z serwera do przeglądarki, to trzeba najpierw zdefiniować w pro- gramie nazwę zmiennej ? w naszym przypadku jest to 8-bitowa zmienna o nazwie VALUE. Wartość tej zmiennej jest przesyłana z użyciem protokołu http do klienta (przeglądarki), po umieszczeniu jej na- W  czasie testu użyłem procedury, która odbiera cała ramkę, ale nie testuje ani identyfikatorów, ani sumy CRC, tylko wyświetla osiem pierwszych zna- ków ASCII z pola danych. Trochę bardziej skomplikowany jest fragment odbierania Echo Request i wysyłania potwierdzenia do nadawcy żądania. Moduł odbiera pakiet ICMP i umieszcza go w buforze odbiorczym. Żaby wysłać potwierdzenie Echo Request trzeba prawidłowo wyliczyć 2 bajty sumy kontrolnej CRC, a do tego po- trzebna jest ilość danych pakietu ICMP. Liczbę baj- tów w pakiecie można odczytać funkcją Rx_readhe- ader. W trybie IP funkcja Rx_readheader z identy- fikatorem idx=1 odczytuje liczbę bajtów zawartą w polu danych (w naszym przypadku liczba bajtów wchodzących w skład całego pakietu ICMP) i adres IP źródła pakietu IP. CRC jest wyliczane z odebranych danych pa- kietu z tym ,ze pierwsze cztery bajty są wyzerowa- ne, bo typ jest bajtem zerowym (Echo Reply), kod jest bajtem zerowym i nie liczymy CRC z dwu baj- tów odebranego CRC. Liczeniem sumy kontrolnej zajmuje się makro programowe CRC. Drugim ważnym elementem jest odczytanie adresu IP stacji, która wysłała Echo Request, po to, aby 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 wykorzystuje się funkcję Rx_readheader z  iden- tyfikatorami idx=2...5. Na rysunku 4 pokazano fragment programu odczytujący IP z pakietu Echo Request, wysłanego do nas. Ten adres jest zapa- miętywany w tablicy ADR_IP, a potem funkcją Set Detination wpisywany w pole Destination Address pakietu IP, który zostanie wysłany z pakietem ICMP w polu danych ? rysunek 4. Po obliczeniu sumy kontrolnej i  ustawieniu adresu źródła można skompletować pakiet ICMP. W poleceniu PING w odsyłanym Echo Reply pole danych powinno mieć taką samą zawartość, jak w  odebranym Echo Request. Po doczytaniu, cały pakiet ICMP jest zapamiętywany w buforze odbior- czym, który jest sekwencyjnie czytany funkcją Rx_ readbyte. Wykorzystamy to do odesłania takich sa- mych danych, jakie odebraliśmy. Żeby ustawić się na odebrane dane odczytujemy i dodajemy pierw- sze cztery bajty, żeby licznik adresowy bufora od- biorczego ustawił się na pierwszy bajt odebranego pola danych. Potem wysyłamy dwa bajty zerowe, dwa bajty wcześniej wyliczonej sumy kontrolnej i wszystkie bajty pola danych. Rysunek 6. Okno właściwości komponen- tu Webserver Rysunek 7. Pro- gram Webserwera Rysunek 8. Fragment okna głównego strony Webserwera
Artykuł ukazał się w
Wrzesień 2010
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio październik 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje wrzesień 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich wrzesień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów