国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于MFC的人工報靶程序設(shè)計

2022-10-15 13:17劉春光張亞寧
現(xiàn)代信息科技 2022年14期
關(guān)鍵詞:經(jīng)度緯度數(shù)據(jù)包

劉春光,張亞寧

(92124 部隊,遼寧 大連 116023)

0 引 言

在海上進行目標飛行試驗時,需要對海上航區(qū)內(nèi)的船舶、漂浮物等進行實時監(jiān)控,以確保目標飛行器鎖定預(yù)定目標靶。目標飛行器鎖定了非靶目標時需要指揮所安全控制人員及時進行干預(yù),將目標飛行器在空中引爆,以此確保非靶目標的安全。目前,海上監(jiān)視系統(tǒng)可以將掃海雷達、AIS 等艦船信息報告給指揮所并在指揮所安全控制監(jiān)視軟件上實時顯示。但當海上監(jiān)視系統(tǒng)發(fā)生通信鏈路故障時,就需要通過人工方式向指揮所實時匯報目標靶信息,此時通過人工方式向安全控制監(jiān)視軟件添加目標靶信息就顯得尤為重要。

1 程序設(shè)計流程

艦船信息一般包含船名、經(jīng)度、緯度、操作類別等4 項內(nèi)容。本文軟件設(shè)計流程為:首先通過通信設(shè)備獲取艦船的位置、速度等信息,然后將艦船信息的格式轉(zhuǎn)換為安全控制軟件支持的格式,最后將此信息發(fā)送到安全控制軟件進行顯示。程序信號流程如圖1所示。

圖1 程序信號流程

2 功能實現(xiàn)

為了實現(xiàn)人工添加目標靶信息的功能,需要完成人機交互界面設(shè)計、轉(zhuǎn)換船舶信息數(shù)據(jù)格式、向安全控制監(jiān)視軟件發(fā)送數(shù)據(jù)包等環(huán)節(jié)。

2.1 程序界面設(shè)計

本文基于MFC 平臺,采取對話框模式設(shè)計程序界面,程序界面如圖2所示。此程序界面中包含有船名、經(jīng)度、緯度、發(fā)送地址等信息,同時設(shè)置了3 個按鍵“清空”“刪除目標”“增加目標”,用戶可通過按鍵實現(xiàn)相應(yīng)的功能。此界面中,共有“靶船”“經(jīng)度”“緯度”等標簽控件11 項,船名、經(jīng)緯度數(shù)值信息輸入控件9 項,此外還有“清空”“刪除目標”“增加目標”等按鍵控件3 項。

圖2 程序界面圖

2.2 獲取界面參數(shù)信息

界面設(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)緯度信息的度、分、秒按照整型保存。

2.3 信息格式轉(zhuǎn)換

所獲取的程序界面參數(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ā)送。

2.4 信息封包

為了實現(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)比較簡單,在此不再贅述。

2.5 信息發(fā)送

封裝完數(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ā)送等功能。

3 實驗驗證

最后,針對本文設(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)視軟件顯示情況

4 結(jié) 論

本文基于在海上目標飛行試驗中某些特殊情況下需要人工報靶的情況,利用MFC 平臺從信號流程規(guī)劃、界面設(shè)計、功能實現(xiàn)等方面詳細論述了人工添加目標靶信息軟件的設(shè)計流程,最后通過機房實驗驗證了本文設(shè)計軟件的可行性,對于彌補海面監(jiān)視系統(tǒng)通信鏈路故障時無法自動獲取目標靶信息這一缺陷具有一定的現(xiàn)實意義。

猜你喜歡
經(jīng)度緯度數(shù)據(jù)包
基于時隙ALOHA與NOMA的通信系統(tǒng)性能分析
對時差計算方法的探討
C#串口高效可靠的接收方案設(shè)計
緯度
關(guān)于正午太陽高度(角)公式的推導
網(wǎng)絡(luò)數(shù)據(jù)包的抓取與識別
巧用規(guī)律妙解“日期變更題”
如何計算地方時
印江| 平湖市| 西乌珠穆沁旗| 丹阳市| 鹤岗市| 河间市| 泸西县| 枣强县| 会昌县| 叙永县| 石家庄市| 封开县| 梧州市| 理塘县| 子洲县| 易门县| 独山县| 丹巴县| 万宁市| 大悟县| 巩义市| 鄂伦春自治旗| 宁城县| 靖州| 马尔康县| 鄱阳县| 称多县| 安远县| 博客| 奉新县| 墨脱县| 鸡泽县| 嵊州市| 道孚县| 海丰县| 宽城| 禹州市| 慈利县| 无棣县| 太湖县| 乌拉特中旗|