汪佳瑤,安博文
(上海海事大學信息工程學院,上海 201306)
目前,海事部門對船舶尾氣的排放監管依舊采用人工的方式,比較耗時且成本較高。隨著電子技術的發展,智能移動設備得到迅速普及,如果能利用手中的移動設備來監測船舶尾氣的排放,會大大提高海事部門的監管效率[1]。
本文根據船舶尾氣監測系統軟件應用的實際需求,利用藍牙和Android相關技術,設計了無線連接控制氣體檢測裝置以及在Android應用程序上實時顯示監測數據的軟件應用模塊。相較于傳統方式,該軟件應用設計具有一定的智能化和便捷性。
Android系統是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發[2]。Android操作系統最早由Andy Rubin開發,2005年8月由Google收購注資。隨后,Google以Apache免費開放源代碼許可證的授權方式,發布了Android的源代碼,開放源代碼加速了Android普及與發展。
藍牙是一種短距離的無線數據通信技術,能夠在包括手機、無線耳機、筆記本電腦等眾多設備間進行無線信息傳輸。藍牙技術采用分散式網絡結構以及快跳頻和短包技術,支持點對點以及點對多點通信,工作頻段為2.4GHz,數據速率為1Mb/s,并且采用時分雙工傳輸方案實現全雙工傳輸[3]。Android 2.0以上版本的SDK包含了對藍牙網絡協議棧的支持,使得藍牙設備能夠無線連接其他藍牙設備進行數據交換[4]。此外,Android應用程序框架提供了訪問藍牙功能的API,調用這些API能夠讓應用程序無線連接其他藍牙設備,實現交互功能。
(1)數據庫設計
數據庫是本設計不可或缺的一部分,客戶端和數據服務器是基于數據庫進行數據通信的。本設計中采用的數據庫是MySQL,MySQL是一種關系型數據庫管理系統,關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。本設計的MySQL數據庫的ER圖設計如圖1所示,其中實體部分主要由無人機、尾氣設備、船舶三個部分組成。無人機包括經度,緯度和當前的時間信息,尾氣傳感設備包括SO2和NOx濃度。船舶包括MMSI、COG、SOG等信息。無人機通過搭載尾氣傳感設備的方式,一對一聯系約束。氣體檢測裝置中的尾氣傳感設備和船舶通過尾氣檢測,一對多聯系約束。

圖1 系統數據庫ER圖
(2)氣體數據存儲表
在服務端建立數據庫存儲表,存儲船舶氣體檢測設備檢測的氣體數據,分為歷史數據和最新數據表,歷史數據表包括所有接受的數據,最新數據表只包括兩類中最新一條接收的數據,方便客戶端調用。
發送時單次發送的數據長度為18個字節,從第0字節到第17字節。其中,第0字節為起始位擬定為0xFF,第1-2字節為設備號用于確定數據發送設備的信息,第2-5字節位時間位Small Datetime,為所采集的數據的采集時間,該部分信息前2個字節存儲base date(2018年1月1日之后的天數)。后2個字節存儲午夜0點后的分鐘數。第6-9字節為所采集的氣體的濃度值,單位為ppb。第10-16個字節為無人機的經緯度,獲取當前無人機的信息。為了防止信息的泄露或者不完整性,第17字節設置了校驗碼,校驗碼的檢測標準為求和校驗(第2字節至第10字節的和取反+1)。
(1)功能概要
Android應用程序通過藍牙與氣體檢測裝置配置命令的交互過程描述為:首先,Android應用程序打開藍牙,搜索氣體檢測裝置的藍牙與其配對并建立連接。然后,Android應用程序發送一個開始采集的指令,氣體檢測設備收到指令并回復后,設備登記完成,氣體檢測裝置開始采集信息。此時Android應用程序訪問數據服務器,界面顯示采集到的氣體信息,并且實時刷新數據,直至采集結束。藍牙控制模塊流程圖如圖2所示。

圖2 藍牙控制模塊流程圖
(2)藍牙通信的功能實現
本設計中主要是手機終端與氣體檢測裝置中的藍牙模塊之間進行通信,從而控制氣體檢測裝置的開關。該過程可以認為是客戶端與服務器端之間的通信。在Android系統中,支持的藍牙開發類在android.bluetooth包中,藍牙設備的管理涉及到的類有Blue?toothAdapter與 BluetoothDevice兩個類,其中,Blue?toothAdapter代表本地設備的藍牙適配器,是所有藍牙交互的入口點。該BluetoothAdapter可以執行基本的藍牙任務,例如啟動設備發現,查詢配對的設備列表,使用已知的MAC地址實例化一個BluetoothDevice類,并創建一個BluetoothServerSocket監聽來自其他設備的連接請求。BluetoothDevice類代表了一個遠端藍牙設備,使用它請求遠端藍牙設備連接,或者獲取遠端藍牙設備的信息。
與藍牙通信相關的類有BluetoothServerSocket和BluetoothSocket類,BluetoothServerSocket類用于監聽來自客戶端的連接請求,BluetoothSocket類代表了一個藍牙套接字接口,能夠獲取輸入、輸出流并與其他藍牙設備進行通信。
藍牙通信的實現過程主要分為以下幾個部分:
①聲明權限。
為了在應用中使用藍牙功能,需要在AndroidMani?fest.xml中申明以下權限:
②打開設備。
獲取藍牙適配器:
BluetoothAdapter mBluetoothAdapter=bluetoothManager.getAdapter()。
③查找附近已配對或可用設備。
mBluetoothAdapter.startDiscovery()。
④連接設備。
connected(socket,socket.getRemoteDevice())。
⑤設備間數據交互。
InputStream mInStream=socket.getInputStream();
mInStream.read(buffer);
OutputStream mOutStream=socket.getOutputStream();
mOutStream.write(buffer)。
通過廣播接收者查看掃描到的藍牙設備,該方式是異步傳輸,每掃描到一個設備,系統都會發送此廣播(BluetoothDevice.ACTION_FOUNDE),通過 intent方式可以獲取藍牙設備BluetoothDevice。移動終端與尾氣檢測設備連接成功后,通過getInputStream()和getOut?putStream()方法獲取輸入流和輸出流來處理傳輸,調用read(byte[])和write(byte[])來實現數據流的讀和寫。
(3)Android端藍牙通信界面
圖3和圖4分別是藍牙通信模塊的搜索界面和藍牙通信界面,通過藍牙通信模塊實現與尾氣監測設備的交互、控制,當手機的藍牙與設備的藍牙模塊建立連接后,發送一個指令start,藍牙模塊回復一個指令OK,設備開始采集信息。
(1)功能概要
該模塊主要是在手機App上顯示監測數據信息,包括無人機的經緯度、編號信息以及二氧化硫和一氧化碳的濃度信息,讓用戶可以直觀地監測船舶尾氣的排放情況。顯示的監測信息都是當前時刻的最新信息,體現了信息的即時性。
(2)監測數據顯示
當氣體檢測設備開始采集信息時,手機控制端通過 HTTP協議訪問數據服務器[5],使用 Android的HttpURLConnection類,并采用Get的方式發送請求。訪問成功后,獲取到JSON格式的數據,即有序的JSO?NArray數組對象,因此需要將JSON數據進行解析。首先,要新建JSONObject對象,再獲取對應的數組,最后遍歷數組中的每個值獲得監測信息數據。
為了滿足監測系統實時性的需求,利用Android中的多線程技術,設置了一個定時器,使得數據每隔五秒更新一次,手機界面能夠顯示當前時刻最新的數據。定時器是耗時操作,所以在UI主線程的基礎下,另開一個子線程來實現定時器的功能,采用的是Handler+Thread方法。最終,監測數據顯示模塊的流程圖如圖5所示。

圖3 藍牙通信的搜索界面

圖4 藍牙模塊的通信界面

圖5 監測數據顯示模塊流程圖

圖6 監測數據顯示界面
系統軟件應用設計完成后,結合氣體檢測裝置,在港區進行測試。首先在服務端部署好相應的軟件模塊,然后打開手機Android應用程序的藍牙通信界面和氣體檢測裝置中藍牙模塊進行數據通信,實現兩者的控制、交互。最后點擊訪問服務器的按鈕,訪問服務器,獲取監測數據,最終檢測信息顯示界面如圖6所示。界面結果表明,本文的設計能夠實時準確地獲取當前時刻的監測數據,包括無人機的經緯度、編號和氣體濃度信息,無人機信息能夠為后續的系統開發做鋪墊,氣體濃度信息可以使用戶直觀便捷地了解船舶尾氣的排放情況。
本文介紹了一種船舶尾氣實時監測系統軟件應用設計,利用藍牙無線通信的特點和Android平臺下數據顯示的直觀性、實時性,從服務端軟件設計為入口點,設計了氣體檢測裝置和移動智能終端的通信模塊,最終在Android應用程序界面上呈現監測數據信息。結果顯示,軟件模塊運行穩定,界面數據顯示準確,實時性好,滿足監管需求,具有良好的應用前景。