楊光友, 謝 旺, 陳學海
(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 結束語