表1 波束数据缓冲区地址分配表

4、显控软件设计
4.1显控软件功能
该程序负责启动接收机工作,并完成14个波束的方位—距离数据显示,它首先将输入的增益值及波束号转换为控制码,然后以程序询问的方式认知发射机同步信号的到来,如接收到发射机同步信号,则控制接收机进入工作状态,并将控制码写入接收机控制寄存器的指定位,最后将该次发射所得处理结果显示输出,直至用户按“ESC”键停止程序的运行。
这部分软件运行于主控机上,以菜单驱动方式进行操作,其控制功能包括对接收机的增益进行设置、执行波束选择及声阵的高度输入等,并对接收机信号处理单元进行起停控制;显示功能则完成14个波束的方位—距离数据显示或对指定波束的波形进行输出,并能够以文字方式给出光标所在位置的目标方位及距离。全部功能可总结为如下几项:
(1) 系统及图形环境初始化;
(2) 接收程放增益及阵高度设置输入;
(3) 检测激光器发射信号,传送控制数据,启动DSP分机;
(4) 读取、显示14个波束的方位—距离数据;
(5) 给出光标所在位置的目标方位及距离;
(6) 波束数据存盘。
程序的设计上本着结构化设计思想,将整个系统功能分解为几个子功能模块分别开发调试,从而提高了程序的可读性和可维护性,也便于功能的扩充。下图给出显控软件主程序的流程:

4.2技术要点
程序在/环境下开发,主窗体及菜单可在用户界面窗口中快速便捷地建立,操作控制消息处理过程框架也可由环境自动生成,设计人员只需加入相应的处理逻辑即可。程序设计中要解决的关键问题是DSP分机输出缓冲器中波束数据的读取及波形的显示和通过光标操作进行目标的定位。这些工作如果用VC++等实现将比较繁琐,而在Lab Windows/CVI环境下则可以得到轻松而完美的解决。
4.2.1分机输出缓冲器中波束数据的读取
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曲线颜色设置常量。仔细设置好这些常数即可精确绘制出波形。