Nghiên cứu và đánh giá một số giao thức và kỹ thuật quản lý tiết kiệm năng lượng trong mạng cảm biến không dây

97 14 0
Nghiên cứu và đánh giá một số giao thức và kỹ thuật quản lý tiết kiệm năng lượng trong mạng cảm biến không dây

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHƯƠNG VĂN THẮNG NGHIÊN CỨU VÀ ĐÁNH GIÁ MỘT SỐ GIAO THỨC VÀ KỸ THUẬT QUẢN LÝ TIẾT KIỆM NĂNG LƯỢNG TRONG MẠNG CẢM BIẾN KHÔNG DÂY Chuyên ngành: Kỹ thuật truyền thông LUẬN VĂN THẠC SĨ KỸ THUẬT Kỹ thuật truyền thông NGƯỜI HƯỚNG DẪN KHOA HỌC: TS Trần Quang Vinh Hà Nội – Năm 2015 LỜI CAM ĐOAN Tôi xin cam đoan luận văn nghiên cứu thân Các nghiên cứu luận văn dựa tổng hợp lý thuyết hiểu biết thực tế mình, khơng chép từ luận văn khác Mọi thơng tin trích dẫn tn theo luật sở hữu trí tuệ, liệt kê rõ ràng tài liệu tham khảo Tơi xin chịu hồn tồn trách nhiệm với nội dung viết luận văn Tác giả KHƯƠNG VĂN THẮNG I MỤC LỤC LỜI CAM ĐOAN I DANH SÁCH HÌNH VẼ IV DANH SÁCH BẢNG BIỂU V LỜI NÓI ĐẦU VI CHƯƠNG 1: TỔNG QUAN VỀ MẠNG CẢM BIẾN KHÔNG DÂY 1.1 Định nghĩa 1.2 Cấu trúc WSN 1.3 Ứng dụng WSN 1.4 Những thách thức WSN 1.5 Sự khác WSN mạng truyền thống 1.6 Hiệu lượng mạng WSN: 1.7 Các nguyên nhân gây nên lãng phí lượng CHƯƠNG 2: QUẢN LÝ NĂNG LƯỢNG TRONG MẠNG CẢM BIẾN KHÔNG DÂY 2.1.Các khía cạnh quản lý lượng cục 10 2.1.1.Phân hệ xử lý 10 2.1.2.Phân hệ truyền thông 11 2.1.3 Tần số Bus định thời RAM 12 2.1.4.Bộ nhớ động 12 2.1.5 Phân hệ quản lý lượng 12 2.2.Quản lý lượng động 13 2.2.1.Chế độ hoạt động linh động 14 2.2.2.Mở rộng quy mô quản lý lượng động 15 2.2.3.Chức lập lịch 16 2.3.Ý tưởng thiết kế 16 CHƯƠNG 3: TIẾT KIỆM NĂNG LƯỢNG Ở LỚP MẠNG 19 3.1 Tiết kiệm lượng lớp mạng WSN 19 3.2 Giao thức ARPEES 21 3.2.1 Đặc điểm 21 3.1.2 Hai pha hoạt động 22 3.3 Giao thức EMRP 29 II 3.3.1 Pha thiết lập 29 3.3.2 Pha thành lập nhóm chọn nhóm trưởng 31 3.3.3 Pha truyền tải liệu 32 CHƯƠNG 4: TIẾT KIỆM NĂNG LƯỢNG Ở LỚP MAC 36 4.1.Tổng quan chung tiết kiệm lượng giao thức lớp MAC 36 4.2 Giao thức XT - MAC 36 4.2.1.Giao thức MAC cho hệ thống định vị WSN 36 4.2.2.Mô tả giao thức XT-MAC 37 4.2.3 Hoạt động hệ thống định vị XT-MAC 39 4.3 Giao thức B - MAC 41 4.4 Giao thức MAC theo chuẩn ZigBee/IEEE802.15.4 47 4.4.1 Tầng vật lý ZigBee/IEEE 802.15.4 48 4.4.2.Tầng điều khiển liệu ZigBee/IEEE 802.15.4 MAC 49 CHƯƠNG - MÔ PHỎNG VÀ ĐÁNH GIÁ MỘT SỐ GIAO THỨC TIẾT KIỆM NĂNG LƯỢNG TRONG WSN BẰNG PHẦN MỀM OMNET++ 58 5.1 Giới thiệu chung OMNET++ 58 5.1.1 Các thành phần OMNET++ 58 5.1.2 Mơ hình OMNET++ 59 5.2 Xây dựng mơ hình mơ WSN Omnet++ 60 5.3 Mô đánh giá hiệu lượng giao thức WSN 62 5.3.1 Đánh giá hiệu lượng giao thức định tuyến ARPEES EMRP 63 5.3.2 Đánh giá hiệu lượng giao thức XT–MAC, B–MAC IEEE 802.15.4 65 CHƯƠNG – KẾT LUẬN 68 THUẬT NGỮ TỪ VIẾT TẮT 69 TÀI LIỆU THAM KHẢO 71 PHỤ LỤC 72 III DANH SÁCH HÌNH VẼ Hình 1.1: Phân bố node cảm biến trường cảm biến Hình 1.2: Kiến trúc giao thức mạng cảm biến Hình 3.1: Lưu đồ trạng thái thứ 24 Hình 3.2: thành cụm dựa kiện thuật toán lựa chọn cụm trưởng 25 Hình 3.3: Lưu đồ giao thức ARPEES pha thứ hai 28 Hình 3.4: Mơ tả ví dụ hàm lựa chọn nút chuyển tiếp 29 Hình 3.5: Mơ hình mạng EMRP với liên kết dạng lưới sau pha thiết lập 31 Hình 3.6: Mơ hình mạng hai mức liên kết EMRP 33 Hình 3.7: Lưu đồ hoạt động pha truyền tải liệu EMRP 35 Hình 4.1: Lưu đồ hoạt động XT-MAC 38 Hình 4.2: Lưu đồ hoạt động XT-MAC kết hợp với EMRP 41 Hình 4.3: Clear Channel Assessment (CCA) hiệu cho kênh không dây điển hình 43 Hình 4.4: Mơ hình giao thức ZigBee 48 Hình 4.5: Sơ đồ điều chế 49 Hình 4.6: Cấu trúc siêu khung 50 Hình 4.7: Lưu đồ thuật tốn 53 Hình 5.1: Đồ thị so sánh lượng lại giao thức ARPEES EMRP 64 Hình 5.2: Đồ thị so sánh lượng lại giao thức MAC 66 IV DANH SÁCH BẢNG BIỂU Bảng 4.1: hoạt động ứng dụng giám sát sử dụng thu phát CC1000 45 Bảng 4.2: Dải tần số theo chuẩn IEEE 802.15.4 49 Bảng 4.3: Định dạng khung MAC 57 Bảng 5.1: Năng lượng lại mạng sau chạy mô sử dụng giao thức định tuyến ARPEES 63 Bảng 5.2: Năng lượng lại mạng sau chạy mô sử dụng giao thức định tuyến EMRP 63 Bảng 5.3: Năng lượng lại mạng sử dụng giao thức XT-MAC 65 Bảng 5.4: Năng lượng lại mạng sử dụng giao thức B-MAC 65 Bảng 5.5: Năng lượng lại mạng sử dụng giao thức MAC chuẩn 802.15.4 66 V LỜI NĨI ĐẦU Mạng khơng dây xu phát triển hứa hẹn thay nhiều ứng dụng sử dụng mạng có dây Mạng cảm nhận không dây (Wireless Sensor Networks – WSN) đời dựa sở ứng dụng thành tựu cao công nghệ chế tạo linh kiện vi điện tử công nghệ thông tin WSN sử dụng với nhiều mục đích khác nhau, quân sự, dân công nghiệp, với đặc điểm chung bật không cần thao tác người Tuy nhiên mạng cảm ứng phải đối mặt với nhiều thách thức, thách thức lớn nguồn lượng bị giới hạn, khả xử lý thấp, giá thành thấp, giải thông bé, tín hiệu yếu hoạt động tần số chia sẻ Hiện nhiều nhà nghiên cứu tập trung vào việc cải thiện khả sử dụng hiệu lượng mạng cảm biến lĩnh vực khác Vì vậy, trình tìm hiểu nghiên cứu mạng cảm biến không dây, em lựa chọn đề tài “ Nghiên cứu đánh giá số giao thức kỹ thuật quản lý tiết kiệm lượng mạng cảm biến không dây” Luận văn gồm nội dung sau đây: Chương 1: “Tổng quan mạng cảm biến không dây” đưa định nghĩa bản, cấu trúc, ứng dụng đặc điểm WSN Chương cịn trình bày vấn đề lượng WSN từ rút lý lựa chọn đề tài Chương 2: “Quản lý lượng trọng mạng cảm biến khơng dây” trình bày lý thuyết quản lý lượng mạng cảm biến không dây Chương 3: “Tiết kiệm lượng lớp mạng” trình bày nguyên tắc chung tiết kiệm lương giao thức định tuyến Sau sâu vào tìm hiểu kỹ thuật tiết kiệm lượng số giao thức định tuyến ARPEES EMRP Chương 4: “Tiết kiệm lượng lớp MAC” trình bày nguyên tắc chung tiết kiệm lượng giao thức MAC Sau sâu vào tìm hiểu VI kỹ thuật tiết kiệm lượng số giao thức MAC XT-MAC, B-MAC giao thức MAC chuẩn 802.15.4 Chương 5: “Mô đánh giá số giao thức tiết kiệm lượng WSN phần mềm Omnet ++” giới thiệu phần mềm Omnet ++ cách mô hình hóa WSN phần mềm Qua thực mô đánh giá hiệu lượng số giao thức WSN Chương 6: “Kết luận” đánh giá lại toàn luận văn, khái quát nội dung chính, ưu điểm hạn chế luận văn đồng thời đưa hướng nghiên cứu VII Luận văn tốt nghiệp GVHD TS Trần Quang Vinh CHƯƠNG 1: TỔNG QUAN VỀ MẠNG CẢM BIẾN KHƠNG DÂY 1.1 Định nghĩa Mạng cảm biến khơng dây (WSN) hiểu đơn giản mạng liên kết node với kết nối sóng vơ tuyến, node mạng thường thiết bị đơn giản, nhỏ gọn, giá thành thấp… có số lượng lớn, phân bố cách khơng có hệ thống diện tích rộng, sử dụng nguồn lượng hạn chế hoạt động môi trường khắc nghiệt (chất độc, ô nhiễm, nhiệt độ cao…) 1.2 Cấu trúc WSN Node cảm biến Một node cảm biến cấu tạo thành phần sau: vi điều khiển, sensor, phát radio Ngồi cịn có cổng kết nối máy tính  Vi điều khiển: Bao gồm: CPU; nhớ ROM, RAM; phận chuyển đổi tín hiệu tương tự thành tín hiệu số ngược lại  Sensor: Chức năng: cảm nhận giới bên ngồi, sau chuyển liệu qua phận chuyển đổi để xử lý  Bộ phát radio: Node cảm biến thành phần quan trọng WSN, việc thiết kế node cảm biến cho tiết kiệm tối đa nguồn lượng vấn đề quan trọng hàng đầu  Mạng cảm nhận: Hình 1.1: Phân bố node cảm biến trường cảm biến SVTH: Khương Văn Thắng Trang Luận văn tốt nghiệp GVHD TS Trần Quang Vinh Hình 1.1 thấy, mạng cảm nhận bao gồm nhiều node cảm biến phân bố trường cảm biến Các node có khả thu thập liệu thực tế, sau chọn đường (theo phương pháp đa bước nhảy) để chuyển liệu node gốc Node gốc liên lạc với node quản lý nhiệm vụ thông qua Internet vệ tinh Việc thiết kế mạng cảm nhận mơ hình 1.1 phụ thuộc vào nhiều yếu tố như: Khả chịu lỗi: Một số node cảm biến có khả khơng hoạt động thiếu lượng, hư hỏng vật lý ảnh hưởng môi trường Khả chịu lỗi thể việc mạng hoạt động bình thường, trì chức số node mạng không hoạt động Khả mở rộng: Khi nghiên cứu tượng, số lượng node cảm biến triển khai đến hàng trăm nghìn node, phụ thuộc vào ứng dụng mà số vượt q hàng trăm nghìn node Do cấu trúc mạng có khả mở rộng để phù hợp với ứng dụng cụ thể Giá thành sản xuất: Vì mạng cảm nhận bao gồm số lượng lớn node cảm biến phí node quan trọng việc điều chỉnh chi phí mạng Do chi phí node cảm biến phải giữ mức thấp Tích hợp phần cứng: Vì số lượng node cảm biến mạng nhiều nên node cảm biến cần phải có ràng buộc phần cứng sau: Kích thước nhỏ, tiêu thụ lượng ít, chi phí sản xuất ít, thích hợp với môi trường, có khả tự cấu hình hoạt động không cần giám sát Môi trường hoạt động: Các node cảm biến thường dày đặc phân bố trực tiếp môi trường (kể môi trường ô nhiễm, độc hại hay nuớc…) Node cảm biến phải thích ứng với nhiều loại môi trường thay đổi môi trường Các phương tiện truyền dẫn: Ở mạng cảm nhận, node kết nối với mơi trường khơng dây, mơi trường truyền dẫn sóng vơ tuyến, hồng ngoại phương tiện quang học Cấu hình mạng cảm nhận: Mạng cảm nhận bao gồm số lượng lớn node cảm biến, phải thiết lập cấu hình ổn định SVTH: Khương Văn Thắng Trang Luận văn tốt nghiệp GVHD TS Trần Quang Vinh PacketARPEES *pkt; while (!outQueue.isEmpty()) { pkt = check_and_cast(outQueue.pop()); if (pkt->getPkType() == PK_PAYLOAD_TO_BS) { if (bsAddr > 0) { pkt->setDesMacAddr(bsAddr); pkt->setPreambleFlag(false); } else if (rnAddr > 0) { pkt->setDesMacAddr(rnAddr); } else { EV setSrcMacAddr(getMacAddr()); pkt->setByteLength(pkt->getPkSize()); sendPacket(pkt); } void NetARPEES::sendRelayInfo(PacketARPEES* reqPkt) { if (reqPkt == NULL) return; PacketARPEES_RelayInfo *pkt = new PacketARPEES_RelayInfo(); pkt->setTxType(TX_PPP); pkt->setPkType(PK_RELAY_INFO); pkt->setSrcMacAddr(getMacAddr()); pkt->setDesMacAddr(reqPkt->getSrcMacAddr()); if (par("isBaseStation").boolValue() == true) { pkt->setBsFlag(true); } else { pkt->setBsFlag(false); } pkt->setEnergy(((Energy*) getParentModule()->getSubmodule("energy"))>getCapacity()); Mobility *mob = (Mobility*) getParentModule()>getSubmodule("mobility"); pkt->setPosX(mob->getX()); pkt->setPosY(mob->getX()); pkt->setDBS(dBS); pkt->setByteLength(pkt->getPkSize()); sendPacket(pkt); delete reqPkt; } void NetARPEES::considerRelay(PacketARPEES_RelayInfo *ri) { Mobility *mob = (Mobility*) getParentModule()>getSubmodule("mobility"); SVTH: Khương Văn Thắng Trang 75 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh double dRc = distance(mob->getX(), mob->getY(), ri->getPosX(), ri>getPosY()); if (rnAddr getSrcMacAddr(); enerRn = ri->getEnergy(); dRnBs = ri->getDBS(); dRn = dRc; } else { double a1 = assessRelay(enerRn, dRn, dBS, dRnBs); double a2 = assessRelay(ri->getEnergy(), dRc, dBS, ri->getDBS()); if (a2 > a1) { rnAddr = ri->getSrcMacAddr(); enerRn = ri->getEnergy(); dRnBs = ri->getDBS(); dRn = dRc; } } } double NetARPEES::assessRelay(double ener, double dRc, double dBs, double dRcBs) { double cosa = (dRc * dRc + dBs * dBs - dRcBs * dRcBs) / (2 * dRcBs * dBs); return ener * dRc / dRcBs * cosa; } b) Giao thức định tuyến EMRP: #include #include #include #include #include #include #include #include #include #include #include "netemrp.h" "packetemrp_m.h" "messagecr_m.h" "messagetracking_m.h" "link.h" "link802154.h" "energy.h" "mobility.h" "worldutil.h" "msgkind.h" "statcollector.h" Define_Module(NetEMRP); void NetEMRP::initialize() { if (!par("isBaseStation").boolValue()) { scheduleAt(uniform(0, par("initInterval").doubleValue()), initTimer); } scheduleAt(0, radioOnTimer); } void NetEMRP::handleMessage(cMessage *msg) { if (msg->isSelfMessage()) { if (msg == radioOnTimer) { SVTH: Khương Văn Thắng Trang 76 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh Link802154 *link = check_and_cast(getModuleByPath("^.link")); if (par("isBaseStation").boolValue()) { link->forceRadioOn(-1); } else { link->forceRadioOn(par("initInterval").doubleValue()); } } else if (msg == initTimer) { requestRelay(true); } else if (msg->getKind() == RES_RELAY) { sendRelayInfo((PacketEMRP*) msg->getContextPointer()); delete msg; } else if (msg->getKind() == EMRP_WAIT_RELAY) { if (bsAddr > || rnAddr > 0) { sendMsgDown((MessageCR*) msg->getContextPointer()); } else { EV incLostMTRbyNet(); delete (MessageCR*) msg->getContextPointer(); } delete msg; } else if (msg == waitEnergyInfoTimeout) { rnAddr = 0; updateRelayEnergy(NULL); } } else { if (msg->getArrivalGate() == gate("appGate$i")) { recvMessage((MessageCR*) msg); } else if (msg->getArrivalGate() == gate("linkGate$i")) { recvPacket((PacketEMRP*) msg); } } } NetEMRP::NetEMRP() { bsAddr = 0; rnAddr = 0; bnAddr = 0; enerRn = 0; dRnBs = 0; enerBn = 0; dBnBs = 0; radioOnTimer = new cMessage("RadioOnTimer"); initTimer = new cMessage("InitEmrpTimer"); waitEnergyInfoTimeout = new cMessage("WaitEnergyInfoTimeout"); } NetEMRP::~NetEMRP() { cancelAndDelete(radioOnTimer); cancelAndDelete(initTimer); cancelAndDelete(waitEnergyInfoTimeout); } SVTH: Khương Văn Thắng Trang 77 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh void NetEMRP::recvMessage(MessageCR *msg) { sendMsgDown(msg); } void NetEMRP::recvPacket(PacketEMRP *pkt) { StatCollector *sc = check_and_cast(getModuleByPath("sc")); if (pkt->getPkType() != PK_PAYLOAD_TO_BS || (pkt->getPkType() == PK_PAYLOAD_TO_BS && par("isBaseStation").boolValue())) { sc->incRecvPacket(); } if (pkt->getHopLimit() < 0) { StatCollector *sc = check_and_cast(getModuleByPath("sc")); sc->incLostPacket(); EV getPkType() == PK_PAYLOAD_TO_BS) { sc->incLostMTRbyNet(); } delete pkt; return; } else { pkt->setHopLimit(pkt->getHopLimit() - 1); } if (pkt->getPkType() == PK_REQ_RELAY) { if (par("isBaseStation").boolValue() || bsAddr >= || !(rnAddr > && pkt->getSrcMacAddr() == rnAddr)) { cMessage *resRelayTimer = new cMessage("ResRelayTimer"); resRelayTimer->setKind(RES_RELAY); resRelayTimer->setContextPointer(pkt->dup()); scheduleAt(simTime() + uniform(0, par("resRelayPeriod").doubleValue()), resRelayTimer); } delete pkt; } else if (pkt->getPkType() == PK_RELAY_INFO) { PacketEMRP_RelayInfo *ri = check_and_cast(pkt); if (ri->getBsFlag() == true) { bsAddr = ri->getSrcMacAddr(); } else { if (bsAddr isScheduled()) cancelEvent(waitEnergyInfoTimeout); delete pkt; } else if (pkt->getPkType() == PK_ENERGY_INFO) { SVTH: Khương Văn Thắng Trang 78 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh updateRelayEnergy(check_and_cast(pkt)); if (waitEnergyInfoTimeout->isScheduled()) cancelEvent(waitEnergyInfoTimeout); delete pkt; } else if (pkt->getPkType() == PK_PAYLOAD_TO_AN) { MessageCR *msg = (MessageCR*) pkt->decapsulate(); send(msg, "appGate$o"); delete pkt; } else if (pkt->getPkType() == PK_PAYLOAD_TO_BS) { if (par("isBaseStation").boolValue() == true) { MessageCR *msg = (MessageCR*) pkt->decapsulate(); send(msg, "appGate$o"); sendEnergyInfo(pkt->getSrcMacAddr(), 0); delete pkt; } else { int sender = pkt->getSrcMacAddr(); if (bsAddr getBitLength()); if (!waitEnergyInfoTimeout->isScheduled()) { scheduleAt(simTime() + par("waitEnergyInfoTimeout").doubleValue(), waitEnergyInfoTimeout); } pkt->setSrcMacAddr(getMacAddr()); if (bsAddr > 0) { pkt->setPreambleFlag(false); pkt->setDesMacAddr(bsAddr); } else { pkt->setDesMacAddr(rnAddr); } sendPacket(pkt); } } } } void NetEMRP::sendPacket(PacketCR *pkt) { StatCollector *sc = check_and_cast(getModuleByPath("sc")); std::cerr setPkType(PK_REQ_RELAY); pkt->setSrcMacAddr(getMacAddr()); pkt->setDesMacAddr(BROADCAST_ADDR); pkt->setByteLength(pkt->getPkSize()); sendPacket(pkt); } void NetEMRP::sendRelayInfo(PacketEMRP *reqPkt) { if (reqPkt == NULL) return; PacketEMRP_RelayInfo *pkt = new PacketEMRP_RelayInfo(); pkt->setTxType(TX_PPP); pkt->setPkType(PK_RELAY_INFO); pkt->setSrcMacAddr(getMacAddr()); pkt->setDesMacAddr(reqPkt->getSrcMacAddr()); if (par("isBaseStation").boolValue()) { pkt->setBsFlag(true); } else { pkt->setBsFlag(false); } pkt->setEnergy(((Energy*) getParentModule()->getSubmodule("energy"))>getCapacity()); Mobility *mob = (Mobility*) getParentModule()>getSubmodule("mobility"); pkt->setPosX(mob->getX()); pkt->setPosY(mob->getX()); pkt->setDBS(dBS); pkt->setByteLength(pkt->getPkSize()); sendPacket(pkt); delete reqPkt; } bool NetEMRP::considerRelay(PacketEMRP_RelayInfo *ri) { Mobility *mob = (Mobility*) getParentModule()>getSubmodule("mobility"); double dRc = distance(mob->getX(), mob->getY(), ri->getPosX(), ri>getPosY()); if (rnAddr getSrcMacAddr(); enerRn = ri->getEnergy(); dRnBs = ri->getDBS(); dRn = dRc; return true; } else { double a1 = assessRelay(enerRn, dRn, dBS, dRnBs); SVTH: Khương Văn Thắng Trang 80 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh double a2 = assessRelay(ri->getEnergy(), dRc, dBS, ri->getDBS()); if (a2 > a1) { rnAddr = ri->getSrcMacAddr(); enerRn = ri->getEnergy(); dRnBs = ri->getDBS(); dRn = dRc; return true; } else { return false; } } } bool NetEMRP::considerBackup(PacketEMRP_RelayInfo *ri) { Mobility *mob = (Mobility*) getParentModule()>getSubmodule("mobility"); double dRc = distance(mob->getX(), mob->getY(), ri->getPosX(), ri>getPosY()); if (bnAddr getSrcMacAddr(); enerBn = ri->getEnergy(); dBnBs = ri->getDBS(); dBn = dRc; return true; } else { double a1 = assessRelay(enerBn, dBn, dBS, dBnBs); double a2 = assessRelay(ri->getEnergy(), dRc, dBS, ri->getDBS()); if (a2 > a1) { bnAddr = ri->getSrcMacAddr(); enerBn = ri->getEnergy(); dBnBs = ri->getDBS(); dBn = dRc; return true; } else { return false; } } } double NetEMRP::assessRelay(double ener, double dRc, double dBs, double dRcBs) { double cosa = (dRc*dRc + dBs*dBs - dRcBs*dRcBs) / (2 * dRcBs * dBs); return ener / dRcBs * cosa; } void NetEMRP::sendEnergyInfo(int addr, int bitLen) { PacketEMRP_EnergyInfo *ei = new PacketEMRP_EnergyInfo("EnergyInfo"); ei->setTxType(TX_PPP); ei->setPkType(PK_ENERGY_INFO); ei->setSrcMacAddr(getMacAddr()); ei->setDesMacAddr(addr); Energy *energy = check_and_cast(getParentModule()>getSubmodule("energy")); ei->setRemainEnergy(energy->getCapacity()); ei->setByteLength(ei->getPkSize()); SVTH: Khương Văn Thắng Trang 81 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh sendPacket(ei); } void NetEMRP::updateRelayEnergy(PacketEMRP_EnergyInfo *ei) { if (bsAddr > 0) return; if (ei != NULL) enerRn = ei->getRemainEnergy(); if (enerRn < par("criticalEnergy").doubleValue() || rnAddr getRoutingType() == RT_TO_BS && bsAddr setContextPointer(msg); scheduleAt(simTime() + par("resRelayPeriod").doubleValue(), waitRelayMsg); requestRelay(); return; } PacketEMRP *pkt = new PacketEMRP(); if (msg->getRoutingType() == RT_TO_AN) { pkt->setTxType(TX_PPP); pkt->setPkType(PK_PAYLOAD_TO_AN); pkt->setDesMacAddr(msg->getDesMacAddr()); } else if (msg->getRoutingType() == RT_TO_BS) { pkt->setTxType(TX_PPP); pkt->setPkType(PK_PAYLOAD_TO_BS); SVTH: Khương Văn Thắng Trang 82 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh if (bsAddr > 0) { pkt->setDesMacAddr(bsAddr); } else { pkt->setDesMacAddr(rnAddr); } if (!waitEnergyInfoTimeout->isScheduled()) { scheduleAt(simTime() + par("waitEnergyInfoTimeout").doubleValue(), waitEnergyInfoTimeout); } } else if (msg->getRoutingType() == RT_BROADCAST) { pkt->setTxType(TX_BROADCAST); pkt->setPkType(PK_PAYLOAD_TO_AN); pkt->setDesMacAddr(BROADCAST_ADDR); } pkt->setSrcMacAddr(getMacAddr()); if (msg->getRoutingType() == RT_TO_BS && bsAddr > 0) { pkt->setPreambleFlag(false); } else { pkt->setPreambleFlag(msg->getPreambleFlag()); } pkt->setByteLength(pkt->getPkSize()); pkt->encapsulate(msg); sendPacket(pkt); } c) Giao thức XT-MAC: #include "linkxtmac.h" #include "packetcr_m.h" #include "app.h" #include "channelutil.h" #include "statcollector.h" Define_Module(LinkXTMAC); void LinkXTMAC::setActive() { if (radioMode == RADIO_OFF) { // Turn radio on setRadioMode(RADIO_ON); } isActive = true; if (!forcedOn) { cancelEvent(dcSleepTimer); scheduleAt(simTime() + par("activeTime"), dcSleepTimer); } updateDisplay(); } void LinkXTMAC::handleMessage(cMessage *msg) { if (msg->isSelfMessage()) { if (msg == strobeTimer) { prepareStrobe(); SVTH: Khương Văn Thắng Trang 83 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh startSending(); } else if (msg == backoffTimer) { scheduleAt(simTime() + par("ccaDur").doubleValue(), ccaTimer); } else if (msg == ccaTimer) { performCCA(); } else if (msg == releaseChannelTimer) { releaseChannel(); finishSending(); } else if (msg == rxConsumeTimer) { double period = par("rxConsumingPeriod"); useEnergyRx(period); rxConsumeTimer->setTimestamp(); scheduleAt(simTime() + period, rxConsumeTimer); } else if (msg == dcListenTimer) { setRadioMode(RADIO_ON); } else if (msg == dcSleepTimer) { if (isActive) { isActive = false; forcedOn = false; updateDisplay(); } setRadioMode(RADIO_OFF); } } else { if (msg->getArrivalGate() == gate("netGate$i")) { if (radioMode == RADIO_FULL_OFF) { delete msg; EV getArrivalGate() == gate("radioIn")) { Frame802154 *frame = check_and_cast(msg); recvFrame(frame); } } } void LinkXTMAC::setRadioMode(int mode) { Enter_Method("setRadioMode"); if (mode == RADIO_OFF || mode == RADIO_ON || mode == RADIO_FULL_OFF) { radioMode = mode; if (mode == RADIO_ON) { if (!rxConsumeTimer->isScheduled()) { rxConsumeTimer->setTimestamp(); scheduleAt(simTime() + par("rxConsumingPeriod").doubleValue(), rxConsumeTimer); } cancelEvent(dcSleepTimer); cancelEvent(dcListenTimer); SVTH: Khương Văn Thắng Trang 84 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh scheduleAt(simTime() + par("lR").doubleValue(), dcSleepTimer); } else if (mode == RADIO_OFF) { cancelEvent(strobeTimer); cancelEvent(dcSleepTimer); cancelEvent(dcListenTimer); nStrobe = 0; cPacket *pkt; while (!outQueue.isEmpty()) { pkt = outQueue.pop(); delete pkt; getParentModule()->bubble("Frame discarded"); } if (outFrame != NULL) { delete outFrame; outFrame = NULL; getParentModule()->bubble("Frame discarded"); } if (txFrame != NULL) { delete txFrame; txFrame = NULL; getParentModule()->bubble("Frame discarded"); } if (rxConsumeTimer->isScheduled()) { double onTime = SIMTIME_DBL(simTime() - rxConsumeTimer>getTimestamp()); if (onTime > 0) { useEnergyRx(onTime); } cancelEvent(rxConsumeTimer); } cancelEvent(dcListenTimer); scheduleAt(simTime() + par("sR").doubleValue(), dcListenTimer); } else if (mode == RADIO_FULL_OFF) { EV isScheduled()) { double onTime = SIMTIME_DBL(simTime() - rxConsumeTimer>getTimestamp()); if (onTime > 0) { useEnergyRx(onTime); } cancelEvent(rxConsumeTimer); } poweroff(); } } } void LinkXTMAC::poweroff() { nStrobe = 0; cancelEvent(strobeTimer); cancelEvent(dcSleepTimer); SVTH: Khương Văn Thắng Trang 85 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh cancelEvent(dcListenTimer); Link802154::poweroff(); updateDisplay(); } void LinkXTMAC::updateDisplay() { cDisplayString &ds = getParentModule()->getDisplayString(); switch (radioMode) { case RADIO_FULL_OFF: ds.setTagArg("i", 1, "black"); break; case RADIO_ON: if (isActive) { ds.setTagArg("i", 1, "green"); } else { ds.setTagArg("i", 1, "yellow"); } break; } } void LinkXTMAC::queueFrame(Frame802154 *frame) { outQueue.insert(frame); prepareSending(); } void LinkXTMAC::recvFrame(Frame802154* frame) { if (simInFrameLoss(frame)) return; // The frame is lost StatCollector *sc = check_and_cast(getModuleByPath("sc")); if (frame->getType() == FR_PAYLOAD) { setActive(); send(frame->decapsulate(), "netGate$o"); sc->incRecvFrame(); delete frame; } else if (frame->getType() == FR_PREAMBLE) { getParentModule()->bubble("Get strobe"); if (frame->getDesAddr() == macAddress) { setActive(); sendStrobeAck(frame); } else if (frame->getDesAddr() == BROADCAST_ADDR) { setActive(); } delete frame; } else if (frame->getType() == FR_PREAMBLE_ACK) { setActive(); getParentModule()->bubble("Receive strobe ACK"); nStrobe = 0; cancelEvent(strobeTimer); if (outFrame != NULL && outFrame->getType() == FR_PREAMBLE) { delete outFrame; outFrame = NULL; } if (txFrame != NULL && txFrame->getType() == FR_PREAMBLE) { cancelEvent(backoffTimer); SVTH: Khương Văn Thắng Trang 86 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh cancelEvent(ccaTimer); delete txFrame; txFrame = NULL; } startSending(); delete frame; } } void LinkXTMAC::prepareSending() { if (strobeTimer->isScheduled() || backoffTimer->isScheduled() || ccaTimer->isScheduled() || releaseChannelTimer->isScheduled()) { return; } if (!outQueue.isEmpty()) { Frame802154 *frame = check_and_cast(outQueue.front()); Packet802154 *pkt = (Packet802154*) frame>getEncapsulatedPacket(); if (frame->getType() == FR_PAYLOAD && pkt != NULL && pkt->getPreambleFlag()) { nStrobe = (int) ceil(par("sR").doubleValue() / par("strobePeriod").doubleValue()); EV setSrcAddr(macAddress); strobe->setDesAddr(payload->getDesAddr()); strobe->setByteLength( par("fldFrameControl").longValue() + par("fldSequenceId").longValue() + par("fldDesAddr").longValue() + par("fldSrcAddr").longValue() + par("fldFooter").longValue() + par("phyHeaderSize").longValue()); outQueue.insertBefore(payload, strobe); } void LinkXTMAC::sendStrobeAck(Frame802154 *strobe) { SVTH: Khương Văn Thắng Trang 87 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh if (strobe->getDesAddr() == macAddress || strobe->getDesAddr() == BROADCAST_ADDR) { EVsetType(FR_PREAMBLE_ACK); ack->setSrcAddr(macAddress); ack->setDesAddr(strobe->getSrcAddr()); ack->setByteLength( par("fldFrameControl").longValue() + par("fldSequenceId").longValue() + par("fldDesAddr").longValue() + par("fldSrcAddr").longValue() + par("fldFooter").longValue() + par("phyHeaderSize").longValue()); queueFrame(ack); } } void LinkXTMAC::finishSending() { if (nStrobe > 0) { nStrobe ; if (nStrobe > 0) { scheduleAt(simTime() + par("strobePeriod").doubleValue(), strobeTimer); } else { startSending(); } } else { prepareSending(); } } LinkXTMAC::LinkXTMAC() { isActive = true; forcedOn = false; nStrobe = 0; strobeTimer = new cMessage("StrobeTimer"); dcListenTimer = new cMessage("DcListenTimer"); dcSleepTimer = new cMessage("DcSleepTimer"); } LinkXTMAC::~LinkXTMAC() { cancelAndDelete(strobeTimer); cancelAndDelete(dcListenTimer); cancelAndDelete(dcSleepTimer); } void LinkXTMAC::forceRadioOn(double duration) { Enter_Method("forceRadioOn"); isActive = true; forcedOn = true; setRadioMode(RADIO_ON); cancelEvent(dcSleepTimer); if (duration >= 0) { SVTH: Khương Văn Thắng Trang 88 Luận văn tốt nghiệp GVHD TS Trần Quang Vinh scheduleAt(simTime() + duration, dcSleepTimer); } updateDisplay(); } SVTH: Khương Văn Thắng Trang 89 ... chọn đề tài “ Nghiên cứu đánh giá số giao thức kỹ thuật quản lý tiết kiệm lượng mạng cảm biến không dây? ?? Luận văn gồm nội dung sau đây: Chương 1: “Tổng quan mạng cảm biến không dây? ?? đưa định... vấn đề lượng WSN từ rút lý lựa chọn đề tài Chương 2: ? ?Quản lý lượng trọng mạng cảm biến khơng dây? ?? trình bày lý thuyết quản lý lượng mạng cảm biến không dây Chương 3: ? ?Tiết kiệm lượng lớp mạng? ??... tiết kiệm lượng giao thức MAC Sau sâu vào tìm hiểu VI kỹ thuật tiết kiệm lượng số giao thức MAC XT-MAC, B-MAC giao thức MAC chuẩn 802.15.4 Chương 5: “Mô đánh giá số giao thức tiết kiệm lượng WSN

Ngày đăng: 27/02/2021, 23:44

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan