随着传感网络、嵌入式技术和无线通信等物联网技术的不断成熟,离散制造业在信息化过程中也越来越多的引入物联网系统.物联网系统的引入,可以有效地帮助企业提高工艺流程的精确度、降低人工成本和提高效率.但企业物联网地引入是分阶段的引入,不同阶段引入不用的物联网应用,而这些不同阶段引入物联网应用都是独立开发,这些应用通常采用SOA架构进行设计,应用之间接口各异且契约不统一,导致应用之间孤立,信息流通困难,造成了整个系统紧耦合扩展性差、并且复杂度高,同时存在设备异构等缺点[1].基于这些离散制造业现有的问题,提出了基于REST架构风格的离散制造业物联网平台.将传感节点和节点的状态数据抽象成资源,采用REST架构风格组建应用,设计适合离散制造业的物联网平台原型,便于整合应用,屏蔽设备异构,并描述了具体实现以及验证.
1相关工作
1.1REST技术
REST(Representationalstatetransfer,表述状态转移)是由RoyThomasFielding博士于2000年在其博士论文中作为组建大规模分布式超媒体系统的架构风格首次提出的[2].REST架构风格将Web中的所有事物抽象成资源的集合,使用统一的资源标识符(URI)对资源进行标识,利用HTTP动词(GET,POST,PUT,DELETE等)作为统一接口对资源进行操作,同时客户端和服务器之间的交互式无状态的,但是交互的信息具有自描述性.所有的这些特性为构建一个低耦合、低复杂度及高扩展性的Web应用提供了良好的架构约束.在REST被提出之前,也有一些架构风格也能实现统一接口的特性,如SOAP.但REST具有更好的效率与可扩展性.REST的统一接口是基于HTTP这一广泛使用的协议的接口;而SOAP使用的是自定义的接口[3-4].REST支持多种的数据交换格式,如XML,JSON,HTML等,但SOAP是一种基于XML的协议.当Web请求需要跨越两个或两个以上的Web服务时,可能会引起通信延时,RESTWeb服务相较于SOAPWeb服务能减小这种通信延时[5].
1.2REST与物联网
目前,已经有一些研究者将REST思想应用在物联网上,文献[6]是基于BigWebServices采用SenseWeb将传感器等设备集成到Web服务中,但BigWebServices最初是为了整合分布式系统异构的API而设计的,会随着物联网应用的整合而变得复杂.随着android系统与智能移动设备以及Arduino与RaspberryPi等开源硬件的发展,文献[7-9]将REST物联网应用到了这些方面.文献[10-12]将REST应用于物联网平台,但未涉及到具体行业业务.文献[13]将REST应用到了智能农场物联网,文献[14]将REST物联网应用到了地下作业安全方面.不同于以往的工作,实现了一个针对离散制造业基于REST架构风格的物联网平台的原型,解耦了离散制造业中不同的物联网系统,屏蔽了底层网关及节点与平台之间的异构,并提供了统一的接口.
2离散制造业物联网总体设计
离散制造业的物联网系统是一个分层系统,各个层次之间通过统一的REST风格接口进行信息交流,可以有效的降低各层系统之间的耦合性.下面将详细描述系统的各个层次,并重点描述系统服务平台的设计思想,以及层次统一接口的设计方式.2.1离散制造业物联网体系结构离散制造业的物联网体系结构,遵循着传统物联网的体系结构,如图1所示。感知设备层:该层的主要职能是采集生产中的实时数据并将这些数据发送到网络接入层.该层的设备是传感器节点,可以是Zigbee节点(如XB24-API-001J节点),也可以是支持RESTAPI的节点.Zigbee节点将采集到的数据传输到网络接入层进行处理.而支持RESTAPI的节点,则可以直接将采集好的数据解析后通过统一的API接口发送到服务平台层,能够省去网络接入层的网关,减少传输开销.但支持RESTAPI节点的价格比较昂贵.网络接入层:该层是服务平台层与感知设备层之间的数据通道.该层的主要职能是收集感知设备层采集的数据,将这些数据进行整合(如数据分类,格式转化等),并将整合完成的数据通过以太网转发到服务平台层.同时也对外提供RESTAPI,服务平台可以通过网关提供的RESTAPI,将节点的配置信息发送网关,网关将这些信息转化成节点的配置命令,进而动态的配置节点信息.服务平台层:是整个物联网体系最重要的部分.服务平台提供了一系列的统一接口.这些统一接口能够减小行业应用层系统之间的耦合度,能灵活的为企业提供不同的应用服务;对下层的物理设备,这些统一接口能够接收不同节点传送的感知数据,同时也能为用户提供统一的节点配置方式,实现了不同应用与传感设备之间的灵活组网,也屏蔽了物理节点的多样性给平台带来的影响.服务平台的主要模块如下:1)路由模块,负责处理平台的通信功能.不论是接收节点或网关的信息,或是为行业应用提供数据,对外REST式Web服务API都是由路由模块去的驱动.可以说是路由模块定义了服务平台的访问方式.2)数据处理模块,负责整个平台的数据处理,包括了将接收到的节点数据解析存储,根据行业应用层的业务需求对数据进行分析、筛选以及序列化后再将数据提供给业务使用.3)设备管理模块,为设备提供了动态的注册、配置与注销功能.该模块通过对外的API,接收设备的信息,不论是节点发送的注册信息,或是用户发送的动态配置信息或注销信息.该模块会对这些信息进行分析,在对这些信息进行存储或转发.4)缓存模块,对数据的查询结构进行缓存,减小了对数据库的IO读写,优化了应用数据查询的效率.5)日志管理模块,提供了对平台故障的记录及平台访问的记录,为系统错误恢复提供了依据与保险.行业应用层:该层是针对离散制造业行业特点所创建的应用集合.如制造资源计划(Manufactureresourceplanning,MRPII)、企业资源计划(Enter-priseresourceplanning,ERP)和制造执行系统(Manufactureexecutionsystem,MES)等系统.这些系统实现了企业生产的自动化与信息化,提高了企业的生产效率.2.2REST接口设计与实现REST架构风格将所有的事物都被抽象成资源,需要有为每个资源分配一个URI,来对资源进行标识.下面以节点实时数据收集这一离散制造业物联网最基本的功能为例.节点采集的实时数据对应的URI就是http://[DOMAIN]/realtime/nodes/{id}/.URI中的[DOMAIN]表示部署平台服务器的域名,也可以是该服务器的IP地址.上述的URI分为两类:1)http://[DOMAIN]/realtime/nodes/是集合类型,表示整个平台收集的节点实时数据的集合.2)http://[DOMAIN]/realtime/nodes/id/是单一类型,该URI带有特定的唯一id,指定了与该id对应的某一条实时数据.REST接口除了需要每个资源的URI之外,还需要指定资源的访问方式.REST架构风格是由HTTP协议驱动的,通过HTTP协议定义GET、POST、PUT及DELETE四种方法对资源进行操作.例如对上述的URIhttp://[DOMAIN]/real-time/nodes/{id}/进行这四种方法的操作:1)GET方法:获取实时数据,对不带id的URI,获取到的是整个实时数据集合,带有id的URI则获取到了该id对应的特定的某条实时数据.2)POST方法:该方法只适合http://[DO-MAIN]/realtime/nodes/,表示传感器采集了新的实时数据,向集合中添加实时数据.3)PUT方法:该方法只适合http://[DO-MAIN]/realtime/nodes/id/,表示修改指定的实时数据.4)DELETE方法:该方法表示删除需要的实时数据,不带id则表示删除所有的数据(是一种比较危险的行为,一般不推荐实现),带有id则表示删除指定的某条实时数据.同时接口可以携带查询参数,如节点实时数据,根据车间筛选,可以携带workshop_id的查询参数:http://[DOMAIN]/realtime/nodes/?workshop_id=1,之所以采用查询参数的方式,而不是增加接口目录的深度,是因为增加接口目录深度会给整个接口的实现带来巨大的工作量,同时接口设计复杂度增加,不易维护,灵活度会较差.在需要根据多个条件筛选时,接口的意义会变得模糊.基于这些原因,在后面实现上,将筛选功能放到查询参数中处理.
3系统实现
电机制造是一个典型的离散制造行业.下面将以浙江迪贝公司物联网系统的开发部署为例介绍系统的具体实现.如图2所示,生产决策者可以根据公司接收到订单情况安排各个车间的车间生产计划,每个车间又可以根据车间计划的制定相应班组计划,然后车间根据这些班组计划进行生产.对每个车间的生产的数据进行采集,对这些数据进行统计分析,输出到看板反馈给生产决策者,决策者可以根据这些反馈,对生产过程与计划进行掌控,必要时可以进行调整,以对生产资源优化.
3.1路由与数据处理模块
整个平台架构利用了Python下Django框架进行了实现,Django是一个采用了MVC模式并有着强大路由功能的高效Web开发框架,也包含了类似缓存模块与日志管理模块等常见模块;并采用了DjangoRESTFramework框架作为补充,在Djan-go的基础上能够高效方便的搭建RESTAPI同时提供了各种数据格式的序列化,提高开发效率.在整个平台的实现中,各个功能是由一个个的Djangoapp(应用)进行积木式搭建而成的,一般每个app中都包含了这三个文件:models.py、views.py与urls.py,分别对应于数据表的映射模型、视图显示控制(在API中用来处理API的具体实现)以及路由配置.系统项目组织结构如图3所示.将整个平台取名为miot(Motorthingsofin-ternet),由于系统仅用于内网,这里将平台对应的域名为一级域名dibei.com/,这是所有程序的对应入口,也是资源URI根目录.之后对应的app分为两类.一类是专门用来处理不同物联网web应用的,对应于上图的apps以及之后的分支.如制造执行系统对应于上图名为MES的app,其访问地址是mes.dibei.com这个二级域名开头的部分.另一类是专门提供对外的统一接口的,对应于图3的apis以及之后的分支.其访问方式都是www.dibei.com/api/为前缀,之后的分支则表示资源的具体描述.如realtimeapp表示实时数据的目录,用以存储实时数据这一类型的资源,如节点信息nodes/.3.1.1通过路由配置资源接口的访问路径每个app的路由会根据api路径来处理.若当前目录不是路径的终点,则将访问转到下一目录,当到达api路径的终点,则将该api的访问引导到接口的具体实现中(及对应的Views中).http://www.dibei.com/api/realtime/nodes/{id}/接口的访问显示在miotapp中将访问转到a-pisapp中url(r'^api/',include('apis.urls')),在apis中又将访问转到realtimeapp中url(r'^realtime/',include('realtime.urls')),在realtimeapp中,到达了api路径的终点,调用views.py中接口的具体实现url(r'',include(routerRealTime.urls)),router-RealTime.register(r'^nodes',NodedataViewSet).路由的访问流程如图4所示.3.1.2实现接口功能完成数据处理在views中实现接口的具体操作,利用DjangoRESTFramework快速的实现了接口的四个操作动作,并为接口的输出数据做了序列化.如果需要应付复杂的业务,也可以很方便在ViewSet类中覆写GET、POST、PUT与DELETE四个操作动作来完成复杂的业务.
3.2设备管理模块
由于智能设备的发展普及,以及Arduino与RaspberryPi等开源硬件的发展,网关或节点的功能越发的强大,可以在网关或者直接在节点中布置一个小型的Web服务,这样便可以使用统一的REST接口通过网关管理节点或者直接管理节点,同时实现了关注点分离,将节点的配合方式从服务平台中转移到节点自身,避免了由于节点种类的增加,导致设备管理模块的复杂度的增长.在节点连接上物联网平台时,会向http://www.dibei.com/api/realtime/sensers/[id]/发送POST请求,并将自己的信息注册到管理平台,该信息必须包括节点自身的id与ip地址.
3.3结果展示
REST架构风格的物联网平台能够为应用提供服务数据.通过统一接口,应用能够快速方便地获取所需的数据,不必考虑平台的限制,从而为跨平台的应用实现提供了简便的基础.下面以电机生产中高冲这个工序为例:在每次高冲动作完成时,设备的继电器会产生一个脉冲信号,表示动作完成.采用ArduinoUNOR3作为传感节点处理单元,传感节点到智能网关之间采用ZigBee作为传输协议,传感节点传输模块采用了Digi公司XBee模块.而智能网关架构在Ti-ny4412开发板上,采用Android操作系统.传感节点采集每一次的高冲动作,按照节点设定的比例转化成对应的产品数,数据从传感节点经智能网关通过统一接口上传至服务平台,车间看板程序通过统一接口向服务平台请求整合过的生产数据,展示了生产的实时数据.图7的车间看板Android应用展示了高冲工序的实时生产数据.
4结论
提出了基于REST架构风格的离散制造业物联网平台,将REST架构风格应用到了离散制造业的物联网系统中,构建一个松耦合,复杂度低且高效的物联网平台,可以将各种不同的应用以积木的方式搭建,同时提供的统一接口为各种行业应用的跨平台开发提供了便捷的基础,更好的为离散制造业的生产提供信息化支持.但目前平台的研发还处于探索实验阶段,应用中,对于生产线的节点部署并未对所有的生产过程进行部署.服务平台所有的缓存模块是Django自带的模块,而日志管理模块使用了ApacheHTTPServer与Django的自带模块,还未在这些基础上进行优化.这些问题有待进一步的研究和解决.
作者:姚明海 陈占省 顾勤龙 单位:浙江工业大学 计算机科学与技术学院
相关专题:广州大学学报 中国典籍与文化编辑部