汤春球,王 达,莫易敏,韩 辉,蒋亚华
(武汉理工大学 机电工程学院,湖北 武汉 430070)
在国内大多数企业中,生产线设备信息化集成度并不高,车间各个设备单元多为独立个体,信息交互比较少,设备故障信息及工作状态信息缺乏相应的监控。智能手机作为一种通用的通信工具,具有小巧,便携,可随时无线接入互联网的特点。采用智能手机作为终端,设计一种移动远程监控系统,使得操作人员可随时随地通过手机连接WIFI进行远程监控,方便工厂生产人员对车间内充电加热设备的工作状况及运行情况实现有效实时监管,提升车间工作效率。
Qt是基于C++跨平台的UI和应用软件开发框架[1],使用特殊的代码生成扩展(称其为源对象编译器)以及一些宏。Qt拥有良好的扩展功能,当Qt自带控件功能无法满足使用要求时,可重写其方法,实现自定义功能。Qt集成Qt Designer工具,可方便程序编写者设计美观易用的界面。Qt具有优秀的跨平台特性,可支持Windows、Linux、Mac OS X、Android、iOS、Windows Phone和嵌入式系统。
车间设备监控系统通过Qt开发桌面程序,移动监控终端为安卓APP。利用Qt良好的扩展功能,设计自定义控件进行添加,优化程序显示界面,实现上位机监控应用程序。通过Qt跨平台特点,将上位机监控程序功能代码进行修改移植,编译形成安卓客户端APP。
远程监控体系由车间设备监控系统、移动监控终端、服务器和MySQL数据库组成。车间设备监控系统与下位机采用CAN总线连接,CAN总线采用扩展帧[2]格式,根据自定义的CAN应用层协议,将获取的下位机数据进行解析。车间设备监控系统通过QMySQL驱动与MySQL数据库连接,对重要信息进行存储。服务器集成在车间设备监控系统中,对解析后的数据进行封装处理,采用UDP通信协议发送至以太网,监控终端通过WIFI连入以太网,采用UDP通信协议获取数据,显示到界面上。不同区域的车间设备监控系统形成组播,实现设备数据共享,安卓监控终端加入组播,获取实时设备数据,主要通信框架如图1所示。
图1 监控系统通信框架
远程监控系统以车间设备监控系统作为上位机,安卓客户端作为移动终端来实现对车间设备数据传输的功能。远程监控系统具备数据的存储、处理和查询功能。需要上位机服务器接收下位机数据, MySQL数据库实现对重要数据的管理、存储。
MySQL由于其性能卓越,服务稳定,开放源代码无版本制约,自主性及使用成本低,体积小,安装简单易维护的优势倍受开发者的青睐[3-4]。
移动远程监控系统采用MySQL数据库实现设备信息、计划信息、操作人员信息和设备工作信息的存储。车间设备监控系统通过QMySQL驱动MySQL数据库,QSqlDatabase与数据库进行连接,QSqlQuery执行SQL语句,对数据库内容进行增删改查操作,QSqlRecord将封装数据库记录。
上位机服务器作为监控系统中数据的传递者,需要接收CAN总线的数据,再将数据发送给监控终端,同时接收来自监控终端的指令,并将控制数据传递给下位机,实现监控终端对下位机设备的远程控制。
由于监控终端需对不同区域设备进行监控,故上位机服务器通信采用UDP协议实现传输。考虑到设备量较多,数据量较大,为优化网络性能,减少其他区域服务器的负载,服务器采用组播方式。本区域上位机监控系统服务器获取数据后,将数据进行处理,设计好数据结构后,封装成数据报,往组播地址IP发送,实现共享本区域数据。也可接受来自其他区域的数据,完成跨区域监控。将监控终端加入以太网组播地址,即可接收到所有区域设备实时数据。当安卓客户端需要查询数据库内容时,向服务器发出查询报文,服务器响应后,从数据库中获取数据,发送给监控客户端。设备实时数据中部分数据结构如表1所示。
表1 设备信息数据结构
在安卓移动远程监控系统中,移动监控终端主要是安卓客户端通过UDP网络通信获取车间设备监控系统的实时设备数据。安卓客户端作为整个系统手机移动终端部分,由用户选择工作区域,验证信息登录后,获取监控权限,接收并显示来自网络中设备的数据,将其显示在客户端界面中,具体功能如下:
(1)工作区域选择功能;
(2)人员信息登录功能;
(3)设备工作参数实时显示功能;
(4)设备状态、故障信息、工作计划等重要信息的查询功能;
(5)远程控制功能。
通过Qt开发安卓APP,应该考虑两个部分[5]。第一个是基于Qt类库的C/C++程序部分,这个部分是APP实现图像显示,数据操作以及事件响应。第二个部分则是基于Java的Android底层资源调用API部分,这部分是与Android底层硬件通信和调用的功能。通过JNI[6](Java Native Interface)实现这两部分的协同工作,基于Qt的安卓APP封装模型如图2所示。
图2 基于Qt的安卓APP封装模型
在此模型中,模块①里,Qt编译平台会利用抽象层QPA(Qt Platfrom Abstaction)对所有的操作系统进行统一化支持,使得Qt类库程序可以运行在其他操作系统中,包括Android平台;模块②是Qt中的事件循环与Android里的事件循环通过线程发生交互;模块③中Qt编写的安卓程序利用JNI反向调用Java代码,实现调用安卓系统功能,诸如判断网络连接、获取外部存储或者缓存文件目录等。
主界面及子模块界面均采用C++代码进行设计,界面均是基于Qt类库实现,用户对界面的操作均是转化为事件的形式。当用户在屏幕上按下按钮、在编辑框输入数字,都会发出一个相应的事件。对事件进行响应则是通过信号与槽的机制来实现的。信号和槽机制是Qt的核心机制,主要应用于对象之间的通信。它是Qt对象间通信的一种机制,也是Qt的核心特性,它替代了回调函数。MOC(Meta Object Compiler)是Qt的一种工具,它本质上是C++预处理程式,可在编译前将扩展语法如宏Q_OBJECT去掉,生成附加代码,帮助Qt处理信号与槽。
每个Qt对象均有若干个定义好的信号和槽,当对象状态发生变化时(如发生一个事件),一个信号则被发送,与信号相关联的槽则会响应信号并进行响应的处理。当一个类被继承时, 子类将会继承父类的信号与槽,同时也可根据需要自定义信号与槽。信号与槽是一个十分强大的组件编程机制[7-8],如图3所示。
图3 信号与槽
客户端界面设计采用树状界面。客户端界面包括:工作区域选择界面、登陆界面、主界面、设备实时信息界面、工作信息界面、用户界面、故障信息界面以及计划信息界面。客户端操作流程如图4所示。
图4 安卓客户端操作流程图
(1)工作区域选择界面。该界面获取指定区域设备工作数据,方便工作人员从一个监控区域转换到另一个监控区域时,只需切换工作区域即可实现设备监控切换。
(2)登录界面。该界面进行监控人员信息验证。与数据库信息进行验证,通过后不同人员拥有不同操作权限,分为操作人员和管理人员权限,权限不同客户端局部功能也不同,验证失败则无法获取监控页面信息。
(3)主界面。该界面对区域内所有设备的工作状态进行显示,主要包括设备工作输出功率,设备运行工作状态如开机、关机或故障。方便操作人员能直观地看到区域内所有设备的工作状态。
(4)设备实时信息界面。该界面对区域内每台设备具体的输入输出工作参数进行显示以及设备工作状态、故障状态进行实时显示,工作人员通过查看客户端上设备实时工作信息、设备状态即可判断设备是否存在故障及故障类型,方便进行高效处理。
(5)工作信息界面。该界面查看区域内各设备处于何种工作状态,以及设备历史工作记录。其中设备历史工作记录包括开机时间,关机时间以及工作总时长。
(6)故障信息界面。该界面用于查看设备故障历史记录。其中包括设备名称、故障时间、状态、故障类型、恢复类型和恢复状态等。
(7)计划信息界面。该界面用于查看计划任务信息,管理人员可进行作业计划下达。管理人员可对任务执行人员、作业位置、作业设备进行选择,对具体作业内容进行编辑后进行下达,计划任务将存储于数据库中,现场操作人员根据计划执行,实现远程控制功能。
安卓客户端与上位机服务器通信采用UDP[9]通信方式,UDP是轻量的、不可靠的、面向数据报,无连接的协议。由于不同上位机之间通过组播方式形成网络,安卓客户端则采用加入组播的方式,可获取其他上位机往组播所发送的数据包。在监控不同区域时,根据不同区域IP地址进行选择性接收,监控系统网络拓扑图如图5所示。
图5 监控系统网络拓扑图
在Qt中,采用QUdpSocket类实现UDP通讯。在上位机服务器端需要实例化一个QUdpSocket对象来创建一个通信套接字,并采用bind()函数去绑定地址和端口号,来监听指定客户端的请求,当套接字接收到客户端数据,则会发出readyRead()信号,将此信号关联,在槽函数中使用readDatagram()读取数据。进行数据反馈时,发送数据采用writeDatagram()函数,指定手机终端IP和端口号进行发送。
安卓客户端同样需要实例化QUdpSocket[10]对象创建通信套接字,可使用writeDatagram()函数往组播中发送数据包。同时使用joinMulticastGroup()函数加入一个多播组,leaveMulticastGroup()函数离开一个多播组,关键函数语句如下:
m_UdpSocket->bind(address,port);
m_UdpSocket->writeDatagram(data,size,address,port);
m_UdpSocket->readDatagram(data,size,address,port);
connect(m_UdpSocket,SIGNAL(readyRead()),this,SLOT(read_data()));
其中read_data()为自定义函数。
针对传统工业车间环境,通过Qt良好的跨平台性能,结合C++编程和互联网通信开发移动监控客户端。移动客户端基于上位机程序编写移植,省去二次学习Java的时间成本,降低了学习成本。同时克服监控地点限制,使用户通过手机即可检测车间设备工作状态,无需再去现场查看设备信息,提高了工作效率。