主题:飞行试验数据绘图处理软件设计
飞行试验数据绘图处理软件设计
常永亮 (飞行试验研究院测试所 陕西西安 710089)
[url=http://www.luckst.com/Main/Other/飞行试验数据绘图处理软件设计.rar]下载原稿[/url]
【摘要】介绍了试飞数据绘图程序功能的实现﹑参数绘图﹑跳点剔补的介绍﹑数据绘图图形输出等进行阐述。
【关键词】绘图设计﹑视窗﹑跳点剔补﹑映射模式、坐标转换、绘图模式。
1 引言
试飞数据绘图是飞行试验数据处理的重要组成部分,方便实用的绘图程序可以加快试飞数据处理、分析的速度,为试飞工程师提供便捷﹑直观的效果。
一个好的绘图程序,涉及多种功能的集成实现。随着计算机软件的飞速发展、绘图控件也越来越多,编制绘图程序也越来越容易。但考虑到我们所处的特殊行业,用户需求比较特殊,程序功能比较复杂,好多控件是不能满足我们的绘图要求,为了方便﹑快捷﹑准确地用图形描述试飞数据处理结果,并且灵活定制用户所需的功能, 笔者没选任何现成的绘图控件,而是完全用代码从底层编写。并能对二进制和十进制数据绘图。
此程序主要绘制时间-历程图,参数对参数的工程图没作要求。
2 软件主界面描述
程序的初始界面如图1。此界面在设计时充分考虑实用性、美观性等各方面设计要点。
界面用“文档与视图结构”做成,显示区按一定比例分成两个区即显示区和控制区,可人为的调整两个区的显示比例。
显示区是CScrollView(可卷动的视窗)类的继承, 一個View 视窗沒有卷轴,是很糟糕的事,因为通常Document 范围大而观景窗范围小。我們不能老让Document 与View 视窗一樣大。一个具有卷轴的View 视窗更具有「观景窗」的意义。
控制区是CFormView(表单视窗)类的继承,表单视窗是一个可以包含控件的视图,与对话框非常相似,通常可以象创建对话框一样使用对话资源向表单视窗中加入控件。使用表单视窗的原因是因为它是一种易于使用的视图,使得程序更加灵活。
使用以上两个类虽然方便,但VC仅提供了框架,大量的工作还要自己做(此不是本文的重点)。
图1飞行试验数据绘图处理软件主界面
3 程序流程
程序流程如图2所示,此图主要讲解了试飞数据绘图程序的软件流程。
图2 程序操作流程图
4 基本功能
4.1对参数最大值和最小值的手动设定与图形的手动缩放:
如果不用手动对参数的最大值最小值进行设定,程序可自动计算出参数的最大值、最小值,并在此值间绘制参数曲线图;亦可人工设定,人为设定参数最大值和最小值可按比例调整参数值大小。如果数据所绘曲线太密集不能确定其曲线走向,该程序还可手动对某参数所绘曲线图的选定区进行放大和缩小,也可在相应的图上用鼠标拖动进行相应的放大和缩小。
此处对参数的最大值、最小值的自动计算出是用数据值比较算法,将最大值、最小值正确算出并显出。
4.2跳点的剔补
跳点有时间跳点和数据跳点,剔除跳点有手动剔除方式和自动剔除方式,手动剔除准确率高但速度较慢,适合所有参数。自动剔除速度极快,仅对极个别参数不能很好的剔除,但可满足数据处理要求。考虑到特殊课题的需求,该程序保留了手动剔除方式。
数据跳点的判断是相当复杂的,要根据参数的特性等判断,自动判断更是如此,比人工判断更难。自动判断要根据此值前后的值的大小和参数等的特性来判断,如判断错了则此参数的正确值剔除所绘图是不正确的。补点也只能最大限度的使其值接近真实值,补点时根据参数值所绘曲线、参数等的特性和被剔除跳点的前后值计算应补点的值,如补点值差异过大那么补的点也就由成跳点了!
对时间跳点的判断相对就容易得多了,时在23至0之间;分在59至0之间;秒在59至0之间,再根据前后时间判断,补时间跳点根据前后时间和所选参数采用的采样率算出,因此是正确的补时间跳点。
如果绘图数据的跳点很少(幅值小),则对所绘图形效果并无大碍,可如果绘图数据的跳点很多(幅值大),则可能很大成度的影响到绘图的效果。程序中进行了剔除跳点和最佳补点的处理,并在绘图界面中设置了“剔补跳点”“停止剔除”的选择。当选择了“剔补跳点"后本程序将在绘图时自动剔除跳点,并在同一位置,补上一个点使绘出的图不致失真,并将那个参数何处何时出现跳点指示出来,以供参考。
4.3显示任意曲线坐标
当图绘出来时,可用鼠标在所绘曲线上点击某处,程序就将此坐标值显示出来,这样可准确地给出参数在该点的值。将参数值按一定的映射模式、坐标转换、绘图模式等在显示器上画出。显示任意曲线坐标可按参数值在显示器上显示反向做程序就可实现。
4.4参数绘图
参数绘图分为特定参数绘图和全部参数绘图,可根据任意选择或将所有参数绘制出来,使得绘图自由度有所增大。
在软件实现绘图时,应注意映射模式、坐标转换、绘图模式、设备的相关性等的应用不同直接影响着图形输出的效果.
4.5其它功能的实现:
可以默认数据的相关信息(如飞机号、时间等),默认时自动读取数据中的相关信息(对文本文件不适应),也可做相应调整,如果时间做了改动绘图时仅绘时间改动间的数据。
5.实现要点及难点
本程序操作简单,部分功能实现自由度较大。每页可绘十个参数(最少一个参数),总页数不限.本程序的技术难点之一是如何使绘出的图形不失真,这就要求将实际数值与输出设备象素的位置正确对应,在绘图或打印时还涉及到设备的相关性,映射模式的不同也直接影响着图形输出的效果;其次对跳点的确认和剔补也是一个难点,如对跳点的确认不正确或补的点不合理则绘出的图也是不正确的。
Windows提供了两种类型的位图:DDB和DIB. DDB是一种与设备相关的位图,DDB是由为位图存放数据的BITMAP结构定义的.程序仅获得位图数据的副本,在不同的机器之间传输位图的意义就不大了.与DDB相比DIB有许多编程方面的优势.它是一种与设备无关性的位图,它带自己的颜色信息,所以,调色板管理就更加容易,DIB还使得在打印时更加易于控制灰度阴影,运行Windows的任何计算机都可以处理DIB,显示时从存储BMP的文件中读出.因此,此程序用的是DIB位图.
本程序绘制曲线单位是像素,也称为设备坐标.程序中设置的映射模式为MM_TEXT,也就是说一个单位代表一个像素.一旦设置了设备环境的映射模式,大多数CDC成员函数就可以使用逻辑坐标参数.GDI提供了用于在DC上画图的绘图工具.MFC定义了若干种对应于Windows的绘图工具的图形对象,如CPen、CBrush、CFont等,在本程序中都用到。
6.结束语
此程序已基本实现了绘制时间-历程图的功能,经对某型号飞行数据的绘图验证已达到技术要求, 显示与打印都能正确的实现,对跳点的剔补和指出跳点的位置也能正确的实现,通过编写此程序后,对绘图程序的编制从底层编写到最终实现有了更深刻的理解,对数据处理和绘图的要求也有了更深的理解,此程序基本已将各种功能积于一体,并在实现时可按客户需求进行选择性操作,在满足用户需求方面自由度较大,程序的实用性也大,可推广使用。
参考文献:[1] 〔美〕 Microsoft公司 著Windows核心编程。
[2] 〔美〕 Beck Zaratian 著Microsoft Visual C++ 6.0 程序员指南。
[3] 〔美〕 Microsoft公司 著Microsoft Visual C++ 6.0 语言参考手册。
[4] 〔美〕 Microsoft公司 著Microsoft Visual C++ 6.0 MFC类库参考手册。
[5] 顾晓明 著VC++图文程序设计。
[6] 徐士良 著C常用算法程序集。
常永亮 (飞行试验研究院测试所 陕西西安 710089)
[url=http://www.luckst.com/Main/Other/飞行试验数据绘图处理软件设计.rar]下载原稿[/url]
【摘要】介绍了试飞数据绘图程序功能的实现﹑参数绘图﹑跳点剔补的介绍﹑数据绘图图形输出等进行阐述。
【关键词】绘图设计﹑视窗﹑跳点剔补﹑映射模式、坐标转换、绘图模式。
1 引言
试飞数据绘图是飞行试验数据处理的重要组成部分,方便实用的绘图程序可以加快试飞数据处理、分析的速度,为试飞工程师提供便捷﹑直观的效果。
一个好的绘图程序,涉及多种功能的集成实现。随着计算机软件的飞速发展、绘图控件也越来越多,编制绘图程序也越来越容易。但考虑到我们所处的特殊行业,用户需求比较特殊,程序功能比较复杂,好多控件是不能满足我们的绘图要求,为了方便﹑快捷﹑准确地用图形描述试飞数据处理结果,并且灵活定制用户所需的功能, 笔者没选任何现成的绘图控件,而是完全用代码从底层编写。并能对二进制和十进制数据绘图。
此程序主要绘制时间-历程图,参数对参数的工程图没作要求。
2 软件主界面描述
程序的初始界面如图1。此界面在设计时充分考虑实用性、美观性等各方面设计要点。
界面用“文档与视图结构”做成,显示区按一定比例分成两个区即显示区和控制区,可人为的调整两个区的显示比例。
显示区是CScrollView(可卷动的视窗)类的继承, 一個View 视窗沒有卷轴,是很糟糕的事,因为通常Document 范围大而观景窗范围小。我們不能老让Document 与View 视窗一樣大。一个具有卷轴的View 视窗更具有「观景窗」的意义。
控制区是CFormView(表单视窗)类的继承,表单视窗是一个可以包含控件的视图,与对话框非常相似,通常可以象创建对话框一样使用对话资源向表单视窗中加入控件。使用表单视窗的原因是因为它是一种易于使用的视图,使得程序更加灵活。
使用以上两个类虽然方便,但VC仅提供了框架,大量的工作还要自己做(此不是本文的重点)。
图1飞行试验数据绘图处理软件主界面
3 程序流程
程序流程如图2所示,此图主要讲解了试飞数据绘图程序的软件流程。
图2 程序操作流程图
4 基本功能
4.1对参数最大值和最小值的手动设定与图形的手动缩放:
如果不用手动对参数的最大值最小值进行设定,程序可自动计算出参数的最大值、最小值,并在此值间绘制参数曲线图;亦可人工设定,人为设定参数最大值和最小值可按比例调整参数值大小。如果数据所绘曲线太密集不能确定其曲线走向,该程序还可手动对某参数所绘曲线图的选定区进行放大和缩小,也可在相应的图上用鼠标拖动进行相应的放大和缩小。
此处对参数的最大值、最小值的自动计算出是用数据值比较算法,将最大值、最小值正确算出并显出。
4.2跳点的剔补
跳点有时间跳点和数据跳点,剔除跳点有手动剔除方式和自动剔除方式,手动剔除准确率高但速度较慢,适合所有参数。自动剔除速度极快,仅对极个别参数不能很好的剔除,但可满足数据处理要求。考虑到特殊课题的需求,该程序保留了手动剔除方式。
数据跳点的判断是相当复杂的,要根据参数的特性等判断,自动判断更是如此,比人工判断更难。自动判断要根据此值前后的值的大小和参数等的特性来判断,如判断错了则此参数的正确值剔除所绘图是不正确的。补点也只能最大限度的使其值接近真实值,补点时根据参数值所绘曲线、参数等的特性和被剔除跳点的前后值计算应补点的值,如补点值差异过大那么补的点也就由成跳点了!
对时间跳点的判断相对就容易得多了,时在23至0之间;分在59至0之间;秒在59至0之间,再根据前后时间判断,补时间跳点根据前后时间和所选参数采用的采样率算出,因此是正确的补时间跳点。
如果绘图数据的跳点很少(幅值小),则对所绘图形效果并无大碍,可如果绘图数据的跳点很多(幅值大),则可能很大成度的影响到绘图的效果。程序中进行了剔除跳点和最佳补点的处理,并在绘图界面中设置了“剔补跳点”“停止剔除”的选择。当选择了“剔补跳点"后本程序将在绘图时自动剔除跳点,并在同一位置,补上一个点使绘出的图不致失真,并将那个参数何处何时出现跳点指示出来,以供参考。
4.3显示任意曲线坐标
当图绘出来时,可用鼠标在所绘曲线上点击某处,程序就将此坐标值显示出来,这样可准确地给出参数在该点的值。将参数值按一定的映射模式、坐标转换、绘图模式等在显示器上画出。显示任意曲线坐标可按参数值在显示器上显示反向做程序就可实现。
4.4参数绘图
参数绘图分为特定参数绘图和全部参数绘图,可根据任意选择或将所有参数绘制出来,使得绘图自由度有所增大。
在软件实现绘图时,应注意映射模式、坐标转换、绘图模式、设备的相关性等的应用不同直接影响着图形输出的效果.
4.5其它功能的实现:
可以默认数据的相关信息(如飞机号、时间等),默认时自动读取数据中的相关信息(对文本文件不适应),也可做相应调整,如果时间做了改动绘图时仅绘时间改动间的数据。
5.实现要点及难点
本程序操作简单,部分功能实现自由度较大。每页可绘十个参数(最少一个参数),总页数不限.本程序的技术难点之一是如何使绘出的图形不失真,这就要求将实际数值与输出设备象素的位置正确对应,在绘图或打印时还涉及到设备的相关性,映射模式的不同也直接影响着图形输出的效果;其次对跳点的确认和剔补也是一个难点,如对跳点的确认不正确或补的点不合理则绘出的图也是不正确的。
Windows提供了两种类型的位图:DDB和DIB. DDB是一种与设备相关的位图,DDB是由为位图存放数据的BITMAP结构定义的.程序仅获得位图数据的副本,在不同的机器之间传输位图的意义就不大了.与DDB相比DIB有许多编程方面的优势.它是一种与设备无关性的位图,它带自己的颜色信息,所以,调色板管理就更加容易,DIB还使得在打印时更加易于控制灰度阴影,运行Windows的任何计算机都可以处理DIB,显示时从存储BMP的文件中读出.因此,此程序用的是DIB位图.
本程序绘制曲线单位是像素,也称为设备坐标.程序中设置的映射模式为MM_TEXT,也就是说一个单位代表一个像素.一旦设置了设备环境的映射模式,大多数CDC成员函数就可以使用逻辑坐标参数.GDI提供了用于在DC上画图的绘图工具.MFC定义了若干种对应于Windows的绘图工具的图形对象,如CPen、CBrush、CFont等,在本程序中都用到。
6.结束语
此程序已基本实现了绘制时间-历程图的功能,经对某型号飞行数据的绘图验证已达到技术要求, 显示与打印都能正确的实现,对跳点的剔补和指出跳点的位置也能正确的实现,通过编写此程序后,对绘图程序的编制从底层编写到最终实现有了更深刻的理解,对数据处理和绘图的要求也有了更深的理解,此程序基本已将各种功能积于一体,并在实现时可按客户需求进行选择性操作,在满足用户需求方面自由度较大,程序的实用性也大,可推广使用。
参考文献:[1] 〔美〕 Microsoft公司 著Windows核心编程。
[2] 〔美〕 Beck Zaratian 著Microsoft Visual C++ 6.0 程序员指南。
[3] 〔美〕 Microsoft公司 著Microsoft Visual C++ 6.0 语言参考手册。
[4] 〔美〕 Microsoft公司 著Microsoft Visual C++ 6.0 MFC类库参考手册。
[5] 顾晓明 著VC++图文程序设计。
[6] 徐士良 著C常用算法程序集。