1 引言
Windows操作系统因其卓越的性能已成为各个领域广泛采用的操作系统平台,由于Windows对系统底层操作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的操作,如直接访问I/O端口和物理内存等,开发人员就不得不深入到Windows的内核去编写属于系统级的虚拟设备驱动程序。笔者开发的激光声遥感系统显控软件中涉及到物理内存的访问和信号波形的显示,如采用VC++等语言开发,一方面开发虚拟设备驱动程序工作难度较大,另外波形的显示及选取定位等工作实现起来也较繁杂,而如果在Lab Windows/CVI环境下完成这一工作,这一切将变得十分轻松,而且使系统的性能更加出色。
2 关于Lab windows/CVI
Lab Windows/CVI 是美国NI(National Instrument)公司开发的Measurement Studio软件组中的一员,是32位的面向计算机测控领域的虚拟仪器软件开发平台,可在Windows 98/NT/2000等操作系统下运行。它以ANSIC为核心,将功能强大、使用灵活的C语言平台与用于数据采集、分析和显示的测控专业工具有机结合起来。它的交互式开发平台、交互式编程方法、丰富的功能面板和库函数大大增强了C语言的功能,为熟悉C语言的开发人员建立自动化检测系统、自动测量环境、数据采集系统、过程控制系统等提供了一个理想的软件开发环境。当前的最新版本Lab Windows/CVI 7.0更因其完全集成的工作平台(Workspace)、可生成代码的硬件配置助手以及经重新设计的数据采集界面为广大用户提供更灵活、高效又长期稳定的ANSI C编程,大幅增加了开发速度。它的用户界面函数库除了提供一般程序设计语言提供的控件外,还扩展了新的完善的带有图像、标记和分栏功能的树型控件、图形图例控件、以及“open GL”控件 等;新的图形控件具有平滑显示,抗混叠, 内置DataSocket以及另一个x轴的功能,能更有效地显示测量数据。另外,Lab Windows/CVI还支持多线程编程及物理内存访问,它不仅提供了用来进行数据存储和读取的内存管理函数,还在Utility函数库中提供了利用物理地址对内存直接访问的Physical Memory Access子类,本文中显控软件的设计正是基于它这几个方面的特性。
3、激光声遥感系统概述
激光声遥感系统是一种新型的水下目标遥感探测系统,它通过对接收到的水下目标反射的宽带窄脉冲信号进行实时处理来实现对水下目标的探测和定位。因此,在军事和国防建设中具有重要的意义。
系统的工作原理为高能激光束照射水面在水中产生高频宽带声脉冲信号,信号在传播的过程中遇到水下目标发生散射或反射后有部分声波会透过水面传播到空气中。在空中布放的声阵将接收到的声信号转换为电信号后送多波束接收机进行采集、处理、显示、分析,进而确定水下目标的方位和距离。
按系统要求,该接收机将完成对采样率高达384KHz的8路信号的波束形成、检波和短积分处理,并能够实时显示14个波束的目标信号方位─距离画面及光标所选目标的方位、距离数据,系统的DSP部分包括前置预处理分机、高速信号处理分机和显示控制分机三个部分。其中前两部分集成为专用的DSP分机,显控分机采用高性能微机,二者通过PCI总线接口卡进行控制和数据信息的交换。系统结构框图如图1所示。
图1 数字多波束接收机结构框图
系统工作时首先启动显控微机和DSP处理机,显控微机启动图形用户界面应用程序,接收用户设置输入,并检测激光系统发射信号;DSP分机中各采集处理模块的DSP处理器完成初始化工作后等待启动命令。激光系统发射后触发主控微机向DSP分机发送增益设置命令及启动信号。DSP分机对来自接收阵的信号进行采集和计算,形成目标的方位—距离波形数据并存入数据输出双口RAM中,数据满一帧后由显控微机进行读取、显示,并可以文件形式进行存储。接收机作为微机的一个外围设备,是按照数据空间进行读写操作的,根据微机内存资源配置情况,选择了内存的EXXXXH空间存储14个波束的数据(字存取),相邻两个波束数据交错排列,处于同一区间,区间分配情况如下表所示。
表1 波束数据缓冲区地址分配表
4、显控软件设计
4.1显控软件功能
该程序负责启动接收机工作,并完成14个波束的方位—距离数据显示,它首先将输入的增益值及波束号转换为控制码,然后以程序询问的方式认知发射机同步信号的到来,如接收到发射机同步信号,则控制接收机进入工作状态,并将控制码写入接收机控制寄存器的指定位,最后将该次发射所得处理结果显示输出,直至用户按“ESC”键停止程序的运行。
这部分软件运行于主控机上,以菜单驱动方式进行操作,其控制功能包括对接收机的增益进行设置、执行波束选择及声阵的高度输入等,并对接收机信号处理单元进行起停控制;显示功能则完成14个波束的方位—距离数据显示或对指定波束的波形进行输出,并能够以文字方式给出光标所在位置的目标方位及距离。全部功能可总结为如下几项:
(1) 系统及图形环境初始化;
(2) 接收程放增益及阵高度设置输入;
(3) 检测激光器发射信号,传送控制数据,启动DSP分机;
(4) 读取、显示14个波束的方位—距离数据;
(5) 给出光标所在位置的目标方位及距离;
(6) 波束数据存盘。
程序的设计上本着结构化设计思想,将整个系统功能分解为几个子功能模块分别开发调试,从而提高了程序的可读性和可维护性,也便于功能的扩充。下图给出显控软件主程序的流程:
4.2技术要点
程序在Lab Windows/CVI环境下开发,主窗体及菜单可在用户界面窗口中快速便捷地建立,操作控制消息处理过程框架也可由环境自动生成,设计人员只需加入相应的处理逻辑即可。程序设计中要解决的关键问题是DSP分机输出缓冲器中波束数据的读取及波形的显示和通过光标操作进行目标的定位。这些工作如果用VC++等实现将比较繁琐,而在Lab Windows/CVI环境下则可以得到轻松而完美的解决。
4.2.1 DSP分机输出缓冲器中波束数据的读取
Lab Windows/CVI在Utility函数库中提供了利用物理地址对内存直接访问的Physical Memory Access子类,当系统中有大量数据需要处理时,利用物理内存访问函数即可以提高程序的运行速度,又可以避免开发虚拟设备驱动程序的繁重工作。在这一系统的开发中我们使用ReadFromPhysicalMemoryEX完成波束数据的读取,该函数原形如下:
Int status="ReadFromPhysicalMemoryEX"(unsigned int physicalAddress,void *destinatyionBuffer,unsigned int numberOfBytes,int bytesAtATime);
其中,physicalAddress为数据在内存中的物理地址;destinatyionBuffer为读出后存放数据的缓冲器;numberOfBytes为读出数据的字节数;bytesAtATime为一次读取的字节数,取值可为1、2、4。返回值为1表示读取成功。
4.2.2 波形的显示和光标定位操作
Lab Windows/CVI提供了图表控件来完成图表、静态的曲线和波形及动态实时信号波形的显示,这里我们通过使用Graph控件来完成波束数据的显示。Graph控件功能十分强大,主要包括绘图功能、光标功能、坐标设定功能和缩放、移动视区功能等。用户界面库中提供了大量的函数以用于在Graph控件上绘制各种曲线和几何图形,这里我们使用PlotY函数,其原形为:
Int PlotY(int panelHandle,int contrlHandle,double[] Yarray,int NumofPoints,int YdataType,int PlotStyle,int PointStyle,int LineStyle,int PointFrequency,int Color)
该函数有10个参数,其中panelHandl为Graph控件所在面板的句柄;contrlHandle为Graph控件的句柄,这两者结合指明绘图区域;Yarray为绘制曲线的数据数组;NumofPoints为绘制数据点的个数;YdataType为数据类型;PlotStyle为控制曲线类型的常量;PointStyle为数据点形状常量,通过设置它将数据点用特定的形状绘制;LineStyle为线条类型常量,进行诸如实线、虚线的选择;PointFrequency为点间距常量,无效时设为默认值1;Color曲线颜色设置常量。仔细设置好这些常数即可精确绘制出波形。
Graph控件支持光标操作,在程序设计中可利用光标进行定位,在设计时可对光标的个数、颜色、形状、模式等属性进行设置,程序中又可通过函数对光标进行操作,如设置活动光标,获取和设置光标的坐标等,而坐标数据与目标的时间、距离数据是相关联的,在程序中可通过简单的计算进行转换。
Graph控件的缩放和视区移动功能则允许我们对波形的局部进行放大以观察细节,以及将波形绘制在视区之外,需要时又可移入视区之内进行显示。总之,该控件的强大功能满足了我们现阶段所有的波形显示和分析的需要。
5 结束语
本文讨论了在Lab Windows/CVI环境下开发DSP显控程序的优越性和关键技术。该接收机经受了海试的考验,在整个海试过程中一直稳定可靠地运行,其处理所得目标方位、距离值及海深等数值都能与预知值很好地吻合。另外,该系统的设计使得其功能很容易扩充,它除了对国防建设具有重要意义外,稍加改进后还可应用于如沉船打捞、航道勘测、水底地形图的测绘等领域,对海洋的开发和经济的发展都具有重要的意义。
Windows操作系统因其卓越的性能已成为各个领域广泛采用的操作系统平台,由于Windows对系统底层操作采取了屏蔽的策略,因而对用户而言,系统变得更为安全,但这却给众多的硬件或者系统软件开发人员带来了不小的困难,因为只要应用中涉及到底层的操作,如直接访问I/O端口和物理内存等,开发人员就不得不深入到Windows的内核去编写属于系统级的虚拟设备驱动程序。笔者开发的激光声遥感系统显控软件中涉及到物理内存的访问和信号波形的显示,如采用VC++等语言开发,一方面开发虚拟设备驱动程序工作难度较大,另外波形的显示及选取定位等工作实现起来也较繁杂,而如果在Lab Windows/CVI环境下完成这一工作,这一切将变得十分轻松,而且使系统的性能更加出色。
2 关于Lab windows/CVI
Lab Windows/CVI 是美国NI(National Instrument)公司开发的Measurement Studio软件组中的一员,是32位的面向计算机测控领域的虚拟仪器软件开发平台,可在Windows 98/NT/2000等操作系统下运行。它以ANSIC为核心,将功能强大、使用灵活的C语言平台与用于数据采集、分析和显示的测控专业工具有机结合起来。它的交互式开发平台、交互式编程方法、丰富的功能面板和库函数大大增强了C语言的功能,为熟悉C语言的开发人员建立自动化检测系统、自动测量环境、数据采集系统、过程控制系统等提供了一个理想的软件开发环境。当前的最新版本Lab Windows/CVI 7.0更因其完全集成的工作平台(Workspace)、可生成代码的硬件配置助手以及经重新设计的数据采集界面为广大用户提供更灵活、高效又长期稳定的ANSI C编程,大幅增加了开发速度。它的用户界面函数库除了提供一般程序设计语言提供的控件外,还扩展了新的完善的带有图像、标记和分栏功能的树型控件、图形图例控件、以及“open GL”控件 等;新的图形控件具有平滑显示,抗混叠, 内置DataSocket以及另一个x轴的功能,能更有效地显示测量数据。另外,Lab Windows/CVI还支持多线程编程及物理内存访问,它不仅提供了用来进行数据存储和读取的内存管理函数,还在Utility函数库中提供了利用物理地址对内存直接访问的Physical Memory Access子类,本文中显控软件的设计正是基于它这几个方面的特性。
3、激光声遥感系统概述
激光声遥感系统是一种新型的水下目标遥感探测系统,它通过对接收到的水下目标反射的宽带窄脉冲信号进行实时处理来实现对水下目标的探测和定位。因此,在军事和国防建设中具有重要的意义。
系统的工作原理为高能激光束照射水面在水中产生高频宽带声脉冲信号,信号在传播的过程中遇到水下目标发生散射或反射后有部分声波会透过水面传播到空气中。在空中布放的声阵将接收到的声信号转换为电信号后送多波束接收机进行采集、处理、显示、分析,进而确定水下目标的方位和距离。
按系统要求,该接收机将完成对采样率高达384KHz的8路信号的波束形成、检波和短积分处理,并能够实时显示14个波束的目标信号方位─距离画面及光标所选目标的方位、距离数据,系统的DSP部分包括前置预处理分机、高速信号处理分机和显示控制分机三个部分。其中前两部分集成为专用的DSP分机,显控分机采用高性能微机,二者通过PCI总线接口卡进行控制和数据信息的交换。系统结构框图如图1所示。
图1 数字多波束接收机结构框图
系统工作时首先启动显控微机和DSP处理机,显控微机启动图形用户界面应用程序,接收用户设置输入,并检测激光系统发射信号;DSP分机中各采集处理模块的DSP处理器完成初始化工作后等待启动命令。激光系统发射后触发主控微机向DSP分机发送增益设置命令及启动信号。DSP分机对来自接收阵的信号进行采集和计算,形成目标的方位—距离波形数据并存入数据输出双口RAM中,数据满一帧后由显控微机进行读取、显示,并可以文件形式进行存储。接收机作为微机的一个外围设备,是按照数据空间进行读写操作的,根据微机内存资源配置情况,选择了内存的EXXXXH空间存储14个波束的数据(字存取),相邻两个波束数据交错排列,处于同一区间,区间分配情况如下表所示。
表1 波束数据缓冲区地址分配表
4、显控软件设计
4.1显控软件功能
该程序负责启动接收机工作,并完成14个波束的方位—距离数据显示,它首先将输入的增益值及波束号转换为控制码,然后以程序询问的方式认知发射机同步信号的到来,如接收到发射机同步信号,则控制接收机进入工作状态,并将控制码写入接收机控制寄存器的指定位,最后将该次发射所得处理结果显示输出,直至用户按“ESC”键停止程序的运行。
这部分软件运行于主控机上,以菜单驱动方式进行操作,其控制功能包括对接收机的增益进行设置、执行波束选择及声阵的高度输入等,并对接收机信号处理单元进行起停控制;显示功能则完成14个波束的方位—距离数据显示或对指定波束的波形进行输出,并能够以文字方式给出光标所在位置的目标方位及距离。全部功能可总结为如下几项:
(1) 系统及图形环境初始化;
(2) 接收程放增益及阵高度设置输入;
(3) 检测激光器发射信号,传送控制数据,启动DSP分机;
(4) 读取、显示14个波束的方位—距离数据;
(5) 给出光标所在位置的目标方位及距离;
(6) 波束数据存盘。
程序的设计上本着结构化设计思想,将整个系统功能分解为几个子功能模块分别开发调试,从而提高了程序的可读性和可维护性,也便于功能的扩充。下图给出显控软件主程序的流程:
4.2技术要点
程序在Lab Windows/CVI环境下开发,主窗体及菜单可在用户界面窗口中快速便捷地建立,操作控制消息处理过程框架也可由环境自动生成,设计人员只需加入相应的处理逻辑即可。程序设计中要解决的关键问题是DSP分机输出缓冲器中波束数据的读取及波形的显示和通过光标操作进行目标的定位。这些工作如果用VC++等实现将比较繁琐,而在Lab Windows/CVI环境下则可以得到轻松而完美的解决。
4.2.1 DSP分机输出缓冲器中波束数据的读取
Lab Windows/CVI在Utility函数库中提供了利用物理地址对内存直接访问的Physical Memory Access子类,当系统中有大量数据需要处理时,利用物理内存访问函数即可以提高程序的运行速度,又可以避免开发虚拟设备驱动程序的繁重工作。在这一系统的开发中我们使用ReadFromPhysicalMemoryEX完成波束数据的读取,该函数原形如下:
Int status="ReadFromPhysicalMemoryEX"(unsigned int physicalAddress,void *destinatyionBuffer,unsigned int numberOfBytes,int bytesAtATime);
其中,physicalAddress为数据在内存中的物理地址;destinatyionBuffer为读出后存放数据的缓冲器;numberOfBytes为读出数据的字节数;bytesAtATime为一次读取的字节数,取值可为1、2、4。返回值为1表示读取成功。
4.2.2 波形的显示和光标定位操作
Lab Windows/CVI提供了图表控件来完成图表、静态的曲线和波形及动态实时信号波形的显示,这里我们通过使用Graph控件来完成波束数据的显示。Graph控件功能十分强大,主要包括绘图功能、光标功能、坐标设定功能和缩放、移动视区功能等。用户界面库中提供了大量的函数以用于在Graph控件上绘制各种曲线和几何图形,这里我们使用PlotY函数,其原形为:
Int PlotY(int panelHandle,int contrlHandle,double[] Yarray,int NumofPoints,int YdataType,int PlotStyle,int PointStyle,int LineStyle,int PointFrequency,int Color)
该函数有10个参数,其中panelHandl为Graph控件所在面板的句柄;contrlHandle为Graph控件的句柄,这两者结合指明绘图区域;Yarray为绘制曲线的数据数组;NumofPoints为绘制数据点的个数;YdataType为数据类型;PlotStyle为控制曲线类型的常量;PointStyle为数据点形状常量,通过设置它将数据点用特定的形状绘制;LineStyle为线条类型常量,进行诸如实线、虚线的选择;PointFrequency为点间距常量,无效时设为默认值1;Color曲线颜色设置常量。仔细设置好这些常数即可精确绘制出波形。
Graph控件支持光标操作,在程序设计中可利用光标进行定位,在设计时可对光标的个数、颜色、形状、模式等属性进行设置,程序中又可通过函数对光标进行操作,如设置活动光标,获取和设置光标的坐标等,而坐标数据与目标的时间、距离数据是相关联的,在程序中可通过简单的计算进行转换。
Graph控件的缩放和视区移动功能则允许我们对波形的局部进行放大以观察细节,以及将波形绘制在视区之外,需要时又可移入视区之内进行显示。总之,该控件的强大功能满足了我们现阶段所有的波形显示和分析的需要。
5 结束语
本文讨论了在Lab Windows/CVI环境下开发DSP显控程序的优越性和关键技术。该接收机经受了海试的考验,在整个海试过程中一直稳定可靠地运行,其处理所得目标方位、距离值及海深等数值都能与预知值很好地吻合。另外,该系统的设计使得其功能很容易扩充,它除了对国防建设具有重要意义外,稍加改进后还可应用于如沉船打捞、航道勘测、水底地形图的测绘等领域,对海洋的开发和经济的发展都具有重要的意义。
评论
查看更多