Mavzu: oydning afzalliklari va kamchiliklari Reja: oydning afzalliklari oydning kamchiliklari



Download 1,56 Mb.
bet19/19
Sana23.09.2022
Hajmi1,56 Mb.
#849823
1   ...   11   12   13   14   15   16   17   18   19
Bog'liq
Maruza

Reja:
1. UDP mijozi
2. Serverini ishlab

Darsda biz UDP protokoli yordamida ma'lumotlarni uzatishni o'rganamiz. UDP protokoli yordamida server va mijoz vazifalarini bajaradigan bir nechta dasturlar yarataylik.
Oldingi dars  Darslar ro'yxati  Keyingi dars
Nihoyat, men hozirgi darslarning asosiy mavzusiga - Arduino tizimidagi qurilmalar o'rtasida ma'lumot almashishga qaytaman.
Ehtimol, asosiy mavzu bo'yicha keyingi darslar ketma -ketligi mutlaqo boshqa mavzulardagi darslar tomonidan tasodifan uzilib qolaveradi. Men boshqa chiqish yo'lini ko'rmayapman. Vaqt teskari yo'nalishda ketmaydi, siz tarixni qayta yozolmaysiz, o'tmishdagi narsalarni qayta tartibga sola olmaysiz. Men ketma -ket ma'lumotlar almashish haqida bir nechta darslarni yozishga harakat qilaman, lekin boshqa qiziqarli mavzular allaqachon to'plangan.
UDP protokoli.
UDP - bu abonent ulanishlarini oldindan kelishmagan holda ma'lumotlarni uzatishning oddiy protokoli. Protokol datagramlarni - individual kichik ma'lumotlar paketlarini uzatishga qaratilgan. Datagramlar qabul qiluvchi qurilmaning tayyorligini tekshirmasdan va etkazib berishni tasdiqlamasdan bir yo'nalishda uzatiladi.
Shunday qilib, biz uyali tarmoqlar orqali qisqa xabarlarni (SMS) uzatamiz. Agar siz ham etkazib berishni tasdiqlashni o'chirib qo'ysangiz, u ishlayotganga o'xshaydi.
TCP protokolida:
aloqa paydo bo'ladi;
keyin ma'lumotlar uzatiladi;
ma'lumotlar nazorat kodlari yordamida tekshiriladi;
agar kerak bo'lsa, ma'lumotlar avtomatik ravishda takrorlanadi;
aloqa uziladi.
Foydalanuvchiga faqat ma'lumotlarni uzatish kerak, qolganini protokolni bajarish kutubxonasi bajaradi.
TCP -dan farqli o'laroq, UDP hech narsaga kafolat bermaydi. Bu ma'lumotlar etkazib berilishini, to'g'ri ma'lumotlarning kelishini, paketlar uzatishda bo'lgani kabi ketma -ketlikda etkazib berilishini kafolatlamaydi. Faqat UDP sarlavhasi chek kodi bilan himoyalangan. Shuning uchun, protokol kafolatlaydigan yagona narsa shundaki, ma'lumotlar noto'g'ri manzilda qolmaydi.
Foydalanuvchining o'zi ma'lumotlarning yaxlitligi, ma'lumotlarni qayta uzatish, paketlarni yopishtirish va boshqalar haqida qayg'urishi kerak.
Ammo boshqa tomondan, UDP ma'lumotlarini uzatish TCP -ga qaraganda ancha tezroq. Shuning uchun UDP ko'plab ilovalar uchun afzal qilingan protokoldir.
Bundan tashqari, ko'p vazifalarda ma'lumotlarning buzilishi yoki yo'qolishi juda maqbuldir. Masalan, filmni tomosha qilayotganda, ularni qayta uzatilishini kutishdan ko'ra, bir necha kadrni yo'qotish yaxshiroqdir.
Biz past samarali mikrokontrollerlarda vazifalarni bajaramiz. Shuning uchun biz uchun UDP protokolini amalga oshirish TCPga qaraganda kamroq hisoblash resurslarini talab qilishi ayniqsa muhimdir.
Men shaxsan UDP ni afzal ko'raman. Sizning vazifangiz uchun hamma narsani maqbul tarzda bajarish mumkin. Ulanishlarni kutishning hojati yo'q, boshqaruvchiga minimal yuk va hk.
Men protokol ma'lumotlari formati haqida gapirmayman. Bizga bu kerak emas. Kutubxona uzatish va qabul qilish paytida ma'lumotlar paketlarini shakllantiradi. Ammo buni aniq tushunish kerak:
UDP - ulanishsiz protokol;
uning vazifasi - IP -manzillar o'rtasida individual ma'lumotlar paketlarini (datagramlarini) etkazib berish;
Ethernet tarmog'ida ma'lumotlar jadvalining maksimal hajmi 1500 bayt;
protokol ma'lumotlar uzatilishini kafolatlamaydi;
ma'lumotlar uzatish paytida buzilishi mumkin, bunday vaziyatni aniqlashning hech qanday usuli yo'q;
protokol jo'natuvchiga ma'lumot yetkazilganligi to'g'risida xabar bermaydi va paketni qayta uzatmaydi;
ma'lumotlar paketlari uzatishda bo'lgani kabi ketma -ketlikda etkazib berilishi mumkin emas;
UDP protokoli ma'lumotlarni uzatish tezligi yuqori, uni amalga oshirish uchun minimal hisoblash resurslari kerak.
UDP protokoli UIPEthernet orqali almashishni amalga oshirish uchun kutubxona.
Yilda oldingi darsda aloqa, men UIPEthernet kutubxona haqida gaplashdik va biz TCP protokolini amalga oshirish uchun uni ishlatiladi. Men hatto UIPEthernet funktsiyalari haqida kichik ma'lumotnoma yaratdim .
Men UDP protokolini amalga oshirish uchun kutubxona funktsiyalari haqidagi ma'lumot ma'lumotlariga havolalarni takrorlayman. Qolganlari misollar bilan aniq bo'ladi.

EthernetUDP sinfi - UDP protokolini qo'llab -quvvatlaydi.

boshlash ()

startPacket ()

STOP ()

o'qing ()

endPacket ()

remoteIP ()

qarash ()

parsePacket ()

remotePort ()

yozish ()

mavjud ()

yuvish ()

Men UIPEthernet-2.0.6 kutubxonasining ushbu versiyasidan foydalanmoqdaman .
Muammo haqida umumiy bayonot.
Darsning qolgan qismi 64 -darsga o'xshab tuziladi . Dasturlar xuddi shu funktsiyani bajaradi, faqat UDP yordamida.
Men rasmiy topshiriqni takrorlayman.
Bizda ENC28J60 moduli ulangan Arduino taxtasi bor, ya'ni. tarmoq Arduino qurilmasi yoki mahalliy boshqaruvchi.
Mahalliy chekilgan tarmoq boshqaruvchi va kompyuterdan tashkil topgan. Oddiy qilib aytganda, Arduino qurilmasi kompyuterga yo'riqnoma orqali ulangan.
Vazifa - ma'lumotlarni kompyuterdan Arduino qurilmasiga o'tkazish va Arduino -dan ma'lumotlarni kompyuterga o'qish.
Barcha apparat, sxemalar, ulanishlar 64 -darsda bo'lgani kabi bir xil .
Nosozliklarni tuzatish va sinab ko'rish uchun men yuqori darajadagi dasturlarimdan va TCP / IP Builder 1.9 dan foydalanaman.
Biz buni 64 -darsda ishlatganmiz.
UDP server.
TCP protokolidan foydalanganda biz dastur ob'ektlarini server va mijoz uchun alohida yaratdik.
EthernetServer serveri (2000); // a yaratishga server , port 2000
EthernetClient mijozi; // mijoz yaratish
UDP protokolida biz ma'lumotlarni bitta IP -manzildan boshqasiga o'tkazamiz. Shuning uchun mijoz va server dasturiy jihatdan ajratilmagan. Ushbu dasturlar odatda UDP qabul qiluvchisi va uzatuvchisi deb ataladi.
Server yoki mijoz yuqori darajadagi atributlar bilan aniqlanadi: kim xizmat ko'rsatadi, kim doimo yonadi, kim ulanishni boshlaydi. Va almashinuvning dasturiy ta'minoti nuqtai nazaridan, mijoz va server teng qurilmalardir. Buni quyida sezasiz.
Birinchi UDP server varianti quyidagilarni bajaradi:
Mijozdan yangi paket kelganligini tekshiradi.
Server manzilini chiqaradi: serverning IP -manzili bilan ketma -ket portga xabar.
Qabul qilingan ma'lumotlarni mijozga qaytaradi.
Eskizni bu yerdan yuklab olishingiz mumkin:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 
// UDP serveri, qabul qilingan ma'lumotlarni mijozga qaytaradi,
// ularni ketma -ket portga chiqaradi
#qo'shish
#qo'shish
#define SERV_PORT 2000 // server porti
// tarmoq konfiguratsiyasini belgilang
bayt mac [] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC manzili
bayt ip [] = {192, 168, 1, 10}; // IP -manzil
char qabul qilishBuffer [100]; // Udp EthernetUDP udp paketi uchun buferni qabul qilish
; // Udp nusxasini yarating
void setup () {
Ethernet.begin (mac, ip); // boshqaruvchini ishga tushirish
udp.begin (SERV_PORT); //
Serial.begin (9600) portida tinglashni yoqish;
Serial.print ("Server manzili:");
Serial.println (Ethernet.localIP ()); // boshqaruvchining IP-manzilini ko'rsatish
}
void loop () {
int size = udp.parsePacket (); // qabul qilingan paket hajmini o'qing,
agar (hajmi) {
// Udp paketi bo'lsa, Serial.print paketi haqidagi ma'lumotlarni ko'rsatish
("Qabul qilingan paket");
IPAddress ipFrom = udp.remoteIP ();
Serial.println (ipFrom);
Serial.print ("Hajmi");
Ketma -ket chop etish (o'lcham);
Serial.print (", port");
Serial.println (udp.remotePort ());
// Udp paketini o'qing va uni ketma
-ket portga yuboring udp.read (qabul qilishBuffer, hajmi);
qabul qilishBuffer [hajmi] = 0;
Serial.println ("-------------------");
Serial.println (qabul qilishBuffer);
Serial.println ();
// mijozga javob
udp.beginPacket (udp.remoteIP (), udp.remotePort ());
udp.write (qabul qilishBuffer);
udp.endPacket ();
}
}
Cheksiz tsiklda loop () yangi paket kelganligini tekshiradi:
int hajmi = udp.parsePacket (); // qabul qilingan paket hajmini o'qing,
agar (hajmi) {
// Udp paketi bo'lsa
Agar yangi paket bo'lsa, u haqidagi ma'lumotlar ketma -ket portga chiqariladi va ma'lumotlar buferga o'qiladi.
udp.read (qabul qilishBuffer, hajmi);
Keyin ma'lumotlar ketma -ket portga chiqariladi va mijozga UDP paketida uzatiladi:
// mijozga javob
udp.beginPacket (udp.remoteIP (), udp.remotePort ());
udp.write (qabul qilishBuffer);
udp.endPacket ();
Buni tekshirish uchun siz eskizni yuklashingiz va ketma -ket port monitorini ochishingiz kerak. Monitor oynasida xabar paydo bo'ladi

Satrda server manzili o'rnatiladi
bayt ip [] = {192, 168, 1, 10}; // IP -manzil
Mijoz kompyuter bo'ladi.
Tekshirish uchun:
TCP / IP Builder dasturini ishga tushiring.
Mahalliy IP -liniyada allaqachon kompyuterning manzili bo'lishi kerak. 2000 -dars uchun men port qo'shishim kerak. Garchi men yo'riqchini almashtirgan bo'lsam -da, dastur kompyuterning tarmoq kartasi manzilini to'g'ri aniqlashni to'xtatdi. Bu 192.168.1.2 edi, lekin yangi yo'riqnoma bilan 192.168.1.100 bo'ldi. Kompyuteringizning tarmoq manziliga qarang. Buni qanday qilish 62 -darsda yozilgan .
UDP ni tanlang.
Soket yaratish tugmasini bosing.
IP -qatorda mahalliy boshqaruvchi va portning IP -manzilini ko'rsating (Arduino platasidagi).
Ulanish -ni bosing.
Natijada, mijoz kompyuterda paydo bo'ladi.
Endi siz ma'lumotlarni Ma'lumotlarni yuborish oynasidan serverga yuborishingiz mumkin. Serverdan olingan ma'lumotlar Ma'lumotlarni qabul qilish oynasida paydo bo'ladi.

E'tibor bering, UDP uchun ulanish tugmasi o'chirilgan. UDP almashinuvida hech qanday aloqa yo'q.
Men serverga xabar yubordim va javoban oldim.
Shuningdek, u ketma -ket port monitorida yuboruvchi ma'lumotlari bilan paydo bo'lgan.

Men UDP qurilmalari bilan ishlash uchun o'z dasturimni yozdim. Men uni UDP mijozi deb atadim, lekin u ham server vazifasini bajaradi. Siz uni havoladan yuklab olishingiz mumkin:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 

Dastur sizga UDP paketlarini IP manziliga yuborish va UDP datagramlarini olish imkonini beradi.
IP -manzil maydoni - bu xabar yuboriladigan IP -manzil. (Bu dastur uchun server manzili.)
Masofadagi port - maqsadli port. (Server porti).
Mahalliy port - xabarlarni qabul qilish porti. (Mijoz porti.)
Qabul qiluvchining (mijozning) IP -manzili avtomatik tarzda yaratiladi. Bu kompyuterning tarmoq manzili. Buni tarmoq konfiguratsiyasi tugmachasini bosish orqali ko'rish mumkin.
Xabarlarni qabul qilish uchun chap tomonda katta oyna (serverdan).
Quyidagi maydon yuborilgan xabarlar uchun (mijozdan serverga).
Yuborish tugmasi aslida ma'lumotlarni yuborishni boshlaydi (serverga).
Tarmoq konfiguratsiyasi tugmachasi yordamida siz kompyuterning (mijozning) tarmoq manzilini bilib olishingiz mumkin.

E'tibor bering, har qanday mahalliy port ko'rsatilishi mumkin. Server dasturi uni port monitorida aks ettiradi va ma'lumotlarni aynan shu portdagi mijozga qaytaradi. Masofaviy port faqat server dasturida ko'rsatilgan bo'lishi mumkin (2000).
Tekshirish bir xil: serverga xabar yuborish va javob olish.
Agar Wi -Fi bilan yo'riqnoma ishlatilsa, siz mobil Android qurilmasi yordamida server ishini tekshirishingiz mumkin. Men UDP terminal dasturini o'rnatdim, u Google Play Marketda birinchi bo'lib paydo bo'ldi.


Manzil va portlarni o'rnating.

Serverga xabar yuborildi. Javob oldim.

Yuboruvchi parametrlari ko'rsatilgan xabar ketma -ket port monitorida ham paydo bo'ldi.

Keling, 64 -darsga o'xshab, UDP serverini yarataylik:
Mijoz nazorati ostida Arduino kartasining 2 -piniga ulangan LEDni yoqadi va o'chiradi;
Bunga javoban, mijoz Arduino dasturi ishga tushirilgandan keyin o'tgan vaqtni yuboradi (taxtani yoqadi).
Mana bunday serverning eskizi:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 
// UDP serveri, LEDni boshqaradi, vaqtni mijozga yuboradi
#qo'shish
#qo'shish
#define SERV_PORT 2000 // server porti
// tarmoq konfiguratsiyasini belgilang
bayt mac [] = {0xAE, 0xB2, 0x26, 0xE4, 0x4A, 0x5C}; // MAC manzili
bayt ip [] = {192, 168, 1, 10}; // IP -manzil
char qabul qilishBuffer [100]; // Udp EthernetUDP udp paketi uchun buferni qabul qilish
; // Udp nusxasini yarating
void setup () {
Ethernet.begin (mac, ip); // boshqaruvchini ishga tushirish
udp.begin (SERV_PORT); //
pinMode port tinglashni yoqish (2, OUTPUT); // LED chiqishi
}
void loop () {
int size = udp.parsePacket (); // qabul qilingan paket hajmini o'qing
if (size) {
// yangi udp.read to'plami
mavjud (qabul qilishBuffer, hajmi); // Udp paketini o'qing
// LEDni boshqarish
(qabul qilishBuffer [0] == '0') digitalWrite (2, LOW); // agar 0 kelgan
bo'lsa , LEDni o'chiring (qabul qiluvchiBuffer [0] == '1') digitalWrite (2, HIGH); // agar 1 qabul qilinsa, LED qabul qilgichini yoqing
[0] = 0;
// mijozga javob
sifatida vaqt yuborish udp.beginPacket (udp.remoteIP (), udp.remotePort ());
udp.println (millis ());
udp.endPacket ();
}
}
Dasturning mantig'i:
Agar 0 belgisi mijozdan kelgan bo'lsa, LED o'chadi.
Agar 1 -belgi qabul qilinsa, LED yonadi.
Mijozdan biron bir belgi kelganda, dastur vaqti javob sifatida uzatiladi.
UDP mijoz dasturi yordamida uning ishlashini tekshirib ko'ramiz.

1 yuborilganda, LED yonadi, 0 - o'chadi.
Misol sifatida men ushbu serverni boshqarish uchun maxsus mijoz dasturini yozdim.
LED o'chadi va "qush" bilan yonadi, vaqt "odam" shaklida ko'rsatiladi.

Dasturni havoladan yuklab olish mumkin:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 
DHCP server.
Oldingi dars dasturlarida biz serverning IP -manzilini aniq belgilaganmiz. Statik IP -manzillar ishlatilgan. Barcha zamonaviy tarmoqlar manzillarni avtomatik ravishda ajratish imkoniyatiga ega. IP -manzillarni tayinlashning ushbu usulidan foydalanadigan serverga DHCP -server deyiladi. Bu 62 -darsda yoritilgan . Biz 64 -darsda shunday server yaratdik .
Dinamik IP -manzilni olish uchun tekshirgichni ishga tushirishda faqat bitta argumentni ko'rsatish kifoya - mac manzil.
Birinchi dars dasturini dinamik IP -manzillardan tarjima qilish uchun undagi setup () blokini quyidagilar bilan almashtirish kerak:
void setup () {
Serial.begin (9600);
Serial.println ("DHCP yordamida IP -manzilni olish");
if (Ethernet.begin (mac) == 0) {
Serial.println ("DHCP yordamida sozlanmadi");
while (rost); // xato qilib qo'yib yuboring
}
Serial.print ("Server manzili:");
Serial.println (Ethernet.localIP ()); // tekshirgichning IP -manzilini ko'rsatish
udp.begin (SERV_PORT); // port tinglashni yoqish
}
DHCP UDP serveriga ega bo'lgan to'liq dasturni havoladan yuklab olish mumkin:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 
Tekshiruvning avvalgi usuldan farqi shundaki, serverni ishga tushirishdan oldin, unga kirishda qaysi manzilni ko'rsatish kerakligini bilmaymiz. Unga qaysi manzil tayinlanishi noma'lum.
Biz dasturni Arduino kartasiga yuklaymiz. Seriya monitorida xabar paydo bo'ladi.

Biz ko'rsatilgan server manzilini mijoz dasturiga kiritamiz va xabarlar qanday o'tishini tekshiramiz.


Hammasi ishlaydi.
UDP mijozi.
Yuqorida men dasturiy nuqtai nazardan UDP protokolida server va mijozni ajratib bo'lmaydi, deb yozganman. Aksincha, biz UDP xabarlar qabul qilgichini ishlab chiqamiz. U:
Ketma -ket port monitor orqali yuboriladigan ma'lumotlar serverga yuboriladi.
Qabul qiluvchining parametrlari ko'rsatilgan uzatish xabarini ketma -ket portga yuboring.
Serverdan uzatuvchi parametrlari bilan ketma -ket port monitoriga chiqish ma'lumotlari.
Oddiy qilib aytganda, u ketma -ket port monitoridan xabarlarni serverga yuboradi va xabarlarni serverdan port monitoriga chiqaradi.
Mana eskizni yuklab olish uchun havola:
Ro'yxatdan o'ting va to'lang. Faqat 60 rubl. saytning barcha manbalariga kirish uchun oyiga! 
Loop () da ikkita blokli kod mavjud.
Birinchi blok:
UART -dan ma'lumotlarni buferga qabul qiladi;
10 kodli (chiziqli tasma) belgiga duch kelguncha kutadi;
qabul qiluvchining parametrlarini ketma -ket portga chiqaradi.
// bir paketi ichiga UART to'plash ma'lumotlar
bo'lsa (Serial.available ()>, 0), {
transmitBuffer, [ii] = Serial.read ();
agar (transmitBuffer [ii] == 10) {
transmitBuffer [ii + 1] = 0;
ii = 0;
// UDP paketini
udp.beginPacket (ipServ, SERV_PORT) uzatish ;
udp.write (transmitBuffer);
udp.endPacket ();
//
Serial.print ketma-ket portiga xabar ("UDP-paketli uzatishni");
Serial.print (udp.remoteIP ());
Serial.print ("Port:");
Serial.println (udp.remotePort ());
}
boshqa {
ii ++;
agar (ii> = 100) ii = 0;
}
}
Ikkinchi blok:
yangi UDP ma'lumotlar to'plami mavjudligini tekshiradi;
ketma -ket portga transmitter parametrlari yozilgan xabarni chiqaradi.
// yangi UDP paketlari mavjudligini tekshiring
int size = udp.parsePacket (); // qabul qilingan paket hajmini o'qing,
agar (hajmi) {
// Udp paketi bo'lsa, Serial.print paketi haqidagi ma'lumotlarni ko'rsatish
("Qabul qilingan paket");
IPAddress ipFrom = udp.remoteIP ();
Serial.println (ipFrom);
Serial.print ("Hajmi");
Ketma -ket chop etish (o'lcham);
Serial.print (", port");
Serial.println (udp.remotePort ());
// Udp paketini o'qing va uni ketma
-ket portga yuboring udp.read (qabul qilishBuffer, hajmi);
qabul qilishBuffer [hajmi] = 0;
Serial.println ("-------------------");
Serial.println (qabul qilishBuffer);
Serial.println ();
}
Download 1,56 Mb.

Do'stlaringiz bilan baham:
1   ...   11   12   13   14   15   16   17   18   19




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2022
ma'muriyatiga murojaat qiling

    Bosh sahifa
davlat universiteti
ta’lim vazirligi
axborot texnologiyalari
maxsus ta’lim
zbekiston respublikasi
guruh talabasi
O’zbekiston respublikasi
nomidagi toshkent
o’rta maxsus
davlat pedagogika
texnologiyalari universiteti
toshkent axborot
xorazmiy nomidagi
rivojlantirish vazirligi
pedagogika instituti
Ўзбекистон республикаси
tashkil etish
haqida tushuncha
таълим вазирлиги
vazirligi muhammad
O'zbekiston respublikasi
toshkent davlat
махсус таълим
respublikasi axborot
kommunikatsiyalarini rivojlantirish
vazirligi toshkent
saqlash vazirligi
fanidan tayyorlagan
bilan ishlash
Toshkent davlat
sog'liqni saqlash
uzbekistan coronavirus
respublikasi sog'liqni
coronavirus covid
koronavirus covid
vazirligi koronavirus
risida sertifikat
covid vaccination
qarshi emlanganlik
sertifikat ministry
vaccination certificate
Ishdan maqsad
fanidan mustaqil
matematika fakulteti
o’rta ta’lim
haqida umumiy
fanlar fakulteti
pedagogika universiteti
ishlab chiqarish
moliya instituti
fanining predmeti