Professional Documents
Culture Documents
Tcpipstack PDF
Tcpipstack PDF
Tartalomjegyzk
1. Bevezeto 1.1. Ksznetnyilvnts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Soros vonal 3. A TCP/IP Stack felptse 3.1. A Stack rtegei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. User Datagram Protocol (UDP) 5. A TCP/IP Stack kongurlsa 6. A TCP/IP Stack moduljai 6.1. Address Resolution Protocol modul . . . . . . . . . 6.1.1. ARP funkcik . . . . . . . . . . . . . . . . . . 6.1.2. ARPTask funkcik . . . . . . . . . . . . . . . 6.2. User Datagram Protocol (UDP) modul . . . . . . . . 6.3. Stack Manager modul . . . . . . . . . . . . . . . . . 6.4. A soros-UDP talakt modul . . . . . . . . . . . . . 6.5. HTTP szerver modul . . . . . . . . . . . . . . . . . . 6.5.1. Dinamikus honlap generls . . . . . . . . . 6.5.2. HTTP CGI . . . . . . . . . . . . . . . . . . . . 6.6. Microchip fjlrendszer (MPFS) . . . . . . . . . . . . 6.6.1. MPFS kp ksztse . . . . . . . . . . . . . . . 6.6.2. MPFS knyvtr . . . . . . . . . . . . . . . . . 6.7. FTP szerver modul . . . . . . . . . . . . . . . . . . . 6.7.1. MPFS kp feltltse FTP kliens segtsgvel . 7. Hardver 7.1. Alkatrszek . . . . . . . . . . . . . . . . 7.1.1. PIC18F452 mikrovezrl o. . . . . 7.1.2. RTL8019AS ethernet vezrl o . . 7.1.3. 24LC256 tpus soros EEPROM . 7.1.4. MAX232A soros vonali illeszt o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 5 7 9 13 14 14 16 17 27 27 34 35 36 39 40 41 41 42 44 44 44 48 48 49
ii 8. Az eszkz hasznlata s tesztelse 8.1. Az eszkz hasznlata . . . . . . . . . 8.2. Kongurls bngsz oprogrammal . 8.2.1. Hlzat belltsa . . . . . . . 8.2.2. Soros vonal belltsa . . . . 8.2.3. Statisztika . . . . . . . . . . . 8.3. Az eszkz tesztelse . . . . . . . . . 50 50 51 51 53 53 54
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
iii
brk jegyzke
1.1. A rendszer blokkvzlata . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Egy bjt tvitele soros vonalon . . . . . . . . . . . . . . . . . . . . . . 3.1. A TCP/IP referencia modell rtegei . . . . . . . . . . . . . . . . . . . . 3.2. A referencia modell s a Microchip TCP/IP Stack rtegei . . . . . . . . 4.1. UDP csomag felptse . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Az el o-fejlc felptse . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. 7.1. 7.2. 7.3. 7.4. 8.1. 8.2. 8.3. 8.4. 8.5. 8.6. 8.7. 8.8. A Stack Manager algoritmusnak folyamatbrja . . . . . . A Serial2UDP_GetSerialData fggvny folyamatbrja . . A Serial2UDP_ProcessUDPData fggvny folyamatbrja Urlapok kezelse . . . . . . . . . . . . . . . . . . . . . . . . MPFS kpfjl felptse . . . . . . . . . . . . . . . . . . . . . MPFS FAT bejegyzs felptse . . . . . . . . . . . . . . . . MPFS adatblokk felptse . . . . . . . . . . . . . . . . . . . MPFS kpfjl feltltse FTP kliens segtsgvel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 5 7 8 28 31 32 38 39 40 40 43 45 46 49 49 50 51 52 52 53 54 54 55
Soros vonali illeszt o s tpfeszltsg stabiliztor kapcsolsi rajza A PIC18F452 tpus mikrovezrl o lbkiosztsa . . . . . . . . . . . A 24LC256 tpus soros EEPROM lbkiosztsa . . . . . . . . . . . A MAX232 tpus soros vonali illeszt o lbkiosztsa . . . . . . . . A doboz oldal- s ellnzete . . . . . . . . . . . Az eszkz hasznlata . . . . . . . . . . . . . . . Kongurls bngsz oprogrammal: index . . . Hlzat belltsa bngsz oprogrammal . . . . Soros vonal belltsa bngsz oprogrammal . Statisztika megtekintse bngsz oprogrammal Az eszkz tesztelse . . . . . . . . . . . . . . . Az UDP test program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
iv
Tblzatok jegyzke
5.1 6.1 6.2. 6.3. 6.4. Kongurcis dencik ill. vltozk . . . . . . . . . . . . . . . . . . . TCP/IP Stack moduljai . . . . . . . . . . . . . . . . . . A soros-UDP talakt modul kongurcis vltozi A soros-UDP talakt modul bels o vltozi . . . . . A soros-UDP modul talakt llapotai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 29 29 33
1. fejezet Bevezeto
Manapsg az ethernet hlzat elterjedst lthatjuk a htkznapi hasznlatban s az iparban egyarnt. A csavart rpros kbelek nagy tvolsgra vezethet ok, olcsk, knnyen szerelhet ok s az rnykolatlan kbelek (UTP) is relatve rzketlenek az elektromos zavarokra, de ipari alkalmazsban ltalban rnykolt kbeleket (STP) hasznlnak. A most bemutatsra kerl o rendszerrel egyszeruen s gyorsan kpess tehetjk PIC mikrokontrolleres alkalmazsunkat, hogy kommunikljon az intraneten vagy interneten. E szakdolgozatban egy a valsgban is felhasznlhat alkalmazst mutatok be, hogyan illeszthetjk a soros vonalon kommunikl rgebbi fejlesztsu eszkznket ethernet hlzathoz. A rendszer leegyszerustett blokkvzlata az 1.1. brn lthat.
1.1. bra. A rendszer blokkvzlata A Microchip kifejlesztette a PIC18-as mikrokontroller csaldhoz a TCP/IP Stack-et s egy komplett web szervert. Fejlesztseit szabadon hozzfrhet ov tette s letlthet o az internetr ol. Ezeket a forrskdokat hasznltam fel. A programcsomaggal egy HTTP szervert pthetnk, aminek honlapjt FTP-n frissthetjk. Szksg van egy PIC 18-as mikrovezrl ore, egy NIC-re (pldul Realtek 8019AS). Kell mg egy C fordt, a program lefordtshoz. n a PIC C18 dem verzijt hasznltam. rdemes letlteni az MPLAB legfrissebb verzijt. Ez egy integrlt
2 fejleszt oi krnyezet (IDE) amiben szerkeszthetjk a forrsfjlokat, lefordthatjuk a programot s fel is tlthetjk a mikrovezrl obe. Kell mg egy PIC programoz is. n az ICD2 nevezetu programoz s nyomkvet o eszkzt hasznltam. A szgletes zrjelben lev o szmokkal mindig az irodalomjegyzkben szerepl o dokumentumokra hivatkozok.
1.1.
Ksznetnyilvnts
Ezton szeretnm megksznni Dr. Knya Lszl tanr rnak s Kolinger Attilnak a segtsget s a fejlesztshez nlklzhetetlen eszkzket.
3.1. bra. A TCP/IP referencia modell rtegei A TCP/IP rtegek aktvak, vagyis nem csak akkor mukdnek, ha krs rkezik egy szolgltatshoz, hanem akkor is, id otllps trtnt vagy egy j csomag rkezett. Egy olyan rendszer, ahol sok adat- s programmemria ll rendelkezsre knnyen teljesti a krseket. Egy multitaszkos opercis rendszer extra kpessgei lehet ov teszik, hogy az implementci modulris legyen. A program viszont bonyolult lesz, ha csak egy 8 bites mikrovezrl o ll rendelkezsre nhny szz bjt RAM-mal s korltozott programmemrival. Tovbb, egy multitaszkos opercis rendszer nlkl sok id ot kell arra fordtani a programozs sorn, hogy a Stack fggetlen maradjon a f o alkalmazstl. Relatve knnyu elkszteni s helytakarkos az a TCP/IP Stack, amely bele van integrlva a f o alkalmazsba. De sok problma lphet fel, amikor jabb funkcikat szeretnnk a programhoz hozzadni.
1
Az egymsra plst angolul a stacked szval fejezik ki, ezrt hvjk TCP/IP Stack-nek.
5 Ez a TCP/IP Stack modulris, C programozsi nyelven rdott s a Microchip C18 s a HiTech PICC 18 fordtkkal is lefordthat. A forrsfjl automatikusan eldnti, hogy milyen fordtval szeretnnk fordtani. A kt fordt kztti klnbsgekb ol ered o problmkat a compiler.h fjlban lev o dencikkal kszbljk ki. Ez a TCP/IP Stack csak PIC 18-as mikrovezrl okn fut.
3.1.
A Stack rtegei
A 3.2 brn is lthat, hogy a Microchip TCP/IP Stack is klnbz o rtegekre van osztva. A kd gy lett megrva, hogy minden rteg kln forrsfjlban van, mg az API2 kln fejlcfjlban van.
3.2. bra. A TCP/IP referencia modell s a Microchip TCP/IP Stack rtegeinek sszehasonltsa Ellenttben a referencia modellel, a Microchip TCP/IP Stack-ben egyes rtegek nem csak a kzvetlenl alatta lev o rteget rik el. A legnagyobb klnbsg a hagyomnyos TCP/IP Stack implementcitl kt j modul: StackTask s az ARPTask. A StackTask vezrli a Stack sszes moduljnak mukdst az ARPTask pedig az ARP rteg szolgltatsait valstja meg. Ez a Stack az ltalnosan ismert kooperatv multitaszk technikt alkalmazza, hogy fggetlen legyen a f o alkalmazstl. Egy kooperatv multitaszkos rendszerben tbb taszk mukdik, minden taszk vgrehajt egy feladatrszt, majd a vezrlst visszaadja s a kvetkez o taszk fut. Ebben az rtelmezsben a StackTask s az ARPTask egy-egy kooperatv taszk. A f oprogramba vagy az opercis rendszerbe is lehet implementlni a kooperatv vagy ms tpus multitaszkot megvalst kdot. A Stack gy lett megtervezve, hogy fggetlen legyen brmilyen opercis rendszert ol, vagyis sajt kooperatv multitaszk rendszere van. Ennek eredmnyeknt hasznlhat brmilyen rendszerben fggetlenl attl, hogy hasznl-e multitaszkos opercis rendszert vagy sem. Azonban, ha a sajt alkalmazsunk hasznlja ezt a
2
6 TCP/IP Stack-et, alkalmaznunk kell a kooperatv multitaszk technikt a sajt taszkjaink megrsakor. Ez elrhet o gy is, hogy a feladatot tbb taszkra osztjuk vagy a feladatot egy FSM-nek (Finite State Machine, Vges llapot Automata) tovbbtjuk ami a feladatot sok kis rszfeladatra bontja s egyms utn futtatja le o ket. A HTTP szerver az utbbi megoldst hasznlja. Jegyezzk meg, hogy ebben a TCP/IP Stack-ben nincs implementlva az sszes olyan modul, ami egy tlagos TCP/IP Stack-ben implementlva van, de ha szksg van egy olyan funkcira, ami nincs implementlva, brmikor megrhat kln taszkknt vagy modulknt.
4.1. bra. UDP csomag felptse Az UDP csomagok felptse a 4.1. brn lthat. A forrs port opcionlis mez o, akkor rdemes hasznlni, ha a csomagot kld o folyamat vlaszt vr. Ha nincs hasznlva, nullt kell a helyre rni. A cl port a cl cmen bell egy folyamatot vagy programrszt jelent, de lehet ms jelentse is. A hossz a csomag oktetjeinek szmt mutatja meg, belertve a fejlcet s az adatokat is. Teht a legkisebb rtk, amit felvehet: nyolc. Az ellen orz o sszeg az IP fejlcb ol kszlt el o-fejlc, az UDP fejlc s az adat egyes komplemense 16 bitre kiegsztve. Azrt hvjk el o-fejlcnek, mert az IP fejlcb ol msoldnak az adatok. Az el o-fejlc (4.2. bra) az UDP fejlc el ott van s tartalmazza a forrs- s clcmet, protokoll tpust s az UDP csomag hosszt. Ez az informci vd az eltvedt csomagok ellen. Az ellen orz o sszeg szmtsa hasonlt a TCP-ben hasznlt ellen orz o sszeg szmtshoz. Ha a kiszmtott ellen orz o sszeg nulla, akkor az sszeg egyes komplemense lesz elkldve (FFFFh). Ha az ellen orz o sszegknt nullt kld a forrs, az azt jelenti, hogy
4.2. bra. Az el o-fejlc felptse a kld o nem szmolt sszeget. Nyomkvetskor alkalmazhat vagy, ha a fels obb szintu protokollok nem hasznljk ezt az sszeget. Ebben a TCP/IP Stack-ben az ellen orz o sszeg szmts nincs implementlva. Az UDP modulnak ismernie kell a forrs s cl internet cmt s a protokoll tpust. Ezt a protokollt hasznljk az internetes nv szerverek (DNS) s Trivial File Transfer Protocol (TFTP). Ha az Internet Protocol-on bell hasznljuk az UDP-t, akkor az a 17-es (oktlisan 21) szm protokoll.
TICKS_PER_SECONDS TICK_PRESCALE_VALUE
Tick.c Tick.c
MPFS_USE_PGRM
MPFS.c
MPFS_USE_EEPROM
MPFS.c
MPFS_RESERVE_BLOCK
MPFS.c
EEPROM_CONTROL
MPFS.c
1 Az MPLAB fejleszt oi krnyezet rzkeli a vltoztatsokat s kezeli a fgg osgeket, csak azt fordtja le, ami szksges.
10 Azonost STACK_USE_ICMP STACK_USE_SLIP STACK_USE_IP_GLEANING rtkek Hasznl Megjegyzs StackTsk.c Ha nincs szksg ICMP-re, ne deniljuk. SLIP.c Ha nincs szksg SLIPre ne deniljuk. StackTsk.c Ha nincs szksg IP Gleaning-re ne deniljuk. DHCP.c, Ha nincs szksg DHCPStackTsk.c re ne deniljuk. FTP.c Ha nincs szksg FTP szerverre ne deniljuk. TCP.c, Ha nincs szksg TCPStackTsk.c re ne deniljuk. Automatikusan engedlyezi, ha valamelyik modulnak szksge van TCP-re. UDP.c, Ha nincs szksg UDPStackTsk.c re ne deniljuk. Automatikusan engedlyezi, ha valamelyik modulnak szksge van UDP-re. ARP.c, Ha deniljuk a kliens TCP.c md fggvnyek engedlyez odnek. TCP.c A TCP vrjon vagy ne az ACK-re a kvetkez o csomag kldse el ott. felh. alk. Alap IP: 10.10.5.15 felh. alk. Alap netmaszk: 255.255.255.0 felh. alk. Alap tjr: 10.10.5.15 felh. alk. Alap MAC: 00:04:163:00:00:00 felh. alk. Aktulis IP. Ha DHCP engedlyezett akkor a szerver ltal adott kongurci. felh. alk. Aktulis netmaszk. felh. alk. Aktulis tjr. felh. alk. Aktulis MAC.
STACK_USE_UDP
STACK_CLIENT_MODE
TCP_NO_WAIT_FOR_ACK
MY_DEFAULT_IP_ADDR_BYTE? 0-255 MY_DEFAULT_MASK_BYTE? 0-255 MY_DEFAULT_GATE_BYTE? MY_DEFAULT_MAC_BYTE? MY_IP_BYTE? 0-255 0-255 0-255
11 Azonost MAX_SOCKETS rtkek 1-253 Hasznl TCP.c Megjegyzs Denilja, hogy hny TCP socket hasznlhat (a RAM mennyisgt ol fgg). Fordts kzben ellen orzi, hogy elegend o-e a TCP moduloknak a megadott rtk. Denilja, hogy hny UDP socket hasznlhat (a RAM mennyisgt ol fgg). Fordts kzben ellen orzi, hogy elegend o-e a UDP moduloknak a megadott rtk. Denilja a kld o puer mrett. Denilja a kld o puerek szmt. Denilja az egyszerre fenntarthat HTTP kapcsolatok szmt. Denilja a lapmretet az MPFS fjlrendszerhez. Denilja az FTP felhasznlnv maximlis hosszt. Denilja az urlapok mez oinek maximlis szmt, belertve a mez o nevt is. Denilja az urlappal tadhat sztring maximlis hosszt. Ha nincs szksg a soros-UDP talakt modulra ne deniljuk. Alap cl IP cm: 10.10.5.5. Alap cl port: 2222.
MAX_UDP_SOCKETS
1-254
UDP.c
MPFS.c
FTP.c
HTTP.c
MAX_HTML_CMD_LEN (HTTP.c)
1-128
HTTP.c
STACK_USE_SER2UDP
0-255 1-65535
ser2udp.c
ser2udp.c ser2udp.c
12 Azonost DEFAULT_LOCAL_PORT (ser2udp.h INITWAIT_SEC (ser2udp.h rtkek 1-65535 042949672 Hasznl ser2udp.c ser2udp.c Megjegyzs Alap forrs port: 2221.
ARP krs el otti vrakozs ideje msodpercben. Alap: 4. TIMEOUT_SEC (ser2udp.h 0ser2udp.c ARP krs utn hny 42949672 msodpercig vr a vlaszra. Alap: 4. SER2UDP_USE_INTERRUPT ser2udp.c A soros adatok vtel(ser2udp.h hez hasznljon-e megszaktst a modul. 5.1. tblzat: Kongurcis dencik ill. vltozk
A fejleszts sorn egy projektet rdemes hasznlni. Projekt fjlbl is van el ore elksztett a programcsomagban. n az MPNICEE.pjt fjlt hasznltam. Ezt a fjlt akkor rdemes hasznlni, ha a Microchip C18 fordtt Realtek NIC-et s kls o soros EEPROM-ot hasznlunk, tovbb szksgnk van HTTP, FTP szerverre s ICMP-re. Ugyanis ezeket tudja alapbl az a program, amit ezzel a projekt fjllal fordtunk. Fontos megjegyezni, hogy a projekt fjlokban is lehet dencikat megadni.
13
ARP.c, ARPTsk.c, MAC.c vagy SLIP.c, Helpers.c IP IP.c, MAC.c vagy SLIP.c, Helpers.c ICMP ICMP.c, StackTsk.c, IP.c, MAC.c vagy SLIP.c, Helpers.c TCP StackTsk.c, TCP.c IP.c, MAC.c vagy SLIP.c, Helpers.c, Tick.c UDP StackTsk.c, UDP.c, IP.c, MAC.c vagy SLIP.c, Helpers.c Stack Manager StackTsk.c, TCP.c, IP.c, ICMP.c, ARPTsk.c, ARP.c, MAC.c vagy SLIP.c, Tick.c, Helpers.c HTTP Server HTTP.c, TCP.c, IP.c, MAC.c vagy SLIP.c, Helpers.c, Tick.c, MPFS.c, XEEPROM.c DHCP Client DHCP.c, UDP.c, IP.c, MAC.c, Helpers.c, Tick.c
14 Modul IP Gleaning FTP Server Serial2UDP Fjl szksges Lers StackTsk.c, ARP.c, IP cm kongurlshoz ARPTsk.c, ICMP.c, MAC.c vagy SLIP.c FTP.c, TCP.c, IP.c, File Transfer Protocol szerver MAC.c vagy SLIP.c ARP.c, UDP.c, MAC.c vagy Soros-UDP talakt SLIP.c 6.1. tblzat: TCP/IP Stack moduljai
Most a soros-UDP talakt modul ltal hasznlt modulok rszletes lersa kvetkezik. Az itt nem trgyalt modulok (MAC, SLIP, IP, ICMP, TCP, DHCP) angol nyelvu lersa az AN833-as [1] dokumentumban tallhat.
6.1.
Az ARP modul gondoskodik arrl, hogy az IP cmekb ol megtudjuk, hogy milyen hardveres cm (MAC cm) tartozik hozz s hogy ms eszkzk az IP cmnket tudva, megkapjk a MAC cmnket. Az Microchip TCP/IP Stack-jnek ARP rtege kt modulbl ll: ARP.c s ARPTask.c. Az ARP modulban (ARP.c) az ARP alapvet o fggvnyeit denilja. Az ARPTask ami az ARPTsk.c fjlban tallhat ezeket a fggvnyeket felhasznlva valstja meg az ARP szolgltatst. Az ARPTask vlaszol az ARP krsekre s egy egyszintu trban trolja a ms hosztok ARP vlaszt. Az ARPTask modulban nincs megvalstva az id otllps kezelse, ezt a fels obb szintu modulokban kell megoldani. Az ARPTask ktfle mdban mukdhet: szerver illetve szerver/kliens. A szerver/kliens mdban lehetsges ARP krsek generlsa. Szerver mdban ez a kdrsz nincs befordtva. ltalban az alkalmazsok szerver mdban futnak s rdemes is szerver mdba fordtani, a kd mretnek cskkentse rdekben. Tovbb szerver mdban nem kerl lefoglalsra az egyszintu tr s ezzel RAM terletet takarthatunk meg. Ha a STACK_CLIENT_MODE denilva van szerver/kliens mdban fog mukdni az ARPTask modul. A soros-UDP konverter szerver/kliens mdban hasznlja az ARP modult.
15 Mellkhats: Nincs Megjegyzs: Ez csak egy makrdenci a MACIsTxReady fggvnyre. Plda: // Ha a kld puffer res, elkldnk egy ARP csomagot if ( ARPIsTxReady() ) { // ARP csomag kldse ARPPut(&RemoteNode, ARP_REPLY); } ARPGet Ez a funkci beolvas egy ARP csomagot s visszatrskor megadja a szksges informcikat a csomagrl. Szintaxis: BOOL ARPGet(NODE_INFO *remote, BYTE *opCode) Paramter: remote [kimen o] A tvoli eszkzhz tartoz informcik, a MAC s az IP cm. opCode [kimen o] ARP kd. A paramter lehetsges rtkei a kvetkez ok: ARP_REPLY Egy ARP vlasz csomag rkezett ARP_REQUEST Egy ARP krs csomag rkezett ARP_UNKNOWN Egy ismeretlen ARP csomag rkezett Visszatrsi rtk: IGAZ: Ha egy rvnyes ARP csomag rkezett s az a mi eszkznknek van cmezve. HAMIS: Ha ismeretlen ARP kdja van a csomagnak vagy nem neknk van cmezve a csomag. Elofelttel: MACGetHeader mr meg volt hvva s a kapott MAC csomag tpusa MAC_ARP Mellkhats: Nincs Megjegyzs: Ez a funkci azt felttelezi, hogy az aktv puerben van egy ARP csomag s a hozzfrsi mutat az ARP csomag elejre mutat. ltalban a magasabb szintu rtegek ellen orzik a MAC puert s csak akkor hvjk ezt a fggvnyt, ha ARP csomagot rzkeltek. Ez a funkci beolvassa az egsz ARP csomagot s felszabadtja az aktv puert. Plda: // Ha MAC csomag rkezett... if ( MACGetHeader(\&RemoteNode, \&PacketType) ) \{ // Ha ez egy ARP csomag, beolvassuk if ( PacketType == MAC\_ARP ) \{ // Ez egy ARP csomag ARPGet(\&RemoteNode, \&ARPCode); ...
16 ARPPut Ez a funkci feltlti a MAC puert egy rvnyes ARP csomaggal. Szintaxis: void ARPPut(NODE_INFO *remote, BYTE opCode) Paramter: remote [bemen o] A tvoli eszkz adatai, mint a MAC s az IP cm opCode [bemen o] ARP kd. Lehetsges rtkei a kvetkez ok: ARP_REPLY ARP vlaszknt kldi el a csomagot ARP_REQUEST ARP krsknt kldi el a csomagot Visszatrsi rtk: Nincs Elofelttel: ARPIsTxReady == TRUE Mellkhats: Nincs Megjegyzs: Felpti az ARP csomagot s elkldi. Plda: // Megnzzk, hogy kld puffer elrhet-e if ( ARPIsTxReady() ) { // Igen, elkldjk ARPPut(&RemoteNode, ARP_REQUEST); ... }
17 Mellkhats: Nincs Megjegyzs: Ez a funkci csak szerver/kliens mdban elrhet o. Plda: // Ellenrizzk, hogy a kld puffer elrhet-e if ( ARPIsTxReady() ) { // ARP krs kldse ARPResolve(\&RemoteNodeIP); ... } ARPIsResolved Ez a funkci ellen orzi a bels o trolt s visszatrsi rtkknt megadja a cl hoszt MAC cmt. Szintaxis: BOOL ARPIsResolved(IP_ADDR *IPAddr, MAC_ADDR *MACAddr) Paramter: IPAddr [bemen o] A tvoli eszkz IP cme, aminek a MAC cmt szeretnnk tudni. MACAddr [kimen o] A puer ami a tvoli hoszt MAC cmt fogja trolni. Visszatrsi rtk: IGAZ: Ha egyez o IP cm van a bels o trolban s az tmsoldott a MACAddr vltozba. HAMIS: Ha nincs egyez o IP cm a bels o trolban. Ilyenkor a MACAddr rtke nem vltozik. Elofelttel: Nincs Mellkhats: A bels o trolbl az tmsolt adatok eltvoltsra kerlnek. Megjegyzs: Az ARPTask csak egyszintu trolval dolgozik, ezrt a fels obb rtegnek kell arrl gondoskodnia, hogy msik ARP krst ne kldjn, mg az el oz ore nem rkezett vlasz. Ez a funkci csak szerver/kliens mdban elrhet o. Plda: // Ellenrizzk, hogy rkezett-e vlasz if ( ARPIsResolved(&RemoteIPAddr, &RemoteMACAddr) ) { // MAC cm megvan. Ms feladat kvetkezhet... ... } else { // Mg nincs meg a MAC. Vrunk... ... }
6.2.
Az UDP rteg az UDP.c fjlban van implementlva. A fejlc fjlban (UDP.h) vannak denilva a rteg szolgltatsai. Ebben a Stack architektrban az UDP egy aktv
18 rteg. Veszi az UDP csomagot s a megfelel o UDP socket-et rtesti az adat rkezsr ol. Az UDP modul kooperatv taszkknt van implementlva s automatikusan mukdik a f o alkalmazstl fggetlenl. A rteg legfeljebb 254 UDP socket-et hasznlhat. Ez az rtk csak az elrhet o memritl s a fordttl fgg. Tbb socket hasznlatval tbb szimultn UDP kapcsolat hasznlhat. Fontos megjegyezni, hogy minden socket krlbell 19 byte memrit hasznl (rdemes ellen orizni az UDP.h fjlt) s minden socket nveli az UDP csomagok feldolgozsnak idejt. Ellenttben a tbbi socket implementcitl, a Microchip TCP/IP Stack-ben minden socket egy kld o puert hasznl. Ez cskkenti a RAM szksgletet, de problmt okozhat, ha nhny socket nem szabadtja fel a kld o puert. Ebben az esetben a tvoli hosztok s/vagy helyi alkalmazsok nem tudnak kapcsolatba lpni az eszkzzel. Ennek elkerlse rdekben a felhasznlnak gondoskodnia kell arrl, hogy az sszes socket szmra elegend oen nagy puer lljon rendelkezsre. A vteli oldalon is csak egy puer van, ezrt ha adatot olvasunk, az sszes adatot be kell olvasni egy taszkban s rteni a puert, hogy a tbbi socket is tudja olvasni az adatt. Nem lehet azt tenni, hogy a taszk csak a puer egy rszt olvassa be s majd egy kvetkez o hvs esetn dolgozza fel a maradkot. A Microchip TCP/IP Stack-ben nincs implementlva az UDP ellen orz o sszeg kpzs. Az ellen orz o sszeg helyre mindig nulla rtk kerl. Ezrt minden UDP-t hasznl modulnak magnak kell gondoskodnia az adatok integritsrl. UDPInit Ez a funkci inicializlja az UDP modult s el okszti a tbbszl UDP kapcsolatokra. Szintaxis: void UDPInit() Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt csak egyszer kell meghvni. Plda: // Initialize UDP UDPInit(); ... UDPOpen Ez a funkci el okszti egy UDP socket-et, hogy a megadott porton adatokat tudjon tovbbtani. Szintaxis: UDP_SOCKET UDPOpen(UDP_PORT localPort, NODE_INFO *remoteNode, TCP_PORT remotePort) Paramter: localPort [bemen o] A helyi UDP port, ahonnan az adat jn. remoteNode [bemen o] A tvoli hoszt, ahova az adatokat kldjk. remotePort [bemen o] A tvoli hoszt egy UDP portja, ahova az adatokat kldjk.
19 Visszatrsi rtk: Egy rvnyes socket azonost, ha volt szabad socket vagy INVALID_UDP_SOCKET, ha nem volt szabad socket. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ez a funkci egyszerre hasznlhat helyi ill. tvoli kezdemnyezsu adattovbbtsra. Nincs konkrt kapcsoldsi sma az UDP-ben. Ha egy UDP socketet megnyitottak, akkor az ksz az adatok kldsre s fogadsra is, egszen addig, amg be nem zrjk a socket-et. Plda: switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // Egy DHCP zenet elkldse break; ... UDPClose Bezrtja a megadott UDP socket-et s szabadnak jelli. Szintaxis: void UDPClose(UDP_SOCKET socket) Paramter: socket [bemen o] A bezrand socket azonostja. Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt csak egyszer kell meghvni. Plda: switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else
20 { // Egy DHCP zenet elkldse ... // Socket bezrsa UDPClose (DHCPSocket); } break; ... UDPIsPutReady Ez a makr llaptja meg, hogy a megadott socket ksz-e az adatok kldsre. A socket akkor ksz adatkldsre, ha legalbb egy MAC kld o puer res. Amikor ezt a makrt meghvjuk, automatikusan aktv socket-t vlik. Szintaxis: BOOL UDPIsPutReady(UDP_SOCKET socket) Paramter: socket [bemen o] Az ellen orizend o socket azonostja. Visszatrsi rtk: IGAZ: Ha a megadott socket ksz az adatok kldsre. HAMIS: Ha nincs szabad kld o puer. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Egy socket mindig ksz az adatkldsre, amg van res MAC kld o puer. Amikor ellen orizzk a socket-et, az aktvv vlik s a tbbi UDP funkci is mukd okpes lesz: UDPGet, UDPFlush s UDPDiscard. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre... ...
21 } break; ... UDPPut Az aktv socket kld o puerbe egy bjt adatot helyez. Szintaxis: BOOL UDPPut(BYTE byte) Paramter: byte [bemen o] Az adat, amit a kld o puerbe akarunk tenni. Visszatrsi rtk: IGAZ: Ha a megadott adatot sikerlt a puerbe tlteni s mg van hely tbb adatnak. HAMIS: Ha az adatot sikerlt a puerbe tlteni, de nincs hely tbb adatnak. Elofelttel: UDPIsPutReady == TRUE Mellkhats: Nincs Megjegyzs: Ha egy socket kldsre ksz, akkor sszes adatot be kell tltennk vagy addig tlthetjk fel amg teljesen tele nem lesz a socket puere. A felhasznl nem tltheti az adat egyik felt egy socket-be a msik felt egy msik socket-be. Fontos megjegyezni, hogy amikor betltjk az adatokat, akkor az adatok kldse nem trtnik meg. Kivve akkor, ha a puer megtelik, ekkor a funkci automatikusan elkezdi az adatok kldst s HAMIS rtkkel tr vissza. A felhasznli program ks obb prblhat adatot betlteni. Ha az elkldend o adat kevesebb, mint a kld o puer, a felhasznli programnak kell kezdemnyezni a puer rtst az UDPFlush funkci hvsval. ltalban, rdemes a puert rteni, ha egy egysgnyi adatot betltttnk a puerbe, attl fggetlenl, hogy a puer mg nincs tele. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre...
22 // Az UDPPut kzvetlenl nem kapja meg az DHCPSocket paramtert // Az UDPPut az aktv socket-et hasznlja, // amit az UDPIsPutReady() llt be, ez a DHCPSocket. UDPPut(0x55); ... } break; ... UDPFlush Az aktv socket kld o puert kldsre ksznek lltja be. Szintaxis: void UDPFlush() Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Az UDPPut() fggvny mr meg volt hvva s a socket aktv, vagyis mr futtattuk a UDPIsPutReady() fggvnyt. Mellkhats: Nincs Megjegyzs: Ez a funkci kldsre ksznek lltja a kld o puert, de a klds nem indul el egyb ol. A felhasznlnak nem kell ellen oriznie a kldsi folyamat llapott. A NIC 15-szr prblja meg a elkldeni az adatot (legalbbis a RTL8019AS, ms NIC esetn a NIC adatlapjban tallhat ez az informci). Ha a socket puer egyszer mr rtve volt s res, a tovbbi UDPFlush hvsokat a program gyelmen kvl hagyja. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else { // Egy DHCP zenet elkldse smState = SM_BROADCAST; break; } case SM_BROADCAST: if ( UDPIsPutReady(DHCPSocket) ) { // A socket ksz az adatkldsre...
23 // Az UDPPut kzvetlenl nem kapja meg az DHCPSocket // paramtert. Az UDPPut az aktv socket-et hasznlja, // amit az UDPIsPutReady() llt be, ez a DHCPSocket. UDPPut(0x55); ... // Most elkldjk UDPFlush(); } break; ... UDPIsGetReady Ez a funkci megllaptja, hogy a megadott socket tartalmaz-e vett adatokat s a socket-et aktvnak jelli ki. Szintaxis: BOOL UDPIsGetReady(UDP_SOCKET socket) Paramter: socket [bemen o] A socket azonostja Visszatrsi rtk: IGAZ: Ha a megadott socket tartalmaz vett adatokat. HAMIS: Ha a megadott socket nem tartalmaz vett adatokat. Elofelttel: Az UDPOpen() fggvny mr meg volt hvva. Mellkhats: Nincs Megjegyzs: Nincs Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... ... } break;
24 ... UDPGet Az aktv socket vteli puerb ol egy bjt adatot olvas ki. Szintaxis: BOOL UDPGet(BYTE *byte) Paramter: byte [kimen o] A beolvasott adatbjt. Visszatrsi rtk: IGAZ: Ha sikerlt egy bjtot beolvasni. HAMIS: Ha nem sikerlt az adat beolvassa. Elofelttel: UDPIsGetReady == TRUE Mellkhats: Nincs Megjegyzs: Ha a socket-ben adatok vannak, a felhasznli programnak be kell olvasnia egy vagy tbb bjtot egy taszk ideje alatt s a socket puert felszabadtani. Ms socket-b ol adatot kiolvasni addig nem szabad, amg az el oz o puer nem lett felszabadtva. Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... // A buffer egy BYTE mutat while( UDPGet(buffer) ) buffer++; // Feldolgozzuk... ... // Socket puffer rtse ... } break; ...
25 UDPDiscard Az aktv socket vteli puert felszabadtja. Szintaxis: BOOL UDPDiscard() Paramter: Nincs Visszatrsi rtk: IGAZ: Ha a vteli puert sikerlt felszabadtani. HAMIS: Ha a vteli puer egyszer mr fel lett szabadtva. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Nincs Plda: ... switch(smState) { case SM_OPEN: // Megprblunk egy DHCP szerverhez kapcsoldni DHCPSocket = UDPOpen(68, &DHCPServerNode, 67); if ( DHCPSocket == INVALID_UDP_SOCKET ) { // Nincs szabad socket // Hiba kirsa } else // A DHCP szervertl vlaszt vrunk smState = SM_WAIT_FOR_DATA; break; case SM_WAIT_FOR_DATA: if ( UDPIsGetReady(DHCPSocket) ) { // Adatokat olvashatk a socket-bl. Kiolvassuk s // feldolgozzuk... // A buffer egy BYTE mutat while( UDPGet(buffer) ) buffer++; // Feldolgozzuk... ... // Socket puffer rtse UDPDiscard(); } break; ... UDPProcess Ez a funkci egy taszkknt mukdik. Egy berkezett UDP csomagrl megllaptja, hogy melyik UDP socket-hez tartozik. Ezt a funkcit csak akkor kell meghvni,
26 ha egy UDP csomag rkezett. Szintaxis: BOOL UDPProcess(NODE_INFO *remote, WORD len) Paramter: remote [bemen o] A tvoli eszkz adatai, ahonnan az UDP csomag rkezett len [bemen o] Az UDP csomag teljes hossza a fejlcet is beleszmtva Visszatrsi rtk: IGAZ: Ha a taszknak sikerlt teljesen feldolgoznia a megadott csomagot. HAMIS: Ha a taszknak csak rszben sikerlt feldolgoznia a megadott csomagot. Elofelttel: IPGetHeader == TRUE s IPProtocol = IP_PRO_UDP Mellkhats: Nincs Megjegyzs: Ahogy fentebb is megjegyeztk, ez a funkci valstja meg az UDP taszk funkcit. Akkor kell meghvni, ha egy UDP csomag rkezett ez a funkci beolvassa s feldolgozza azt. A funkci visszatrsi rtke mutatja meg a hvnak, hogy a StackTask llapotjelz ojt meg kell-e vltoztatni. Ebben a implementciban mindig IGAZ rtkkel tr vissza a funkci. Tovbbi informcirt a Stack Manager forrskdjt rdemes megnzni, ami a StackTsk.c fjlban tallhat. Fontos szben tartani, hogy ezzel a funkcival nem kell tr odni, ha a StackTask funkcit hasznljuk. Plda: ... switch(smState) { case SM_STACK_IDLE: if ( MACGetHeader(&RemoveMAC, &MACFrameType) ) { if ( MACFrameType == MAC_IP ) smState = SM_STACK_IP; ... return; case SM_STACK_IP: if ( IPGetHeader(&RemoteNode, &IPFrameType, &IPDataCount) ) { if ( IPFrameType == IP_PROT_UDP ) smState = SM_STACK_UDP; ... return; case SM_STACK_UDP: if ( UDPProcess(&RemoteNode, IPDataCount) ) smState = SM_STACK_IDLE; return; ...
27
6.3.
Ahogy mr korbban is emltettem, ez a Stack klnbz o modulok gyujtemnye. Nhny modult (mint az IP, TCP, UDP s ICMP), akkor kell meghvni, ha olyan csomag rkezett. Annak az alkalmazsnak, ami a Microchip TCP/IP Stack-et hasznlja, gondoskodnia kell arrl, hogy ezek a modulok megfelel o id okznknt fussanak. A Stack Manager modul csak a TCP/IP Stack moduljait vezrli. A f o alkalmazsban nem kell foglalkoznunk a klnbz o modulok meghvsval, csak a StackTask nevu taszkot kell meghvnunk. Ez a modul egy kln rteg a StackTask rteg aminek a forrsa a StackTask.c fjlban tallhat. Amikor ez a taszk fut, megkrdezi a hlzatelrsi rteget, hogy rkezett-e valamilyen csomag. Ha rkezett, akkor megnzi a fejlct s a megfelel o modulnak tadja tovbbi feldolgozs cljbl. Miel ott a Stack Manager-t munkra fognnk, meg kell hvni a StackInit() funkcit, ami inicializlja a modult. Ha ez megtrtnt a StackTask() fggvnyt kell periodikusan meghvni, hogy a berkez o csomagokat id oben elirnytsuk s ekzben az id o tllpst s hibkat is kezelni tudjuk. A StackTask pontos mukdsnek algoritmusa a 6.1. brn lthat.
6.4.
Mivel ezt a modult rtam n, ezrt rszletesen lerom a bels o mukdst. A modul hasznlathoz kt darab UDP socket-re van szksg. A soros vonalon rkez o adatokat megszaktssal s polling eljrssal is vtelezhetjk. Termszetesen rdemes a megszakts hasznlatt engedlyezni a ser2udp.h fjlban. A soros vonalrl rkez o adatok egy alapbl 50 bjtos puerbe kerlnek. Ha megtelik vagy enter (0xA, 0xD) karakter rkezik, akkor azonnal felptjk s elkldjk az UDP csomagot. A soros adatok kldsekor sajnos nem lehet megszaktst hasznlni, mert ha az UDP csomagot megkaptuk azt fel kell dolgozni s fel kell szabadtani a puert ugyanabban a taszkban, ahol rzkeltk, hogy UDP csomag rkezett. Ha lenne elegend o memrink, akkor az adatokat tmsolva megoldhat lenne a megszaktsos adatklds. Az AppConfig struktrjba kerlt j vltozk listja a 6.2. tblzatban lthat. A 6.2. tblzatban lthat vltozk a websrvr.c fjlban az InitAppConfig fggvnyben kapnak egy kezdeti rtket, ill. ha ltezik elmentett bellts a kls o soros EEPROM-ban, akkor az rtkk onnan tlt odik be. Jelenleg sem soros adatfolyamszablyozs sem parits ellen orzs nincs implementlva. A 6.3. tblzatban lev o bels o vltozkat a modul fggvnyei hasznljk. Serial2UDP_Init A modul inicializlst ez a fggvny vgzi el. Szintaxis: Serial2UDP_Init Paramter: Nincs Visszatrsi rtk: Nincs
28
29 NODE_INFO target WORD target_port WORD local_port BYTE refresh BYTE baud BYTE FlowCtrl A cleszkz adatai: IP cm s MAC cm. A cl port szma. A helyi port szma. A statisztikk megtekintsekor a frisstsek kztti id o msodpercben. Az baud-dal arnyos kiszmtott rtk, ami az SPBRG vltozba kerl. rtke lehet 0: nincs szablyozs, 1: szoftveres szablyozs, 2: hardveres adatfolyam szablyozs. (Jelenleg nincs hasznlva, ks obbi fejlesztshez fenntartva.) rtke lehet 0: nincs parits ellen orzs, 1: pratlan parits, 2: pros parits ellen orzs. (Jelenleg nincs hasznlva, ks obbi fejlesztshez fenntartva.)
BYTE Parity
6.2. tblzat. A soros-UDP talakt modul kongurcis vltozi static UDP_SOCKET UDPSocket BYTE status DWORD rxbytes, txbytes static WORD count static BYTE buf[BUF_SIZE] static BYTE buf_end static BYTE_VAL misc Az adatok tovbbtshoz hasznlt socket. A modul llapott trol vltoz. Tovbbi informcik a 6.4. tblzatban. A fogadott s elkldtt oktetek szma. A bemeneti soros puerben elkldsre vrakoz bjtok szma. A bemeneti soros puer. Alapesetben 64 bjt mretu. Az adatok szma a soros puerben. Egyes bitjei ms-ms jelentssel brnak. A 0. bit: A SendSerialData fggvny legkzelebbi futsakor megprbljuk-e elkldeni az adatokat.
6.3. tblzat. A soros-UDP talakt modul bels o vltozi Elofelttel: Nincs Mellkhats: A modul inicializlsa legalbb 4 msodpercig (INITWAIT_SEC) tart. Megjegyzs: El oszr vr 4 msodpercet. Ennyi id o elg, hogy felledjen a NIC s rzkelje, hogy a kapcsolat l. (A ks obbiekben rdemes lenne kdot trni gy, hogy a NIC interfszn keresztl krdezze le, hogy l-e a kapcsolat.) Utna elkld egy ARP krs csomagot, hogy megtudja a cl IP cmhez tartoz MAC cmet. Mg ngy msodpercig vr (TIMEOUT_SEC) utna Hiba: MAC cm lekrdezse kzben id otllps trtnt hiballapotba lp. Ha sikerlt a MAC lekrdezse megprbl egy UDP socket-et megnyitni. Ennek sikertelensge esetn Hiba: Nincs szabad UDP socket, ellenkez o esetben Rendben llapotba kerl. A fggvnyt csak egyszer kell meghvni. Plda: ... Serial2UDP_Init ();
30 ... Serial2UDP_GetSerialData Beolvassa a soros vonalrl jv o adatot s elhelyezi a buf puerben, ha lehetsges. Ha a puer megtelt vagy soremels (0xD), kocsi vissza (0xA) karakter rkezett, akkor a flush vtozt igaz rtkre lltja. Ha a soros vonali adatok vtelnl keret hiba trtnt a modul Hiba: RS-232 keret hiba llapotba kerl. Ha az adatok vtelekor a vteli puer fellrsa kvetkezett be, akkor a Hiba: Az RS-232 puer fellrs llapot ll be. A fggvny folyamatbrja a 6.2. brn lthat. Az brn a szaggatott vonal akkor rvnyes, ha ezt a fggvnyt a Serial2UDP fggvny hvja meg s nem megszaktssal mukdik. Szintaxis: void Serial2UDP_GetSerialData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Megszaktsos mdban s a pollingolsnl is ez a fggvny mukdik. Pollingnl a Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs Serial2UDP_SendSerialData Ha a buf puer tele van (a flush bit 1 rtku), akkor elkszt egy UDP csomagot s elkldi a belltott IP cmnek. Szintaxis: void Serial2UDP_SendSerialData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs Serial2UDP_ProcessUDPData A fogadott UDP csomagot azonnal elkldi a soros vonalon keresztl. Folyamatbrja a 6.3. brn lthat. Szintaxis: void Serial2UDP_ProcessUDPData () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A Serial2UDP fggvny hvja meg ezt a fggvnyt. Plda: Nincs
31
6.2. bra. A Serial2UDP_GetSerialData fggvny folyamatbrja Serial2UDP Ez egy kooperatv taszk, amit a f o ciklusban kell meghvni. Szintaxis: void Serial2UDP () Paramter: Nincs Visszatrsi rtk: Nincs Elofelttel: Inicializls megtrtnt. Mellkhats: Nincs Megjegyzs: A soros vonalon berkez o adatokat a buf puerben trolja a Serial2UDP_GetSerialData () fggvny segtsgvel (csak polling mdszernl).
32
6.3. bra. A Serial2UDP_ProcessUDPData fggvny folyamatbrja A SendSerialData () eljrssal kldi el a buf puerben trolt adatokat a soros vonalon s a ProcessUDPData () fggvnnyel a megadott portra rkez o UDP csomagokat egyb ol kirja a soros vonalra. Plda: ... StackTask(); HTTPServer(); Serial2UDP(); ... Serial2UDP_ReInit A kongurci megvltozsakor kell meghvni. Szintaxis: void Serial2UDP_ReInit () Paramter: Nincs Visszatrsi rtk: Nincs
33 Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Szinte teljesen megegyezik az Serial2UDP_Init funkcival, de az ARP krs kikldse el ott nincs 4 msodperces vrakozs. Plda: Serial2UDP_GetStatusString A modul llapotra vonatkoz stringre mutat mutatt ad vissza. Szintaxis: char *Serial2UDP_GetStatusString (void) Paramter: Nincs Visszatrsi rtk: Egy sztring mutat, ami megegyezik a Serial2UDP_StatusString vltozban lev o rtkkel. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A sztring HTML kdokat tartalmaz, 0 kd karakterrel van lezrva s a programmemriban van. A lehetsges llapotok szvegei a 6.4. tblzatban lthatk. Sorszm 0 1 2 3 4 5 6 Angolul Unknown Ok Error: UDP socket not available Error: Cant resolve MAC address, time out Error: Buer is full Error: RS-232 Framing error Error: RS-232 Overrun error Magyarul Ismeretlen Rendben Hiba: Nincs szabad UDP socket Hiba: MAC cm lekrdezse kzben id otllps trtnt Hiba: A puer tele van Hiba: RS-232 keret hiba Hiba: RS-232 puer fellrs
6.4. tblzat. A soros-UDP modul talakt llapotai Plda: ... WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val) { switch(var) { case VAR_DEVSTATUS: if (ref == HTTP_START_OF_VAR) { Serial2UDP_GetStatusString (); ref = (BYTE)0; } *val = Serial2UDP_StatusString[(BYTE)ref]; if (Serial2UDP_StatusString[(BYTE)ref + 1] == \0) return HTTP_END_OF_VAR;
6.5.
Ez a HTTP szerver kooperatv taszkknt fut, amit a f o alkalmazsbl kell meghvni. A szerver a HTTP.c forrsfjlban van implementlva s a felhasznli programban kt segdrutint (angolul callback function) hasznlhatunk. Az bemutat alkalmazs forrsfjljt a websrvr.c fjlt hasznltam fel a sajt programom rshoz. Ez a HTTP szerver egy cskkentett tuds program, direkt begyazott rendszerekhez rdott. A szerver tulajdonsgai: Tbbszl HTTP kapcsolatok Egy egyszeru fjlrendszert tmogat (MPFS) A honlapokat a bels o programmemriban s kls o EEPROM-ban is trolhatjuk Tartalmaz egy PC-s programot MPFS kpfjl ltrehozshoz A HTTP GET metdust tmogatja (ms metdusok knnyen hozzadhatk) Egy mdostott Common Gateway Interface-t (CGI) tmogat Dinamikusan generlhat a honlapok tartalma. A HTTP szerver hasznlatbavtelhez a kvetkez o lpseket kell vgrehajtani: 1. A StackTsk.h fjlban vagy a projekt belltsnl denilni kell a STACK_USE_HTTP_SERVER dencit. 2. A StackTsk.h fjlban be kell lltani a MAX_HTTP_CONNECTIONS rtkt. 3. A http.c s mpfs.c fjlokat hozz kell adni a projekthez. 4. Attl fgg oen, hogy hol szeretnnk a weblapokat trolni, denilni kell az MPFS_USE_PGRM vagy az MPFS_USE_EEPROM kulcsszavakat. Ha kls o EEPROMot hasznlunk trolelemnek az xeeprom.c fjlt is hozz kell adni a projekthez. 5. A main() fggvnyt mdostani kell, hogy a HTTP szerver mukdjn. Az sszes weblapot egy MPFS (Microchip File System) fjlrendszerbe kell konvertlni. Ha az MPFS kpfjlt kls o EEPROM-ban troljuk, akkor a felhasznli programba implementlni kell az adatok rgztshez szksges fggvnyt. A HTTP szerver alap honlapknt az index.htm fjlt hasznlja. Ha pldul egy bngsz o a HTTP szerverhez fordul gy hogy csak az IP cmet adtk meg a bngsz onek az index.htm fjlt kapja meg a bngsz o. Teht minden MPFS kpfjlban lennie kell egy index.htm fjlnak. Ha szksges az alap fjlnv megvltoztathat, ha a http.c forrsban a HTTP_DEFAULT_FILE_STRING dencit trjuk. Fontos, hogy a weblap fjlok nevei ne tartalmazzk a kvetkez o karaktereket:
35 aposztrf s idz ojel ( s ") kisebb-nagyobb jelek (< s >) kett os kereszt jel (#) szzalk jel (%) szgletes s kapcsos zrjelek ([, }, [, {) szur o jel (|) vissza perjel (\) kalap jel Ha egy fjl neve tartalmaz ezek kzl egy karaktert, akkor az a honlap nem lesz elrhet o. A HTTP szerveren van egy lista a tmogatott fjl tpusokkal. Ezt az informcit a bngsz o hasznlja fel; ebb ol llaptja meg, hogy hogyan rtelmezze a kapott adatokat. A fjlok azonostsa a hrombetus kiterjeszts alapjn trtnik. Alapbl a HTTP szerver a kvetkez o fjltpusokat tmogatja: .txt, .htm, .gif, .cgi, .jpg, .cla, .wav. Ha egy alkalmazsban olyan fjltpust akarunk hasznlni, ami nincs a listban, akkor a http.c fjlban httpFiles tblzatot kell mdostani utna a httpContents felsorolst. Az ismert fjltpusok listjt a stluslapok tpussal b ovtettem (.css).
36 ref [bemen o] Ez az rtk jelzi, hogy ha ez az els o fggvnyhvs. Ekkor a vltoz rtke HTTP_START_OF_VAR. Ez els o hvs utn mr ez a vltoz a felhasznli alkalmazs. Egyszerre csak egy bjt tvitele lehetsges. Ez a vltoz teszi lehet ov, hogy tbb bjt tvitele esetn a HTTP szerver nyomon kvesse az adatok tvitelt gy, hogy ebben a vltozban az tvitt adat indext kell tenni s visszatrskor is ezt a vltozt kell tadni. Az utols bjt tvitelekor HTTP_END_OF_VAR rtket kell visszatrsi rtknek megadni. A HTTP szerver egszen addig meghvja ezt a funkcit, amg nem kap egy HTTP_END_OF_VAR rtket. val [kimen o] Egy bjt adat, amit kldeni szeretnnk. Visszatrsi rtk: A ref vltoz j rtke, amit a felhasznli alkalmazs llapt meg. Ha HTTP_END_OF_VAR rtket ad vissza, legkzelebb csak akkor hvdik meg, ha megint szksg van a vltoz rtkre. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ez a fggvny egy vltozt kr a felhasznli alkalmazstl, de annak nem felttlenl kell rtkeket adni. Az hogy milyen informcit ad t a fggvny, az a hozzrendelt weblaptl fgg. Plda: A soros-UDP talakthoz ksztettem a stats.cgi fjlt, ebben a kvetkez o olvashat: <tr><td>Device status</td><td>%01</td></tr> Amikor a HTTP szerver a fjl feldolgozsa sorn a %01 szveghez r, meghvja a kvetkez o funkcit: HTTPGetVar(1, HTTP_START_OF_VAR, &value). A felhasznli alkalmazsban lev o websrvr.c fjlban van ez a funkci s ehhez hasonlan nz ki: WORD HTTPGetVar(BYTE var, WORD ref, BYTE* val) { switch(var) { ... case VAR_RXBYTES: if (ref == HTTP_START_OF_VAR) { ltoa (rxbytes, TmpString); ref = (BYTE)0; } *val = TmpString[(BYTE)ref]; if (TmpString[(BYTE)ref + 1] == \0) return HTTP_END_OF_VAR; (BYTE)ref++; return ref; ...
37 mazsban a HTML GET mdszervel. Tovbbi informcik az RFC1866-os dokumentumban [5] tallhatk. A HTTP szerver nem dekdolja az tadott URL-t. Ez azt jelenti, hogy ha az tadott urlapok mez oje specilis karaktereket tartalmaz (<, >, %, kezetes karakterek, stb.), akkor a funkcinak tadott paramter %xx formtum sztringeket fog tartalmazni, ahol a xx az ASCII karakter hexadecimlis kdja. Az urlapokat tartalmaz oldalakat .cgi kiterjesztssel kell elltni. Fontos szben tartani, hogy amikor jelszavakat tovbbtunk CGI segtsgvel, a jelszavakat kdolatlanul tovbbtjuk, teht azok lehallgathatk. HTTPExecCmd Ez egy segdfggvny (callback function). Ha a HTTP szerver a GET mdszerrel trtn o lekrdezsnl tbb mint egy paramtert kap, akkor hvja meg ezt a funkcit. Ezt a funkcit a felhasznli alkalmazsnak kell tartalmaznia. Szintaxis: void HTTPExecCmd(BYTE **argv, BYTE argc) Paramter: argv [bemen o] Ez egy sztring tmb. Az els o sztring (argv[0]) az urlap action mez ojnek tartalma, a tbbi (argv[1..n]) a paramterek. argc [bemen o] A paramterek szma, beleszmtva az action mez ot is. Visszatrsi rtk: A felhasznli alkalmazsnak be kell lltania az argv[0] vltozt egy rvnyes honlapnvre, ami a visszatrsi eredmnyt tartalmazza. Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: Ezt a fggvnyt a HTTP szerver hvja meg. A felhasznli alkalmazsnak ki kell tudnia szolglnia az egyms utni hvsokat. Alapesetben az argumentumok szma maximum 5 s az argumantumsztringek hossza legfeljebb 80 lehet. Ha egy alkalmazsnak ennl tbb argumentum vagy hosszabb sztring kell, a MAX_HTTP_ARGS vagy a MAX_HTML_CMD_LEN dencit kell megvltoztatni. Ezek a http.c fjlban tallhatk. Plda: A setup.cgi fjlt is a soros-UDP talakthoz ksztettem. Ebben olvashat a kvetkez o: <form action="setup.cgi" method="get"> <table border=0> <tr><td>Local IP</td> <td><input type="text" name="0" value="%0C"></td></tr> <tr><td>Local Port</td> <td><input type="text" name="1" value="%0D"></td></tr> <tr><td>Netmask</td> <td><input type="text" name="2" value="%0E"></td></tr> <tr><td>Gateway</td> <td><input type="text" name="3" value="%0F"></td></tr> <tr><td>Target IP</td> <td><input type="text" name="4" value="%09"></td></tr> <tr><td>Target Port</td> <td><input type="text" name="5" value="%0A"></td></tr> <tr><td>Refresh rate</td>
38 <td><input type="text" name="6" value="%06"></td> <td>sec</td></tr> <tr><td><input type="submit" name="7" value="Save"></td></tr> </table> </form> Ennek a tblzatnak a msodik oszlopaiban adhatunk meg klnfle szveg formtum adatokat. A kperny on lthat kp a 6.4. brn van. Az utols sorban egy gomb lthat Save felirattal. Ha rkattintunk erre a gombra, akkor az urlapot a GET mdszerrel elkldi a bngsz o.
6.4. bra. Urlapok kezelse A HTTP krs ez lesz: setup.cgi?0=10.10.5.15&1=2221&2=255.255.255.0& 3=10.10.5.15&4=10.10.5.5&5=2222&6=5&7=Save Ennek hatsra HTTP szerver pedig a kvetkez o paramterekkel meghvja a HTTPExecCmd fggvnyt: argc = 17 argv[0] = "setup.cgi" argv[1] = "0" argv[2] = "10.10.5.15" argv[3] = "1" argv[4] = "2221" argv[5] = "2" argv[6] = "255.255.255.0" argv[7] = "3" argv[8] = "10.10.5.15" argv[9] = "4" argv[10] = "10.10.5.5" argv[11] = "5" argv[12] = "2222" argv[13] = "6" argv[14] = "5" argv[15] = "7" argv[16] = "Save" Ehhez termszetesen MAX_HTTP_ARGS s a MAX_HTML_CMD_LEN rtkt is meg kell nvelni. Az adatokat feldolgoz fggvny pedig gy nz ki: void HTTPExecCmd(BYTE** argv, BYTE argc) { BYTE i; BYTE var; for (i = 1; i < argc; i += 2) { switch(argv[i][0] - 0) { case CGI_CMD_LOCALIP: StringToIPAddress (argv[i + 1], &AppConfig.MyIPAddr);
39 break; case CGI_CMD_LOCALPORT: AppConfig.local_port = atoi (argv[i + 1]); break; ... case CGI_CMD_BUTTON: // Ez a parameter adodik at utolsonak... Serial2UDP_ReInit (); SaveAppConfig (); break; } ... } Az egy karakterb ol ll azonostk hasznlata leegyszerusti a program kdjt, ezrt rdemes alkalmazni.
6.6.
A HTTP szerver egy egyszeru fjlrendszert hasznl a honlapok trolsra. A fjlrendszer kpe a mikrovezrl o memrijban s egy kls o soros EEPROM-ban is trolhat. A fjlrendszer formtuma a 6.5. brn lthat.
6.5. bra. MPFS kpfjl felptse A fenntartott terlet mrete az MPFS_RESERVE_BLOCK denciban van megadva. A fenntartott terletet a felhasznli alkalmazs hasznlhatja a kongurcis rtkek trolsra. Egy MPFS trol egy vagy tbb MPFS FAT (Fjl Elhelyezkedsi Tbla, File Allocation Table) bejegyzst tartalmaz, amit egy vagy tbb adatblokk kvet. A FAT bejegyzs hatrozza meg a fjl nevt, pozcijt a memriban s a fjl llapott. A FAT bejegyzs formtuma a 6.6. brn van.
40 Az llapotjelz o mutatja meg, hogy a bejegyzs hasznlatban van, trlve van ill. a FAT vgt is jelezheti. Minden FAT bejegyzs tartalmaz egy 16 vagy 24 bites cmet. A cm hossza a felhasznlt memria tpustl fgg. Ha a bels o programmemrit hasznljuk kis (small) memriamodellel, akkor 16 bites cmeket fog hasznlni. Ha a bels o programmemrit hasznljuk viszont nagy (large) memriamodellel, akkor 24 bites cmeket fog hasznlni. A kls o EEPROM eszkzknl mindig 16 bites cmzsi mdszert hasznlunk, fggetlenl a memriamodellt ol. Ebben a fjlrendszerben a fjlnevek 8+3 bjt hosszak. A fjl neve 8 bjtos s a kiterjeszts tovbbi 3 bjt hosszsg. A 16 bites cm megadja az els o adatblokkot. Minden fjlnv nagybetukkel szerepel a knnyebb nvkezels rdekben. Az adatblokk formtuma a 6.7. brn szerepel. A blokk vgt egy specilis karakter jelzi; az EOF (End Of File), amit 0xFFFF (16 bites cmzsnl) vagy 0xFFFFFF (24 bites cmzsnl) kvet. Ha a fjl tartalmazza az EOF karaktert, akkor egy DLE (Data Link Escape) karakterrel jelezzk, hogy ez a fjl rsze. Ha a DLE karakter szerepel az adatblokkban, akkor kt DLE karakter jelzi, hogy az a fjl rsze.
41 kimenet az MPFS kpet tartalmaz fjl. Pldul: mpfs /c Honlap honlap.c gy egy C fjlt kapunk benne a Honlap knyvtrban lv o fjlok adatai. Binris fjlt kapunk az mpfs Honlap honlap.bin parancs hatsra. A binris fjl elejn 32 bjt fenntartott. Ha megvltoztatjuk a fenntartott terlet mrett ne felejtsk el a StackTsk.h fjlban a MPFS_RESERVE_BLOCK dencit megvltoztatni. Miel ott a kpfjlt ltrehozzuk az sszes honlapot egy knyvtrba kell msolni. Ha egy fjl kiterjesztse .htm, akkor a program az sszes kocsi vissza, j sor karaktert trli, hogy cskkentse a kpfjl mrett. Ha az MPFS kpfjlt C adatknt hasznljuk, akkor a projektnkhz hozz kell adni a C fjlt. Ha a kpfjlt kls o soros EEPROMban troljuk, a binris fjlt fel kell tlteni a memriba. Tovbbi informci a 41. oldalon az FTP szerver modul rsznl. Az MPFS kpkszt o program nem ellen orzi az elkszlt fjl mrett. Binris adat ksztse esetn ellen orizni kell az adat mrett.
6.7.
Ez a modul is egy kooperatv taszkknt funkcionl s az FTP.c fjlban van a szerver forrskdja. Ez az FTP szerver nem tudja az sszes szolgltatst, ami az RFC 959ben [6] le van lerva, mivel direkt begyazott rendszerekhez lett tervezve, minimlis a mrete s a tudsa. A modul jellemz oi: Egy szl FTP kapcsolat. A felhasznl azonostsa az alkalmazs feladata, Automatikusan kezeli az MPFS fjlrendszert,
42 A PUT paranccsal egy j MPFS kp tlthet o fel, A fjlok egyenknti feltltse nem lehetsges. A modul kt rszb ol ll: maga az FTP szerver s a felhasznl azonost fggvny, ami a felhasznli alkalmazsnak kell tartalmaznia. Egy FTPVerify fggvnyt kell rnia a felhasznlnak, ami ellen orzi az FTP felhasznlt s a jelszt. Itt is megjegyzem, hogy a jelszt kdolatlanul kldi el a szmtgp, teht azok a megfelel o eszkzkkel lehallgathatk. Az FTP szerver hasznlathoz a kvetkez oket kell megtettnk: 1. A STACK_USE_FTP_SERVER-t denilni kell. A komment jelet el kell tvoltani a StackTsk.h fjlban a denci el ol. 2. A denilt socket-ek szmt nvelni kell kett ovel ugyancsak a StackTsk.h fjlban. 3. Az FTP.c s az mpfs.c fjlokat hozz kell adni a projektnkhz. 4. Vagy az MPFS_USE_PGRM MPFS_USE_EEPROM dencit be kell lltani, attl fgg oen, hogy milyen trolelemet hasznlunk. Ha kls o EEPROM-ot, az xeeprom.c fjlt is adjuk hozz a projektnkhz. 5. Mdostsuk a main() fggvnyt, hogy az FTP szerver inicializl fggvnye s taszkja fusson. Az FTP szerver 180 msodperc utn jelez id otllpst feltltsnl s letltsnl egyarnt. Ha egy kapcsolat 180 msodpercnl tovbb van IDLE (ttlen) llapotban, akkor automatikusan megszaktja a szerver a kapcsolatot. gy a bennragadt kliensek nem gtolhatjk meg a tovbbi FTP muveleteket.
43 c:\> ftp 10.10.5.15 220 ready User (10.10.5.15: (none)): ftp 331 Password required Password: microchip 230 Logged in ftp> put mpfsimg.bin 200 ok 150 Transferring data... 226 Transfer Complete 16212 bytes transferred in 0.01Seconds 16212000.00Kbytes/sec. ftp> quit 221 Bye 6.8. bra. MPFS kpfjl feltltse FTP kliens segtsgvel Elofelttel: Nincs Mellkhats: Nincs Megjegyzs: A felhasznlnv hossza nulltl kilencig vltozhat. Ha hosszabb felhasznlnvre van szksg az FTP_USER_NAME_LEN dencit kell megvltoztatni az ftp.h fjlban. A jelsz s az FTP utastsok hossza legfeljebb 31 karakter hossz lehet. Ha hosszabb jelsz s/vagy parancs szksges, akkor a MAX_FTP_CMD_STRING_LEN dencit kell megvltoztatni az FTP.c fjlban. Plda: ROM char FTP_USER_NAME[] #define FTP_USER_NAME_LEN ROM char FTP_USER_PASS[] #define FTP_USER_PASS_LEN = "ftp"; (sizeof(FTP_USER_NAME)-1) = "microchip"; (sizeof(FTP_USER_PASS)-1)
BOOL FTPVerify(char *login, char *password) { if ( !memcmppgm2ram(login, (ROM void*)FTP_USER_NAME, FTP_USER_NAME_LEN) ) { if ( !memcmppgm2ram(password, (ROM void*)FTP_USER_PASS, FTP_USER_PASS_LEN) ) return TRUE; } return FALSE; }
44
7. fejezet Hardver
A PIConNET krtya kapcsolsi rajzt s a nyomtatott ramkrt a ChipCad Kft. ksztette. A kapcsolsi rajz az 1. szm mellkleten lthat. A rajzon lthat 93LC46B tpus soros EEPROM nem lett beforrasztva. A krtyhoz ksztettem egy soros vonali illeszt ot s egy egyszeru tpfeszltsgstabiliztort, ami a 7.1. brn lthat. A soros vonal illesztst egy MAX232A tpus integrlt ramkr valstja meg. A rajzon MAX232 IC szerepel, a kt IC kztt annyi a klnbsg, hogy a MAX232 mell 1 F-os kondenztorokat kell tenni, mg a MAX232A megelgszik 100 nF-os kondenztorokkal. A tpfeszltsg stabilizlst pedig egy 78L05 IC vgzi el.
7.1.
Alkatrszek
45
46
7.2. bra. A PIC18F452 tpus mikrovezrl o lbkiosztsa Timer3 modul: 16 bites id ozt o/szmll. Opcionlis msodlagos oszcilltor Timer1-es s Timer3-as modulokhoz. Kt Capture/Compare/PWM modul. A modul hromflekppen kongurlhat: Capture (mintavtelez o) bemenetknt (16 bites, maximum felbonts 6, 25ns = TCY /16), Compare (sszehasonlt) bemenetknt (16 bites, maximum felbonts 100ns = TCY ), PWM kimenetknt (felbonts 1 bitt ol 10 bitig vltoztathat, 8 bites felbontsnl fmax = 156kHz, 10 bites felbontsnl fmax = 39kHz). Szinkron soros port (Master Synchronous Serial Port, MSSP) modul. Hrom mdban mukdhet: 3 vezetkes SPI mdban (mind a ngyfajta SPI mdban mukdik), I2 C mester mdban, I2 C szolga mdban.
47 Cmezhet o USART modul. RS-232 s RS-485 mdot is tmogatja. Prhuzamos szolga port (PSP). Analg paramterek: 10 bites AD konverter jellemz oi: Gyors mintavtelez o kpessg, Mukdik szundi (SLEEP) mdban, Linearits 1 Lsb. Programozhat feszltsgess jelzs (Programmable Low Voltage Detection, PLVD): megszakts krhet o, ha leesik a feszltsg. Tpfeszltsg-kiess esetn bellthat reset folyamat (Brown-out Reset, BOR). Specilis jellemz ok: Tipikusan szzezerszer trlhet o/rhat a FLASH programmemria. Tipikusan egy milliszor trlhet o/rhat az adat EEPROM. A FLASH s az adat EEPROM legalbb 40 vig megtartja tartalmt. A szoftverb ol lehet rni/olvasni a programmemrit. Fejlett beptett reset ramkr: Power-on Reset (POR), Power-up Timer (PWRT), Oscillator Start-up Timer (OST). Watchdog id ozt o (WDT) sajt RC oszcilltorral. Programozhat kdvdelem. Tpegysgkml o szundi (SLEEP) md. Vltoztathat oszcilltorbelltsok: az els odleges oszcilltor ngyszerezse (PLL hasznlatval), msodlagos rajel engedlyezse/tiltsa. Soros programozs kt lbon keresztl (In-Circuit Serial Programming, ICSP). Nyomkvets kt lbon keresztl (In-Circuit Debugging, ICD). CMOS technolgia el onyei: Alacsony teljestmnyu, nagy sebessgu FLASH/EEPROM technolgia Szles tpfeszltsg-tartomny (2.05.5V) Ipari- s kiterjesztett h omrskleti tartomnyok Alacsony teljestmnyigny: kisebb, mint 1,6 mA, ha 5V a tpfeszltsg s 4 MHz a frekvencia 25 A, ha 3V a tpfeszltsg s 32 kHz a frekvencia kisebb, mint 0,2 A szundi zemmdban
48
49
50
8.1. bra. A doboz oldal- s ellnzete Jelmagyarzat: 1. Soros vonal: egy DSUB9-es csatlakoz tallhat a dobozon. Ezen keresztl trtnik az RS-232 szabvny szerinti kommunikci. 2. Ethernet: egy RJ45-s foglalat van a csavart rpros kbelnek. 3. Tpfeszltsg: a protokollkonverternek 5-15V egyenfeszltsgre van szksge. 4. Link LED (srga): Ha vilgt, a kapcsolat ltrejtt a kt ethernet-es kszlk kztt. 5. RX LED (zld): Ha villog, adatok rkeznek az ethernet hlzaton az eszkz fel. 6. TX LED (zld): Ha villog, az eszkz adatokat kld az ethernet hlzaton. 7. OK LED (zld): Ha vilgt, akkor az eszkz megfelel oen mukdik. 8. ERROR LED (piros): Ha vilgt, akkor az eszkz mukdse sorn hiba lpett fel.
51 Az eszkz hasznlata a 8.2. brn lthat. Az ethernet hlzat kialaktsra szmtalan lehet osg van: lehet csak csavart rpros technolgit hasznlni vagy csavart rpros kbeleket s optikai vagy mikrohullm tvitelt is. Az thidalhat tvolsg akr tbb kilomter is lehet.
8.2.
Kongurls bngszoprogrammal
Az eszkz kongurlst brmilyen bngsz oprogrammal elvgezhetjk. Alapesetben az eszkz IP cme 10.10.5.15 hlzati maszkja 255.255.0.0. A http://10.10.5.15 cmet berva a bngsz obe a 8.3. brn lthat kpet kell ltnunk. A Help linkre kattintva ennek a fejezetnek a kivonatos verzijt olvashatjuk el. Az egyes linkekre kattintva bellthatjuk a soros vonalat, a hlzatot ill. megtekinthetjk a statisztikkat.
52
53 Refresh rate: A statisztika megtekintsekor ennyi msodpercenknt fog frisslni a lap (alap: 10). A Save gombra kattintva az adatokat eltrolja a I2 C buszos EEPROM-ba s az eszkz lekrdezi a megadott cl IP cm MAC cmt.
8.2.3. Statisztika
A statisztikkat tartalmaz oldalon (a 8.6. bra) lthatjuk az eszkz llapott (rendben van ill. valamilyen hiba trtnt), a belltott paramtereket s az eddig tvitt adatok szmt bjtban. Ez a HTML oldal automatikusan frissl alapesetben 10 msodpercenknt. Ez frisstsi rtk (Refresh rate) a hlzati belltsokat tartalmaz lapon tllthat tetsz oleges rtkre.
54
8.3.
Az eszkz tesztelse
Mivel csak egy eszkzt kszlt el, ezrt a tesztelshez szmtgpen egy programmal (UDP test) szimulltam a msik eszkzt s egy egyszeru terminlprogrammal kldtem s fogadtam a soros vonali adatokat. A 8.7. brn lthat az eszkz s a szmtgp sszektse.
8.7. bra. Az eszkz tesztelse Az UDP test (8.8. bra) nevu programot C++ nyelven rtam direkt azrt, hogy a kszlket tesztelni tudjam. A program egy f o ablakbl ll, ami kt rszre van osztva.
55
8.8. bra. Az UDP test program A bal oldalon tallhat egy UDP kliens: a megadott IP cmre s annak megadott portjra elkldi a szvegdobozban tallhat szveget. A jobb oldalon az UDP szerver vezrelhetjk, ami a program futtatsakor automatikusan elindul. A szerver megadott portjra rkez o adatokat a program egy szvegdobozban jelenti meg. A program mukdst egyszeruen ki lehet prblni: a szerver cmnek a loopback eszkz cmt kell megadni (pldul 127.0.0.1). Majd a kliensnek is ezt a cmet s a szerver portjt adjuk meg. Ha az elkld gombra kattintunk az zenetnek meg kell jelennie a jobb oldali szvegdobozban.
56
Irodalomjegyzk
[1] Nilesh Rajbharti. The Microchip TCP/IP Stack, 2002. Fjl: tcpipstack/an833.pdf [2] J. Postel. User Datagram Protocol, RFC 768, 1980. Fjl: rfc/rfc768.txt.pdf [3] T. Bradley, C. Brown, A. Malis. Inverse Address Resolution Protocol, RFC 2390, 1998. Fjl: rfc/rfc2390.txt.pdf [4] David C. Plummer. An Ethernet Address Resolution Protocol or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware, RFC 826, 1982. Fjl: rfc/rfc826.txt.pdf [5] T. Berners-Lee. Hypertext Markup Language - 2.0, RFC 1866, 1995. Fjl: rfc/rfc1866.txt.pdf [6] J. Postel, J. Reynolds. File Transfer Protocol, RFC 959, 1985. Fjl: rfc/rfc959.txt.pdf [7] Microchip. PIC18FXX2 Data Sheet, DS39564B, 2002. Fjl: adatlapok/pic18fxx2/pic18fxx2.pdf [8] Realtek. RTL8019AS, Realtek Full-Duplex Ethernet Controller with Plug and Play Function, Ver 2.0, 1996. Fjl: adatlapok/realtek/rtl8019asds.pdf [9] Realtek. RTL8019 Realtek Full-Duplex Ethernet Controller with Plug and Play Function, LS003.6, 1995. Fjl: adatlapok/realtek/rtl8019.pdf [10] Maxim. MAXIM +5V-Powered, Multichannel RS-232 Drivers/Receivers, 19-4323; Rev 11; 2003. Fjl: adatlapok/MAX220-MAX249.pdf [11] Microchip. 24LC256, DS21203K, 2003. Fjl: adatlapok/24lc256.pdf