劉春光,張亞寧
(92124 部隊,遼寧 大連 116023)
在海上進行目標飛行試驗時,需要對海上航區(qū)內(nèi)的船舶、漂浮物等進行實時監(jiān)控,以確保目標飛行器鎖定預(yù)定目標靶。目標飛行器鎖定了非靶目標時需要指揮所安全控制人員及時進行干預(yù),將目標飛行器在空中引爆,以此確保非靶目標的安全。目前,海上監(jiān)視系統(tǒng)可以將掃海雷達、AIS 等艦船信息報告給指揮所并在指揮所安全控制監(jiān)視軟件上實時顯示。但當海上監(jiān)視系統(tǒng)發(fā)生通信鏈路故障時,就需要通過人工方式向指揮所實時匯報目標靶信息,此時通過人工方式向安全控制監(jiān)視軟件添加目標靶信息就顯得尤為重要。
艦船信息一般包含船名、經(jīng)度、緯度、操作類別等4 項內(nèi)容。本文軟件設(shè)計流程為:首先通過通信設(shè)備獲取艦船的位置、速度等信息,然后將艦船信息的格式轉(zhuǎn)換為安全控制軟件支持的格式,最后將此信息發(fā)送到安全控制軟件進行顯示。程序信號流程如圖1所示。
圖1 程序信號流程
為了實現(xiàn)人工添加目標靶信息的功能,需要完成人機交互界面設(shè)計、轉(zhuǎn)換船舶信息數(shù)據(jù)格式、向安全控制監(jiān)視軟件發(fā)送數(shù)據(jù)包等環(huán)節(jié)。
本文基于MFC 平臺,采取對話框模式設(shè)計程序界面,程序界面如圖2所示。此程序界面中包含有船名、經(jīng)度、緯度、發(fā)送地址等信息,同時設(shè)置了3 個按鍵“清空”“刪除目標”“增加目標”,用戶可通過按鍵實現(xiàn)相應(yīng)的功能。此界面中,共有“靶船”“經(jīng)度”“緯度”等標簽控件11 項,船名、經(jīng)緯度數(shù)值信息輸入控件9 項,此外還有“清空”“刪除目標”“增加目標”等按鍵控件3 項。
圖2 程序界面圖
界面設(shè)計完成之后,就需要從界面中獲取人工添加的船名、經(jīng)緯度等參數(shù)信息。以獲取船名和經(jīng)度信息為例,具體實現(xiàn)代碼為:
GetDlgItemText(IDC_targetname,targetname,10);//獲取船名
m_jd_degree =GetDlgItemInt(IDC_jd_degree);//獲取經(jīng)度度信息
m_jd_minute =GetDlgItemInt(IDC_jd_minute);//獲取經(jīng)度分信息
m_jd_second =GetDlgItemInt(IDC_jd_second);//獲取經(jīng)度秒信息
在此功能實現(xiàn)上,通過調(diào)用相應(yīng)的MFC 函數(shù)實現(xiàn)程序界面參數(shù)的讀取工作,將船名按照字符數(shù)組保存,將經(jīng)緯度信息的度、分、秒按照整型保存。
所獲取的程序界面參數(shù)信息并不能直接被安全控制監(jiān)視軟件識別出來,需要統(tǒng)一成安全控制監(jiān)視軟件所支持的格式后才能被其識別。安全控制監(jiān)視軟件所支持的數(shù)據(jù)格式為:
#pragma pack(1)// 網(wǎng)絡(luò)包中無邊界對齊填充
struct TarInf {
char Action;// ‘A’=新增,’D’=刪除
char key[5];// 船名
double X;// 經(jīng)度
double Y;// 緯度
};
#pragma pack(pop)
在此數(shù)據(jù)格式中,采取網(wǎng)絡(luò)包中無邊界對齊填充的方式構(gòu)建數(shù)據(jù),其中Action 表明此數(shù)據(jù)包的功能,字符A 表示新增目標,字符D 表示刪除目標;船名key 采取字符數(shù)組的方式保存;經(jīng)度和緯度統(tǒng)一成雙浮點型變量。與本文程序界面參數(shù)格式相比,船名均為字符數(shù)組,不需要轉(zhuǎn)換,但經(jīng)緯度信息需要由原來的“度—分—秒”形式轉(zhuǎn)換成“浮點型”單一變量。經(jīng)緯度信息轉(zhuǎn)換的實現(xiàn)代碼為:
m_jd_degree_all=m_jd_degree+m_jd_minute/60+m_jd_second/60/60;
m_wd_degree_all=m_wd_degree+m_wd_minute/60+m_wd_second/60/60;
通過此環(huán)節(jié),將程序界面中所輸入經(jīng)度和緯度的度分秒信息轉(zhuǎn)換成統(tǒng)一格式的位置信息,為下一步的數(shù)據(jù)打包發(fā)送提供了數(shù)據(jù)基礎(chǔ),方便了后續(xù)的數(shù)據(jù)發(fā)送。
為了實現(xiàn)最終的數(shù)據(jù)發(fā)送,還需要按照發(fā)送數(shù)據(jù)TarInf結(jié)構(gòu)進行數(shù)據(jù)打包,將相關(guān)的船舶信息封裝在相應(yīng)的數(shù)據(jù)包中。為了實現(xiàn)此功能,本文定義了TarInf 結(jié)構(gòu)變量tarinf,并通過賦值的方式實現(xiàn)數(shù)據(jù)打包,具體分為目標增加、目標刪除。
2.4.1 增加目標靶信息
TarInf tarinf;//定義目標靶信息數(shù)據(jù)包
for(int i=0;i<=4;i++){tarinf.key[i]=targetname[i];}// 目標靶名
tarinf.X=m_jd_degree_all;//經(jīng)度
tarinf.Y=m_wd_degree_all;//緯度
tarinf.Action =’A’;//增加目標
在此環(huán)節(jié)中,首先定義了TarInf 格式的數(shù)據(jù)tarinf,然后依次對tarinf 的各個變量進行賦值。首先對目標靶名進行賦值,然后對經(jīng)度信息和緯度信息進行賦值,最后按下“增加目標”按鍵將tarinf 變量的Action 值賦為字符“A”,最終實現(xiàn)“添加目標”的任務(wù)。
2.4.2 刪除目標靶信息
TarInf tarinf;//定義目標靶信息數(shù)據(jù)包
for(int i=0;i<=4;i++){tarinf.key[i]=targetname[i];}// 目標靶名
tarinf.X=m_jd_degree_all;//經(jīng)度
tarinf.Y=m_wd_degree_all;//緯度
tarinf.Action =’D’;//刪除目標
在此環(huán)節(jié)中,與“增加目標”功能實現(xiàn)相似,首先對目標靶名進行賦值,然后對經(jīng)度信息和緯度信息進行賦值,最后按下“刪除目標”按鍵將tarinf 變量的Action 值賦為字符“D”,最終實現(xiàn)“刪除目標”的任務(wù)。
2.4.3 清空界面功能
為便于操作人員輸入不同的目標靶信息,為此程序設(shè)置了“清空”功能,當按下“清空”按鍵時系統(tǒng)會將“船名”“經(jīng)度”“緯度”“發(fā)送IP”“發(fā)送PORT”等信息清空,方便操管人員在此輸入信息。此功能的實現(xiàn)比較簡單,在此不再贅述。
封裝完數(shù)據(jù)包后,需要將數(shù)據(jù)包發(fā)送到指定的地址,發(fā)送地址IP 和端口信息的獲取方式與船舶信息的獲取方式相同,IP 地址使用字符數(shù)組IP 保存,端口號使用整型變量PORT 保存。獲取發(fā)送地址信息后,調(diào)用“Winsock2.h”庫中的sendto 函數(shù)實現(xiàn)數(shù)據(jù)發(fā)送功能,具體實現(xiàn)代碼為:
SOCKADDR_IN addr;//構(gòu)建發(fā)送地址結(jié)構(gòu)
addr.sin_family=AF_INET;//發(fā)送模式采取UDP
addr.sin_addr.S_un.S_addr=inet_addr(IP);//發(fā)送地址
addr.sin_port=htons(PORT);//發(fā)送端口號
sendto(m_socket,(char *)lp_tarinf,sizeof(tarinf),0,(SOCKA DDR*)&addr,sizeof(SOCKADDR));//數(shù)據(jù)發(fā)送
此環(huán)節(jié)是發(fā)送封裝好的數(shù)據(jù)最終實現(xiàn)目標顯示,在此環(huán)節(jié)中首先定義SOCKADDR_IN 結(jié)構(gòu)的數(shù)據(jù)addr,然后對addr 的各個成員變量進行賦值,由于本文程序基于UDP 協(xié)議,addr 的sin_family 成員變量賦值為AF_INET,這樣可以實現(xiàn)UDP 信息的發(fā)送,程序根據(jù)程序界面的“發(fā)送IP”和“發(fā)送PORT”信息,分別將其賦值給addr 的sin_addr 和sin_port 兩個成員變量,最后調(diào)用sendto 函數(shù)最終實現(xiàn)數(shù)據(jù)的發(fā)送。
通過以上5 個步驟完成了程序的界面設(shè)計、界面參數(shù)獲取、參數(shù)格式轉(zhuǎn)換、數(shù)據(jù)打包、數(shù)據(jù)發(fā)送等功能。
最后,針對本文設(shè)計的人工添加目標靶信息軟件進行了機房實驗,實驗中設(shè)置船名為“G201”,經(jīng)度為121 度50分42 秒,緯度為38 度43 分13 秒,目標地址為組播地址“232.168.5.112”,目標端口為5150,然后點擊“增加目標”按鍵實現(xiàn)新增目標功能,實驗界面如圖3所示。
圖3 人工報靶軟件參數(shù)設(shè)置
在安全控制監(jiān)視軟件中效果如圖4所示,在遼寧南部海域出現(xiàn)了新增目標“G201”,通過坐標讀取工具得到目標的經(jīng)度為121.845169 度、緯度為38.720315 度,由計算結(jié)果可知此值與實驗中設(shè)置的經(jīng)緯度一致。通過真實環(huán)境下的實驗驗證可以看出,本文設(shè)計的軟件實現(xiàn)了人工手動“添加目標”信息的功能,同時本文還驗證了“刪除目標”“清空”等功能,可以在無法自動接收目標靶信息的情況下實現(xiàn)手動添加目標信息的功能,且經(jīng)過目標位置的比對驗證了本文設(shè)計軟件的精確性。
圖4 安全控制監(jiān)視軟件顯示情況
本文基于在海上目標飛行試驗中某些特殊情況下需要人工報靶的情況,利用MFC 平臺從信號流程規(guī)劃、界面設(shè)計、功能實現(xiàn)等方面詳細論述了人工添加目標靶信息軟件的設(shè)計流程,最后通過機房實驗驗證了本文設(shè)計軟件的可行性,對于彌補海面監(jiān)視系統(tǒng)通信鏈路故障時無法自動獲取目標靶信息這一缺陷具有一定的現(xiàn)實意義。