杨光友, 谢 旺, 陈学海
(1 湖北工业大学农业机械工程研究设计院,湖北 武汉 430068;2 湖北省农机装备智能化工程技术研究中心,湖北 武汉 430068)
由于联合收割机[1-3]结构复杂,工作环境恶劣,其工作过程中的故障多样化。常见的故障监测和诊断系统大多运行在PC端,虽然实现了远程故障监测,减轻了故障诊断的工作量和难度,但不易携带,难以满足实际需要[4]。随着移动互联网和移动设备的不断发展[5],如能将联合收割机的故障通过移动端显示或发出预警信息,则对联合收割机的运维具有重要意义。目前,有关移动端故障监测和诊断系统的研究已经在飞机航电系统[6]、汽车[7-9]和工业设备[10]等领域展开。本文以联合收割机故障监测为背景,开展基于Android移动设备的联合收割机远程故障监测终端系统研究,为联合收割机故障监测和诊断提供解决方法,提高运维效率。
基于Android的联合收割机远程监测系统主要由车载数据采集端、云服务器端和Android移动端组成(图1)。
图 1 总体框架
以雷沃RG50型联合收割机为试验样机,根据收割机工作情况,在收割机工作时易发生故障的部位安装速度传感器,以监测风机转速、脱粒滚筒转速、输送链耙转速、喂入搅龙转速、杂余搅龙转速、籽粒搅龙转速、逐稿器和割刀往复频率等。车载数据采集端通过数据采集模块将这些传感器数据利用4G通信模块上传至云服务器端。
作为整个系统的核心枢纽,云服务器端负责调用故障模型进行故障预警和故障模型的更新:云服务器端接受车载端上传的数据并解析保存到数据库—调用这些数据进行故障预警—得到预警结果实时发送到Android移动端。同时,云服务器端获取Android移动端人工反馈的实际故障结果,并与远程数据库中模型预警的故障状态进行一致性判断,以此结果作为模型是否需要更新的重要条件之一。
Android移动端软件采用TCP/IP协议与云服务器端建立socket通信,实时接收云服务器端发送的监测模型预警结果。当其结果是故障状态时,即断开移动端与云服务器的连接,由操作员判断是否与实际故障相符,同时上传同一时刻操作员判断给出的故障状态,以便服务器端计算故障预警模型的准确率。通过连接访问远程数据库,操作员根据不同故障类型查询相应故障原因以及解决方案,实现故障快速定位和排除。
考虑到系统开发的软件运行在Android移动端,选用ARMv8-A架构的Cortex-A53的四核处理器,以满足Android6.0系统的运行需求。Android移动端需要与服务器通信,连接访问远程数据库。开发平台选用广泛应用于各种工业监控场合的4G无线传输模块ME3630[11]。4G无线传输模块ME3630可以提供50 Mbps上行速率,以及150 Mbps的下行速率,并支持回退到3G或2G网络。该模组也支持GPS定位功能,完全符合系统功能要求。Android移动端开发平台带有OTG接口,便于软件开发的调试。
Android移动端开发平台硬件系统(图2)主要由CPU处理器、触控显示屏、OTG接口,4G模块,12V/2A主电源输入接口、蓝牙模块和WIFI模块等组成。
图 2 移动端开发平台硬件系统结构
开发平台硬件系统实物如图3所示。
图 3 开发平台硬件系统实物
Android Studio是谷歌专门为AndroidAPP开发设计的IDE工具。该工具基于IDEA设计,引进了新的项目构建工具Gradle,优化了模拟器运行慢、内存大的问题,提供了更好的开发和调试环境。本文选用Android Studio 3.4.2作为Android移动端的软件开发工具。
Android作为一个以Linux为基础完全开源的移动设备操作系统,提供了丰富的开发资源。Android移动端软件基于Android平台开发,该平台支持GUI开发,能够提供良好的交互体验,同时还支持轻量级的SQLite数据库,可用作结构化的数据存储。Android移动端软件的功能模块如图4所示。
图 4 Android移动端软件功能模块
3.1.1远程数据库连接JDBC(Java Database Connectivity)是Java语言中用来访问远程数据库的应用程序接口,提供一种与平台无关的用于执行SQL语句的标准javaAPI,方便实现多种关系型数据库的统一操作[12]。Android平台基于Java语言开发,可以通过添加第三方依赖库调用JDBC驱动,实现对远程数据的操作。本文选用Mysql数据库测试。
导入连接Mysql数据库的依赖包mysql-connector-java-5.1.48-bin.jar后,调用Class.for.Name(com.mysql.jdbc.Driver)程序语句初始化驱动类,调用DriverManager类的getConnection()与远程数据库建立连接。最后,通过调用SQL语句对数据库进行操作。该功能的具体流程如图5所示。
图 5 远程数据库连接流程
3.1.2故障查询远程服务端利用Navicat Premium数据库可视化管理工具,根据故障信息特点搭建故障数据库。创建的数据库包括有以下几列: 编号id、故障位置 error_location、故障类型error_type、故障原因 error_reason、解决方案 error_solution。其中分为发动机、电气系统、割台装置、进料装置、脱粒装置、清选装置、集粮装置等7个部位。故障查询数据表结构如图6所示。
图 6 故障查询数据库
Android移动端通过JDBC技术连接远程数据库,根据预警故障或反馈结果确定故障类型,通过该故障类型即可查询相应的故障原因以及解决方案。故障查询流程如图7所示。
图 7 故障查询流程
3.1.3故障反馈接收到云服务端的预警结果为故障后,Android移动端会提示操作员进行反馈。操作员需要根据实际情况进行判断,确定实际故障之后会将反馈结果和完成反馈的时刻一起记录保存。然后将故障Id、故障数据的上传时间、故障数据的预警码、反馈结果和完成反馈的时刻一起转化成JSON字符串。通过连接Redis数据库,调用rpush()方法存入Redis列表。云服务端通过该Redis列表获取Android移动端的反馈值。该功能实现流程如图8所示。
图 8 故障反馈流程
3.1.4LitePal开源数据库框架LitePal是一款开源的Android数据库框架。它采用了对象关系映射(ORM)的模式,并将我们平时开发最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作[13]。LitePal很“轻”,jar包不到100 kb,而且基本上零配置。使用LitePal开源框架可以让操作数据库更简单。LitePal的使用方法如下。
1)引入jar包:打开app/build.gradle文件,在dependencies闭包中添加如下代码:
implementation 'org.litepal.android:core:2.0.0'
2)配置litepal.xml文件:在app/src/main目录下新建文件夹assets,然后在assets文件夹中新建litepal.xml文件。配置文件内容如下:
标签用于指定所有的映射模型;每个映射模型用
3)配置LitePalApplication:操作数据库需要用到Context,LitePal通过在AndroidManifest.xml中配置LitePalApplication,简化了Context参数,使用数据库操作时就无需再传Context。如以下代码所示:
android:name="org.litepal.LitePalApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> 4)初始化和操作数据库:每个Activity需要应用LitePal时,调用一次LitePal.getDatabase()即可进行初始化。根据对象关系映射模式的理论,新建一个User模型类,类中元素对应数据库的数据表User中的列数据编号id、账号user、密码password和用户姓名username。操作User数据表只需要分别调动模型类User对象的user.save()和user.delete()方法即可实现数据表的保存和删除操作。这样就可以应用LitePal框架对Android数据库进行账号信息的添加和删除,实现用户注册和用户注销功能。SQLite数据表的结构模型如图9所示。 图 9 数据表结构示意图 Android移动端的软件基于Android平台开发,利用Android平台强大的UI开发功能为软件各功能模块设计界面,实现良好的人机交互。 3.2.1Intent技术Intent技术作为Android开发的核心技术之一,用来协助各应用的交互和通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述。根据Intent的描述,Android负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可以开启一个activity、发送广播消息和开启Service服务。调用startActivity()方法跳转到指定Activity,可以实现登录界面到注册界面和功能界面的跳转。还可以调用putExtra()方法实现Activity间的数据传递,将LoginActivity获取的操作员信息传递到MainActivity。 3.2.2Button控件Button是进行UI开发时用于与用户交互的重要控件。其中Button的点击事件功能是实现交互的关键,设置点击相应事件有实现OnClickListener接口、匿名内部类和定义内部类三种方法,用户根据需求点击相应的Button。登录界面设置登录和注册两个Button触发Activity跳转事件。 3.2.3Spinner控件Spinner控件是一个列表下拉框,在用户点击之后弹出一个数据列表供用户选择。对于Spinner列表显示的数据源,有两种方法进行设定:一是通过Adapter设置,调用xml资源文件获取数据源通过Adapter绑定到Spinner控件显示,xml资源文件结构如图10所示;二是通过布局文件在Spinner控件的设置中添加android:entries="@array/error_data"代码直接调用xml文件显示到界面。但是通过布局文件设置的Spinner不能对选择事件响应,不利于用户交互。软件界面利用Adapter设置Spinner,调用AdapterView.OnItemSelectedListener()方法实现列表项被选择时触发响应事件。 图10 xml文件结构 3.2.4ScrollView控件ScrollView是一种特殊类型的FrameLayout。它可以使用户滚动显示一个占据的空间大于物理显示的视图列表。ScrollView只能包含一个子视图或视图组,通常包含的是一个垂直的LinearLayout。在Activity中添加ScrollView控件将整个页面转化成滚动视图,以便于浏览数据。 利用Android平台中的相关关键技术和UI控件进行软件界面设计,相关界面如图11所示。 图11 软件界面 通过Android技术实现了移动端与远程服务器的交互,实时获取云服务器端的故障预警结果,并由操作员结合实际判断预警结果是否准确,实时将反馈结果上传至远程数据库,为服务器端的模型更新提供准确的数据标签。利用云服务器端的故障数据库,终端系统可根据故障类型查询相应的故障原因和故障解决方案。该终端系统的应用可以移植于多种Android移动设备,比如Android智能手机和Android智能平板等,减少了传统PC端远程监测的局限性,提高了户外操作员故障监测和排除故障的实时性和便利性,具有很好的应用前景。3.2 软件功能界面程序设计
4 结束语