半点观测辅助提醒程序的实现

(整期优先)网络出版时间:2013-04-14
/ 3

半点观测辅助提醒程序的实现

张涛张占文

张涛中国民用航空中南地区空中交通管理局河南分局451162

张占文中国民用航空飞行学院洛阳分院471001

摘要半点观测是地面观测中经常进行的一项例行观测项目。半点观测辅助提醒程序提供了基于主导能见度判断和飞行计划保障的辅助声音提醒功能。本文从总体和界面设计以及代码实现等方面介绍了如何使用MFC开发半点观测辅助提醒程序。

关键词半点观测辅助提醒MFC主导能见度飞行计划

郑州机场不在指定的24小时发布半点机场例行天气报告的机场之列,当满足相关条件需要进行半点观测时,现有的发报软件并不能准确做到辅助提醒的功能。虽然采取了手动措施来避免“错、忘、漏”,但缺少一个简单易用的自动化软件。本文介绍了如何使用MFC开发半点观测辅助提醒程序。

1.半点观测

民用航空气象地面观测分为例行观测、特殊观测和事故观测三种,其中例行观测是指按指定的时间、次数和项目对有关气象要素进行观测。通常每小时观测一次,也可每半小时观测一下[1]。机场气象台(站)应当于整点或者半点采集数据后立即发布机场例行天气报告[2]。

民航局空管局指定的机场气象台应当每日24小时连续发布时间间隔为0.5小时的机场例行天气报告。指定发布半点机场例行天气报告的机场为:北京、太原、天津、上海虹桥、上海浦东、杭州、广州、深圳、沈阳、大连、乌鲁木齐。郑州机场并不在指定发布半点机场例行天气报告的机场之列。

郑州机场气象台在当主导能见度低于1500米以及保障重要飞行时需发布半点机场例行天气报告。

2.程序条件判断

半点观测辅助提醒程序通过实时获取最近一份天气报告报文,解析出报文的有用项内容,判断其中主导能见度是否低于1500米。如果主导能见度低于1500米则在下个半点时次进行辅助提醒;反之,则不进行提醒。

程序使用数据文件方式管理飞行计划,实现飞行计划的增加、删除和修改。在飞行计划设置的提醒起止时间生效时进行辅助提醒;反之,则不进行提醒。

3.总体及界面设计

3.1总体设计

半点观测辅助提醒程序总体设计的结构图如图1所示,程序设计中考虑了整点观测的提醒功能。

整点报时时刻为整点前10分钟使用声音提醒观测员进行观测,持续时间为30秒;在整点前30秒使用声音提醒观测员进行编发报,持续时间为30秒。

半点报时时刻为半点前10分钟使用声音提醒观测员进行观测,持续时间为30秒;在半点前30秒使用声音提醒观测员进行编发报,持续时间为30秒。

3.2界面设计

半点观测辅助提醒程序如图2所示,主要分为三个部分:左上方的功能选择区、右上方的飞行计划编辑区和下方的报文显示区。

功能选择区分为两个区域:提醒时刻和选择条件。提醒时刻包含全时次整点报时、全时次半点报时和条件判断半点报时三个条件选项。其中条件判断半点报时要结合选择的条件使用。选择条件包含飞行保障和能见度低于1500米两个条件选项。

飞行计划编辑区由三个按钮控件、一个列表控件和一个编辑窗口组成。飞行计划列表显示会根据飞行计划未生效、生效、失效三个状态自动选择不同的字体颜色。当飞行计划未生效时,字体颜色为黑色;当飞行计划生效时,字体颜色为红色;当飞行计划失效时,字体颜色为灰色。编辑窗口如图3所示,飞行计划基本信息可以在该窗口内完成编辑,半点提醒时刻可以根据需要进行设置。

报文显示区使用动态文本框显示最近一份天气报告报文,并根据主导能见度自动选择不同的字体颜色。当主导能见度高于或等于1500米时,报文字体颜色为黑色;当主导能见度低于1500米时,报文字体颜色为红色。

4.使用MFC编写程序

4.1建立工程

打开MicrosoftVisualStudio2005,建立一个基于对话框的MFC应用程序。根据界面设计的内容对主对话框进行布局设计,在资源视图中添加一个对话框资源[3],并为这个子对话框指定类名。同样根据界面设计的内容对子对话框进行布局设计。

4.2设置飞行计划编辑区

(1)使用数据文件存储飞行计划,在区域设定中使用chs避免出现乱码。下面是WritePlan函数的相关代码:

char*old_locale=_strdup(setlocale(LC_CTYPE,NULL));

setlocale(LC_CTYPE,"chs");//设定<ctpye.h>中字符处理方式

if(file.Open(_T(".\\Plan.dat"),CFile::modeCreate|CFile::modeWrite|CFile::typeText)==0)

return;//使用一个dat文件存储飞行计划,如果没有则新建一个。

CListBox*pCtrl1=(CListBox*)GetDlgItem(IDC_LIST1);//使用一个ListBox控件进行排序

pCtrl1->ResetContent();//重置ListBox

CListCtrl*pCtrl2=(CListCtrl*)GetDlgItem(IDC_LIST2);//飞行计划列表

intnItem=pCtrl2->GetItemCount();//获取行数

intnColumn=pCtrl2->GetHeaderCtrl()->GetItemCount();//获取列数

inta,b,c;

for(a=0;a<nItem;a++)//把飞行计划列表存入一个CStringArray中

{

for(b=0;b<(nColumn-1);b++)

{

row+=pCtrl2->GetItemText(a,b);

row+=_T("");

}

row+=pCtrl2->GetItemText(a,b);

curArray.Add(row);

row=_T("");

}

intnDepth=(int)curArray.GetSize();//获取CStringArray的深度

for(c=0;c<nDepth;c++)//把CStringArray中的数据放入ListBox中进行排序

{

pCtrl1->AddString(curArray.GetAt(c));

}

intnList=pCtrl1->GetCount();

CStringend=_T("\n");

while(nList>0)//写入数据文件

{

pCtrl1->GetText(nList-1,line);//从ListBox中读取数据

file.WriteString(line);

file.WriteString(end);

nList--;

}

file.Close();

setlocale(LC_CTYPE,old_locale);

free(old_locale);//还原区域设定

(2)添加按钮需要调用编辑对话框,将编辑对话框形成的参数传递至飞行计划列表进行显示,添加新飞行计划后还需要选中该计划。删除按钮使用GetSelectedCount、GetNextItem和DeleteItem三个函数即可实现。修改按钮同样需要调用编辑对话框,将需要编辑的飞行计划参数传递至编辑对话框,编辑结束后,参数回传并对飞行计划列表进行更新显示。下面是添加按钮的相关代码:

PlanDlgDlg1;

Dlg1.DoModal();//调用编辑对话框

intsize=(int)Dlg1.lArray.GetSize();//lArray是一个CStringArray,用于参数传递

if(size!=0)//lArray初始化为空

{

CListCtrl*pCtrl=(CListCtrl*)GetDlgItem(IDC_LIST2);

intnItem=pCtrl->GetItemCount();//获取飞行计划列表的行数

pCtrl->InsertItem(nItem,Dlg1.lArray.GetAt(0));//插入一行,并插入第一个数据

for(intj=1;j<size;j++)

{

pCtrl->SetItemText(nItem,j,Dlg1.lArray.GetAt(j));//插入这行的第j项的数据

}

pCtrl->GetFocus();

POSITIONpos=pCtrl->GetFirstSelectedItemPosition();

while(pos!=NULL)//清除所有已选中项

{

intiSel=pCtrl->GetNextSelectedItem(pos);

pCtrl->SetItemState(iSel,0,LVIS_SELECTED);

}

pCtrl->SetItemState(nItem,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);

//选中插入项

}

pFlag=GetPlanFlag();//重新标记颜色

WritePlan();//写入数据文件

4.3声音提醒

程序使用一个1秒钟的定时器用于实时判断整点、半点、能见度和飞行计划条件是否生效,使用以下语句进行声音提醒:

if(nMin==50&&nSec==0)

{

PlaySound(BEEP,NULL,SND_FILENAME|SND_ASYNC|SND_NODEFAULT);

}

4.4其他功能

为了保证程序的安全性,还使用了托盘显示和密码控制的功能。程序将最小化按钮重载,使窗口隐藏。窗口的还原,需要在弹出的密码对话框中输入正确密码,确保了飞行计划等信息的安全性。

5.结束语

半点观测辅助提醒程序,实现了半点观测的自动化条件判断和声音提醒功能。程序有效避免了手动方式可能造成的“错、忘、漏”的发生,为观测员减轻了工作压力。

参考文献

【1】民用航空气象地面观测规范.AP-117-TM-02R1.

【2】民用航空飞行气象情报发布与交换办法.AP-117-TM-2009-01R2

【3】侯俊杰.深入浅出MFC(第2版).武汉:华中科技大学出版社.2001

【4】任哲.MFCWindows应用程序设计(第2版).北京:清华大学出版社.2007

【5】姚领田.MFC窗口程序设计.北京:水利水电出版社.2007