基于 C++ builder 的高采样率动态信号实时绘图研究

时间:2013-07-29

  摘要:针对在颤振飞行试验实时监控过程中高采样率动态信号时间历程曲线实时显示特点,介绍了如何在C++builder环境中使用TChart控件实时绘制动态参数曲线,并对采用控件和算法的特点及选择准则做了详细分析,给出了相关程序代码。该算法先将颤振数据实时存放在数组里,然后结合TChart控件和TTimer控件采用翻页方式来实时显示其时间历程曲线。通过在颤振试飞监控中实际应用表明,该算法能有效实时显示真实动态信号,满足课题监控需求。该算法还可应用于电力系统的振动检测系统

  0 引言

  颤振飞行试验是新机或有重大改型飞机都必须进行的试飞科目,是世界公认的Ⅰ类风险试飞科目,所以必须通过实时监控保障飞行安全。颤振试飞与其他试验科目相比,具有风险高、参数采样率高的特点,对实时监控系统的实时性、可靠性以及性都要求较高。

  在开发颤振试飞实时监控软件过程中,为了在屏幕上实时绘制高采样率颤振参数时间历程曲线,对高采样率动态信号实时绘图技术做了深入研究,并采用C++ builder进行编程实现。通过软件测评和实时系统验证,该监控软件运行稳定、可靠,能实时显示高采样颤振参数时域曲线。

  1 开发平台介绍

  C++ Builder是由Borland公司继Delphi之后又推出的一款高性能可视化集成开发工具[7],它具有快速的可视化开发环境:只要简单地把控件拖到窗体上,定义它的属性,设置它的外观,就可以快速地建立应用程序界面。它内置了100 多个完全封装了Windows 公用特性且具有完全可扩展性(包括全面支持ActiveX控件)的可重用控件。C++ Builder具有一个C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CPU透视,命令行工具等,实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。利用C++ Builder 开发实时监控软件,可以充分利用可视化编程语言的高效、灵活等优点,使得开发出来的应用程序具有更好的用户界面,适合飞行监控使用。

  2 高采样率动态信号实时绘图算法研究及实现

  颤振试飞实时监控软件通过接收服务器发送过来的数据,对软件界面上参数进行实时显示,并对关键参数数据进行自动或者手动采集。由于颤振参数为高采样率速变参数,如果按照常规缓变参数那样接收每点数据都画图的方法在屏幕上实时绘制时间历程曲线,发现软件数据显示常有迟滞现象,并且严重影响软件数据采集,因此对数据绘图方法进行优化研究,将颤振数据实时采集到内存里,并且用数组来存放采集数据,然后利用TChart控件使用翻页方式来实时显示时间历程曲线,每个页面显示一段时间内的数据曲线,其中翻页时间间隔(由采样频率决定)由定时器控制,也可以通过利用接收服务器发送数据点数到达定值后进行翻页的绘图算法来实现。

  2.1 C++ builder控件介绍

  2.1.1 TTimer控件

  TTimer控件是C++ builder提供的一个普通计时器,使用简单方便,但具有两大缺陷:定时差和消息优先权低。首先,基于Windows计时器的硬件计时器每隔54.925 ms走1次(约18.2 次/s),也就是说,这种方式的定时器只能到大约55 ms,对于55 ms以下的时间便无能为力;另外,由于Windows是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。

  TTimer控件的优先权太低,这样一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列中的WM_TIMER消息就被暂时挂起,得不到实时处理。

  2.1.2 多媒体定时器

  多媒体定时器是由Windows系统提供的毫秒级定时器,其定时可达1 ms.从运行基理来看,多媒体定时器提供的是硬件中断服务,不传送任何消息,优先级很高。多媒体定时器使用自己独立的线程,调用回调函数进行处理,但在多媒体定时器的使用过程中需要注意的是:在多媒体定时器处理的线程结束之前不要再次启动定时器,否则会造成死机。在使用之后一定要删除定时器及响应的参数,否则系统的响应会变得很慢。

  2.1.3 TChart控件

  C++ Builder嵌入了Borland公司产品Delphi的控件TeeChart[10],可以方便地实现曲线绘制,绘图功能强大,界面友好。本文利用C++ Builder 自带的画图控件TChart,它是TeeChart类库中主要的类,具有11 种标准的Series 类型,325 个属性,125 个方法以及28 个事件,这使得TChart具有非常强大的绘图功能。

  2.2 绘图算法具体实现

  将颤振数据实时采集到内存里,并且用数组Show-Buff []来存放采集数据,然后利用TChart控件使用翻页方式来实时显示其时间历程曲线。TChart 控件中Ad-dXY 函数和AddArray 函数都可以来实现绘图功能,但是AddXY 函数每次调用都要刷新屏幕,当需要实时绘图参数较多时会引起监控软件界面数据显示迟滞现象,因此本文采用用于绘制数组数据曲线的AddArray函数进行绘图,经过实时系统验证表明,AddArray 函数比AddXY函数能够有效提高绘图效率。

  动态信号实时绘图关键代码如下:

  

  两种算法实时绘图效果相同,如图1所示为应用于ARJ21 飞机飞行试验实时监控的动态信号实时绘图效果:

  

  该段动态参数事后处理数据绘图效果如图2所示。

  

  由图1、图2对比可知,利用本文中高采样率动态信号实时绘图算法能有效还原真实信号,满足任务监控需求。

  3 结语

  文中基于C++ Builder开发的颤振试飞实时监控软件已经成功应用于ARJ21飞机颤振飞行试验中,对保障飞行安全和任务完成发挥了重要作用。实践表明,软件中涉及到的高采样率动态信号实时绘图算法能有效还原显示动态参数真实信号,可应用于其他用户群体中,如电力系统的振动检测系统等。

上一篇:基于误差反馈的变步长 LMS 自适应滤波算法
下一篇:基于 LabVIEW 的油滴电量测试系统的数据库访问

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料