APP下载

基于云平台的机器人监控系统设计①

2020-10-19徐建明俞俊铭董建伟

高技术通讯 2020年9期
关键词:客户端界面服务器

徐建明 俞俊铭 董建伟 俞 立

(浙江工业大学信息工程学院 杭州 310023)

0 引 言

随着德国“工业4.0”的推出,工业生产进入到使用信息化技术促进产业变革的时代,同时转向云计算是互联网发展面临的一个重大改变,而云平台则是该改变中重要的一个环节,因此研究基于云平台的机器人监控系统显得越来越重要。

目前机器人监控系统多数采用客户端/服务端的模式进行搭建,如张爱民等人[1]基于TCP/IP协议设计工业机器人远程监控与诊断系统。这种模式下,远程端需要安装客户端,系统扩展性降低;另一种模式是通过访问浏览器获取数据并查看设备运行状态。Sallinen等人[2]提出基于Web用户界面的工业机器人远程监控与维护的框架。骆晓娟等人[3]设计基于AJAX和浏览器/服务器(browser/server,B/S)构架的实时监测系统。徐建明等人[4]设计基于Web的工业机器人3D虚拟动态监控系统。同时随着云平台和云计算的发展,基于云平台的机器人监控系统成为物联网未来的发展方向之一。Gubbi等人[5]研究物联网未来的发展方向。Ji等人[6]提出基于云的物联网城市停车系统。Douzis[7]提出基于云的模块化和通用物联网管理系统。Baker等人[8]研究基于云的物联网系统的组合算法。Dinh等人[9]提出云与面向移动云计算应用的物联网基于位置的交互模型。同时,消息队列遥测传输(message queuing telemetry transport, MQTT)作为即时消息协议逐渐被广泛用于物联网。Schmitt等人[10]提出通过MQTT协议作为物联网数据交换的桥梁。在此基础上,机器人3维展示被逐渐运用于监控系统中。Mostefa等人[11]设计一种基于虚拟现实的移动机器人远程操作系统。杨硕等人[12]设计基于虚拟现实的一对多远程康复训练机器人监控系统。

随着数据量不断扩大,基于本地服务器的监控系统对硬件资源的需求会不断增大,本文以客户端/服务端(client/server,C/S)模式与B/S模式相结合的方式设计一种基于阿里云的机器人监控系统,相较于上述传统方式,云平台具有更好的稳定性、容量扩展性,可按照需求为用户定制服务资源。本系统由本地客户端和Web远程监控端组成,其中本地客户端基于TCP/IP协议和OPC统一架构(OPC unified architecture,OPC UA)协议与机器人控制器进行数据通讯,通过搭建MySQL客户端存储数据,在此基础上,基于MQTT协议与云端进行数据交互。Web远程监控端采用前后端分离的方式搭建,相较于传统机器人监控系统的开发方式,前后端分离的方式具有开发周期短暂的优势,同时更容易发现系统运行时出现的错误。后端基于Django rest framework框架搭建,前端采用Vue框架搭建,大屏展示界面基于阿里云的DataV模块搭建,3维画面展示界面基于WebGL[13]和Three.js技术搭建[14]。

1 系统整体框架

本系统以基于CoDeSys开发的SCARA机器人控制系统为研究对象进行搭建,包括本地客户端和WEB远程监控端,系统框架图如图1所示。

图1 系统框架图

图1中的设备层与设备操作层通过机器人控制器进行衔接,机器人控制器的运动控制程序以及OPC UA服务器由Codesys PLC软件编程工具进行编写,通过工业以太网(EtherCAT)解决采集机器人相关物理数据[15],通过搭建OPC UA客户端来解决SCARA机器人的数据交互。

本地客户端基于TCP/IP协议搭建,通过OPC UA协议解决与控制器的数据交互问题,基于MySQL的嵌入式应用程序解决数据存储问题,其中数据库作为监控系统前后端的信息载体,存储SCARA机器人运动过程中产生的各种信息,同时基于MQTT协议解决与云端的数据交互问题,MQTT协议具有功耗低、轻量级及易于实现的优点,是物联网的重要组成部分。

WEB远程监控端由图1中的平台服务层,应用服务层和门户层组成,采用nginx[16]与uwsgi技术将远程监控程序部署于阿里云服务器,程序部署完成后,用户可以通过浏览器随时随地查看机器人历史数据并进行实时监控。

2 本地客户端设计

本地监控端采用C/S(客户端/服务器端)模式进行搭建,主要由3部分组成,即基于OPC UA Client[17]的数据采集模块、基于MySQL的数据存储模块和基于MQTT与云平台的数据交互模块。

2.1 基于OPC UA Client的数据采集模块

传统的工业自动化解决方案由于在设备间通信上采用不兼容和不可互操作的差别化标准,因而存数据交互的困难。OPC UA架构采用客户端/服务器模式和发布者/订阅者模式为数据交互提供框架,在地址空间定义节点类并实例化,通过层次结构进行访问,以简化客户端访问。C#语言可以实现OPC UA的自动化接口,提供自动配置、过程控制和数据存取的接口,在窗口界面中搭建用户输入和响应事件模块,在工作线程中通过订阅方式对数据进行采集。在功能上实现浏览OPC UA服务器、修改数据、订阅数据,具体实现方式如下。

(1)浏览OPC UA服务器。在窗口界面拖入panel容器控件,在主程序中引用“Opc.Ua.Client”库,在工作线程中使用FormBrowseServer form = new FormBrowseServer()函数,该函数通过结构层次的方式访问服务器,查看服务器的节点状态,从而获取服务器的内容,使用panel.Controls.Add(form)函数,该函数是C#语言的内置函数,用于将服务器的内容显示在panel容器中,供用户浏览和使用。

(2)修改数据。在工作线程中使用private OpcUaClient opcUaClient= new OpcUaClient()函数,该函数为opcua.dll函数库的内置函数,用于将OPC UA客户端实例化,工作线程根据该实例对象进行节点操作、节点查阅、节点订阅以及其他操作,线程中使用opcUaClient.writeNode(this.NodeId.Text,this.writeNodeId.Text)函数,该函数通过结构层次查找节点,依赖TCP/IP协议修改节点数据,从而实现修改机械臂运动参数等数据,并控制机械臂。

(3)订阅数据。在工作线程中编写SubCallback()函数,该函数通过调用者(Caller)向回调函数(Callee)发出调用,被调用函数启动后,不需要被调函数执行完毕,程序执行流立即返回到调用者继续执行,从而实现节点订阅,并对订阅的节点绑定listView1_DragDrop()函数,该函数根据C#控件内容的可拖动原理,实现对数据节点名称的拖动,编写AddSubscription()函数,用于添加节点,并将每个节点绑定上文中的SubCallback()函数,实现对批量节点的订阅。工作程序流程图如图2所示。

图2 数据订阅程序流程图

2.2 基于MySQL的数据存储模块

MySQL[18]是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中以增加速度并提高灵活性,并为C#编程语言提供了API接口,同时能够作为一个库嵌入到其他软件中,使嵌入客户端的方式实现数据的存储得以实现,不仅可以提高数据的实时性,也能降低本地客户端的内存空间。

本数据存储模块通过C#语言进行搭建,并嵌入到本地客户端,数据库表格采用树状关系图的方法进行设计,使用多表关联方式建立机器人对象表、设备表、采集点数据表,该设计方法优势在于扩展性高,无需频繁修改数据库。在功能上实现数据解析,数据筛选和数据存储,如图3所示,具体实现方式如下。

图3 数据存储模块功能图

(1)数据解析。将从控制器接收到的数据按照通讯协议解析成当前系统实际的物理值,在工作线程中使用value.WrappedValue.TypeInfo.BuiltInType函数,该函数有2个属性,数组和基础类型,通过返回值判断数据类型、数据格式和数据量,从而得到该数据包含的物理量和数值单位。

(2)数据筛选。在窗口界面中拖入comboBox控件和ListBox列表框控件,用于存放采集点信息,在工作线程中使用comboBox.Items.Add(sArray[s-1])函数,该函数用于在comboBox控件中添加新的采集点,同时使用infos.Add(new database(){data=""})函数,该函数通过创建新的数据对象,将采集的数据筛选后添加至列表框控件中,便于用户对数据的管理和分类。

(3)数据存储。在本地客户端主程序中引用“MySQL.Data.DLL”库,在工作线程中使用MySqlConnection conn = new MySqlConnection()函数,该函数用于创建MySQL Client实例对象,对实例对象调用conn.Open()函数创建MySQL通道,编写MySqlCommand cmd1 = new MySqlCommand(" select * from users_userprofile ", conn)函数,该函数根据上文创建的实例对象(conn)连接MySQL数据库,编写MySqlCommand cmd1 = new MySqlCommand("select * from device_device order by id DESC limit 1", conn)函数,该函数用于将数据存储至云端MySQL数据库,同时添加存储时间,用户信息等,函数内部参数包括实例对象,采集点对象和采集点数据。

2.3 基于MQTT与云平台的数据交互模块

目前基于Http协议的物联网系统开发的方式[19]被频繁采用,但在嵌入式系统中或网络带宽昂贵的环境下,Http协议并不适用,MQTT做为一种低开销、低带宽占用的即时通讯协议,MQTT在工业物联网、小型设备等方面有广泛的应用。因此本客户端选择采用MQTT协议搭建数据交互模块,具体实现方式如下。

(1)在云端搭建MQTT服务器,用于主题消息接收、发布。使用“apollo create brokerServer”创建服务器实例,使用“apollo-broker.cmd run”启动服务器,并且Apollo提供后台管理页面,方便管理和调试。

(2)建立MQTT服务,在客户端程序中添加引用“MQTTnet”,用于激活MQTTnet功能。

(3)在工作线程中使用private MqttClient mqttClient函数,该函数用于创建MQTT实例对象,连接MySQL数据库。

(4)利用C#自带控件库在窗口界面中拖入textBox等控件,用于在客户端中搭建MQTT用户操作界面。

MQTT模块的后台工作线程为编写Task.Run(async()=>{awaitConnectMqttServerAsync();})函数,该函数用于连接位于云端的MQTT服务器;通过编写MqttApplicationMessage()函数,该函数用于将采集到的数据实时地传输到位于云端的MQTT服务器;同时通过mqttClient.PublishAsync()函数,该函数用于订阅所需要的数据,程序流程如图4所示。

图4 MQTT程序流程图

整个工作流程如图5所示,当客户端连接到机器人控制器后,通过OPC客户端将采集到的数据以MQTT的形式实时地传输到云端,位于云端的MQTT服务器接收到数据后,做出处理,发布该主题,同时位于WEB端的MQTT客户端订阅该主题,获取数据。

图5 MQTT工作流程图

3 Web远程监控端设计

Web远程监控端采用B/S(浏览器、服务器)架构的方式实现,使用阿里云作为Web服务器。传统的Web框架过于复杂,难以满足快速开发的要求,而Django框架以其便捷、快速、高效的特点而深受好评。综上所述,后端基于Django rest framework框架[20]进行搭建,以JSON[21]的格式提供数据接口。前端基于Vue框架进行搭建,Vue是一套用于构建用户界面的渐进式JavaScript框架[22]。在此基础上,Web远程监控端针对SCARA机器人,搭建3维动画界面和绘制曲线图。Web系统分为4个层面:

(1)门户层。即网页浏览,通过统一认证授权提供业务服务统一注册、统一登录入口。

(2)API接口输出层。该层主要包括设备资产管理,通过设备数据采集与建模,以API接口的形式提供给前端使用。

(3)业务逻辑层。该层主要为各业务应用系统的构建和运行提供技术支撑,并为各应用服务提供计算、数据的调度及数据管理服务。

(4)数据库操作层。该层主要是获取数据库中的数据。通过Django框架中的model操作与MySQL数据库进行交互,使用ModelViewset类对数据库进行增删改查操作。Web系统框架如图6所示。

图6中的门户层即前端可视化界面;图6中的API接口输出层、业务逻辑层和数据操作层组成后端服务程序,用于数据验证、数据查询,用户验证等操作。整个Web系统包括用户管理功能块,数据查询功能块,实时监控功能块和3维动画展示功能块。

图6 Web系统框架图

3.1 用户管理

用户管理采用目前较流行的session与token机制进行验证,使用JSON Web Token(JWT)作为跨域身份验证的解决方案,在双方之间使用JSON对象进行数据传输,该种方式通过使用密钥(HMAC算法),RSA或ECDSA 的公钥/密钥键值对进行认证和信任,具有较高的安全性,原理如图7所示。用户管理模块实现用户短信验证注册和用户验证登录功能,具体实现方式如下。

图7 JWT原理图

(1)用户短信验证注册。后端Django程序中编写YunPian()类方法,该函数调用底层数据传输协议,并依赖第3方短信服务商,实现短信发送功能,编写generate_code()函数,调用随机数生成函数,生成4位验证码,编写UserRegSerializer()类方法,该函数实现的原理是通过获取用户传输过来的验证码,与上文中生成的验证码作比较,从而验证短信验证码和密码格式的正确性,编写SmsCodeViewset()类方法,将通过验证的用户名和密码存入数据库;前端VUE程序[23]中编写register组件,用于搭建用户注册界面,同时使用Html5, CSS3, JavaScript, jquery[24]美化界面。编写register()函数,通过后端生成的api接口,上传数据,实现用户注册功能。

(2)用户验证登录。编写UserViewset()类方法,用于获取前端上传的用户名和密码信息,编写UserDetailSerializer()类方法,用于验证用户名和密码正确性,若正确,使用Response(re_dict)函数返回session与token给前端用户界面,同时在settings配置文件中导入JWT,用于启用该登录验证功能块,通过JWT自带的登录验证的api接口url(r'^login/', obtain_jwt_token)完成用户登录功能;前端Vue程序中编写login组件,搭建用户登录界面,建立store状态管理器,用于存储用户登录的信息,如session与token,实现用户登录功能。

3.2 数据查询

数据查询页面以节点树的形式展现,该方式可以简洁明了地展示所有设备和采集点,页面上通过查询设备,查看设备下的所有采集点数据,通过曲线图的形式展示数据。数据查询模块在功能上设计实现用户数据绑定,数据筛选和数据展示等3大功能,如图8所示,具体实现方式如下。

图8 数据查询模块功能图

(1)用户数据绑定。编写DeviceViewset()类方法,该函数通过遍历url配置中的as_view字典参数,获取元组类型的items(),从而获取用户信息,编写SensorSerializer()类方法,该函数用于获取该用户下的设备数据和采集点数据,以JSON格式提供给前端,同时在url.py文件使用路由注册函数,给前端提供api接口;前端VUE程序中编写device组件,搭建用户数据可视化界面,通过编写getDeviceInfo()函数,该函数用于获取相关数据,实现用户数据绑定功能。

(2)数据筛选。编写CollectionPointViewset()类方法,该函数通过遍历所有字典参数获取所有采集点数据,编写collectionFilter()类方法,该函数通过接收"|"前的变量值(value)和":"后的参数(args),返回一个值。从而解决时间筛选的问题,在该基础上,编写filter_backends()类方法,用于实现数据排序,数据过滤和数据查询等功能。前端VUE程序中编写deviceBrowses组件,搭建用户数据筛选界面,如时间段筛选,设备名称筛选等,在此基础之上编写getCollectionName=params=>{return,axios.get(`${local_host}/collectionpoint/`, { params: params })}函数,将筛选条件发送到后端程序,后端获取筛选条件信息后,实现数据筛选功能。

(3)数据展示。在Vue框架中引入jqplot功能包,该功能包用于在前端页面绘制曲线图,通过调用MYM.jqplot函数,在该函数中添加数据列表,axes、axesDefaults、highlighter、cursor、title等参数来绘制曲线图;服务端使用流行的rest api接口的形式给前端提供数据。前端页面通过axios()函数向服务端请求数据,服务端首先查看客户端是否已经登录,如果有则提供对用户开放的api接口。随后继续监听是否有具体请求某个api接口,如果有则将采集到的机器人最新数据封装成JSON格式发送到客户端,实现数据展示功能。

3.3 数据实时监控

数据实时监控展示主要分为自定义Web界面的数据监控与阿里云DataV的数据监控。

自定义Web界面数据监控是通过MQTT协议实现,实现与MQTT服务器交互、采集点筛选和数据实时显示等功能,如图9所示,具体实现方式如下。

图9 数据监控模块功能图

(1)与MQTT服务器交互。在前端Vue项目中引入Paho功能包,用于实现MQTT客户端功能,生成MQTT客户端前先编写用于连接MQTT服务器的参数列表,如服务器IP地址、端口号等,具体为ServerUri=’mq.tongxinmao.com’ServerPort=18832;TimeOut=5;KeepAlive=100;CleanSession=false;SSL=false;在此基础上调用new Paho.MQTT.Client函数,创建MQTT Client实例,编写onConnect()函数和onConnectionLost()函数用于登录和断开MQTT服务器;编写WriteToStatus()函数,用于描述MQTT状态;编写onMessageArrived()函数,用于接收MQTT服务器的消息,实现与MQTT服务器数据交互功能。

(2)采集点筛选。在前端Vue项目中编写getChartAllData()函数,从MQTT服务器获取所有上传的数据,编写editChartData()函数,用于移除绘制到曲线图上的部分曲线,编写collectData:function()函数,用于获取实时数据,实现采集点筛选功能。

(3)数据实时显示。搭建在数据采集客户端的MQTT Client,不断将数据以0.5 s间隔上传到MQTT服务器,位于前端界面的MQTT客户端订阅MQTT服务器上该主题,获取数据,编写this.plot= MYM.jqplot(‘UserChart’, SeriesData)函数,将采集到的数据实时显示在表格和曲线图中,通过修改seriesDefaults、axes、legend、highlighter等参数,更改曲线样式,实现数据实时显示功能。

阿里云DataV的数据监控界面是通过使用阿里云DataV中的组件,搭建整个UI界面,DataV搭建页面方便简洁,使用阿里云所提供的组件,拖拽到页面即可形成一个界面,界面酷炫。数据接口有多种方式,比如api接口,静态数据等。本方案使用最常见的api数据接口的形式。后端服务器只需要将数据以json的数据格式,以api接口方式开放,然后通过DataV获取数据,通过使用曲线表,数据列表等工具形成大屏界面,如图10所示。

图10 DataV大屏展示图

3.4 三维动画展示

本模块使用soildworks对SCARA机器人进行3D建模。soildworks[25]与其他主流的3维制图软件相比,做机械机构设计,钣金设计等具有很大的优势。建模方案是将SCARA机器人分为5个部分进行建模,如底座,连杆等。图11所示是机器人底座3维模型图。对机器人的各部件进行建模后,将3D模型以stl的文件格式导出。

图11 底座3维模型图

在3D界面的开发中,需要使用到WebGL类库three.js[26],three.js在WebGL的基础上进行了进一步地封装和简化开发过程。在此基础上,需要导入STLLoader.js类库,该库功能是将stl文件导入到前端页面当中,具体实现方式如下。

(1)初始化场景。场景是所有物体的容器,在Three.js中场景就只有一种,用Three.Scene来表示,要构件一个场景需要new一个对象,代码为var scene=new Three.Scene()。

(2)初始化相机。相机类型选择透视相机,该类型所展示的效果更接近人眼视觉效果,代码是This.camera=Three.PerspectiveCamera(70, 800/600, 0.1,10)。

(3)初始化渲染器。渲染器决定了渲染的结果并且以怎样的方式来绘制,代码如下:

var renderer=new Three.WebGLRenderer()

renderer.setSize(800,600)

this.renderer.render(this.scene, this.camera)

在完成一个3维场景的基本框架后,添加3维物体、光源,实例化模型并加载对象,导入SCARA机器人各部件的3维模型,对模型对象的材质、网格、大小等进行定义,图12为机器人3维展示界面。

图12 3维展示界面

4 实验测试与分析

通过实验验证本系统的可行性,首先测试本地客户端的数据采集模块,界面如图13所示,上半部分用于设置机器人控制器的IP地址,连接控制器。下半部分用于查看节点树数据,数据操作和节点订阅等。当本地客户端运行时监测诊断如图14所示,从图中可看出当客户端开始采集数据时,进程内存会变大,但整个采集阶段一直处于平稳阶段,其中CPU占有率一直处于低消耗状态,具有较高的效率。

图13 OPC UA数据采集界面

图14 客户端运行监测诊断图

其次测试本地客户端的数据存储模块,界面如图15所示,从操作界面可知,数据有多种存储路径,用户可对不同种类的机器人进行数据采集以及存储,系统不需要额外设计数据库表进行数据存储,从而提高了系统的可扩展性。同时,通信效率达到每50 ms发送一个数据包,客户端采集的数据量为2 000,经过MySQL模块存储后,数据库接收到的数据量为1 982,丢包率不超过1%。

图15 数据存储模块界面

本地客户端的MQTT数据交互模块测试界面如图16所示,从操作界面可知,用户可根据自己的需求上传数据,对数据进行筛选。网页端的MQTT客户端测试界面如图17所示,主要包括连接MQTT服务器,查看数据节点,绘制波形图,移除曲线等操作。其中本地客户端的MQTT客户端数据上传间隔设置为25 ms,网页端的MQTT客户端运行时监测诊断如图18所示,由图可知,接收到数据的时间间隔在25~30 ms之间,延时较低,可以满足系统实时性的要求。

图16 数据交互模块界面

图17 用户登录界面

图18 MQTT客户端运行监测诊断图

Web远程监控端的用户登录测试界面如图19所示,系统实现了用户的登录操作,与后端的数据交互信息如图20所示,由图可知,通过验证后只返回无规律的token值,保证了用户个人信息与数据的安全性。

图19 用户登录界面

图20 数据交互信息图

Web远程监控端的设备浏览测试界面如图21所示,设备列表栏用来显示设备以及采集点信息。设备浏览界面的右侧是用户所选择的设备的所有数据,该模块上半部分显示用户选取的单设备下的所有采集点信息,包括采集点名称,采集的数量,初次采集时间以及最后一次采集时间;下半部分显示用户选取的采集点的所有数据,包括数据的名称和采集时间。

图21 设备浏览测试界面

Web远程监控端的数据查询测试界面如图22所示,设备数据查询界面的中间部分的顶部用来选择筛选条件,后端系统根据前端提供的筛选条件返回采集点数据和信息;中间部分的中部用来显示经过筛选查询后采集点信息,包括该采集点的名称,采集点总数,初次采集时间以及末次采集时间;中间部分的底部用来将采集点的数据曲线化的形式展示出来。页面的右侧部分用来显示所选取的采集点的所有数据以及采集时间。

图22 数据查询测试界面

实验结果表明,系统分块化设计有利于整个系统的稳定性、高效性和可扩展性,同时前后端分离的方式使系统出现的错误更容易查找,维护更加容易。

5 结 论

本文研究了一种基于云平台的机器人监控系统,基于OPC UA协议、MySQL数据库技术及前后端分离技术相结合进行搭建,同时,该系统挂载于阿里云平台。在数据采集过程中,不需要考虑底层系统的差异性,提高了开发效率,降低了开发成本。Web系统采用前后端分离的方式,该方式开发周期短,系统稳定性高。系统针对SCARA机器人进行实时采集数据,通过MQTT客户端将数据传送到位于云端的MQTT服务器,位于可视化界面的MQTT客户端将MQTT服务器接收到数据进行实时展示和3维展示。目前市面上的机器人都具有以太网接口,且OPC UA协议使通讯有统一的标准,因此本系统对于开发机器人监控系统,具有一定的参考价值。

猜你喜欢

客户端界面服务器
国企党委前置研究的“四个界面”
通信控制服务器(CCS)维护终端的设计与实现
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
中国服务器市场份额出炉
电子显微打开材料界面世界之门
得形忘意的服务器标准