,2
(1.空軍工程大學(xué) 工程學(xué)院,西安 710038;2.北京航空航天大學(xué) 后備軍官選拔培訓(xùn)辦公室,北京 100083)
20世紀(jì)70年代,“越戰(zhàn)”的經(jīng)驗(yàn)教訓(xùn)促使美國(guó)空軍開(kāi)始利用技術(shù)手段監(jiān)控、評(píng)估空戰(zhàn)訓(xùn)練過(guò)程,客觀實(shí)時(shí)評(píng)估對(duì)抗結(jié)果,實(shí)現(xiàn)訓(xùn)練模式的變革。
近年來(lái),以新武器裝備快速發(fā)展為主要標(biāo)志的空軍轉(zhuǎn)型建設(shè)快速推進(jìn),軍事訓(xùn)練改革不斷深入??諔?zhàn)訓(xùn)練系統(tǒng)運(yùn)用實(shí)時(shí)仿真、航電系統(tǒng)信息監(jiān)控、高帶寬數(shù)傳等技術(shù)手段,實(shí)現(xiàn)對(duì)飛機(jī)技術(shù)狀態(tài)、空中動(dòng)態(tài)、訓(xùn)練質(zhì)量的實(shí)時(shí)監(jiān)控。這些都需要準(zhǔn)確、可靠的飛行數(shù)據(jù)支持。為獲得準(zhǔn)確、連續(xù)、平滑的數(shù)據(jù),客觀公正地評(píng)定空中訓(xùn)練效果,提高訓(xùn)練質(zhì)量,本文提出一種空戰(zhàn)訓(xùn)練系統(tǒng)(Air Combat Training System,ACTS)數(shù)據(jù)有效性檢驗(yàn)算法,并通過(guò)仿真試驗(yàn)證明了其有效性。
ACTS的飛行數(shù)據(jù)通過(guò)數(shù)據(jù)鏈進(jìn)行傳輸,這里采用兩臺(tái)PC以及兩部電臺(tái)來(lái)進(jìn)行收發(fā)飛行數(shù)據(jù)的模擬,因此采用串口通信來(lái)完成數(shù)據(jù)的接收[1-2]。
2.1.1串口類(lèi)及串口初始化
為了充分利用面向?qū)ο蟪绦蛟O(shè)計(jì)在可維護(hù)性、易修改性和可重用性三方面優(yōu)點(diǎn),廣泛使用了類(lèi)和對(duì)象。其中對(duì)于串口的所有操作都封裝在CCommCtrl類(lèi)中。該類(lèi)的定義如下:
class CCommCtrl
{
public://公共接口
CCommCtrl();//構(gòu)造函數(shù)
virtual~CCommCtrl();//析構(gòu)函數(shù)
bool OpenPort(char*portname);//打開(kāi)串口并初始化串口
bool ClosePort();//關(guān)閉串口
bool ReadFrom(LPVOID inputData,const unsigned int sizeBuffer, unsigned long&length,LPOVERLAPPED ov);//從串口讀數(shù)據(jù)
bool WriteTo(LPCVOID outputData,const unsigned int sizeBuffer, unsigned long&length,LPOVERLAPPED ov); //向串口寫(xiě)數(shù)據(jù)
bool GetCommStated();//獲得串口的狀態(tài)
HANDLE GetCommHandle();//獲得串口的句柄
private://私有變量
bool m-bCommOpen;//指明串口是否打開(kāi),true標(biāo)識(shí)打開(kāi)
HANDLE m-hComm;//串口的句柄
DCB m-dcb;//設(shè)備控制塊
};
Windows系統(tǒng)實(shí)現(xiàn)串口的通信必須先對(duì)串口的通信參數(shù)進(jìn)行初始化,而其中比較重要的是數(shù)據(jù)傳輸率、奇偶校驗(yàn)、數(shù)據(jù)比特?cái)?shù)和停止比特?cái)?shù)等。
Window API GetCommState()函數(shù)可以獲取串口的當(dāng)前配置。該函數(shù)定義如下:
BOOL GetCommState(HANDLE hFile,LPDCB lpDCB);
其中,hFile是由CreateFile()函數(shù)返回的指向已打開(kāi)串口的句柄;lpDCB為指向設(shè)備控制塊(DCB)的指針,包含各種串口通信的參數(shù)。
2.1.2多線程實(shí)現(xiàn)串口通信
報(bào)文收發(fā)線程以一個(gè)UI線程來(lái)定義。系統(tǒng)主線程首先通過(guò)調(diào)用Windows API函數(shù)完成對(duì)串口的初始化,初始化的參數(shù)由DCB結(jié)構(gòu)給出,并在主線程中自定義通信事件消息,初始化完成以后,調(diào)用MFC的AfxBeginThread()函數(shù)創(chuàng)建報(bào)文收發(fā)線程,報(bào)文收發(fā)線程在后臺(tái)對(duì)串口進(jìn)行實(shí)時(shí)監(jiān)測(cè),當(dāng)監(jiān)測(cè)到預(yù)定義的事件后,進(jìn)行相應(yīng)的消息函數(shù)處理,與此同時(shí),主線程還可以完成人機(jī)交互和協(xié)調(diào)其它線程的同步。圖1為地面接收數(shù)據(jù)時(shí)線程的處理流程。
圖1 地面數(shù)據(jù)接收流程圖Fig.1 Flowchart of ground data receiving
為了使主線程有效的控制該線程,在線程類(lèi)中定義了一個(gè)同步事件用來(lái)當(dāng)主線程需要關(guān)閉該線程時(shí)釋放串口資源,然后關(guān)閉該線程。這里通過(guò)使用WindowsAPI函數(shù)WaitForMultipleObject()來(lái)等待不同的事件以選擇不同的處理過(guò)程。
代碼實(shí)現(xiàn):
(1)主線程創(chuàng)建并啟動(dòng)報(bào)文接收線程
m-pRecvThread=(CRecvThread*)AfxBeginThread(RUNTIME-CLASS(CRecvThread),THREAD-PRIORITY-NORMAL,0,CREATE-SUSPENDED);
m-pRecvThread->ResumeThread();
(2)報(bào)文接收線程打開(kāi)串口
if(OpenComm()==false))//OpenComm()中實(shí)現(xiàn)了串口的打開(kāi)和設(shè)置
{
AfxMessageBox(″Open failure!″);
return 1;
}
(3)創(chuàng)建線程同步事件
OVERLAPPED ov;
HANDLE hWait[2];
ov.hEvent=CreateEvent(0,true,0,0);
m-hThreadTerm=CreateEvent(0,true,0,0);
hWait[0]=ov.hEvent;
hWait[1]=m-hThreadTerm;
(4)等待串口通信事件,如果串口接收到數(shù)據(jù),置事件ov.hEvent為有信號(hào)
while(abContinue)
{……
if(!::WaitCommEvent(m-CCommCtrl.GetCommHandle(),&dwEventMask,&ov))
{
DWORD error=GetLastError();
ASSERT(GetLastError()==ERROR-IO-PENDING);
}
……
}
(5)WaitForMultipleObjects()等待有用信號(hào)的產(chǎn)生,否則無(wú)限期的等待
dwWaitResult=WaitForMultipleObjects(2,hWait,FALSE,INFINITE);
(6)如果ov.hEvent為有信號(hào),即串口接收到字符,接收數(shù)據(jù)并置事件ov.hEvent為無(wú)信號(hào)
if(dwWaitResult==WAIT-OBJECT-0)
{
……
::ReadFile(m-CCommCtrl.GetCommHandle(),recvTmp,sizeof(recvTmp),&dwBytesRead,&ovRead);
……
ResetEvent(ov.hEvent);
}
(7)如果m-hThreadTerm為有信號(hào),即主線程要終止該線程,關(guān)閉串口并置事件m-hThreadTerm為無(wú)信號(hào)
else if(dwWaitResult==WAIT-OBJECT-0+1)
{
……
m-CCommCtrl.ClosePort();
ResetEvent(m-hThreadTerm);
break;
}
(8)主線程關(guān)閉串口接收線程
GetExitCodeThread(m-pRecvThread->m-hThread,&exit);
TerminateThread(m-pRecvThread->m-hThread,exit);
需要發(fā)送報(bào)文時(shí),由于發(fā)送的數(shù)據(jù)量不大并且是主動(dòng)的,所以只需要調(diào)用串口類(lèi)CCommCtrl的WriteTo接口即可完成對(duì)報(bào)文的發(fā)送。
Microsoft Windows環(huán)境下的網(wǎng)絡(luò)編程接口[1,3]是Windows套接字(Windows Socket,Winsock)。Winsock提供了包括TCP/IP、IPX等多種通信協(xié)議下的編程接口。不同的Windows版本支持不同的Winsock版本,其中Windows 95等早期版本本身只支持Winsock1.1(16位)下的編程(可以通過(guò)安裝相關(guān)的軟件包使其支持Winsock2.0),而Windows98、Windows NT4.0、Windows 2000、WindowsXP 則直接支持Winsock2.0(32位)。Winsock2.0是Winsock1.1的擴(kuò)展,除兼容Winsock1.1 API外,還定義了一套可支持IP多播的與協(xié)議無(wú)關(guān)的API。
系統(tǒng)需要將報(bào)文發(fā)送到不同的客戶(hù)端,并且多播組由報(bào)文接收服務(wù)器決定,因此采用有根模式來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)分發(fā)。
使用Winsock 2.0實(shí)現(xiàn)IP多播的步驟如下(根節(jié)點(diǎn)配置):
2.2.1初始化Winsock資源
在使用Winsock之前,必須調(diào)用WSAStartup()函數(shù)初始化Windows SocketDLL。它允許應(yīng)用程序或DLL指定Windows Sockets API要求的版本。
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested=MAKEWORD(2,2);
int result=WSAStartup(wVersionRequested,&wsaData);//初始化套接字
2.2.2創(chuàng)建套接字
調(diào)用WSASocket()函數(shù)創(chuàng)建一個(gè)使用UDP套接字,它是加入多播組的初始化套接字,以后數(shù)據(jù)的發(fā)送和接收都在該套接字上進(jìn)行。針對(duì)本系統(tǒng)的需求,將參數(shù)dwFlags設(shè)置為WSA-FLAG-MULTIPOINT-C-ROOT、WSA-FLAG-MULTIPOINT-D-ROO和WSA-FLAG-OVERLAPPED的位和,指明組播方式為有根模式:
Sock=WSASocket(AF-INET,SOCK-DGRAM,IPPROTO-UDP,NULL,0,WSA-FLAG-OVERLAPPED|WSA-FLAG-MULTIPOINT-C-ROOT|WSA-FLAG-MULTIPOINT-D-ROOT);
2.2.3設(shè)置套接字的選項(xiàng)
調(diào)用setsockopt()函數(shù)為套接字設(shè)置SO-REUSEADDR選項(xiàng),以允許套接字綁扎到一個(gè)已在使用的地址上:
bFlag=TRUE;//設(shè)置套接字選項(xiàng),使套接字為可重用端口地址
setsockopt(Sock,SOL-SOCKET,SO-REUSEADDR,(char*)&bFlag,1);
2.2.4綁定套接字
調(diào)用bind()函數(shù)綁定套接字,從而將創(chuàng)建好的套接字與本地地址和本地端口聯(lián)系起來(lái)。對(duì)于多播通信來(lái)說(shuō),發(fā)送和接收數(shù)據(jù)通常采用同一個(gè)端口:
memset(&local,0,sizeof(local));
local.sin-family=AF-INET;
local.sin-port=htons((USHORT)9999);
local.sin-addr.s-addr=htonl(INADDR-ANY);
bind(Sock,(struct sockaddr FAR*)&local,sizeof(local));
2.2.5注冊(cè)網(wǎng)絡(luò)消息及其網(wǎng)絡(luò)事件
WSAAsyncSelect(Sock,m-hWnd,WM-SOCK-MSG,FD-READ);//數(shù)據(jù)等待被讀入子節(jié)點(diǎn)的配置與根節(jié)點(diǎn)類(lèi)似,只是建立套接字時(shí)的dwFlags設(shè)置有所不同。建立組播的好處就是如果系統(tǒng)需要擴(kuò)展功能,可以充分利用現(xiàn)有組播框架。
建立好組播組以后,根節(jié)點(diǎn)和子節(jié)點(diǎn)之間就可以進(jìn)行通信了,根節(jié)點(diǎn)發(fā)送報(bào)文時(shí)只需要調(diào)用sendto函數(shù),具體代碼如下:
const char*strMes=LPCTSTR(m-SendMessage);
int nSize=m-SendMessage.GetLength()+1;
sendto(Sock,strMes,nSize,0,(sockaddr*)&Remote,sizeof(Remote));
子節(jié)點(diǎn)只需要調(diào)用recvfrom函數(shù)即可獲得接收到的數(shù)據(jù)。另外,子節(jié)點(diǎn)還可以利用過(guò)濾器來(lái)實(shí)現(xiàn)報(bào)文過(guò)濾,只接收需要的報(bào)文。
實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)分發(fā)的主要意義在于:在接收ACTS飛行數(shù)據(jù)時(shí),如果報(bào)文的數(shù)目比較多,利用一個(gè)服務(wù)器端軟件進(jìn)行實(shí)時(shí)監(jiān)控將比較困難,而通過(guò)網(wǎng)絡(luò)數(shù)據(jù)分發(fā)模塊,可以將報(bào)文發(fā)送到多個(gè)客戶(hù)端,各客戶(hù)端可以分別監(jiān)視部分飛機(jī)或地面監(jiān)控系統(tǒng)的報(bào)文信息,從而可以更好更有效地實(shí)現(xiàn)ACTS對(duì)戰(zhàn)場(chǎng)的實(shí)時(shí)監(jiān)視。
VC中使用ADO實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接[1]。由于VC在數(shù)據(jù)庫(kù)編程方面的先天缺陷,導(dǎo)致使用VC編寫(xiě)數(shù)據(jù)庫(kù)操作方面的工作比較復(fù)雜,可以利用ADO在VC中實(shí)現(xiàn)數(shù)據(jù)庫(kù)編程。
2.3.1引入ADO庫(kù)
在Visual C++中使用ADO開(kāi)發(fā)數(shù)據(jù)庫(kù)之前,需要引入ADO庫(kù)??梢栽陬^文件中引入ADO庫(kù)文件,方法如下:
#import″c:program filescommon filessystemadomsado15.dll″
#include
#include
#include″icrsint.h″
預(yù)處理指令#import使程序在編譯過(guò)程中引入ADO動(dòng)態(tài)庫(kù)(msado15.dll)。接下來(lái)的兩個(gè)“#include”語(yǔ)句引入了頭文件來(lái)定義ADO2.0的類(lèi)和接口標(biāo)識(shí)。最后的“#include”語(yǔ)句引入了ADO2.0數(shù)據(jù)綁定擴(kuò)展。
2.3.2建立數(shù)據(jù)庫(kù)連接
建立數(shù)據(jù)庫(kù)的連接需要使用連接對(duì)象(Connection Object)。首先定義一個(gè)ConnectionPtr類(lèi)型的指針,代碼如下:
ConnectionPtr m-pConnection;
然后調(diào)用Create Instance方法實(shí)例化,代碼如下:
m-pConnection.CreateInstance(uuidof(Connection));
調(diào)用Connection對(duì)象的Open方法創(chuàng)建數(shù)據(jù)庫(kù)的連接,Open函數(shù)的原型如下:
HRESULT Open(-bstr-t ConStr,-bstr-t UserID,-bstr-t Pwd,Long Opts);
其中,ConStr是一個(gè)包含連接信息的字符串,UserID是訪問(wèn)數(shù)據(jù)庫(kù)的用戶(hù)名稱(chēng),Pwd是訪問(wèn)數(shù)據(jù)庫(kù)的密碼,Opts為可選參數(shù)。如果在連接字符串ConStr中包含了數(shù)據(jù)庫(kù)用戶(hù)名和密碼,UserID和Pwd值可以為空。
2.3.3創(chuàng)建命令對(duì)象和記錄集對(duì)象
CommandPtr m-pCommand;
RecordsetPtr m-pRecordset;
m-pCommand.CreateInstance(″ADODB.Command″);
m-pRecordset.CreateInstance(-uuidof(Recordset));
然后將建立的數(shù)據(jù)庫(kù)連接賦給m-pCommand,這樣利用m-pCommand就可以對(duì)打開(kāi)的數(shù)據(jù)庫(kù)進(jìn)行SQL操作了:
m-pCommand->ActiveConnection=m-pConnection。
2.3.4將報(bào)文數(shù)據(jù)插入數(shù)據(jù)庫(kù)
在每類(lèi)報(bào)文譯碼類(lèi)中定義了一個(gè)GenerateInsertSQL函數(shù),該函數(shù)無(wú)參數(shù),返回此類(lèi)報(bào)文的插入SQL語(yǔ)句,這樣,對(duì)于某一類(lèi)報(bào)文,其插入數(shù)據(jù)庫(kù)的代碼如下:
//p為指向運(yùn)行時(shí)某種報(bào)文的對(duì)象的指針
//插入數(shù)據(jù)字符串
CString sql=p->GenerateInsertSQL();m-pCommand->CommandText=sql;
m-pCommand->Execute(&vNULL,&vNULL,adCmdText);
3.1.1模塊主要功能
有效性檢驗(yàn)?zāi)K[4]主要實(shí)現(xiàn)以下幾個(gè)關(guān)鍵功能:
(1)根據(jù)ID編號(hào)或者地址,判斷該飛行數(shù)據(jù)是屬于哪架飛機(jī)的。ACTS可以同時(shí)實(shí)時(shí)監(jiān)控10架飛機(jī),每架飛機(jī)都有自己的ID號(hào),根據(jù)ID號(hào)就可以劃分該數(shù)據(jù)屬于哪架飛機(jī)的數(shù)據(jù);
(2)根據(jù)時(shí)間戳判斷飛行數(shù)據(jù)是否延時(shí)或丟失。時(shí)間戳是判斷數(shù)據(jù)到達(dá)時(shí)間的重要依據(jù),有了時(shí)間戳才可以準(zhǔn)確判斷飛行數(shù)據(jù)是否發(fā)生了延時(shí)或者丟失。但前提是只有實(shí)現(xiàn)了ACTS各個(gè)分系統(tǒng)內(nèi)的時(shí)間同步,才可以利用時(shí)間戳來(lái)獲取這些數(shù)據(jù)之間的關(guān)系,對(duì)這些數(shù)據(jù)進(jìn)行分析;
(3)根據(jù)各種飛行數(shù)據(jù)的特征以及先前獲得的經(jīng)驗(yàn)值進(jìn)行預(yù)估,根據(jù)預(yù)估值判斷數(shù)據(jù)是否正確。對(duì)于像一些記錄飛機(jī)工作是否正常的數(shù)據(jù),我們可以直接根據(jù)該類(lèi)數(shù)據(jù)正常值的范圍就可以判斷數(shù)據(jù)是否正確;而對(duì)于像記錄飛機(jī)航跡的這些實(shí)時(shí)變化很大的數(shù)據(jù),我們就必須在該數(shù)據(jù)到達(dá)之前,利用卡爾曼濾波外推算法,估算出該數(shù)據(jù)的預(yù)估值,然后在該數(shù)據(jù)到達(dá)時(shí)進(jìn)行比對(duì),從而判斷出該數(shù)據(jù)是否正確;
(4)數(shù)據(jù)發(fā)生延時(shí)、丟失或錯(cuò)誤情況后的處理。飛行數(shù)據(jù)地面預(yù)處理系統(tǒng)要完成工作就是將譯碼后正確、連續(xù)的數(shù)據(jù)送給后續(xù)數(shù)據(jù)處理系統(tǒng)進(jìn)行結(jié)算、實(shí)時(shí)顯示等操作。所以如果一旦地面接收到的數(shù)據(jù)發(fā)生上述情況,就必須采取相應(yīng)補(bǔ)償措施進(jìn)行處理。
3.1.2數(shù)據(jù)有效性檢驗(yàn)
有效性檢驗(yàn)?zāi)K處理數(shù)據(jù)的過(guò)程如圖2所示。
(1)等待譯碼模塊送來(lái)的數(shù)據(jù);
(2)根據(jù)時(shí)間戳判斷數(shù)據(jù)是否延時(shí)或丟失。如果該數(shù)據(jù)在有效時(shí)間內(nèi)到達(dá),則將該數(shù)據(jù)進(jìn)行數(shù)據(jù)正確性檢驗(yàn)。如果延時(shí)或丟失,就在日志中記錄該事件的發(fā)生,然后用其它輔助設(shè)備的測(cè)量值或者預(yù)估值代替該數(shù)據(jù);
(3)利用正確性檢驗(yàn)算法進(jìn)行數(shù)據(jù)的正確性檢驗(yàn)。如果數(shù)據(jù)正確,則將數(shù)據(jù)存入數(shù)據(jù)庫(kù)并進(jìn)行進(jìn)一步的實(shí)時(shí)解算、顯示等處理。如果數(shù)據(jù)不正確,就在日志中記錄該事件的發(fā)生,然后用其它輔助設(shè)備的測(cè)量值或者預(yù)估值代替該數(shù)據(jù),進(jìn)行后續(xù)處理。
圖2 數(shù)據(jù)有效性檢驗(yàn)流程圖Fig.2 Data validity inspection flowchart
對(duì)數(shù)據(jù)有效性檢驗(yàn)算法進(jìn)行驗(yàn)證的航跡數(shù)據(jù)來(lái)源于某型飛機(jī)的部分試飛數(shù)據(jù)。數(shù)據(jù)包括兩部分:
(1)利用本機(jī)的機(jī)載飛行數(shù)據(jù)記錄器記錄的數(shù)據(jù),由于不經(jīng)過(guò)遠(yuǎn)距離無(wú)線傳輸,認(rèn)為是正確數(shù)據(jù);
(2)在機(jī)載飛行數(shù)據(jù)記錄器記錄數(shù)據(jù)的同時(shí),由電臺(tái)無(wú)線傳輸?shù)降孛嬗涗浧鞯臄?shù)據(jù),由于實(shí)時(shí)傳輸過(guò)程環(huán)境的影響,數(shù)據(jù)中包含延時(shí)、丟失、錯(cuò)誤等情況。
利用試飛數(shù)據(jù)來(lái)驗(yàn)證有效性檢驗(yàn)算法的方法是:選取地面記錄器上的部分出錯(cuò)的航跡數(shù)據(jù),然后由數(shù)據(jù)有效性檢驗(yàn)算法對(duì)這段錯(cuò)誤航跡數(shù)據(jù)進(jìn)行檢驗(yàn)和處理,最后將檢驗(yàn)及處理后的這段航跡數(shù)據(jù)與機(jī)載飛行數(shù)據(jù)記錄器上的原始航跡數(shù)據(jù)進(jìn)行比對(duì)。
該組飛行數(shù)據(jù)采樣記錄頻率為1次/秒,這里選取第462~622 s的大氣機(jī)高度數(shù)據(jù)進(jìn)行檢驗(yàn)。這段時(shí)間內(nèi)可能由于傳輸環(huán)境惡劣等原因?qū)е碌?82 s高度值出現(xiàn)明顯偏差,第512 s數(shù)據(jù)發(fā)生延時(shí),第565 s數(shù)據(jù)丟失。結(jié)果如圖3~5所示。
根據(jù)上述驗(yàn)證結(jié)果看,有效性檢驗(yàn)算法檢測(cè)出了數(shù)據(jù)的錯(cuò)誤、延時(shí)和丟失,并進(jìn)行相應(yīng)補(bǔ)償處理,得到一組連續(xù)的數(shù)據(jù)。與機(jī)載記錄的試飛數(shù)據(jù)進(jìn)行比較可以看出,該有效性檢驗(yàn)算法較準(zhǔn)確地恢復(fù)了出錯(cuò)的數(shù)據(jù),取得了良好效果。
圖3 地面記錄的試飛數(shù)據(jù):飛機(jī)從4.5 km下降至2.1 km,改平后上升至3.9 kmFig.3 Ground recording test-fly data:the airplane descended from 4.5 km to 2.1 km and rose to 3.9 km after being steady
圖4 經(jīng)有效性檢驗(yàn)算法處理后:飛機(jī)從4.5 km下降至2.1 km,改平后上升至3.9 kmFig.4 Data validity inspection algorithm processing:the airplane descended from 4.5 km to 2.1 km and rose to 3.9 km after being steady
圖5 機(jī)載記錄的原始試飛數(shù)據(jù):飛機(jī)從4.5 km下降至2.1 km,改平后上升至3.9 kmFig.5 Airborne recording originality test-fly data:the airplane descended from 4.5 km to 2.1 km and rose to 3.9 km after being steady
本文提出了一種ACTS數(shù)據(jù)有效性檢驗(yàn)算法,有效地解決了數(shù)據(jù)傳輸過(guò)程中出現(xiàn)的錯(cuò)誤、延時(shí)和丟失等問(wèn)題。該檢驗(yàn)算法對(duì)出錯(cuò)的數(shù)據(jù)進(jìn)行了修正,得到準(zhǔn)確、連續(xù)、平滑的數(shù)據(jù),供地面監(jiān)控系統(tǒng)準(zhǔn)確地實(shí)時(shí)監(jiān)控及評(píng)估。進(jìn)一步研究重點(diǎn)是對(duì)數(shù)據(jù)有效性檢驗(yàn)?zāi)K實(shí)時(shí)性進(jìn)行分析和驗(yàn)證。
參考文獻(xiàn):
[1] 喬林,楊志剛.Visual C++6.0 高級(jí)編程技術(shù)——MFC與多線程篇[M].北京:中國(guó)鐵道出版社,2000.
QIAO Lin,YANG Zhi-gang. Visual C++6.0 Advanced Programming Technology:MFC and Multi-threading[M].Beijing: China Railway Press,2000. (in Chinese)
[2] 李現(xiàn)勇.Visual C++串口通信技術(shù)與工程實(shí)踐[M].北京:人民郵電出版社,2004.
LI Xian-yong. Visual C++ Serial Communication Technology and Engineering Practice[M].Beijing:People′s Posts& Telecom Press,2004.(in Chinese)
[3] Andrew S Tanenbaum.Computer Networks[M].3rd ed. New York:Prentice Hall International,Inc.,1997.
[4] 王帥.飛行器航跡數(shù)據(jù)產(chǎn)生及有效性檢測(cè)[D].成都:電子科技大學(xué),2004.
WANG Shuai.Aircraft Track Data Generation and Data Validity Inspection[D].Chengdu:University of Electronic Science and Technology of China,2004.(in Chinese)
[5] 梁德文.戰(zhàn)斗機(jī)航空電子系統(tǒng)最新的發(fā)展趨勢(shì)——網(wǎng)絡(luò)化[J].電訊技術(shù),2008,48(6):93-97.
LIANG De-wen.Review on the New Development of Fighter Avionics System-Networking [J].Telecommunication Engineering,2008,48(6):93-97.(in Chinese)
[6] DRS Air Combat Training System[Z].Florida:DRS Training & Control System,INC.,2007.
[7] Autonomous Air Combat Maneuvering Instrumentation Training System[Z].Ireal:Isreal Aerospace Industries,Ltd.,2008.