XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003 14 Implementace aplikační vrstvy pro jednočipové mikrokontroléry BABIUCH, Marek Ing., Ph.D, Katedra ATŘ-352, VŠB-TU Ostrava, 17. listopadu, Ostrava - Poruba, 708 33 marek.babiuch@vsb.cz, http://www.vsb.cz Abstrakt: Příspěvek popisuje implementaci aplikační vrstvy pro jednočipové mikrokontroléry. Konkrétně se jedna o aplikaci využívající mikrokontrolér řady PIC firmy microchip. V aplikacích často potřebujeme do mikrokontroléru předat parametry nebo upravit určitá konfigurační nastavení pomocí sítě LAN a protokolu TCP/IP. V příspěvku je popsána realizace aplikace předávání parametrů regulace do mikrokontroléru s využitím rozhraní winsock API. Prezentovaných výsledků bylo dosaženo v rámci řešení výzkumného záměru MSM 272300012 a projektu GAČR 102/03/0625. Klíčová slova: mikrokontrolér, PIC, winsock, TCP/IP 1 Úvod Mikrokontroléry znamenají v dnešní době důležitou pozici při realizaci číslicových regulátorů a logických automatů PLC a práce s nimi přispívá k výraznému zvýšení efektivity a kvality návrhu při realizaci měřicích a řídicích úloh. Při nasazení mikrokontrolérů do měřicích a řidících aplikací hraje důležitou roli komunikace těchto obvodových prvků s okolím. S tím také souvisí fakt, že pro každou takovou úlohu je nutné naimplementovat i uživatelské prostředí. Tento příspěvek je věnován využití winsock knihovny pro předání parametrů mikrokontroléru protokolem TCP/IP. 2 Modul nastavení parametrů mikrokontroléru po internetu Při realizaci aplikace regulace mikrokontrolérem byl vytvořen servisní program umožňující předávání parametrů regulace do paměti mikrokontroléru po sběrnici RS-485 z uživatelsky přívětivého prostředí PC. Při využití znalostí protokolů TCP/IP je vhodné tuto aplikaci zdokonalit např. tím, že uvedené parametry budeme předávat počítači, na kterém je připojen mikrokontrolér pomocí internetu. K tomu je zapotřebí ujasnit si síťový model architektury TCP/IP a také architekturu, pomocí níž bude další aplikace realizována. Rozhraní WinSocket Když už máte na svém počítači nainstalován (a také správně nakonfigurován) fungující TCP/IP protocol stack", máte vlastně již k dispozici základní komunikační mechanismy pro práci v Internetu, a můžete se začít ohlížet po konkrétních aplikacích. Těch opět existuje opravdu velký výběr, pokrývající všechny existující internetové služby, v provedení od volně šiřitelných programů až po čistě komerční produkty. Pro nás je ale velmi důležité vědět, zda jsme při jejich výběru nějak omezeni - zda například musíme používat TCP/IP protocol stack i jednotlivé aplikace od stejného výrobce, aby asi vzájemně rozuměly. Odpověď na tuto veledůležitou otázku je naštěstí záporná, alespoň pro prostředí MS Windows (všech současných verzí). Zde se totiž podařilo prosadit jednotné rozhraní mezi TCP/IP protocol stackem a aplikacemi, které chtějí využívat jeho služeb. Toto rozhraní se jmenuje (od: Windows Sockets), a jeho specifikace jsou poměrně důsledně dodržovány - což v praxi znamená, že když si pořídíte dva produkty od různých výrobců, které podporují toto rozhraní a komunikují spolu přes něj, máte rozumnou záruku toho, že si
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003 15 budou vzájemně rozumět. No a rozhraní dnes podporují snad úplně všechny aplikace i protocol stacky pro prostředí Windows. 3 architektura Následující obrázek ilustruje, jak pracuje. Na nejvyšší úrovni (vrstvě) se nachází aplikace na aplikačním programovém rozhraní, které zpřístupňuje síťové služby a požadavky pro API dynamicky linkované knihovny (DLL) směrem k servisním požadavkům a tyto pak přidělují sockety příslušnému poskytovateli služeb (service provider). Service provider poté implementuje low-level specifikovaný síťový protokol a zpřístupňuje ho pomocí service provider interface (). Obr. 3-1. Architektura Následující tabulka popisuje komponenty architektury : Komponent Vrstva Popis aplikace DLL service provider Namespace service provider User API API Jakákoliv front-end Windows Socket uživatelská aplikace, která musí přenést data po síti. Aplikace musí znát pouze definici rozhraní, nemusí znát konkrétní transportní nebo tzv. namespace implementaci. Aplikační programové rozhraní, které využívá koncová aplikace pro získání přístupu síťových služeb, které jsou zabudovány do knihoven DLL. Knihovna transportních a namespace funkcí. DLL dovolují vrchní vrstvě aplikace a spodní vrstvě služeb se dynamicky propojit v běžícím čase. Aplikace potřebuje znát pouze definici rozhraní (v tomto případě API), ne již její implementaci (v tomto případě transport service providers nebo namespace service providers). Vrstva (Service Provider Interface), kterou využívá spodní vrstva pro zajištění transportních služeb, jako např. TCP/IP služeb pro horní aplikační vrstvu. vrstva zajišťující konkrétní rozlišení jmených služeb, jako např. namespace DNS, Novell Directory Services (NDS) a X.500. Low-level transport protokoly jako TCP/IP nebo Internetwork Packet Exchange/Sequenced Packet Exchange (IPX/SPX). namespace Low-level protokoly, jako např DNS, NDS, X.500, atd. Tab. 3-1. Komponenty architektury
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003 16 API poskytuje kolekci funkcí, kterou implementované programy využívají při řešení různých úkolů. Specifikace winsock API rozděluje knihovnu do tří skupin: Funkce přenesené ze socketu Berkeley do API. Databázové funkce, umožňující programům získat internetovské informace o jménech domén, komunikačních službách a protokolech. Typicky windowsovské rozšíření původních funkcí. Následující tabulka popisuje funkce ze všech tří skupin. Webovské programování dělí dále tyto funkce na blokující a neblokující. Blokující funkce brání programu zavolat jakoukoliv další funkci z knihovny, dokud ona sama nedokončí své síťové operace. Neblokující funkce provedou okamžitě svou operaci nebo vrátí chybové hlášení. Neblokující operace tedy nenutí své okolí čekat na ukončení jejich činnosti. Funkce, které mohou blokovat API Accept Potvrzení příchozího spojení. Vytvoří nový socket a spojí je se vzdáleným počítačem, který požadoval spojení. Vrací původní socket do stavu naslouchání (čekání na další příkaz). Closesocket Uzavírá jeden konec soketového spojení. Connect Inicializuje spojení na konkrétním socketu. Recv Přijímá data ze spojeného socketu. Recvfrom Přijímá data jak ze spojeného, tak nespojeného socketu. Select Provádí synchronní vstupně/výstupní multiplexing monitorováním stavů všech socketů. Send Odešle data do připojeného socketu. Sendto Odešle data do připojeného i nepřipojeného socketu. Funkce, které neblokují API Bind Přiřadí místní jméno nepojmenovanému socketu. Getpeername Získá jméno vlastníka připojeného k udanému socketu. ukládá tyto informace do lokálních struktur. Getsocketname Vrátí místní jméno udaného socketu. getsockopt Získá parametry přiřazené konkrétnímu socketu. Htonl Převede 32bitové číslo z počítačového bytového řazení na síťové bytové řazení. Inet_adr Převede znakový řetězec představující IP adresu v tečkami oddělené notaci na 32 bitové binární číslo v řazení v síťovém pořadí bytů. Inet_ntoa Převede IP adresu do tečkami oddělené notace. Ioctlsocket Řídí různé parametry udávající, jak sockety operují a zpracovávájí síťový vstup a výstup. Listen Tato funkce uvede socket do naslouchacího režimu. Přikazuje udanému socketu čekat na příchozí spojení. Ntohl Převádí 32bitové číslo řazené v síťovém bytovém pořadí do počítačového bytového pořadí. Ntohs Převádí 16bitové číslo řazené v síťovém bytovém pořadí do počítačového bytového pořadí. Setsockopt Uloží parametry přiřazené konkrétnímu socketu. Shutdown Ukončí část plně duplexního spojení (pouze na straně místního počítače). Socket Vytvoří koncový bod komunikace a vrátí jednoznačný identifikátor socketu.
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003 17 Gethostbyaddr Gethostbyname Gethostname Getprotobyname Getprotobynumber Getservbyname Getservbyport Databázové funkce ve API Vrátí doménové jméno a IP adresu odpovídající síťové adrese. Vrátí doménové jméno a IP adresu odpovídající jménu počítače. Vrátí doménové jméno lokálního počítače. Podle jména protokolu vrátí oficiální jméno a číslo jednoznačně identifikující protokol. Získá jméno a číslo protokolu odpovídající zadanému číslu. Získá jméno služby a číslo portu protokolu odpovídající jménu služby. Získá název služby a port odpovídající zadanému číslu portu. Tab. 3-2. Socketové funkce 4 Implementace aplikace nastavení parametrů regulace po internetu Socketových funkcí bylo s výhodou využito k napsaní aplikační vrstvy servisního programu nastavování parametru regulace pro mikrokontrolér s využitím internetu. Na následujícím obrázku je vytvořené schéma implementované aplikace. Známé regulační algoritmy jsou vytvořeny a implementovány přímo v paměti mikrokontroléru PIC 16C74A. Ten tvoří společně s převodníkem TTL/RS485 nejspodnější vrstvu síťového modelu TCP/IP, tedy jednak fyzickou, tak spojovou. Rozhranní WinSocket zajišťuje síťovou a transportní vrstvu celé aplikace. Je třeba vhodně naprogramovat formu UDP protokolu a využít socketové funkce pro správné fungování aplikace. Aplikační vrstvu tvoří program v prostředí operačního systému Windows, pomocí něhož příslušné parametry regulace zadáváme a následně odesíláme kliknutím myši vzdálenému počítači na který je připojený daný mikrokontrolér jako univerzální regulátor. Vzdálený počítač v síti internet jednoznačně určený IP adresou TTL/RS232 Converter RS 485 Aplikace server Lokální počítač Aplikace klient TTL Regulovaná soustava Obr. 4-1. Nastavení parametru mikrokontroléru po internetu Konkrétní aplikační vrstvu tvoří program Controller Client Application. Je jen na konkrétním programátorovi, jak svoji aplikaci napíše. Zde je pro jednoduchost nastavováno 6 parametrů: typ regulátoru, žádaná hodnota, vzorkovací perioda a parametry regulátoru: zesílení, derivační a integrační časová konstanta. Typ regulátoru je pro mikrokontrolér klíčový parametr, podle něj pak jsou zpracovány ostatní parametry. (Je zřejmé, že pro P regulátor jsou integrační a derivační konstanty ignorovány, obdobně u ostatních typů
XXVIII. ASR '2003 Seminar, Instruments and Control, Ostrava, May 6, 2003 18 regulátorů). Pak jen zadáme IP adresu cílového počítače a regulace je zahájena. Na následujícím obrázku je zobrazeno základní okno aplikace. 5 Závěr Servisní program je tedy vytvořen pro grafické ovládání uvedeného univerzálního regulátoru. Jeho výhodou je, že je rovněž použitelný i při různých modifikacích systému. Komunikuje s mikrokontrolérem prostřednictvím RS485 rozhraní po implementaci uvedené v minulých kapitolách. Pokud bychom implementovali regulační algoritmy do jiného mikrokontroléru, ať už z jakéhokoliv důvodu (rychlost výpočtu, vzorkování, pwm výstup, atd.) uvedený servisní program můžeme opětovně použít. Nastavení parametrů regulace s využitím knihoven winsock api je rozšířením stávající aplikace regulace na mikrokontroléru PIC 16C74A, jež vidíme na následujícím obrázku. V tomto případě je namísto servisního prográmku client server application použit jiný servisní program nastavení parametrů mikrokontroléru přímo z lokálního PC připojeného k mikrokontroléru. Uvedená aplikace je tedy modulární a můžeme dle potřeby měnit servisní programy ke konkrétní aplikaci. Power Supply TTL/RS232 Converter Servis programm under OS Windows w,kr,ti, TD I/O Setup Interrupt control. Configuration A/D Setup. PWM Setup. Communication Setup u Control System y TTL RS 485 System Setup Sample for AD convertion Mikrokontrolér - regulátor PWM Output PSD control algorithm Obr. 5-1. Nastavení parametrů regulace 6 Literatura BABIUCH, M. 2002 : Programová podpora mikropočítačových měřicích a řídicích systémů. Autoreferát disertační práce : VŠB-TU Ostrava, 2002, ISBN 80-248-0095-0. HRBÁČEK, J., 2002. Komunikace mikrokontrolérů s okolím PRAHA: BEN-technická literatura, ISBN 80-86056-42-2. MICROCHIP 2002. Pic Micro Devices. PIC16C7X Family Datasheets. 2002. Available from www: <URL:http//www.microchip.com>