信息机房的动力环境参数对于信息系统的稳定性、安全性、可靠性具有举足轻重的作用,对信息机房的环境状态进行有效监测是IT运维的重要任务。传统的IT动环系统多采用“传感器/变速器-仪器仪表-PC专家系统”的有线集中模式,系统庞大、成本高昂、准确性较差,实施困难,利用物联网等新技术能够有效解决传统方式的这些问题,这也成为IT动环系统的研究和发展的方向之一。 本系统利用IPv6网络,基于6LoWPAN(面向低功耗无线局域网的IPv6)和无线传感网技术,设计IT动环监测系统,主要包括监测节点、6LoWPAN传感网络、监测主机(监测中心)三部分部分。系统主要研究6LoWPAN在物联网中的应用、IPv6网络与无线传感网的融合、传感数据监测,拟实现的功能有:配电系统监测、机柜温湿度监测、火灾监测、灯光照明控制、人员红外监测、远程报警等,设计监测中心服务程序,通过IPv6网络部署并进行数据传输和监测。 1 系统总体设计方案 系统主要实现6LoWPAN网络和互联网的相互通信的同时可以实现环境系数的测量,以突出6LoWPAN网络的优势,6LoWPAN网络具有其他无线传感网络所没有的优势,即布置简单、维护方便、功耗低、成本低的优势,可以在没有任何基础设施做铺垫的情况下实现微型设备互联。并且可以实现稳定方便的环境监测系统。设计系统分为两个部分来完成,即6LoWPAN网络和互联网网络两个部分,这两部分通过串口通信的方式来通信,最终实现了6LoWPAN网络与互联网网络的通信问题,6LoWPAN平台网络如图1.1所示,具体的硬件模块如图1.2所示。 图1.1 系统总体设计图 图1.2 实验的硬件模块 2 关键技术 2.1 基于Contiki操作系统的6LoWPAN实现 1)事件驱动机制与Protothreads机制 事件驱动机制和Protothreads机制都是Contiki操作系统的两个主要机制,事件驱动机制是为了降低功耗,Protothreads机制是为了节省内存。其实嵌入式系统被设计出来是为了响应周围环境的变化,我们把这一个个变化可以看做一个个事件,当事件发生时通过操作系统就可以处理这些事件,当事件没有发生时,也就是处于空闲状态时,那么此时嵌入式系统会处于休眠状态,可以降低功耗,我们把这个过程就叫做事件驱动,就相当于中断一样。 传统的操作系统是通过栈保存进程上下文的,不同的进程需要不同的栈进行保存,由于6LoWPAN网络节点的内存很有限,所以传统的操作系统不适用于传感器设备。要解决在有限的内存的情况下保存进程上下文,可以使用 Protothreads机制,通过保存进程被阻塞处的行数(进程结构体的一个变量,unsiged short类型,只需两个字节),从而实现进程切换,当该进程下一次被调度时,通过switch(_LINE_)跳转到刚才保存的点,恢复执行。整个Contiki只用一个栈,当进程切换时清空,大大节省了内存。 Protothreads机制的最大特点就是轻量级,每个Protothreads不需要自己的堆栈,所有的Protothreads使用同一个堆栈,而保存程序断点用两个字节保存被中断的行数即可,即Protothreads机制的RAM很小,没有额外的堆栈。是完全用C语言编制的,没有汇编和其他语言。可以使用操作系统也可以不使用操作系统。Protothreads机制出现已经很早了,只是Contiki OS中应用了这种机制,此外它还可以应用到许多情形中。在使用Protothreads机制时需注意,因其没有保存堆栈上下文,所以没有保存局部变量。那么怎样使用局部变量呢?我们只能够将局部变量定义为局部静态变量,在这种情况下该变量才会在整个生命周期中都存在。 2)定时器 Contiki 提供了四种不同的定时器,同时也提供了定时器初始化、复位、重启和检查的相应函数。第一种是只能保存此时的定时的时间长短的简单定时器。第二种是当定时的时间到了的时候能够产生能够生成相应的定时器事件,之后把这个事件发送到初始化对应的定时器的进程中。第三种定时器叫做回调定时器,主要是当定时时间到时开始调用特定的函数。第四种就是实时定时器,专门在特定的时间段里调用已经指定的函数。 3)微型通信协议栈uIP uIP是TCP/IP的微型协议栈,其实质就是一个程序库,库中主要是TCP/IP的最小配置,其中有UDP(用户协议报协议)、TCP(传输控制协议)、IP、ICMP协议等。程序是用C语言写的,没有其他的语言。uIP被设计出来是为了解决采用TCP/IP机制的嵌入式设备之间通信的。不管是在多任务操作系统中还是在一个单任务系统中,uIP都可以在其中运行。在TCP/IP协议中是按分层设计的,层与层之间的接口的定义较为严密,在实现uIP时为了减少代码的数量,层与层之间进行了充分的耦合。 4)轻量级通信协议栈Rime Rime协议栈是专门为WSN网络设计的,是为了使得WSN网络协议得到简化,代码重用。所以它属于轻量级通信协议栈。同时它也是层次型协议栈。Rime协议栈的优点是可以把复杂的协议分解成多个简单的协议。其支持单跳和多跳通信原语,通信原语与通信原语之间存在着层次关系,可以从简单的匿名广播到Mesh网络路由。 5)模拟器Cooja Cooja是Contiki操作系统的网络模拟器。在模拟器Cooja上可以进行大型Contiki节点和小型Contiki节点的仿真。节点可以在硬件层面进行仿真,速度有些慢,但可以精确检测系统的行为,或在一个不太详细的层面上,速度会更快,并允许更大的网络仿真。仿真通过后才下载到节点上进行实际测试,有利于发现问题,减少调试工作量。 (1)启动Cooja 开启虚拟机后,双击虚拟机桌面的Cooja快捷方式,启动Cooja。也可以通过打开终端窗口输入cd contiki/tools/cooja命令转到Cooja目录,再输入Cooja启动命令ant run按回车键的方式打开Cooja。 (2)Cooja的编译过程 Cooja在第一次启动时需要进行自身编译,编译完成后会弹出一个蓝色的窗口。 (3)Cooja的仿真过程 单击File菜单,并单击New simulation之后打开了Create new simulation对话框。在该对话框中,可以选择给仿真创建一个新名字,后点击creat按钮,这样就创建了一个新的仿真;屏幕的左上角是Network窗口,显示所有模拟网络的节点,如果没有仿真的节点,窗口是空的。在屏幕的底部有Timeline窗口,在该窗口中会显示仿真中随着时间推移的所有通信事件,方便理解网络中到底发生了什么;Mote output窗口在屏幕的右边,显示所有节点的所有串口打印输出;Notes窗口在屏幕右上角,可以对仿真进行备注;在simulation control窗口中,可以进行开始、暂停和重新加载操作。 2.2 基于CoAP协议的6LoWPAN节点设计 CoAP的请求和响应在发送之前不需要事先建立连接,而是通过CoAP信息来进行异步信息交换,CoAP协议使用UDP进行传输。CoAP采用和HTTP协议相同的请求响应工作模式,CoAP协议共有4中不同的消息类型: (1)CON:需要被确认的请求,如果CON请求被发送,那么对方必须做出响应; (2)NON:不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应; (3)ACK:应答消息,如果接受到CON消息的响应; (4)RST:复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。 虽然CoAP协议目前还在制定当中,但是在Contiki嵌入式操作系统已经支持CoAP协议。在客户端安装有可以实现CoAP协议的上位机监测端,通过CoAP协议搜索所需要的信息,就可以得到无线传感网上传的信息。整个设计有三个节点,其中核心是6LBR节点,在整个无线传感网中它相当于边缘路由器,又相当于6LoWPAN网络的网关。第二、三个节点相当于CoAP协议的服务器节点,其通过边缘路由器节点可以把采集到的数据上传到上位机监测端,CoAP消息结构如图2.1所示。 图2.1 CoAP消息结构 2.3 6LBR网关设计 6LBR网关就是本系统的边缘路由器,是6LoWPAN网络的网关。6LBR网关使得WLAN(IPv6)与一个WSN(6LoWPAN)网络通过RPL路由连接起来就形成了整个网络。以6LoWPAN开发板为基础,在Contiki操作系统上运行6LBR应用程序和UDP服务器程序。这样就可以构成IPv6和IEEE802.15.4协议之间的一个适配层,可以使得两种类型的网络互通。RPL路由执行覆盖NDP的功能,在NDP功能的基础上又做了很大的改进。Contiki实时操作系统仅仅只使用一个接口所以引进了数据包过滤器。可以把以太网数据包和6LoWPAN网络数据包分离开,然后再进行数据交换。6LBR路由原型如图2.2所示,两个数据过滤原理如图2.3所示。 图2.2 6LBR路由原型 图2.3 两个数据过滤原理 根据6LBR网关所要实现的功能,在程序中设计了七个进程。每个进程有自己特定的功能,Web服务器进程可以实现对Web的访问。UDP服务器进程和UDP客户端进程是相对的,计算机是UDP客户端,6LBR网关就是UDP服务器端,通过客户端就可以访问服务器端。所以整个过程的核心就是CETIC_6LBR路由及网关处理。 //Web服务进程 PROCESS_NAME(webserver_nogui_process); //UDP服务器进程 PROCESS_NAME(udp_server_process); //UDP客户端进程 PROCESS_NAME(udp_client_process); //CoAP协议服务器进程 PROCESS_NAME(coap_server_process); //定义了一个cetic_6lbr重启事件 process_event_t cetic_6lbr_restart_event; //cetic_6lbr事件进程 PROCESS(cetic_6lbr_process, “CETIC Bridge process”); //定义一个cetic_6lbr_process进程指针数组 AUTOSTART_PROCESSES(&cetic_6lbr_process); 3 测试结果 3.1 测试平台的组建 采用的开发平台是大连三木电子科技有限公司的基于Contiki3.0 操作系统的SM14Z2538DK3嵌入式6LoWPAN开发套件。该套件包含三个CC2538节点、一个ENC28J60以太网接口模块、三个电源适配器、三个USB转串口模块。任何一个CC2538节点与ENC28J60以太网接口模块连接都可以作为边缘路由器,测试环境网络拓扑如图3.1所示,各节点IPv6地址见表3.2。 图3.1 测试环境网络拓扑图 表3.2 SM14Z2538开发板与USB转串口引脚连线说明
名称 IPv6地址 计算机终端 bbbb::75d9:45fc:12c9:8565 6LBR路由节点 bbbb::100 CoAP服务器及温湿度采集节点1 aaaa::212:4b00:5af:81a1 CoAP服务器及温湿度采集节点2 aaaa::212:4b00:5af:8269
操作系统软件采用的是Ubuntu开发平台,在虚拟机中装有InstantContiki2.7嵌入式操作系统,同时在虚拟机中安装了JLink_Linux,用于生成.bin可执行文件和给6LoWPAN节点中下载程序。 |