物联网课程设计论文.docx

上传人:b****8 文档编号:9618517 上传时间:2023-02-05 格式:DOCX 页数:27 大小:524.56KB
下载 相关 举报
物联网课程设计论文.docx_第1页
第1页 / 共27页
物联网课程设计论文.docx_第2页
第2页 / 共27页
物联网课程设计论文.docx_第3页
第3页 / 共27页
物联网课程设计论文.docx_第4页
第4页 / 共27页
物联网课程设计论文.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

物联网课程设计论文.docx

《物联网课程设计论文.docx》由会员分享,可在线阅读,更多相关《物联网课程设计论文.docx(27页珍藏版)》请在冰豆网上搜索。

物联网课程设计论文.docx

物联网课程设计论文

 

东北石油大学

课程设计

课程无线传感网络课程设计

题目远程灯控系统

院系计算机与信息技术学院

专业班级物联网工程12-1班

学生姓名

学生学号

指导教师

 

2009年7月10日

摘要

 

无线传感器网络的无线通信技术可以采用ZigBee技术、蓝牙、Wi-Fi和红外等技术。

ZigBee技术是一种短距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术或无线网络技术,是一组基于IEEE802.15.4无线标准研制开发的有关组网、安全和应用软件方面的通信技术。

ZigBee联盟于2005年公布了第一份ZigBee规范“ZigBeeSpecificationV1.0”。

ZigBee协议规范使用了IEEE802.15.4定义的物理层(PHY)和媒体介质访问层(MAC),并在此基础上定义了网络层(NWK)和应用层(APL)架构[1]。

本文设计主要利用C#语言在VS2010平台上设计一个桌面应用程序,用于连接物联网实验中间件服务器,从而获取下位机发给中间件的数据,显示出网络拓扑和节点信息,并通过发送控制命令,达到控制下位机效果。

关键词:

ZigBee协议;无线传感器网络;物联网中间件;通信协议

目 录

第1章概述

1.1ZigBee概述

ZigBee是为低数据速率、短距离无线网络通信定义的一系列通信协议标准。

基于ZigBee的无线设备工作在868MHZ,915MHZ和2.4G频带。

其最大数据速率是250Kbps。

ZigBee技术主要针对以电池为电源的应用,这些应用对低数据速率、低成本、更长时间的电池寿命有较高的需求。

在一些ZigBee应用中,无线设备持续处于活动状态的时间是有限的,大部分时间无线设备是处于省电模式(也称休眠模式)的。

因此,ZigBee设备在电池需要更换以前能够工作数年以上[2]。

ZigBee标准是由ZigBee联盟所开发的,该联盟有数百个成员公司,从半导体产业和软件开发者到原始设备生产商、安装商。

ZigBee联盟是2002年创立的一个非盈利性组织,对每一个想加入的成员都开放[3]。

ZigBee标准采用IEEE802.15.4标准作为其PHY层和MAC层协议。

因此,遵循ZigBee的设备也同样遵循IEEE802.15.4标准[4]。

通过简化通信协议和降低数据速率,ZigBee标准有助于降低应用成本。

和其他的标准例如IEEE802.11相比,满足ZigBee和IEEE802.15.4标准的最低需求相对轻松,这同时也降低了ZigBee收发器的应用复杂度和成本[5]。

1.2物联网中间件介绍

为了更好地管理和监控ZigBee无线网络,通过“串口-网口”转换器,将物联网传感层所实现对各种物理量的传感采集和反馈控制,以物联网中间件(IOTService)方式提供给PC机不同形式的上层应用程序,物联网综合演示系统就属于其中之一。

IOTService是一个以Windows系统服务形式存在的服务程序,目的在于将不同的应用项目集中到统一的软件平台中。

所有的设备及上层应用都通过网络连接到IOTService,并通过IOTService进行通信[6]。

IOTService的优势在于给不同形式的上层应用提供了统一的接口,比如可以让设备与C/S架构的桌面程序进行通讯,也可以搭建WebService,通过WebService和IOTService进行通信,再进一步编写B/S架构的应用软件。

1.3无线传感器网络简介

无线传感器网络是由大量体积小、成本低,具有无线通信、传感、数据处理能力的传感器节点组成的,传感器节点一般由传感单元、处理单元、收发单元、电源单元等功能模块组成。

除此之外,根据具体应用的需要,可能还会有定位系统、电源再生单元和移动单元等。

在无线传感器网络中,大量传感器节点被布置在整个观测区域中,各个传感器节点将所探测到的有用信息通过初步的数据处理和信息融合后传送给用户,数据传送的过程是通过相邻节点接力传送的方式传送回基站,然后再通过基站以卫星通信或者有线网络连接的方式传送给最终用户。

因此,与其他传统的网络相比,无线传感器网络具有如下特性。

(1)低功耗

(2)自组织网络

(3)高可扩充性

1.4远程灯控系统简介

远程灯控系统是建立在ZigBeePRO协议栈和物联网中间件之上的,通过规定好的通信协议和中间件提供的应用接口,利用串口数据传输和无线数据传输,可以控制各个节点LED灯和蜂鸣器的系统。

通过中间件提供的接口和通信协议,我们开发了C/S模式下的桌面应用软件。

应用软件连接中间件所在的服务器,中间件给予反馈信息,依据《传感网络通信协议》和中间件进行通讯,通讯分两个阶段:

第一阶段是应用连接服务并完成应用类型识别,第二阶段设备进行通讯。

第2章远程灯控系统的总体设计

远程灯控系统主要实现以下功能:

应用软件启动后连接中间件所在的服务器,连接成功后向服务器发送设备识别消息并等待服务器给予应答和设备序号消息,收到设备序列号后,说明连接服务器成功,正式开始系统的工作。

应用软件必须定时发送自己的心跳消息给服务器来保持正常通信,与此同时,应用软件也会收到服务器发送过来心跳,应用软件会判断心跳是否超时,如果心跳超时,表示与服务器失去连接,应用软件就会断开连接。

在保持与服务器通信的同时,系统一直处于消息处理循环,接收处理由服务器发送过来的消息,包括:

设备连接信息、设备断开信息、心跳信息、父子节点关系信息、节点信息、上传母版资源信息等,通过这些信息实现的远程灯控。

本系统属于C/S模式下的应用软件,实现了心跳机制、网络拓扑树形展示、节点信息显示、节点控制模块、消息记录等功能,通过物联网中间件实现与终端的对接,并控制终端。

通信体系如下图2-1所示:

图2-1IOTService通信体系

 

第3章硬件设计

3.1节点选择

所选节点必须满足有LED灯和蜂鸣器的模块,以便可以对其进行控制,除此之外,协调器节点的选择还需要有RS-232串行接口,以此保证协调器与上位机通信。

为了展示网络拓扑结构为树形网络,必须保证所选节点中有一个协调器节点,至少需要一个路由器节点,任意个终端节点。

本次系统开发所选节点有一个协调器模块,三个传感节点,一个串转网模块,如下图3-1所示:

图3-1节点选择

3.2硬件模块原理

3.2.1CC2530无线节点模块

一个基于802.15.4的CC2530无线收发模块如图3-2所示。

无线模块的核心部分是一个CC2530射频收发器。

图3-22530无线节点模块

CC2530的无线接收器是一个中低频的接收器。

接收到的射频信号通过低噪声放大器放大而正交降频转换到中频。

在中频2MHZ中,当ADC模数转换时,输入信号被过滤和放大。

CC2530的数据缓冲区通过先进先出(FIFO)的方式来接受128位数据。

使用先进先出读取数据需要通过特殊功能寄存器接口。

内存与先进先出缓冲区数据移动使用DMA方式来实现。

CC2530发射器是基于上变频器。

接收数据存放在一个接收先进先出(区别于发送先进先出)的数据缓冲区内。

发送数据帧的前导符和开始符由硬件生成。

通过数模转换把数字信号转换成模拟信号发送出去。

3.2.2RS-232串行接口

RS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。

模块原理图如下图3-3所示:

图3-3RS-232串行接口模块

RS-232C标准对逻辑电平的定义。

对于数据(信息码):

逻辑“1”的电平低于-3V,逻辑“0”的电平高于+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义。

3.2.3LED灯和按键

LED灯和按键的原理图如下图3-4所示:

图3-4LED灯与按键

第4章网络节点软件设计与实现

4.1软件架构

ZigBee标准定义了一种网络协议,这种协议能够确保无线设备在低成本、低功耗和低数据速率网络中的互操作性[9]。

ZigBee协议栈构建在IEEE802.15.4标准基础之上,802.15.4标准定义了MAC和PHY层的协议标准,而ZigBee协议栈则定义了网络层、应用层和安全服务层的标准。

图4-1为ZigBee协议的层次架构,越向下越贴近硬件,越向上越贴近软件本身和应用[10]。

图4-1ZigBee协议的层次架构

4.2SAPI初始化和任务事件处理

SAPI的初始化和任务事件处理是应用程序的入口,是在SAPI.C中完成的,初始化的函数为SAPI_Init(),在系统任务初始化时会给它分配一个任务ID,通过任务ID就能进入用户层任务事件处理函数了,实现方式如下:

voidSAPI_Init(bytetask_id)

{

sapi_TaskID=task_id;//分配任务ID

sapi_bindInProgress=0xffff;//绑定标志位,默认不允许绑定

sapi_epDesc.task_id=&sapi_TaskID;

sapi_epDesc.endPoint=0;

afSetMatch(sapi_epDesc.simpleDesc->EndPoint,FALSE);

//默认关闭匹配描述符的响应

ZDO_RegisterForZDOMsg(sapi_TaskID,NWK_addr_rsp);//注册返回事件

ZDO_RegisterForZDOMsg(sapi_TaskID,Match_Desc_rsp);

RegisterForKeys(sapi_TaskID);//注册(HAL)键盘事件

osal_set_event(task_id,ZB_ENTRY_EVENT);//设置事件,启动应用

}

API_ProcessEvent(bytetask_id,UINT16events),参数:

task_id为OSAL分配任务ID,events为当前需要处理的事件。

该函数为SAPI的任务处理函数,用户自定的事件都在此得以实现,实现功能如下:

UINT16SAPI_ProcessEvent(bytetask_id,UINT16events)

{if(events&SYS_EVENT_MSG)//系统消息事件

if(events&ZB_ALLOW_BIND_TIMER)//允许绑定计时事件

if(events&ZB_BIND_TIMER)//绑定时间事件

if(events&ZB_ENTRY_EVENT)

…//进入用户处理事件函数,在SAPI_Init的最后注册了该事件

if(events&(ZB_USER_EVENTS))

}

4.3ZDO初始化和任务事件处理

ZigBee设备对象(ZDO)是驻留于应用层(APL)的一种应用解决方案,它位于ZigBee协议栈的应用支持子层(APS)之上。

ZDO负责初始化应用支持子层(APS)、网络层(NWK)、安全服务提供模块(SSP)及非1~240端点应用的任何其他ZigBee设备层;另外ZDO还负责从终端应用收集配置信息来实现设备和服务发现、安全管理、网络管理、绑定管理和节点管理功能。

ZDO的初始化实现形式为ZDApp的初始化,Z-Stack目录下的ZDO文件夹下的ZDApp.c中实现的,实现初始化ZDApp函数为voidZDApp_Init(uint8task_id),具体功能如下注释:

voidZDApp_Init(uint8task_id)

{

ZDAppTaskID=task_id;//保存任务ID

ZDAppNwkAddr.addrMode=Addr16Bit;//使用16位短地址

ZDAppNwkAddr.addr.shortAddr=INVALID_NODE_ADDR;//0xFFFE

(void)NLME_GetExtAddr();

ZDAppCheckForHoldKey();//Joystickup控制

ZDO_Init();//通过判断预编译来开启一些函数功能

//在AF层注册该端口描述符

afRegister((endPointDesc_t*)&ZDApp_epDesc);

……

ZDApp_RegisterCBs();

}

ZDO任务事件处理是在ZDApp.c中实现的,实现任务处理的函数为UINT16ZDApp_event_loop(uint8task_id,UINT16events),实现了网络的初始化和网络的启动,建立网络成功后会保存网路配置并重启系统,实现主要功能如下:

UINT16ZDApp_event_loop(uint8task_id,UINT16events)

{……

if(events&ZDO_NETWORK_INIT)//网络初始化事件

{

devState=DEV_INIT;//启动网络

ZDO_StartDevice((uint8)ZDO_Config_Node_Descriptor.LogicalType,devStartMode,DEFAULT_BEACON_ORDER,DEFAULT_SUPERFRAME_ORDER);

return(events^ZDO_NETWORK_INIT);

}

if(events&ZDO_NETWORK_START)//协调器所建网络开始

{

ZDApp_NetworkStartEvt();//触发网络建立成功事件

return(events^ZDO_NETWORK_START);

}

if(events&ZDO_STATE_CHANGE_EVT)

//加入网络成功后触发该事件,更新网络信息(协调器建网成功)

{

ZDO_UpdateNwkStatus(devState);

}

if(events&ZDO_NWK_UPDATE_NV)

{

ZDApp_SaveNetworkStateEvt();//保存网络状态

}

if(events&ZDO_DEVICE_RESET)

{

SystemReset();//重启系统

}

……}

由于无线网络看不见摸不到,就需要由实质性的东西来表明网络的状态,在此,我们用LED灯的亮灭来显示网络的状态,系统启动后,系统运行灯(LED5)会亮起,建立网络成功后,网络状态灯会不停的闪烁。

如下图4-2所示:

图4-2各模块状态图

4.4协调器程序执行流程图

协调器启动后会一直向串口发送应用识别消息,直到服务器给予应答并受到设备序列号消息后,开始各项工作,工作流程如下图4-3所示:

图4-3协调器程序执行流程图

4.5终端程序执行流程图

终端节点加入有协调器建立的网络后,会获取节点信息,然后开始向协调器无线发送父子节点关系信息,如果收到无线信息,则进入消息处理循环中处理,工作流程图如下图4-4所示:

图4-4终端程序执行流程图

4.6数据发送与数据接收

4.6.1无线发送数据

无线发送数据的时候可以直接调用SAPI中封装好的一个发送数据函数:

*函数名称:

zb_SendDataRequest

*功能描述:

发送数据

*参数:

destination-发送方式

*commandId-发送命令ID

*len-发送的数据包长度

*handle-发送序列处理

*txOptions-发送选项

*radius-最大传输半径(发送的跳数)

voidzb_SendDataRequest(uint16destination,uint16commandId,

uint8len,uint8*pData,uint8handle,

uint8txOptions,uint8radius)

{

……

dstAddr.addr.shortAddr=destination;//使用短地址

dstAddr.addrMode=afAddr16Bit;

……

dstAddr.panId=0;

dstAddr.endPoint=sapi_epDesc.simpleDesc->EndPoint;//设定端口

status=AF_DataRequest(&dstAddr,&sapi_epDesc,commandId,len,

pData,&handle,txOptions,radius);//发送信息

if(status!

=afStatus_SUCCESS)

{

SAPI_SendCback(SAPICB_DATA_CNF,status,handle);//设置发送确认事件

}}

有该函数可以看出,真正发送数据的函数为AF_DataRequest,发送的数据存于pDATA中,发送数据时需要配置发送的目的地址等。

4.6.2无线接收数据

当有无线数据需要接收时,SAPI层会有事件被触发,就会进入应用层任务事件处理函数SAPI_ProcessEvent中,如下:

caseAF_INCOMING_MSG_CMD:

//AF信息输入,无线接收到信息后,触发该事件

pMSGpkt=(afIncomingMSGPacket_t*)pMsg;//接收信息包

SAPI_ReceiveDataIndication(pMSGpkt->srcAddr.addr.shortAddr,

pMSGpkt->clusterId,//调用处理函数

pMSGpkt->LinkQuality,pMSGpkt->rssi,pMSGpkt->cmd.DataLength,pMSGpkt->cmd.Data);

接着就会调用数据接收处理函数:

*函数名称:

SAPI_ReceiveDataIndication

*功能描述:

数据接收处理函数

*参数:

source-发送设备的源短地址

*commandId-命令ID

*len-接收的数据包长度

*pData-数据缓存指针

voidSAPI_ReceiveDataIndication(uint16source,uint16command,

uint8lqi,int8rssi,uint16len,uint8*pData)

{

#ifdefined(MT_SAPI_CB_FUNC)//调试输出接收数据的信息

if(SAPICB_CHECK(SPI_CB_SAPI_RCV_DATA_IND))

{

zb_MTCallbackReceiveDataIndication(source,command,len,pData);

}

else

#endif//MT_SAPI_CB_FUNC

{

#if(SAPI_CB_FUNC)

zb_ReceiveDataIndication(source,command,lqi,rssi,len,pData);

//调用接收处理函数

#endif

}

}

该函数被调用的,会把接收到的数据包的内存地址传进来,接着会调用处理函数zb_ReceiveDataIndication,对接收到的数据进行处理。

第5章上位机软件设计与实现

5.1上位机软件界面设计

上位机软件因为需要通过网络通信与服务器进行通信连接,所以需要有输入服务器的IP地址和通信端口号,点击连接按钮后根据输入的IP地址和端口号去连接服务器。

当有终端设备接入服务器时,上位机会收到设备接入信息以及节点父子关系信息,此时,上位机会根据这些信息在treeview控件中生成节点关系树,以此来展现网络拓扑。

点击treeview中的节点,会获取该节点的信息,并在节点信息展示模块中显示该模块的地址信息、信号值信息、PID信息等,同时激活节点控制模块,也就能控制该节点的LED灯和蜂鸣器。

在软件运行中,会出现各种提示信息,以便使用者了解程序运行的各种状态,这些信息会在界面上显示出来。

软件界面如下图5-1所示:

图5-1软件界面

5.2上位机软件执行流程图

上位机软件需要连接服务器才能进一步工作,连接服务器成功后需要发送设备识别消息并等待服务器给予应答,收到应答后表明连接服务器成功,才真正开启了上位机的功能:

一方面需要定时发送心跳信息给服务器,来保证通信的正常运行,另一方面要循环接收服务器发来的各种消息,不同的消息跳到相应地执行函数中去,完成上位机的各个功能。

程序流程图如下图5-2所示:

图5-2上位机程序流程图

5.3网络参数配置与服务器的连接

运行软件时,需要连接服务器才能进行下一步,我们用TCP协议连接服务器,连接前需要配置网络参数,通过网络配置窗口,可以快速配置连接服务器的网络IP地址和端口,进而连接服务中间件,实现代码如下:

在窗口初始化的时候,首先声明一个TCP客户端:

privateTcpClienttcpclient;

然后把IP地址和端口号提取出来进行连接,用自己封装好的socketouttime类,可以对连接进行设定超时,连接成功后会开启一个数据流:

IPEndPointipendport=newIPEndPoint(IPAddress.Parse(tbIP.Text),

int.Parse(tbPort.Text));

tcpclient=socketouttime.Connect(ipendport,5000);//设定超时为5秒

NetworkStreamMyMsg=tcpclient.GetStream();

而真正去连接服务器时是调用TcpClient类封住的方法BeginConnect,代码如下:

tcpclient.BeginConnect(serverip,serverport,

newAsyncCallback(CallBackMethod),tcpclient);

连接服务器成功后,程序向下执行,上位机软件会向中间件发送应用识别消息并等待服务器的应答,收到成功应答后表明成功与服务器建立通讯。

由于发送的消息种类众多,所以事先封住好一个消息包类message.cs,在该类中有各种静态数据包格式,发送和接收数据包时,直接调用相应对象即可。

message.AppIdentMsgappidentmsg=newmessage.AppIdentMsg();

appidentmsg.head.header=(byte)('@');

appidentmsg.head.len=(byte)9;

appidentmsg.head.id=0;

appidentmsg.head.type=(byt

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1