張海洋
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
船載天線串口數據采集系統的設計與實現
張海洋
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
在船載衛星通信系統中,天線控制系統通過串口連接上位機,由上位機控制天線對星,再將數據回送PC上的控制監測軟件界面來控制及采集處理保存數據,實現對天線對星情況和天線姿態的觀測和調整,以便快速準確對星。文中以設計圖形界面為起點,具體闡述了利用C++語言和MFC設計PC端利用USB端口實現天線串口數據采集的多線程人機交互界面,并使用GDI繪圖函數在PC界面上實現同步準確的關鍵參數時間變化圖的真實再現。其中關鍵參數包括自動增益控制(AGC)、天線姿態等,以及采用Access數據庫來保存數據記錄,以備查詢和評估。結果表明,該軟件符合實際標準且運行穩定,并能反映天線、船和衛星的實時狀態數據和動作圖像。目前已廣泛應用于船載“動中通”衛星通信系統的監控和測試,并且獲得了良好的界面交互環境。
MFC;船載衛星通信系統;AGC;天線姿態;串口通信;多線程;臨界區;數據庫;圖像保存
船載衛星天線系統中,最基本的要求是能夠完成對星,以便能夠通過衛星收發數據。AGC和天線姿態參數,包括天線方位角、俯仰角和極化角參數是完成對星和準確對星的基本指標。AGC即自動增益控制,其數值的大小直觀反映了天線接收信號的強弱。天線姿態則反映當前天線在三維坐標系與各軸角度差,對星時其天線各方向的角度與同步衛星經度和所在地區的經緯度有關。當AGC高于某個門限且天線姿態與理論參數偏差不大的時候,就認為某顆衛星對星成功[1]。數據采集軟件對下位機直接或者通過上位機間接發回的數據流,依照協議字進行接收處理,實現天線實時狀態的顯示和AGC電平、天線姿態等圖像的動態繪制,直觀評估出天線對星情況。
傳統的界面串口使用Activex控件MSComm,是微軟庫自帶的控件類,其優點是操作簡單,滿足簡單的串口通信要求。但其在多線程一般的表現和難于操作,給設計人員帶來不便。文中系統兼顧硬件擴展多串口問題及移植性,采用了成熟的多線程CSerialPort類進行串口編程[2]。
CSerialPort類工作流程及其接口表示為:
(1)初始化串口接口:InitPort(參數),可以設置串口號、波特率等。
(2)啟動線程接口:StartMonitoring(),用來啟動線程CommThread,相當于打開串口。文中系統界面將(1)、(2)接口封裝在一個open()接口函數里,簡化調用。
(3)接收數據接口:ReceiveChar(參數),通過全局API函數向數據采集界面發送WM_COMM_RXCHAR消息和數據,完成數據接收。
(4)發送數據接口:WriteChar(參數),類似上述。
(5)關閉串口接口:ClosePort(),退出線程,實現串口關閉。
船載衛星通信系統硬件實現是通過上位機由天線串口轉發給PC機數據流,實時接收到PC緩存區,實現天線姿態的在PC在線回顯和AGC動態繪制。當對星成功后,天線接收的信號經LNB本振降頻送到經PC調節的頻譜儀,顯示出信號的峰值波形,并且PC經GPIB-USB線或者LAN口采集處理并存儲天線方向圖[3]。系統的組成如圖1所示。

圖1 船載衛星通信系統的簡單示意圖
數據采集界面采用Visual Studio 2010軟件中MFC工程設計實現,建立了多個對話框類,功能包括主對話框對串口相關參數的設置、天線狀態的動態顯示和AGC等參量的圖像繪制,其余副對話框分別負責天線控制,比如選星參數設置、手動控制天線轉動、PID參數設置、畫框搜索參數設置、陀螺儀參數設置等及其確保全部參數正確設置的由天線串口發送設置的參數的回顯,以及天線部分實時狀態顯示的CSetDlg類;對頻譜分析儀基于VISA的通過TCP-IP或者GPIB-USB傳送SCPI命令來控制虛擬儀器控制和采集數據、天線方向圖讀取處理的子對話框CAntTest類;對采集到的圖像進行瀏覽、放大、縮小、刪除處理等功能的子對話框CScanPic類,以及數據庫類CDatabase等。整體軟件的控制采集測試界面類關系如圖2所示。下面詳細介紹對于串口數據采集處理部分軟件的實現[4]。

圖2 船載數據采集測試軟件的類關系
數據采集軟件使用串口COM6,波特率19 200 Baud,無校驗位,8個數據位和1個停止位。串口的采集通過串口類每接收1個字符就向主對話框發送WM_COMM _RXCHAR消息,并將數據附加在消息中,所以需要主對話框類CTestingDlg的cpp實現文件中加入消息映射ON_MESSAGE()及自行定義的WM_COMM_RXCHAR消息響應函數OnPortRecieved(WPARAM ch,LPARAM po),通過參數ch得到發送的單字符,使用累加形成字符串進行處理。主對話框類CTestingDlg.h加入兩個共有的成員變量:
CString m_ReceiveBuf_Copy;
CString m_ReceiveBuf;
//消息響應函數中字符的累加處理
CStringstrTemp_Copy=_T("");
strTemp_Copy.Format(_T("%s%c"),m_ReceiveBuf_Copy,ch);
m_ReceiveBuf_Copy=strTemp_Copy;
m_ReceiveBuf=m_ReceiveBuf_Copy;
上述變量中,m_ReceiveBuf負責處理繪圖,實現主對話框主線程繪圖;m_ReceiveBuf_Copy負責其他對話框獲取數據的賦值變量,完成主對話框的子線程和子對話框的子線程狀態回顯的異步采集處理[5]。
為了防止讀取寫入沖突,需要通過設置臨界區來保護累加的中間變量,實現不同界面可以同時處理接收的字符流。以下代碼定義并初始化臨界區成員變量。
//CTesting.h文件
CRITICAL_SECTION g_cs;
//CTesting.cpp文件
InitializeCriticalSection(&g_cs);
子類對話框線程使用以下代碼獲得主對話框臨界區變量。
//CSetDlg.cpp或者CTesting.cpp文件中的子線程函數
CTestingDlg*pTestingDlg=(CTestingDlg*)AfxGetApp()->m_pMainWnd;
LPCRITICAL_SECTION lpg_cs=& (pTestingDlg->g_cs);
獲得主對話框臨界區成員變量后,主對話框和子對話框的子線程就可以用以下代碼獲得接收的數據流。
CString RecieveBuf;//負責復制接收的字符流
while(1)
{
EnterCriticalSection(&g_cs);
RecieveBuf=pTestingDlg->m_ReceiveBuf_Copy;
LeaveCriticalSection(&g_cs);
...//(RecieveBuf的處理代碼)
}
文中系統天線AGC電平值協議字格式為“g****”,其中,****代表0~9任意數字,數字擴大1 000倍,如g1234表示AGC電平為1.234 V,精確到小數點后3位。天線姿態有類似的表示方式,如天線的絕對方位,也就是相對地球的方向,因為在實際船載系統中天線方向隨船搖動,而天線方位由碼盤計算,而碼盤只根據與船頭相對角度差來計算,所以也加入了相對船頭的相對方位,直觀反映天線在船體中的相對指向[6]。天線絕對方位角,用協議字“A*****”,俯仰角“E*****”,精確到小數點后2位,船頭角“H****”,精確到小數點后1位。其他參數類似[7]。
處理函數為字符串的處理,包括天線各項參數的顯示和圖像繪制,狀態的顯示使用線程處理,通過創建線程、調用線程、線程使用臨界區對字符串的非沖突訪問。字符串處理包括使用find()函數和ReverseFind()等CString接口函數查找截取協議字并使用對話框句柄,調用SetDlgItemText()函數來顯示到設計好的各個靜態文本控件。本軟件規定,每當接收開頭A、g等開頭的協議字,在接收完之后,如果出現兩個相同的字母,則會在前一個接收到的協議字處理完之后,清空m_ReceiveBuf和m_ReceiveBuf_Copy變量,并且保存當前最后一個字符。清空是因為方位俯仰AGC等數據每隔0.1 s就會回送,及時地重置累加變量不僅節約內存,而且PC能夠在字符串處理上加快速度,不易出錯[8]。
字符串對協議字“g****”的處理完成狀態回顯的代碼如下所示:
在主對話框中的主線程加入:
//發現兩個‘g’,變量重置為‘g’
if((m_ReceiveBuf.Find(_T("g"),1))!=-1)
{
m_ReceiveBuf=_T("g");
m_ReceiveBuf_Copy=_T("g");
}
在主對話框的子線程處理函數中加入:
if((gpos=strTemp.ReverseFind('g'))>=0)
{
//滿足協議字“g****”5個字符要求
if((strTemp.GetLength()-gpos-1)>=4)
{
CString preprocess=strTemp.Mid(gpos +1,4),postprocess=_T("");//截取后4位
postprocess.Format("%1.3fV",atof(preprocess)/1000);SetDlgItemText(m_hTestingDlg,IDC_NAGC,postprocess);//顯示到相關控件上
}
}
圖像繪制的簡略代碼如下:
//消息響應函數中(主對話框中的主線程)加入
if(((Apos=m_ReceiveBuf.Find('g'))>=0) &&(m_ReceiveBuf.GetLength()-Apos-1==4))
{
Draw1AgcPic();//完成AGC背景圖包括坐標系點陣圖的繪制和坐標點的標識
Draw1AgcDots();//使用數組存儲的點動態繪制AGC圖像
}
鑒于移動窗口到桌面以外,會導致繪圖控件上的圖像重繪殘缺。為了解決上述問題,需要在OnPaint()函數中加入繪圖控制代碼,保證圖像在誤操作時能夠重繪顯示[9]。
實時采集數據的保存可以保存在TXT文件下,但TXT文件閱覽大量的串口數據不直觀,所以采用數據庫存儲的方式,系統采用常用的Access來建立表存儲[10]。
微軟Access數據庫采用文件存儲數據庫內容,數據庫管理軟件不需要搭建外部數據庫服務器。Access數據庫屬于關系型數據庫,支持標準的SQL操作。該軟件使用ADO方式連接Access數據庫,采集軟件對數據庫進行添加記錄、修改記錄操作。
Access數據庫文件名為Testing.mdb,該數據庫由一個表組成。測試數據保存在“串口關鍵數據”表中。由于串口發送數據過于頻繁(天線發送數據發送頻率為0.1 s,每次發送全部狀態的協議字),數據量大,全部點存儲有實用性小和浪費資源的缺點,可以類似信號采樣,定時取數并存儲,例如每隔0.5 s或者1 s,由于狀態顯示全部在界面控件上,可以采用定時讀取協議字相關控件內容的方法來取代字符串處理,通過調用SetTimer()函數發送WM_TIMER消息來定時觸發[11]。代碼實現如下所示。
//WM_TIMER消息處理函數
void CTestingDlg::OnTimer(UINT_PTR nIDEvent){
if(nIDEvent==1)
{
CString temp;
try
{
dataADO.IniDatabase();//初始化數據庫連接
recADO=dataADO.getRecordset("select * from 串口關鍵數據記錄");//選擇表
recADO->AddNew();//添加新記錄
GetDlgItemText(IDC_NAGC,temp);//讀取已經寫入控件的AGC值
recADO->PutCollect("AGC",_variant_t(temp));//將AGC值加入Access數據庫
...(其他數據比如天線姿態、GPS數據等做上述類似的處理)
recADO->MoveNext();//移到下一個記錄
recADO->Update();//更新
recADO->Close();//關閉表
dataADO.cloDatabase();//關閉連接
}
catch(_com_error e){...}//異常處理
}
}
實時采集到的圖像的保存可以使用兼容DC、兼容位圖和綁定解綁圖像來完成,實現代碼為:
CWnd*pWnd=GetDlgItem(IDC_ PICTURE2);
CDC* pDC=pWnd->GetDC();
//獲得圖像控件大小
CRect testrect;
pWnd->GetWindowRect testrect);/
ScreenToClient(testrect);
//創建兼容DC
CDC testDC;
testDC.CreateCompatibleDC(pDC);
//創建兼容位圖
CBitmap testbmp;
testbmp.CreateCompatibleBitmap(pDC, testrect.Width(),testrect.Height());
//將兼容位圖選入兼容DC
CBitmap*pOld=testDC.SelectObject
(&testbmp);
testDC.BitBlt(0,0,testrect.Width(),testrect.Height(),pDC,0,0,SRCCOPY);//將當前DC內容復制到兼容DC
CImage image;
image.Attach((HBITMAP)(testbmp.m_hObject));//綁定圖像
image.Save(Save.GetPathName());//保存操作
image.Detach();//解除綁定
此方法唯一的缺點是需要手動來保存圖像,如果想每隔一段時間保存圖像可以在主對話框中設置定時器,可以在前面的繪圖程序中也調用SetTimer()函數發送WM_TIMER消息來調用消息響應函數OnTimer()定時觸發圖像保存命令來自動保存圖像,由于系統一般能快速對星且持續穩定,自動保存圖像意義不大,所以軟件沒有采用此方法[12]。
將軟件應用到實際的船載衛星通信系統中,通過選取中星6號衛星,利用夏普接收機,對星后衛星實時狀態與搖擺臺所在地區GPS信息如圖3所示。

圖3 船載衛星天線實時狀態界面
在選星參數發送給天線串口后,對星時接收機傳送過來的AGC值圖像繪制以及天線實時姿態如圖4和圖5所示。
從實際天線各項參數和軟件采集到的數據對比分析,天線姿態差別在5°以內,在圖像采集中間部分的時刻已經對上衛星,且吻合頻譜分析儀采集到的信號波形信息,軟件達到工程應用的要求[13]。
文中探討了利用MFC實現在船載衛星通信系統中的串口通信,通過串口發送過來的數據流利用成熟 的串口類實時采集,并將狀態數據通過多線程實時顯

圖4 船載衛星天線實時AGC曲線

圖5 船載衛星天線絕對方位角、俯仰角和 相對船頭的方位角曲線
示在界面,繪制了動態AGC、天線姿態狀態圖,并且能夠通過操作數據庫完成串口數據利用控件回顯定時保 存和圖像保存,測試結果表明該軟件運行穩定,效果 明顯[14]。
[1] 盧萬錚.天線理論與技術[M].西安:西安電子科技大學出版社,2004.
[2] 譚思亮,鄒超群.Visual C++串口通信工程開發實例導航[M].北京:人民郵電出版社,2003.
[3] 丁華眾.船用衛星通信終端的研究與應用[D].南京:南京郵電大學,2007.
[4] 孫 鑫.VC++深入詳解[M].北京:電子工業出版社,2006.
[5] Matzger R C.軟件調試思想:采用多學科方法[M].尹曉峰,馬振萍,譯.北京:電子工業出版社,2004.
[6] Kraus J D,Marhefka R J.Antennas:for all applications[M].New York:New McGraw-Hill,2001.
[7] INTELSAT SSOG 210.Earthstation verification tests[S].2000.
[8] 明日科技,劉銳寧,梁 水,等.Visual C++開發技術大全[M].北京:人民郵電出版社,2009.
[9] 李長林,高 潔.Visual C++串口通信技術與典型實例[M].北京:清華大學出版社,2006.
[10] 李春葆,曾 平.Access數據庫原理與應用[M].北京:清華大學出版社,2005.
[11] 候俊杰.深入淺出MFC[M].武漢:華中科技大學出版社,2001.
[12] Agilent Technologies.User’s/programmer’s reference[M].USA:Agilent,2006.
[13] 劉付強.船用衛星天線微型姿態測量系統關鍵技術研究[D].長沙:國防科學技術大學,2008.
[14] Bridge W M.Cross Coupling in a five horn monopulse tracking system[J].IEEE Transactions on Antennas AKD Propaqation,1972,AP-20(4):437-442.
Design and Implementation of Serial Data Acquisition System for Ship Antenna
ZHANG Hai-yang
(College of Telecommunications and Information Engineering,Nanjing University of Posts and Telecommunications,Nanjing 210000,China)
In the ship carrier satellite communication system,the antenna control system is connected to the PC via serial port,the PC controls antenna on satellite,the data is sent to PC monitor and control software interface again to control,acquire and process data storage,realizing the observation and adjustment for antenna on satellite and antenna attitude to quickly and accurately to the star.Taking the design of graphical interface as a starting point,expound multi thread human-computer interface implemented by using C++ language and MFC to design PC end using USB port antenna serial data acquisition,and use GDI drawing functions in the PC interface to achieve a true representation of the accurate synchronization of the key parameters time variation diagrams.The key parameters includes Automatic Gain Control (AGC),antenna attitude and so on,and uses the Access database to save data records,to prepare for the query and evaluating.The results show that the software is consistent with the actual standard and can run stably,and can reflect the real-time status data and motion picture of antenna,ship and satellite.At present,it has been widely used in the monitoring and testing of the satellite communication system,and the good interface interaction environment is obtained.
MFC;ship borne satellite communication system;AGC;antenna attitude;serial communication;multithreading;critical area;database;image storage
2015-03-12
2015-06-16
時間:2015-11-15
國家自然科學基金資助項目(61271234)
張海洋(1990-),男,碩士研究生,研究方向為衛星通信技術。
http://www.cnki.net/kcms/detail/61.1450.TP.20151119.1107.016.html
TP302
A
1673-629X(2016)01-0150-05
10.3969/j.issn.1673-629X.2016.01.032