王梦迪, 杨柳涛
(上海船舶运输科学研究所 航运技术与安全国家重点实验室, 上海 200135)
新型集装箱状态监测系统软件设计
王梦迪,杨柳涛
(上海船舶运输科学研究所 航运技术与安全国家重点实验室, 上海 200135)
摘要:提出一种新型集装箱状态监测系统软件的设计方案。该系统软件以基于Android平台的移动终端软件设计开发为重点,结合云服务技术,实现移动终端实时在线监测集装箱的温度、湿度、烟雾等状态信息。该系统具有实时性、通用性和可扩展性,方便操作。
关键词:集装箱监控; 物联网; Android
0引言
在全球经济带动下,集装箱运输在全球货物流转过程中扮演着越来越重要的角色。应用范围广泛,具有运输成本低、中转方便、标准化程度高和易于切换运输方式等优势,但也存在着运输周期长、运输中温差大和振动剧烈等不稳定因素。当前集装箱信息采集的智能化和自动化相对落后,特别是面对封闭的集装箱,事故发生时运输和管理人员不能第一时间获得内部具体情况,因而会造成经济损失,危及人员安全[1]。
随着科学技术发展,物理世界的联网需求和信息世界的扩展需求催生出了新型网络——物联网(Internet Of Things)。物联网是一种基于互联网和传统电信网等信息承载体,让所有能被独立寻址的普通物理对象实现互联互通的网络。目前全世界掀起了一股研究物联网的浪潮,在集装箱运输行业,使用物联网技术逐渐为行业信息技术发展的必然趋势。对此,利用成熟的无线传感技术和网络技术,提出一种基于Android平台和云服务平台的新型集装箱状态监测系统软件的设计方案,运用该软件实现对集装箱内部信息(温度、湿度、烟雾等)的采集、分析和监测。
1系统介绍
该集装箱状态监测系统主要由数据采集模块、网关模块、云服务平台、移动终端和PC端组成,整个系统的架构见图1。
图1 系统结构图
1) 数据采集模块使用成熟的Zigbee技术,由Zigbee终端节点采集集装箱内部的状态信息,由Zigbee协调器汇聚并通过串口将其传给网关[2]。
2) 网关模块以Arduino Uno控制板为核心,Arduino是个开放源代码的硬件开发平台,核心器件是1块AVR ATmega 328P微控制器,该平台包含1块具备I/O功能的电路板和1套程序开发环境软件。由Arduino控制板负责将Zigbee协调器汇聚的信息上传到云服务平台;通过基于Android平台的应用程序,相关人员可随时通过智能手机或平板电脑查看云服务平台上显示的集装箱状态信息,同时也可在PC端查看其状态信息,实现对集装箱状态的全方位监测。
2系统软件设计
该集装箱状态监测系统软件的设计主要分为网关软件设计、云服务平台设计和Android客户端设计等三部分,模块功能图见图2。其中网关软件设计实现数据处理和数据通信功能,包括汇聚采集数据和连接云服务平台;云服务平台设计主要实现数据存储和事件触发机制等功能;Android客户端设计主要实现连接云服务平台、实时在线监测等功能。
图2 模块功能图
物联网是近年发展起来的新兴技术,包含2层含义,即:物联网的基础和核心仍是互联网,是在互联网基础上的延伸和扩展;其用户端延伸和扩展到了任何物与物之间,进行信息交换和通信。网关将在未来的物联网时代扮演非常重要的角色,是连接感知网络和传统通信网络的纽带[3]。Arduino是伴随着物联网技术的发展而产生,并在其应用中占据着一席之地[4]。Arduino控制板网关软件具有以下2个功能:
图3 setup函数流程图图4 loop函数流程图
(1) 可以与数据采集模块通信,汇聚Zigbee终端采集的数据;
(2) 具有网络功能,连接云服务平台,将数据上传到云服务平台。
以上2个功能也是网关软件设计所要解决的技术难题。在开发网关程序时,将数据采集模块采集的数据准确上传到云服务平台,设置云服务平台是实现该系统的关键。
Arduino控制板的网关程序主要由setup函数和loop函数组成:
( 1) setup函数在程序的开头,只在系统上电或复位时运行一次,完成设置波特率、网络的初始化等功能,其流程图见图3;
(2) loop函数是Android程序的整体,在setup函数结束后进入,该函数是个无限循环的过程,设计中完成读取Zigbee数据、向云服务平台发送数据等功能,其流程图见图4。
HTTP协议提供了多种与服务器交互的方法,该网关中使用HTTP POST或HTTP PUT向云服务平台发送数据。网关向云服务平台发送请求,若该URI存在,则云服务平台将接收请求内容,并修改URI资源的原始版本,这样云服务平台就能实时更新终端采集的数据。
云计算技术以其强大的数据处理能力和数据存储能力逐步走向物联网应用领域,Yeelink开发平台等物联网云服务平台随之出现。Yeelink是一种开放的通用物联网平台,能完成对传感器数据的接入管理、数据存储及将数据呈现给用户。对于开发者来说,Yeelink提供了开发包和工具包,结合开源硬件,使得在无需关注服务器的实现细节和运维情况下,拥有开发物联网化的电子产品的能力[5]。Yeelink具有以下功能:
(1) 接入传感器设备。独有设计的高并发接入服务器和云存储方案,支持用户通过HTTP,MQTT和Socket等方式连接平台,能完成海量的传感器数据接入和存储任务,确保数据安全地保存到互联网上。
(2) RESTful的交互接口设计。Yeelink与开发者之间的交互简洁、透明,能轻松完成数据的添加和存储、设置状态或更新状态等操作。
(3) 事件触发机制。Yeelink平台会根据之前设定的数据阈值发送短信、邮件或微博通知用户数据异常,通过预警提高运行效率。
(4) 双向传输和控制功能。不仅能提供数据的上行功能,而且能实现对传感器的控制。
(5) 基于地理和时间的数据管理。采集的数据具有特定的时间和地点特性,均可由时间轴和地图的形式进行展现。
要完成Arduino控制板与Yeelink平台的数据交互,需注册获取唯一的Api-Key,用来授权对设备、传感器和数据的操作。
(1) 需要在Yeelink中创建1个新设备及为这个设备服务的传感器。表1中Device_id为指定设备的ID,Sensor_id为指定设备传感器的ID。
表1 请求参数设置
(2) 需要创建新数据点,对该URL的1个HTTP POST请求会为指定的传感器创建新的数据点,使用该API为传感器存储历史数据[6]。创建数据点的具体要点说明见表2。
表2 创建数据点要点
Arduino程序中对Api-Key,设备ID,传感器ID,MAC地址和Yeelink域名的设置如下。
#define APIKEY "b376eda31a7cb56880b903a1d69ac92d" // 更换Yeelink Api-Key
#define Device_id ××// 更换设备ID
#define Sensor_id ××// 更换传感器ID
byte mac[] = { 0x××, 0x××, 0x××, 0x××, 0x××, 0x××};//分配MAC地址
char website[] PROGMEM = "api.yeelink.net"; // yeelink API的域名
Yeelink平台支持的传感器包括数值型、图片和GPS等3种类型,通过HTTP的方式访问。其中,数值型传感器的数据格式采用轻量级的JSON格式,完全独立于语言的文本格式,由数值和对象2种结构表示,经过这2种结构可组合成复杂的数据结构。配置好以上参数后,根据Yeelink平台开发文档编写网关程序,即可完成向云服务平台发送数据,即在PC端登录Yeelink网站可看到集装箱状态数据信息。
Android是一款基于Linux内核的操作系统,对基于Linux内核以上的开发工具都是开放的,确保了内容的多样性和可移植性。系统平台本身为应用程序开发提供了良好的框架。Android应用程序将Java语言作为编程语言,将Eclipse作为应用程序开发平台,按照Google Accessory Development Kit标准搭建开发环境。配置好环境变量后,即可进行Android客户端的开发[7]。
Android客户端的设计与开发是一项复杂的工作,在对其功能、模块结构和主程序进行设计时,要考虑到如何设计显示界面,如何将Android客户端与云服务平台更好地交互,如何实时在线监测终端采集的数据信息及如何使整个系统高效运转等一系列问题。同时,还要考虑到界面的友好性,用户操作和查询的便利性等问题。
2.4.1Android客户端功能
(1) 连接云服务平台功能。当用户进入Android客户端时,首先需要使用在Yeelink网站申请的Api-Key登录云服务平台,若输入信息正确,则登录成功,进入集装箱状态监测系统主界面,否则需要重新输入信息。
(2) 实时监测功能。登录成功后,程序跳转到监测界面,即可实时在线监测集装箱内部系统的温度、湿度和烟雾等信息。
(3) 数据异常显示功能。将自定义的预警温度值、湿度值及是否有烟雾等参数存储到SQLite数据库对应的数据表中。若超出上述值范围,主界面会做出提醒,同时Yeelink平台会发送短信和邮件等。
2.4.2Android客户端模块结构设计
软件分层是总体设计阶段常用的软件结构设计方法。明确了Android客户端的功能后,采用结构化方法划分软件层次,将大的系统分成若干层,每层单独实现自身的功能,便于系统的实现和后期维护。这里将Android客户端分为4层结构,从上至下分别为UI层、用户功能层、中间件层和Android应用平台。分层结构图见图5。
图5 分层结构图
从图5中可看出,Android操作系统是客户端开发的基础,给客户端的开发提供了支持。
(1) UI层处于顶层,是与用户直接进行交互的界面,使用户能方便快捷地完成界面操作和用户的业务需求。
(2) 中间件层分为基础功能层和核心功能层。其中基础功能层为核心功能层提供数据存储及管理、网络通信和第三方库等服务;核心功能层为用户功能层提供消息推送、流媒体控制、数据访问代理等核心服务。
(3) 用户功能层是分层结构中最重要的一层,实现客户端与云服务平台的连接;此外,其能实现与云服务平台的数据交换及数据存储,最后将数据信息反馈至UI层。
在Android客户端模块结构中,层与层之间通过接口相互关联、相互合作,每层根据功能划分完成自身功能,从而实现客户端的整体功能[8]。
2.4.3Android客户端主程序设计
Android客户端需对上层云服务平台进行数据访问,以达到监测集装箱状态信息的目的。客户端启动后,会首先加载UI界面,进行初始化操作,进入登录界面后根据配置提示输入Api-Key。若输入错误,则会提醒重新输入;若输入正确,则可向云服务平台发起连接。在成功连接云服务平台后,判断是否有数据请求,只有在有数据请求时才会接收数据,此时监测界面会显示Zigbee节点采集的温度、湿度和是否有烟雾等状态信息。若采集数据超出设置范围,则监测界面会做出预警,提醒用户注意集装箱的状态,防止危险事故发生;若数据正常,则会在延时后继续接收数据,重复上述过程直到退出程序。Android客户端主程序流程见图6。
图6 Android客户端主程序流程图
2.4.4Android客户端界面设计
Android客户端的登录界面见图7,监测界面见图8。
图7 登录界面
图8 监测界面
3应用分析及总结
在Arduino和Yeelink物联网技术开放平台的基础上,提出了一种新型、高效、低成本的集装箱状态监测系统软件设计方案。该设计利用物联网技术、云技术和成熟的硬件平台,将集装箱状态信息上传到云服务平台,相关人员可通过移动终端实时在线获取、掌握集装箱的状态信息,及时对危险情况做出反应。该系统使用方便,快捷,具有较高的实际应用价值,可满足集装箱实时监控项目的实际应用需求。
参考文献:
[1]杨虎. 基于物联网技术的船舶远程监控系统的研究与实现[D].镇江:江苏科技大学,2013.
[2]张米雅,姚建飞. Zigbee技术在船舶机舱监控系统中的应用[J]. 船舶工程,2012,34(Z2):100-102.
[3]黄海昆,邓佳佳. 物联网网关技术与应用[J]. 电信科学,2010(4):20-24.
[4]蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012,20(16):155-157.
[5]杜一腾,迟宗涛. 基于Arduino与yeelink平台的实时环境监测系统[J]. 单片机与嵌入式系统应用,2014(10):26-29.
[6]王家兵. 利用Arduino及Android终端的图书馆机房远程监控系统研发[J]. 现代图书情报技术,2012(10):89-92.
[7]姚尚朗, 靳岩, 等. Android开发入门与实践[M]. 二版.北京:人民邮电出版社, 2013.
[8]佘建伟, 赵凯. Android 4 高级编程[M]. 北京:清华大学出版社, 2013.
The New Software Design for the Container Monitoring System
WangMengdi,YangLiutao
(State Key Laboratory of Navigation and Safety Technology,Shanghai Ship & Shipping
Research Institute,Shanghai 200135,China)
Abstract:An Android-terminal-oriented software scheme for the container monitoring system is developed. It, by means of cloud services technology, provides mobile terminals with the information, covering container temperature, humidity, smoke and other status information, and making them real time container monitors.
Key words:container monitoring; internet of things;android
中图分类号:TP277; U169
文献标志码:A
文章编号:1674-5949(2015)04-044-05
作者简介:王梦迪(1990—),男,江苏徐州人,硕士生,主要从事嵌入式开发的研究。
收稿日期:2015-10-15