汪佳瑤,安博文
(上海海事大學信息工程學院,上海 201306)
目前,海事部門對船舶尾氣的排放監(jiān)管依舊采用人工的方式,比較耗時且成本較高。隨著電子技術(shù)的發(fā)展,智能移動設備得到迅速普及,如果能利用手中的移動設備來監(jiān)測船舶尾氣的排放,會大大提高海事部門的監(jiān)管效率[1]。
本文根據(jù)船舶尾氣監(jiān)測系統(tǒng)軟件應用的實際需求,利用藍牙和Android相關(guān)技術(shù),設計了無線連接控制氣體檢測裝置以及在Android應用程序上實時顯示監(jiān)測數(shù)據(jù)的軟件應用模塊。相較于傳統(tǒng)方式,該軟件應用設計具有一定的智能化和便捷性。
Android系統(tǒng)是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領(lǐng)導及開發(fā)[2]。Android操作系統(tǒng)最早由Andy Rubin開發(fā),2005年8月由Google收購注資。隨后,Google以Apache免費開放源代碼許可證的授權(quán)方式,發(fā)布了Android的源代碼,開放源代碼加速了Android普及與發(fā)展。
藍牙是一種短距離的無線數(shù)據(jù)通信技術(shù),能夠在包括手機、無線耳機、筆記本電腦等眾多設備間進行無線信息傳輸。藍牙技術(shù)采用分散式網(wǎng)絡結(jié)構(gòu)以及快跳頻和短包技術(shù),支持點對點以及點對多點通信,工作頻段為2.4GHz,數(shù)據(jù)速率為1Mb/s,并且采用時分雙工傳輸方案實現(xiàn)全雙工傳輸[3]。Android 2.0以上版本的SDK包含了對藍牙網(wǎng)絡協(xié)議棧的支持,使得藍牙設備能夠無線連接其他藍牙設備進行數(shù)據(jù)交換[4]。此外,Android應用程序框架提供了訪問藍牙功能的API,調(diào)用這些API能夠讓應用程序無線連接其他藍牙設備,實現(xiàn)交互功能。
(1)數(shù)據(jù)庫設計
數(shù)據(jù)庫是本設計不可或缺的一部分,客戶端和數(shù)據(jù)服務器是基于數(shù)據(jù)庫進行數(shù)據(jù)通信的。本設計中采用的數(shù)據(jù)庫是MySQL,MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。本設計的MySQL數(shù)據(jù)庫的ER圖設計如圖1所示,其中實體部分主要由無人機、尾氣設備、船舶三個部分組成。無人機包括經(jīng)度,緯度和當前的時間信息,尾氣傳感設備包括SO2和NOx濃度。船舶包括MMSI、COG、SOG等信息。無人機通過搭載尾氣傳感設備的方式,一對一聯(lián)系約束。氣體檢測裝置中的尾氣傳感設備和船舶通過尾氣檢測,一對多聯(lián)系約束。
圖1 系統(tǒng)數(shù)據(jù)庫ER圖
(2)氣體數(shù)據(jù)存儲表
在服務端建立數(shù)據(jù)庫存儲表,存儲船舶氣體檢測設備檢測的氣體數(shù)據(jù),分為歷史數(shù)據(jù)和最新數(shù)據(jù)表,歷史數(shù)據(jù)表包括所有接受的數(shù)據(jù),最新數(shù)據(jù)表只包括兩類中最新一條接收的數(shù)據(jù),方便客戶端調(diào)用。
發(fā)送時單次發(fā)送的數(shù)據(jù)長度為18個字節(jié),從第0字節(jié)到第17字節(jié)。其中,第0字節(jié)為起始位擬定為0xFF,第1-2字節(jié)為設備號用于確定數(shù)據(jù)發(fā)送設備的信息,第2-5字節(jié)位時間位Small Datetime,為所采集的數(shù)據(jù)的采集時間,該部分信息前2個字節(jié)存儲base date(2018年1月1日之后的天數(shù))。后2個字節(jié)存儲午夜0點后的分鐘數(shù)。第6-9字節(jié)為所采集的氣體的濃度值,單位為ppb。第10-16個字節(jié)為無人機的經(jīng)緯度,獲取當前無人機的信息。為了防止信息的泄露或者不完整性,第17字節(jié)設置了校驗碼,校驗碼的檢測標準為求和校驗(第2字節(jié)至第10字節(jié)的和取反+1)。
(1)功能概要
Android應用程序通過藍牙與氣體檢測裝置配置命令的交互過程描述為:首先,Android應用程序打開藍牙,搜索氣體檢測裝置的藍牙與其配對并建立連接。然后,Android應用程序發(fā)送一個開始采集的指令,氣體檢測設備收到指令并回復后,設備登記完成,氣體檢測裝置開始采集信息。此時Android應用程序訪問數(shù)據(jù)服務器,界面顯示采集到的氣體信息,并且實時刷新數(shù)據(jù),直至采集結(jié)束。藍牙控制模塊流程圖如圖2所示。
圖2 藍牙控制模塊流程圖
(2)藍牙通信的功能實現(xiàn)
本設計中主要是手機終端與氣體檢測裝置中的藍牙模塊之間進行通信,從而控制氣體檢測裝置的開關(guān)。該過程可以認為是客戶端與服務器端之間的通信。在Android系統(tǒng)中,支持的藍牙開發(fā)類在android.bluetooth包中,藍牙設備的管理涉及到的類有Blue?toothAdapter與 BluetoothDevice兩個類,其中,Blue?toothAdapter代表本地設備的藍牙適配器,是所有藍牙交互的入口點。該BluetoothAdapter可以執(zhí)行基本的藍牙任務,例如啟動設備發(fā)現(xiàn),查詢配對的設備列表,使用已知的MAC地址實例化一個BluetoothDevice類,并創(chuàng)建一個BluetoothServerSocket監(jiān)聽來自其他設備的連接請求。BluetoothDevice類代表了一個遠端藍牙設備,使用它請求遠端藍牙設備連接,或者獲取遠端藍牙設備的信息。
與藍牙通信相關(guān)的類有BluetoothServerSocket和BluetoothSocket類,BluetoothServerSocket類用于監(jiān)聽來自客戶端的連接請求,BluetoothSocket類代表了一個藍牙套接字接口,能夠獲取輸入、輸出流并與其他藍牙設備進行通信。
藍牙通信的實現(xiàn)過程主要分為以下幾個部分:
①聲明權(quán)限。
為了在應用中使用藍牙功能,需要在AndroidMani?fest.xml中申明以下權(quán)限:
②打開設備。
獲取藍牙適配器:
BluetoothAdapter mBluetoothAdapter=bluetoothManager.getAdapter()。
③查找附近已配對或可用設備。
mBluetoothAdapter.startDiscovery()。
④連接設備。
connected(socket,socket.getRemoteDevice())。
⑤設備間數(shù)據(jù)交互。
InputStream mInStream=socket.getInputStream();
mInStream.read(buffer);
OutputStream mOutStream=socket.getOutputStream();
mOutStream.write(buffer)。
通過廣播接收者查看掃描到的藍牙設備,該方式是異步傳輸,每掃描到一個設備,系統(tǒng)都會發(fā)送此廣播(BluetoothDevice.ACTION_FOUNDE),通過 intent方式可以獲取藍牙設備BluetoothDevice。移動終端與尾氣檢測設備連接成功后,通過getInputStream()和getOut?putStream()方法獲取輸入流和輸出流來處理傳輸,調(diào)用read(byte[])和write(byte[])來實現(xiàn)數(shù)據(jù)流的讀和寫。
(3)Android端藍牙通信界面
圖3和圖4分別是藍牙通信模塊的搜索界面和藍牙通信界面,通過藍牙通信模塊實現(xiàn)與尾氣監(jiān)測設備的交互、控制,當手機的藍牙與設備的藍牙模塊建立連接后,發(fā)送一個指令start,藍牙模塊回復一個指令OK,設備開始采集信息。
(1)功能概要
該模塊主要是在手機App上顯示監(jiān)測數(shù)據(jù)信息,包括無人機的經(jīng)緯度、編號信息以及二氧化硫和一氧化碳的濃度信息,讓用戶可以直觀地監(jiān)測船舶尾氣的排放情況。顯示的監(jiān)測信息都是當前時刻的最新信息,體現(xiàn)了信息的即時性。
(2)監(jiān)測數(shù)據(jù)顯示
當氣體檢測設備開始采集信息時,手機控制端通過 HTTP協(xié)議訪問數(shù)據(jù)服務器[5],使用 Android的HttpURLConnection類,并采用Get的方式發(fā)送請求。訪問成功后,獲取到JSON格式的數(shù)據(jù),即有序的JSO?NArray數(shù)組對象,因此需要將JSON數(shù)據(jù)進行解析。首先,要新建JSONObject對象,再獲取對應的數(shù)組,最后遍歷數(shù)組中的每個值獲得監(jiān)測信息數(shù)據(jù)。
為了滿足監(jiān)測系統(tǒng)實時性的需求,利用Android中的多線程技術(shù),設置了一個定時器,使得數(shù)據(jù)每隔五秒更新一次,手機界面能夠顯示當前時刻最新的數(shù)據(jù)。定時器是耗時操作,所以在UI主線程的基礎下,另開一個子線程來實現(xiàn)定時器的功能,采用的是Handler+Thread方法。最終,監(jiān)測數(shù)據(jù)顯示模塊的流程圖如圖5所示。
圖3 藍牙通信的搜索界面
圖4 藍牙模塊的通信界面
圖5 監(jiān)測數(shù)據(jù)顯示模塊流程圖
圖6 監(jiān)測數(shù)據(jù)顯示界面
系統(tǒng)軟件應用設計完成后,結(jié)合氣體檢測裝置,在港區(qū)進行測試。首先在服務端部署好相應的軟件模塊,然后打開手機Android應用程序的藍牙通信界面和氣體檢測裝置中藍牙模塊進行數(shù)據(jù)通信,實現(xiàn)兩者的控制、交互。最后點擊訪問服務器的按鈕,訪問服務器,獲取監(jiān)測數(shù)據(jù),最終檢測信息顯示界面如圖6所示。界面結(jié)果表明,本文的設計能夠?qū)崟r準確地獲取當前時刻的監(jiān)測數(shù)據(jù),包括無人機的經(jīng)緯度、編號和氣體濃度信息,無人機信息能夠為后續(xù)的系統(tǒng)開發(fā)做鋪墊,氣體濃度信息可以使用戶直觀便捷地了解船舶尾氣的排放情況。
本文介紹了一種船舶尾氣實時監(jiān)測系統(tǒng)軟件應用設計,利用藍牙無線通信的特點和Android平臺下數(shù)據(jù)顯示的直觀性、實時性,從服務端軟件設計為入口點,設計了氣體檢測裝置和移動智能終端的通信模塊,最終在Android應用程序界面上呈現(xiàn)監(jiān)測數(shù)據(jù)信息。結(jié)果顯示,軟件模塊運行穩(wěn)定,界面數(shù)據(jù)顯示準確,實時性好,滿足監(jiān)管需求,具有良好的應用前景。