《基于WPF的虚拟示波器设计.pdf》由会员分享,可在线阅读,更多相关《基于WPF的虚拟示波器设计.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 WPF 的虚拟示波器设计 张博;李黎;何海龙;刘艳行【摘 要】随着计算机技术和通信技术的飞速发展,虚拟仪器技术以其高性能、高扩展性、高集成性,和开发周期短等优势,逐渐成为测试测量行业仪器设计的发展趋势.虚拟示波器是虚拟仪器基础平台的重要组成部分,也是应用最广、需求最大的测试软件.本文基于 PC 平台,在广泛应用的 Windows 系统下,采用 WPF 作为软件开发环境,设计并开发了一个经串口录取数据的四通道虚拟示波器软件.该虚拟示波器软件通过对数据流的合理规划和设计,以及 PingPong 缓冲机制的引用,实现了对高速串口数据的完整录取.运用高精度自旋定时器,使本文虚拟示波器软件与 DS
2、P 下位机的指令通信达到了 200Hz 稳定可靠的数据率.【期刊名称】火控雷达技术【年(卷),期】2018(047)002【总页数】5 页(P91-95)【关键词】WPF;高精度定时器;PingPong 缓冲区;多线程【作 者】张博;李黎;何海龙;刘艳行【作者单位】西安电子工程研究所 西安 710100;西安电子工程研究所 西安710100;西安电子工程研究所 西安 710100;西安电子工程研究所 西安 710100【正文语种】中 文【中图分类】TM935.3 0 引言 自 20 世纪 80 年代后期以来,PC 机的性能得到极大提升,针对测试分析的通用软件的需求不断增长,使得虚拟仪器1应运而
3、生。测试仪器的发展经历了,第一代模拟式测试仪器、第二代分立元件式测试仪器、第三代数字式测试仪器和第四代智能化测试仪器,虚拟测试仪器即将成为最新一代的测试仪器。借助于通用的模拟量或数字量输入输出接口,进行程序编写,并采用成熟的数学模型来实现对信号的测量、控制、变换、分析、显示、输出等功能。虚拟仪器不仅开发周期短,而且开发费用低廉。随着硬件载体的不断提升和新算法的引入,虚拟仪器相比于传统测试仪器也可以方便地更新和扩展,并具有很强的重用性和可配置性被广泛应用于各个测试领域。虚拟示波器是虚拟仪器基础平台的重要组成部分,是技术发展的必然,也是客观要求,具有重要的工程价值。1 设计要求 虚拟仪器的功能可以
4、在很多硬件平台下通过编程实现。PC 平台因其应用广泛而且兼容性强,逐渐成为了虚拟仪器的主流平台。vxWorks 和 unix 系统因其实时性好被广泛应用在试验环境。而 Windows 系统作为非实时性系统很少被用来设计高速虚拟测试仪器。本文所述虚拟示波器软件通过合理的线程运用和精密的定时器设计在 PC 平台 Windows 系统下完成了高速数据录取式示波器的设计。本文示波器软件通过串口通信对数据进行实时录取,通过 PCOMM 串口库的应用,达到了230400bps 等常用高速串口的通信速率。并对传统示波器的各项分析功能进行了模拟实现。并通过 WPF 实现了美观的界面设计和流畅的图显效果。虚拟示
5、波器作为图显软件,针对数据曲线图的动态绘制可分为时间驱动和数据驱动两类。时间驱动绘图是指将数据与时间对应,以时间为横轴,对数据进行时间采样来描点绘图,能反应数据随时间的变化情况。数据驱动绘图(即逐帧显示)是指将数据直接和图形对应,以数据帧为横轴,对缓冲区里的每一帧数据都进行描点绘图,来实现对高精度要求产品的严格监控。本文采用逐帧显示的数据驱动绘图方式,要求录取数据的完整性和绘图的高速度,在保证串口不丢数据的同时,数据处理层必须快速即时地完成对接收数据的处理并合理地配合 UI 层的数据调度完成逐帧显示。另外,本文虚拟示波器软件的动态曲线绘图方式也区别于传统时间驱动的绘图方式,是采用同示波器仪器一
6、致的逐屏刷新显示模式,不仅可以表现更多的数据信息,而且更契合硬件工程师的仪表使用习惯。对实时数据也提供文件记录并保存,可以精确地对应每一帧的数据情况。对曲线图也可以截图保存,可以直观的保留数据信息。同时引入终端通信功能,可以通过虚拟示波器软件对被测系统发送命令,实现简单的模式控制和参数修改功能。2 虚拟示波器软件设计 本文所述虚拟示波器软件设计主要分为三个部分:数据录取及实时指令通信,曲线图逐帧显示,数据分析保存。程序的编写在WPF 开发环境下完成。2.1 WPF 开发环境 Windows 呈现基础(Windows Presentation Foundation,WPF)2是微软新一代图形系统
7、,运用在.NET Framework 3.0 以上版本,为用户界面、2D/3D 图像、文档和媒体提供了统一的描述和操作方法,同时提升了处理速度。得益于 WPF 强大的图形向量渲染引擎,程序开发人员可以设计出效果丰富的控件系统和灵活美观的程序应用界面。同时WPF 采用 DirectX引擎技术,并且支持GPU 硬件加速,相比于传统的 GDI+/GDI 图形系统在性能上得到了极大提升。传统偏重于利用 CPU 来进行数据与图形处理的技术,由于占用过多 CPU 资源,影响 CPU 的运算速度。但是随着现代计算机显卡等显示技术的不断提升。WPF 技术充分利用计算机的显卡功能,让出了更多的 CPU 空间来进
8、行数据处理,这样大大提升了 CPU 运算速度,保证了软件运行的流程与处理速度。WPF 使用 XAML 语言作为界面结构语言,后台使用 C#高级语言,拥有多种编程模式,适用于多种数据访问接口,方便与第三方软件集成。2.2 数据录取 虚拟示波器软件的串口端口,可以使用.NET 基本类,System.IO.ports 命令空间中的 SerialPort 类来实现。SerialPort 类是在 C#里被很好封装的串口类,波特率上限 115200bps,适合试验室使用。也可以使用成熟的工业级串口工具PComm Lite。配合 Moxa 模块波特率上限可达 921600bps,并且在多串口模式下也可以高速
9、稳定的工作。具体使用可下载并引用 pcomm.dll 并编写接口类可以在 WPF 下,使用 PComm Lite 内的串口函数,完成对串口缓冲区数据的合理规划和高效管理。PingPong 缓冲机制3是一种数据缓存手段,通过 PingPong 操作可以提高数据传输效率。在两个功能模块顺序地处理数据时,如果上一级功能模块所产生的新数据不能马上被下一级功能模块处理完成而消费掉,为了保证每帧数据都被处理,上一级就必须等待下一级完成数据消费才可以产生并发送新的数据。然而在串口通信中,为了保证高速的数据率,上一级的数据产生不会等待下一级复杂的数据处理以及耗时的 UI 更新,这样就会严重影响虚拟示波器软件的
10、数据录取性能,导致数据丢失现象发生,无法保证对待测设备完整精确的监控。使用PingPong 缓冲机制可以不去等待下一级处理结束,而是先将上一级产生的未处理数据存在Ping 路的缓冲区中,等存满后通知下一级开始对 Ping 缓冲区进行消费。在 Ping 缓冲区被消费期间,上一级产生的未处理数据转到 Pong 缓冲区存放,当 Pong 缓冲区存满时,Ping 缓冲区已经被消费完成并准备好保存新数据了,此时下一级切换到Pong 缓冲区消耗,而 Ping 缓冲区再打开并开始存储。这种双缓冲机制,可以使上级数据不间断地产生,并且都能得到处理,从而提高了处理效率,保证了在高速串口通信情况下,虚拟示波器软件
11、也依然保持优秀的数据采集完整性。2.3 高精度定时器实现 在大多数情况下,传统示波器仪表只是单方面的信号采样。对于工作在不同工作模式下的信号源,一般可以外部切换好了之后再连接示波器进行监测。然而作为本身就占有一个串口的虚拟示波器,如果再通过通过外部改变待测设备的工作状态,会产生很多不便。于是在实际工作情况下,本文所述虚拟示波器软件可以同时通过串口和被测硬件通信,控制待测工作模式的切换,并通过配置文件的修改实现通信协议的灵活切换。本文所述虚拟示波器软件被用于 DSP 信号的监测,要求软件 5 ms 为周期不间断发送工作模式命令和参考信号才能实现对DSP 不同工作模式的切换监测。这对以Window
12、s 为平台的虚拟示波器软件设计是一个难点。NET Framework 支持四种定时器,然而精密度都不准(最低只能达到 15 ms),无法满足高速设计要求。Windows 不是实时操作系统,所以在不涉及内核驱动层面的条件下,想要实现高精密定时器,需要使用等待机制和计时工具两种基础功能。这里不讨论多媒体定时器4的原因,是在 WPF 下的多媒体定时器依托事件机制,而在多线程应用中,事件由于低的优先级,经常会受到干扰,影响定时器精度。等待机制有两种分为自旋等待和阻塞等待。自旋等待就是让 CPU 以空转的方式来完成时间消耗,虽然使用了较多 CPU 时间,但是时间的精度高。阻塞等待就是所处线程阻塞,在等待
13、规定时间后再由操作系统控制返回运行状态。虽然阻塞不占CPU,但是需要操作系统控制执行,时间无法控制。计时机制在 WPF 下最适合的就是 Stopwatch 类。精度取决于硬件的主频,精度可以高达几十 ns。本文虚拟示波器软件使用自旋等待机制配合Stopwatch 计时,实现了高精度的定时器,伪代码如下:var 计时开始时刻=目前时刻;while(目前时刻-计时开始时刻)规定延迟时长)自旋;改成实际代码如下:void Spin(Stopwatch timer,int duration)var current=timer.ElapsedMilliseconds;while(timer.Elapse
14、dMilliseconds-current)duration)Thread.SpinWait(10);这里 timer 是 Stopwatch 类的一个对象,其中 ElapsedMilliseconds 属性可以实现毫秒级的精度,而 ElapsedTicks 属性可以实现高达微秒级的时间精度。运用高优先级的线程5单独运行这种定时器可以保证在微秒级的定时精度下,稳定触发指定任务,保证本文虚拟示波器软件达到了 200Hz 稳定可靠的数据率。2.4 多线程数据处理 虚拟示波器软件在确保录取数据完整的同时,还应该确保数据曲线图显示的完整性。如果程序只有一个线程在运行,当程序进行数据接收并处理与曲线图逐
15、帧显示的这段时间内,无法处理数据命令发送,使得下位机返回数据丢失,也有很大的概率造成整个界面卡死。因此为了提升程序效率,使程序能够同时处理多种并行功能,不可避免地要引入多线程技术6。线程是操作系统分派 CPU 时间的基本单元。每个线程所分派的 CPU 时间片很小,程序是对时间片的轮转访问来运行的。其实多线程是异步运行的。在避免线程之间数据竞争的前提下,本文虚拟示波器软件分别为串口通信任务和曲线绘制任务开辟线程。使得多条任务线程同时运行,显著提高了系统性能。本文 pingpong 缓存机制也保证了线程之间没有同时调取的数据,不会发生数据竞争。同时使用 WaitOneEevent 来分时触发并行任
16、务,进一步保证了程序的线程安全。本文软件中的线程框图如图 1 所示:图 1 软件多线程框图 2.5 图表绘制 示波器被誉为“工程师的眼睛”。最初是通过狭窄并且高速的电子束,打在荧光平面上通过描绘待测电信号瞬时值变化曲线,来描述电现象的变化过程的。其经典的扫描式显示模式一直深入人心,也成为工程师的仪表使用习惯。本文虚拟示波器软件模拟了这一经典显图风格。人类视觉系统(HVS)对时间频率的反应时间是,在普通亮度环境下,图像帧的变化频率应该在 15 Hz 到 20 Hz 之间。平衡显示图像的帧速率一般为 22fps 到 30fps之间。然而本虚拟示波器软件采用数据驱动绘图方式,每屏应尽量容纳更多的数据
17、信息,也就使得最终图像画布上承载上千个数据点的信息。要一次性连接千个数据点并形成曲线,如果点与点之间变化很大,就相当于 WPF 要通过 PolyLine 在画布上大范围地扫来扫去,这样会每帧产生上百万个像素点。即使 WPF 有着硬件加速,但是要完成这样的任务还是非常耗时的,无法保证曲线平滑的显示。为了满足25fps 的帧速率,需要每 40ms 更新一次图像。考虑到本文应用场景是 200 Hz 的数据率,所以每次只能对 8 个点进行更新显示。因此可以把 PolyLine 的思路换成上千个成员的 Line 数组添加到画布上,每次只在 8 个需要更新的数据点处进行连接直线的删除和新建这样的更新操作,
18、而其他的位置不变,就可以在 40ms 的周期内完成每帧数据的更新。接着再模仿示波器扫描图显模式,横扫的方式确定需要更新的那 8 个点的位置进行替换,这样就可以在保证平滑显示的前提下完成对示波器扫描图形显示模式的模拟。而且这种绘图方式也可以同时进行多通道数据的多曲线绘图显示。3 结束语 本文使用虚拟示波器软件与串口数据率200 Hz 的 DSP 待测硬件进行了模式信号监测和指令交互式信号监测。从实验结果上看,完全满足设计要求。CPU 使用率和内存使用率等性能指标也符合要求。本文虚拟示波器界面如图 2 所示:图 2 虚拟示波器界面图 参考文献:【相关文献】1 程虎.虚拟仪器的现状和发展趋势J.现代
19、科学仪器,1999(4):6-9.2 乔阿美.关于 Silverlight 与 WPF 技术的探讨J.军民两用技术与产品,2015(24):10-20.3 杨宇晓,宋茂忠,苗雄峰.基于 DM642 DSP 的网络化数据采集与编程实现J.计算机技术与发展,2008,18(6):188-191.4 李净,杨俊武,钱旭.用多媒体定时器精确控制采样频率J.计算机应用,2000,20(12):67-68.5 许毅,冯山.使用 C#语言进行多线程程序设计J.计算机工程,2003,29(5):1-2+130.6 贾广雷,刘培玉,耿长欣.多线程技术及其在串口通信中的应用J.计算机科学,2002,1(29):148-149+130.