馬曙暉
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
Android系統(tǒng)下衛(wèi)星天線M&C的實(shí)現(xiàn)
馬曙暉
(南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京 210003)
衛(wèi)星通信便攜式地球站因其體積較小、組網(wǎng)下的高靈活性優(yōu)點(diǎn)而被廣泛應(yīng)用。作為系統(tǒng)重要的組成部分,以往的監(jiān)控平臺(tái)難以滿足流行的運(yùn)行終端,故提出Android平臺(tái)下的M&C系統(tǒng)。該系統(tǒng)通過與天線系統(tǒng)的連接,以友好的圖形用戶界面顯示尋星效果,使通信地球站的對(duì)星精度基本滿足要求,實(shí)現(xiàn)便攜站與下位機(jī)的通信鏈路的監(jiān)控。從Android開發(fā)的基本應(yīng)用知識(shí)開始,加以必要的需求分析,在軟件方面,給出包括代碼的主要模塊化設(shè)計(jì)與編寫,提出了主要子模塊模型和最終軟件結(jié)構(gòu)設(shè)計(jì)思路,最終實(shí)現(xiàn)簡(jiǎn)約圖形用戶界面,功能主要有參數(shù)設(shè)置,包括方位定位、自動(dòng)和手動(dòng)對(duì)星等。軟件在Eclipse配置的SDK環(huán)境下,使用當(dāng)下流行的Java語言開發(fā)。
衛(wèi)星通信;M&C系統(tǒng);Android;圖形用戶界面;Java
一個(gè)完整的地球通信站[1]主要包括終端設(shè)備、伺服收發(fā)跟蹤系統(tǒng)和監(jiān)控系統(tǒng)。其中監(jiān)控系統(tǒng)是整個(gè)通信系統(tǒng)的大腦,負(fù)責(zé)對(duì)天線系統(tǒng)主要參數(shù)進(jìn)行控制、監(jiān)管,使操作人員可以通過監(jiān)控端監(jiān)視和控制衛(wèi)星通信系統(tǒng)設(shè)備的運(yùn)行狀況,同時(shí)當(dāng)設(shè)備存在故障時(shí)將故障內(nèi)容(error.log)記錄在事件中,從而給檢修人員提供幫助。監(jiān)控系統(tǒng)為用戶提供了友好便捷的可視化界面,極大方便了非專業(yè)用戶的操作。
近些年大多數(shù)軟件運(yùn)行在PC端。由于PC相對(duì)手機(jī)來說不便攜帶,所以PC端雖然擁有比較豐富的開發(fā)資源,但是為了軟件運(yùn)行所耗費(fèi)的精力和時(shí)間也較多,成本也相對(duì)較高,而且準(zhǔn)備工作又比較繁瑣。
由于近年來Android系統(tǒng)[2-3]在終端領(lǐng)域的井噴式發(fā)展,使得基于Android平臺(tái)的監(jiān)控系統(tǒng)具有巨大的應(yīng)用前景,因此設(shè)計(jì)一款能運(yùn)行在Android操作系統(tǒng)下的控制軟件,這樣既輕小便攜,又簡(jiǎn)單易操作,更有其重要的實(shí)際價(jià)值,對(duì)于企業(yè)和客戶來說均能節(jié)約不少成本。
Android的系統(tǒng)架構(gòu)如圖1所示[4],與其操作系統(tǒng)一樣,采用了分層架構(gòu)。從架構(gòu)圖看,Android分為四層,從高到低分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和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)用程序框架:其實(shí)就是Android的API(Application Programming Interface),開發(fā)者只要善用此API即可開發(fā)出Android應(yīng)用程序。應(yīng)用程序就是依賴框架層次API,所有應(yīng)用都是一組服務(wù)和系統(tǒng),一般包含:一套豐富且可擴(kuò)展的視圖組件,Activity Manager(活動(dòng)管理器),Content Providers(內(nèi)容提供器),Resource Manager(資源管理器),Notification Manager(信息管理器)。
(3)系統(tǒng)運(yùn)行庫(kù):Android有一個(gè)內(nèi)部函數(shù)庫(kù),此函數(shù)庫(kù)主要用C/C++編寫。Android應(yīng)用程序開發(fā)人員并非直接使用此函數(shù)庫(kù),而是通過更上層的應(yīng)用程序框架來使用此函數(shù)庫(kù)功能,所以有人稱此類函數(shù)庫(kù)為原生函數(shù)庫(kù)(Native Libraries)。此函數(shù)庫(kù)依照功能也可細(xì)分成各種類型的函數(shù)庫(kù)。
(4)Linux內(nèi)核:Android以Linux 2.6版作為整個(gè)系統(tǒng)的核心,Linux提供Android主要的系統(tǒng)服務(wù),如:安全性管理(Security)、內(nèi)存管理(Memory Management)、進(jìn)程管理(Process Management)、網(wǎng)絡(luò)棧(Network Stack)、驅(qū)動(dòng)模型(Driver Model)、電源管理(Power Management)等。
2.1 系統(tǒng)頂層建模
建模過程[5]如圖2所示,像多數(shù)管理軟件一樣,user可以設(shè)置成管理員和普通用戶不同的登錄模式,均可實(shí)現(xiàn)基本操作,不同的是管理員對(duì)系統(tǒng)參數(shù)設(shè)置有更高的權(quán)限,主要可以管理數(shù)據(jù)庫(kù)[6]。
圖2 頂端模型圖
2.2 自動(dòng)與手動(dòng)對(duì)星建模
如圖3所示,自動(dòng)模式即采用自動(dòng)對(duì)星方式尋星,并且在界面實(shí)時(shí)顯示參數(shù),而手動(dòng)是在事先知道衛(wèi)星參數(shù)情況下手動(dòng)調(diào)整,或是衛(wèi)星偏移較大以至于長(zhǎng)時(shí)間難以自動(dòng)對(duì)準(zhǔn)而手動(dòng)調(diào)到參數(shù)附近位置,然后再采用自動(dòng)模式,手動(dòng)調(diào)整的是俯仰、方位以及極化角度。
圖3 自動(dòng)與手動(dòng)對(duì)星模型圖
2.3 系統(tǒng)軟件結(jié)構(gòu)圖
軟件結(jié)構(gòu)圖如圖4所示。
圖4 軟件結(jié)構(gòu)圖
3.1 Socket通信模式
Socket套接字機(jī)制[7]廣泛運(yùn)用于網(wǎng)絡(luò)通信,采用TCP協(xié)議[8],通過面向連接的可靠性服務(wù)實(shí)現(xiàn)C/S模式的通信。操作Socket過程大致如下:
(1)調(diào)用Socket類的構(gòu)造函數(shù),以服務(wù)器的指定IP地址或指定的主機(jī)名和指定的端口號(hào)為參數(shù),創(chuàng)建一個(gè)Socket流,在創(chuàng)建Socket流的過程中包含了向服務(wù)器請(qǐng)求建立通信連接的過程實(shí)現(xiàn)。
(2)建立了client端通信Socket后,就可以使用Socket的方法getInputStream()和getOutputStream()來創(chuàng)建輸入/輸出流。這樣,使用Socket類后,網(wǎng)絡(luò)輸入輸出也轉(zhuǎn)化為使用流對(duì)象的過程。
(3)使用輸入輸出流對(duì)象的相應(yīng)方法讀寫字節(jié)流,因?yàn)榱鬟B接著通信所用的Socket,Socket又是和服務(wù)器端建立連接的一個(gè)接口,因此數(shù)據(jù)將通過連接從服務(wù)器得到或發(fā)向服務(wù)器。這時(shí)就可以對(duì)字節(jié)流數(shù)據(jù)按客戶端和服務(wù)器之間的協(xié)議進(jìn)行處理,完成雙方的通信任務(wù)。
(4)通信結(jié)束時(shí),先關(guān)閉輸入輸出流,再關(guān)閉Socket,分別采用對(duì)應(yīng)的close()方法。
3.2 登錄界面的實(shí)現(xiàn)
經(jīng)過登錄界面進(jìn)入時(shí),會(huì)有三個(gè)空白窗,分別為user、password和IP地址。IP地址作為唯一識(shí)別對(duì)應(yīng)天線的參數(shù),一般情況下,天線型號(hào)與IP地址相關(guān)聯(lián)能夠解析出對(duì)應(yīng)的IP地址,而該IP是由后臺(tái)Web服務(wù)器端通過WiFi設(shè)置的,要想修改IP,需要先修改Web端對(duì)應(yīng)的IP。
登錄界面關(guān)鍵實(shí)現(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,"輸入錯(cuò)誤",Toast.LENGTH_ SHORT).show();
}
3.3 參數(shù)設(shè)置界面的實(shí)現(xiàn)
鑒于衛(wèi)星主要的參數(shù)均設(shè)置在界面當(dāng)中,若用戶要對(duì)其進(jìn)行修改,直接修改即可。衛(wèi)星信息已經(jīng)關(guān)聯(lián)了數(shù)據(jù)庫(kù),重新選擇通信衛(wèi)星,直接在下拉菜單中選中,比如中星6A,對(duì)應(yīng)顯示其經(jīng)緯度,用戶若想對(duì)衛(wèi)星數(shù)據(jù)進(jìn)行修改,直接操作數(shù)據(jù)庫(kù)中數(shù)據(jù)即可。值得一提的是,衛(wèi)星通信保證有500 MHz的頻帶傳輸,其中上行頻段為14.0~14.5 GHz,下行頻段為12.25~12.75 GHz,變頻之后的信號(hào)必須在此范圍內(nèi),且保證傳碼率以及接收發(fā)送的頻率都必須一致才能互通。最后選擇接收機(jī),只能選DVB接收機(jī)與信標(biāo)機(jī)之一。
布局與數(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接收機(jī),監(jiān)控具有兩種工作模式—自動(dòng)模式和人工模式。隨著技術(shù)的發(fā)展,諸如藍(lán)牙、WiFi等多種無線通信模塊早已做成集成芯片安裝在手機(jī)上,充分利用Android智能手機(jī)[12-14]內(nèi)置GPS定位模塊,基于Eclipse開發(fā)平臺(tái)通過程序的調(diào)用,實(shí)現(xiàn)定位功能[15],給出當(dāng)前天線地理位置的經(jīng)度和緯度。
利用手機(jī)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 理論計(jì)算與代碼實(shí)現(xiàn)
理論計(jì)算是根據(jù)所選擇參數(shù)以及方位信息等通過公式計(jì)算天線的俯仰方位和極化。在界面中單擊菜單,選擇對(duì)星按鈕后,如果給出所有參數(shù)格式且不為空時(shí),系統(tǒng)就會(huì)根據(jù)讀取的參數(shù)并參照開發(fā)時(shí)規(guī)定的公式計(jì)算出衛(wèi)星天線的極化角、俯仰角和方位角,并將理論值顯示在監(jiān)控界面上。理論上計(jì)算公式如下:
俯仰角:
Fy=
方位角:
極化角:
實(shí)現(xiàn)計(jì)算關(guān)鍵代碼:
privatevoidcomputer(){
doublelocal_j=0;//本地經(jīng)度
doublelocal_w=0;//本地緯度
//***省略若干初始化計(jì)算代碼***
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;//中國(guó)所在為東經(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è)計(jì)模式,運(yùn)用Socket編程實(shí)現(xiàn)互通,實(shí)現(xiàn)了基本操作功能,包括登錄、參數(shù)設(shè)置、尋星的自動(dòng)與手動(dòng)模式,如圖5所示。
圖5 各層次圖形界面
該系統(tǒng)是在Android的虛擬環(huán)境下開發(fā)實(shí)現(xiàn),雖測(cè)試能完成相應(yīng)基本功能,但畢竟是模擬器,在測(cè)試響應(yīng)過程容易受到外部環(huán)境(如天氣等)的影響,還要加以改進(jìn)確保無差錯(cuò)響應(yīng)。對(duì)于其他更高層次的功能,如無人值守,氣象監(jiān)控,早已出現(xiàn)在現(xiàn)如今許多地球站,由于能力有限以及設(shè)備的局限等主客觀原因暫未能實(shí)現(xiàn),但這不失為今后研究的大方向。
[1] 湯 鵬.一種新型便攜式衛(wèi)星通信地球站的M&C系統(tǒng)[D].南京:南京郵電大學(xué),2014.
[2]MeierR.Android4高級(jí)編程[M].佘建偉,趙 凱,譯.第3版.北京:清華大學(xué)出版社,2013.
[3] 農(nóng)麗萍,王力虎,黃一平.Android在嵌入式車載導(dǎo)航系統(tǒng)的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(11):2473-2476.
[4] 徐 玲,蔣欣志,張 杰.手機(jī)二維碼識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2012,32(5):1474-1476.
[5]BlahaM,RumbaughJ.UML面向?qū)ο蠼Ec設(shè)計(jì)[M].車皓陽(yáng),楊 眉,譯.北京:人民郵電出版社,2011.
[6] 吳 中,鄭曉華.基于Java的Web數(shù)據(jù)庫(kù)訪問系統(tǒng)[J].科學(xué)之友:上旬,2007(2):158-159.
[7]EckelB.Java編程思想[M].陳昊鵬,譯.北京:機(jī)械工業(yè)出版社,2007.
[8] 張海燕.Java多線程技術(shù)在手機(jī)聯(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平臺(tái)下手機(jī)定位程序的設(shè)計(jì)及實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2012,40(4):143-145.
[13] 耿東久,索 岳,陳 渝,等.基于Android手機(jī)的遠(yuǎn)程訪問和控制系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2011,31(2):559-561.
[14] 王朝華,陳德艷,黃國(guó)宏,等.基于Android的智能家居系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(6):225-228.
[15] 艾國(guó)祥,施滸立,吳海濤,等.基于通信衛(wèi)星的定位系統(tǒng)原理[J].中國(guó)科學(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
時(shí)間:2016-09-19
國(guó)家自然科學(xué)基金資助項(xiàng)目(61271234)
馬曙暉(1991-),男,碩士研究生,研究方向?yàn)橛?jì)算機(jī)網(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