馬曙暉
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
Android系統(tǒng)下衛(wèi)星天線M&C的實現(xiàn)
馬曙暉
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
衛(wèi)星通信便攜式地球站因其體積較小、組網(wǎng)下的高靈活性優(yōu)點而被廣泛應(yīng)用。作為系統(tǒng)重要的組成部分,以往的監(jiān)控平臺難以滿足流行的運行終端,故提出Android平臺下的M&C系統(tǒng)。該系統(tǒng)通過與天線系統(tǒng)的連接,以友好的圖形用戶界面顯示尋星效果,使通信地球站的對星精度基本滿足要求,實現(xiàn)便攜站與下位機的通信鏈路的監(jiān)控。從Android開發(fā)的基本應(yīng)用知識開始,加以必要的需求分析,在軟件方面,給出包括代碼的主要模塊化設(shè)計與編寫,提出了主要子模塊模型和最終軟件結(jié)構(gòu)設(shè)計思路,最終實現(xiàn)簡約圖形用戶界面,功能主要有參數(shù)設(shè)置,包括方位定位、自動和手動對星等。軟件在Eclipse配置的SDK環(huán)境下,使用當(dāng)下流行的Java語言開發(fā)。
衛(wèi)星通信;M&C系統(tǒng);Android;圖形用戶界面;Java
一個完整的地球通信站[1]主要包括終端設(shè)備、伺服收發(fā)跟蹤系統(tǒng)和監(jiān)控系統(tǒng)。其中監(jiān)控系統(tǒng)是整個通信系統(tǒng)的大腦,負(fù)責(zé)對天線系統(tǒng)主要參數(shù)進行控制、監(jiān)管,使操作人員可以通過監(jiān)控端監(jiān)視和控制衛(wèi)星通信系統(tǒng)設(shè)備的運行狀況,同時當(dāng)設(shè)備存在故障時將故障內(nèi)容(error.log)記錄在事件中,從而給檢修人員提供幫助。監(jiān)控系統(tǒng)為用戶提供了友好便捷的可視化界面,極大方便了非專業(yè)用戶的操作。
近些年大多數(shù)軟件運行在PC端。由于PC相對手機來說不便攜帶,所以PC端雖然擁有比較豐富的開發(fā)資源,但是為了軟件運行所耗費的精力和時間也較多,成本也相對較高,而且準(zhǔn)備工作又比較繁瑣。
由于近年來Android系統(tǒng)[2-3]在終端領(lǐng)域的井噴式發(fā)展,使得基于Android平臺的監(jiān)控系統(tǒng)具有巨大的應(yīng)用前景,因此設(shè)計一款能運行在Android操作系統(tǒng)下的控制軟件,這樣既輕小便攜,又簡單易操作,更有其重要的實際價值,對于企業(yè)和客戶來說均能節(jié)約不少成本。
Android的系統(tǒng)架構(gòu)如圖1所示[4],與其操作系統(tǒng)一樣,采用了分層架構(gòu)。從架構(gòu)圖看,Android分為四層,從高到低分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和Linux核心層。
圖1 Android架構(gòu)
(1)應(yīng)用程序:Android系統(tǒng)一般內(nèi)置有Email、短信收發(fā)程序、瀏覽器、聯(lián)系人等功能的應(yīng)用程序。除了內(nèi)置的應(yīng)用程序外,開發(fā)者還可以編寫更多的應(yīng)用程序,讓用戶能夠使用更多便利的功能。
(2)應(yīng)用程序框架:其實就是Android的API(Application Programming Interface),開發(fā)者只要善用此API即可開發(fā)出Android應(yīng)用程序。應(yīng)用程序就是依賴框架層次API,所有應(yīng)用都是一組服務(wù)和系統(tǒng),一般包含:一套豐富且可擴展的視圖組件,Activity Manager(活動管理器),Content Providers(內(nèi)容提供器),Resource Manager(資源管理器),Notification Manager(信息管理器)。
(3)系統(tǒng)運行庫:Android有一個內(nèi)部函數(shù)庫,此函數(shù)庫主要用C/C++編寫。Android應(yīng)用程序開發(fā)人員并非直接使用此函數(shù)庫,而是通過更上層的應(yīng)用程序框架來使用此函數(shù)庫功能,所以有人稱此類函數(shù)庫為原生函數(shù)庫(Native Libraries)。此函數(shù)庫依照功能也可細(xì)分成各種類型的函數(shù)庫。
(4)Linux內(nèi)核:Android以Linux 2.6版作為整個系統(tǒng)的核心,Linux提供Android主要的系統(tǒng)服務(wù),如:安全性管理(Security)、內(nèi)存管理(Memory Management)、進程管理(Process Management)、網(wǎng)絡(luò)棧(Network Stack)、驅(qū)動模型(Driver Model)、電源管理(Power Management)等。
2.1 系統(tǒng)頂層建模
建模過程[5]如圖2所示,像多數(shù)管理軟件一樣,user可以設(shè)置成管理員和普通用戶不同的登錄模式,均可實現(xiàn)基本操作,不同的是管理員對系統(tǒng)參數(shù)設(shè)置有更高的權(quán)限,主要可以管理數(shù)據(jù)庫[6]。
圖2 頂端模型圖
2.2 自動與手動對星建模
如圖3所示,自動模式即采用自動對星方式尋星,并且在界面實時顯示參數(shù),而手動是在事先知道衛(wèi)星參數(shù)情況下手動調(diào)整,或是衛(wèi)星偏移較大以至于長時間難以自動對準(zhǔn)而手動調(diào)到參數(shù)附近位置,然后再采用自動模式,手動調(diào)整的是俯仰、方位以及極化角度。
圖3 自動與手動對星模型圖
2.3 系統(tǒng)軟件結(jié)構(gòu)圖
軟件結(jié)構(gòu)圖如圖4所示。
圖4 軟件結(jié)構(gòu)圖
3.1 Socket通信模式
Socket套接字機制[7]廣泛運用于網(wǎng)絡(luò)通信,采用TCP協(xié)議[8],通過面向連接的可靠性服務(wù)實現(xiàn)C/S模式的通信。操作Socket過程大致如下:
(1)調(diào)用Socket類的構(gòu)造函數(shù),以服務(wù)器的指定IP地址或指定的主機名和指定的端口號為參數(shù),創(chuàng)建一個Socket流,在創(chuàng)建Socket流的過程中包含了向服務(wù)器請求建立通信連接的過程實現(xiàn)。
(2)建立了client端通信Socket后,就可以使用Socket的方法getInputStream()和getOutputStream()來創(chuàng)建輸入/輸出流。這樣,使用Socket類后,網(wǎng)絡(luò)輸入輸出也轉(zhuǎn)化為使用流對象的過程。
(3)使用輸入輸出流對象的相應(yīng)方法讀寫字節(jié)流,因為流連接著通信所用的Socket,Socket又是和服務(wù)器端建立連接的一個接口,因此數(shù)據(jù)將通過連接從服務(wù)器得到或發(fā)向服務(wù)器。這時就可以對字節(jié)流數(shù)據(jù)按客戶端和服務(wù)器之間的協(xié)議進行處理,完成雙方的通信任務(wù)。
(4)通信結(jié)束時,先關(guān)閉輸入輸出流,再關(guān)閉Socket,分別采用對應(yīng)的close()方法。
3.2 登錄界面的實現(xiàn)
經(jīng)過登錄界面進入時,會有三個空白窗,分別為user、password和IP地址。IP地址作為唯一識別對應(yīng)天線的參數(shù),一般情況下,天線型號與IP地址相關(guān)聯(lián)能夠解析出對應(yīng)的IP地址,而該IP是由后臺Web服務(wù)器端通過WiFi設(shè)置的,要想修改IP,需要先修改Web端對應(yīng)的IP。
登錄界面關(guān)鍵實現(xiàn)代碼如下:
UserImpl impl=new UserImpl(Login.this);
Cursor cursor=impl.login(name.getText().
toString(), password.getText().toString(),
ipadd.getText().toString());
//管理消息
if(cursor.moveToNext()) {
Toast.makeText(Login.this,"登陸成功",Toast.LENGTH_SHORT).show();
}else {Toast.makeText(Login.this,"輸入錯誤",Toast.LENGTH_ SHORT).show();
}
3.3 參數(shù)設(shè)置界面的實現(xiàn)
鑒于衛(wèi)星主要的參數(shù)均設(shè)置在界面當(dāng)中,若用戶要對其進行修改,直接修改即可。衛(wèi)星信息已經(jīng)關(guān)聯(lián)了數(shù)據(jù)庫,重新選擇通信衛(wèi)星,直接在下拉菜單中選中,比如中星6A,對應(yīng)顯示其經(jīng)緯度,用戶若想對衛(wèi)星數(shù)據(jù)進行修改,直接操作數(shù)據(jù)庫中數(shù)據(jù)即可。值得一提的是,衛(wèi)星通信保證有500 MHz的頻帶傳輸,其中上行頻段為14.0~14.5 GHz,下行頻段為12.25~12.75 GHz,變頻之后的信號必須在此范圍內(nèi),且保證傳碼率以及接收發(fā)送的頻率都必須一致才能互通。最后選擇接收機,只能選DVB接收機與信標(biāo)機之一。
布局與數(shù)據(jù)讀入關(guān)鍵代碼:
public classSetActivity extends Avtivity{
private Cursor cursor;
private DataBase db=new DataBase(this);
/*省略部分代碼*/
MytabActivity mytabs=(MytabActivity) this.getParent();
public void onCreate(Bundle savedInstanceState) {…}
cursor=db.getAllTitles();
SimpleCursorAdapteradapter=new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, mycursor,new String[]{"衛(wèi)星名稱"},new int[]{ android.R.id.text});
/*省略部分代碼*/
satname.setOnItemSelectedListener(new OnItemSelectedListener() {…}
public voidonItemSelected(AdapterView> arg0, View arg1,int arg2, long arg3){…}
3.4 位置定位
與監(jiān)控系統(tǒng)連接的是天線系統(tǒng)[9-11],上面安裝有GPS接收機,監(jiān)控具有兩種工作模式—自動模式和人工模式。隨著技術(shù)的發(fā)展,諸如藍(lán)牙、WiFi等多種無線通信模塊早已做成集成芯片安裝在手機上,充分利用Android智能手機[12-14]內(nèi)置GPS定位模塊,基于Eclipse開發(fā)平臺通過程序的調(diào)用,實現(xiàn)定位功能[15],給出當(dāng)前天線地理位置的經(jīng)度和緯度。
利用手機GPS獲取地理方位關(guān)鍵代碼如下:
private void setLocation(Location location){
if (location!=null) {
String latitudeStr=Double.toString(location.getLatitude());//經(jīng)度
StringlongitudeStr=Double.toString(location.getLongitude());//緯度
if(latitudeStr!=null&&!latitudeStr.equals("")) {latitude.setText(latitudeStr);}
if(longitudeStr!=null&&!longitudeStr.equals("")) {longitude.setText(longitudeStr);}
if(altitudeStr!=null&&!altitudeStr.equals("")) {altitude.setText(altitudeStr);}
}else{Log.v("location","location為空");}
LocationManager locationMgr=null;
updateToNewLocation(locat); //監(jiān)聽器監(jiān)聽
Locationlocat=locationMgr.getLastKnownLocation(provider); // 獲取位置
locationMgr.requestLocationUpdates(provider,100 * 1 000,500,locationListener);
}
3.5 理論計算與代碼實現(xiàn)
理論計算是根據(jù)所選擇參數(shù)以及方位信息等通過公式計算天線的俯仰方位和極化。在界面中單擊菜單,選擇對星按鈕后,如果給出所有參數(shù)格式且不為空時,系統(tǒng)就會根據(jù)讀取的參數(shù)并參照開發(fā)時規(guī)定的公式計算出衛(wèi)星天線的極化角、俯仰角和方位角,并將理論值顯示在監(jiān)控界面上。理論上計算公式如下:
俯仰角:
Fy=
方位角:
極化角:
實現(xiàn)計算關(guān)鍵代碼:
privatevoidcomputer(){
doublelocal_j=0;//本地經(jīng)度
doublelocal_w=0;//本地緯度
//***省略若干初始化計算代碼***
doublefw_angle=0,fy_angle=0,fy=0,pf=0,jh_angle=0;
doublezz=PI/180,floattt=sate_j-local_j;
//方位角
fw_angle=Math.atan(Math.tan(tt*zz) /Math.sin(local_w*zz));
fw_angle=PI-fw_angle;//中國所在為東經(jīng)
//俯仰角
pf=1-(Math.cos(local_w*zz)*Math.cos(-tt*zz))*(Math.cos(local_w*zz)*Math.cos(-tt*zz));
fy=((Math.cos(local_w*zz))*(double)Math.cos(-tt*zz)-0.151 3)/Math.sqrt(pf);
fy_angle=Math.atan(fy); //zz不用再乘
//極化角
if(jComboBox.getSelectedItem()=="垂直"){
jh_angle=Math.atan(Math.sin(tt*zz)/Math.tan(local_w*zz));//垂直方式
v_flag=0;
}
if(jComboBox.getSelectedItem()=="水平"){
jh_angle=Math.atan(Math.sin(tt*zz) /Math.tan(local_w*zz));//水平方式
h_flag=0;
if(jh_angle>0){jh_angle=jh_angle-PI/2;}
else{jh_angle=jh_angle+PI/2;}
}
fw_angle=fw_angle*180/PI;
fy_angle=fy_angle*180 /PI;
jh_angle=jh_angle*180 /PI;
}
系統(tǒng)采用MVC設(shè)計模式,運用Socket編程實現(xiàn)互通,實現(xiàn)了基本操作功能,包括登錄、參數(shù)設(shè)置、尋星的自動與手動模式,如圖5所示。
圖5 各層次圖形界面
該系統(tǒng)是在Android的虛擬環(huán)境下開發(fā)實現(xiàn),雖測試能完成相應(yīng)基本功能,但畢竟是模擬器,在測試響應(yīng)過程容易受到外部環(huán)境(如天氣等)的影響,還要加以改進確保無差錯響應(yīng)。對于其他更高層次的功能,如無人值守,氣象監(jiān)控,早已出現(xiàn)在現(xiàn)如今許多地球站,由于能力有限以及設(shè)備的局限等主客觀原因暫未能實現(xiàn),但這不失為今后研究的大方向。
[1] 湯 鵬.一種新型便攜式衛(wèi)星通信地球站的M&C系統(tǒng)[D].南京:南京郵電大學(xué),2014.
[2]MeierR.Android4高級編程[M].佘建偉,趙 凱,譯.第3版.北京:清華大學(xué)出版社,2013.
[3] 農(nóng)麗萍,王力虎,黃一平.Android在嵌入式車載導(dǎo)航系統(tǒng)的應(yīng)用研究[J].計算機工程與設(shè)計,2010,31(11):2473-2476.
[4] 徐 玲,蔣欣志,張 杰.手機二維碼識別系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機應(yīng)用,2012,32(5):1474-1476.
[5]BlahaM,RumbaughJ.UML面向?qū)ο蠼Ec設(shè)計[M].車皓陽,楊 眉,譯.北京:人民郵電出版社,2011.
[6] 吳 中,鄭曉華.基于Java的Web數(shù)據(jù)庫訪問系統(tǒng)[J].科學(xué)之友:上旬,2007(2):158-159.
[7]EckelB.Java編程思想[M].陳昊鵬,譯.北京:機械工業(yè)出版社,2007.
[8] 張海燕.Java多線程技術(shù)在手機聯(lián)網(wǎng)中的應(yīng)用[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2008(3):97-98.
[9]KrausJD,MarhefkaRJ.Antennas:forallapplications[M].NewYork:NewMcGraw-Hill,2001.
[10]BridgeWM.Crosscouplinginafivehornmonopulsetrackingsystem[J].IEEETransactionsonAntennasandPropagation,1972,20(4):436-442.
[11]WeaverAC,LuoJihao,ZhangXinyuan.MonitoringandcontrolusingtheInternetandJavaindustrialelectronicssociety[C]//ProcofIECON’99.[s.l.]:IEEE,1999:1154-1158.
[12] 代 敏.基于Android平臺下手機定位程序的設(shè)計及實現(xiàn)[J].計算機與數(shù)字工程,2012,40(4):143-145.
[13] 耿東久,索 岳,陳 渝,等.基于Android手機的遠(yuǎn)程訪問和控制系統(tǒng)[J].計算機應(yīng)用,2011,31(2):559-561.
[14] 王朝華,陳德艷,黃國宏,等.基于Android的智能家居系統(tǒng)的研究與實現(xiàn)[J].計算機技術(shù)與發(fā)展,2012,22(6):225-228.
[15] 艾國祥,施滸立,吳海濤,等.基于通信衛(wèi)星的定位系統(tǒng)原理[J].中國科學(xué):G輯,2008,38(12):1615-1633.
Implementation of M&C for Satellite Antenna on Android System
MA Shu-hui
(College of Telecommunications and Information Engineering,Nanjing University of Posts and Telecommunications,Nanjing 210003,China)
Man-pack satellite communication earth station is widely used owing to its compact size and flexibility on networking.As an important part of this system,the previous monitoring system is no longer satisfied with the popular running platform.In view of this,puts forward the thought of M&C system in satellite on the Android system.Through a connection with the antenna system,it displays satellite search effect with a friendly GUI (Graphical User Interface) and basically satisfies requirements of accuracy on search.Meanwhile it achieves the monitoring between portable station and slave computer.Beginning with the basic Android application of knowledge,plus necessary analysis and requirements,in the perspective of the software,the modularized program design and compiling is given.The main submodules and the design idea of final software structure are presented.Finally,it provides a concise GUI which makes users be able to complete the parameter settings,including pointing satellite location by automatic or manual pattern.The software development mainly uses the current Java under SDK environment with Eclipse.
satellite communication;M&C system;Android;GUI;Java
2015-12-24
2016-04-20
時間:2016-09-19
國家自然科學(xué)基金資助項目(61271234)
馬曙暉(1991-),男,碩士研究生,研究方向為計算機網(wǎng)絡(luò)、衛(wèi)星通信技術(shù)。
http://www.cnki.net/kcms/detail/61.1450.TP.20160919.0839.016.html
TP39
A
1673-629X(2016)10-0133-04
10.3969/j.issn.1673-629X.2016.10.029