基于WinPcap的船用雷达显示系统的设计及实现
2014-04-14伍家香
伍家香 潘 伟 李 洋
(电子科技大学 成都 610054)
0 引言
船用雷达是装在船上用于船舶定位、避让、狭水道导航的雷达设备。船用雷达显示系统是雷达的重要组成部分,其主要任务包括:雷达原始数据处理及显示、目标及其相关信息显示、雷达状态控制及人机交互等[1]。在其研制、验证过程中,大量数据需要从采集卡传输到PC 机用于显示、分析船用雷达系统性能。目前,主要的快速数据传输方法有:PCI采集卡、SATA 接口、USB 接口以及千兆以太网接口[2]。采用PCI总线方式,通用性好、设备量不大,能够达到较高的采集速率,但需要将采集卡插在机箱内部,使用欠灵活。SATA 接口优点是能快速可靠的进行传输,但很多PC 机没有引出SATA 接口,它和PCI总线方式一样,使用欠灵活。USB 接口体积小且接口通用性好,但协议开销很大,不适宜远距离数据传输。千兆以太网接口优点是协议开销小、传输距离长。为了保证传输通用性及可靠性,本系统采用千兆以太网来实现数据传输。采集卡数据通过以太网发送出来后,到达PC 机网卡,如何把数据从网卡取出用于显示系统显示成为本系统要解决的一个重要难题。在网络应用技术中,网络监听技术可以抓取网络上传输的数据包[3]。因此,本系统利用网络监听技术实现数据包的捕获和存储。
1 总体设计
由雷达接收机接收雷达回波信号,经转换电路处理后,送入信号处理板进行处理,再传输到终端计算机进行显示。如图1所示,是基于PC 机的雷达显示系统总体框图,该系统总共有四个部分:雷达接收机、信号采集转换电路、信号处理电路、终端计算机显示部分。
在雷达工作时,雷达天线接收和发射的模拟信号,经过A/D 转换进入信号处理板,再经过FPGA对雷达的原始信号进行处理,处理后的数据通过千兆以太网发送至PC 机,PC 机完成后期的雷达数据处理任务,将最终的目标方位、目标距离、目标速度以及目标航向等信息记录并显示,以便于人工观测。同时接收键盘、鼠标等外设的控制信息,产生雷达控制指令实现对雷达的控制。
在PC 端,因所传输数据速率很高且具有较为固定的格式,所以不采用套接字服务(SOKET),改为在WinPcap 驱动基础上发送或接收自定义的数据包。该数据包格式绕过TCP 和IP 协议,对传统的格式进行大量简化,它只需设计数据物理层与链路层,极大地降低了FPGA 端协议解析的复杂度[4]。
1.1 WinPcap 简介
WinPcap 是应用于Windows 平台的一种可以实现数据包捕获与网络分析的体系结构。Windows 平台的应用程序可以通过WinPcap 直接访问网络中的“原始”数据包,即没有被网络协议处理、操作系统使用过的数据包[5]。WinPcap 可以提供的功能有:捕获原始数据包,即在共享网络上各主机发送和接收的数据包;在网络上发送自定义的数据包;在接收到数据包发送到应用程序之前按自定义规则过滤某些特殊的数据;收集网络通信中的统计信息。由于具有上述功能,WinPcap 在网络信息内容扫描、网络安全工具、流量控制、通信安全日志记录、网络信息监控、协议分析及网络技术等方面有着非常广泛的应用。目前主流的数据包捕获软件如Sniffit 嗅探器、Ethereal、Windump 以及ARPSniffer 等都采用了WinPcap 技术。
由于WinPcap 独立于主机协议来发送和接收原始数据包。它不能阻塞、过滤和控制其他应用程序数据包的发送与接收,仅仅只是监听共享网络上的数据包。因此利用WinPcap 驱动程序发出的数据包不含有TCP 头和IP 头,只含有MAC 地址及数据,简化了FPGA 硬件上的数据帧格式解析。
1.2 自定义数据帧格式
所有类型的以太网都有统一的帧结构:前同步码、帧首界定符、目的MAC 地址、源MAC 地址、类型/长度、数据和填充、帧校验序列。采用WinPcap驱动编程,FPGA 端数据帧格式类似802.3 协议的以太网格式,但没有TCP 头和IP 头等协议开销,具体如表1所示。
表1 自定义数据帧格式
PC 端收发网口数据包时,前同步码、帧首界定符、帧校验由网卡自行处理。FPGA 端处理网口数据包,则要按表1 格式处理。
2 雷达显示系统的实现
2.1 基于WinPcap 的数据收发过程
2.1.1 数据接收过程
雷达显示系统的界面是在VC 环境下进行的。雷达接收机收到雷达信号,经过信号转换电路处理后,经A/D 转换送到采集板的FPGA 中,在FPGA 中经过信号预处理后通过网线发送到PC 机网卡。本系统一周雷达数据分为2048 个方位,每个方位768 个距离点。WinPcap 对数据链路层进行监听,当有符合用户要求的数据包到达时,WinPcap 接收数据包提交给用户的应用程序,其接收数据流程如图2所示。
图2 WinPcap 捕获数据包流程
首先是获取连接的网络设备列表。WinPcap 通过pcap_findalldevs()函数实现,获取网络设备信息后,再使用pcap_open()函数来打开选定的网络设备,用户可以根据实际要求设定限定条件捕获符合要求的数据包。WinPcap 编译并设置过滤规则,然后就可以对数据包进行捕获,当捕获动作结束后,需要释放设备和关闭库。
2.1.2 数据发送过程
发送流程如图3所示,流程前两步与接收数据包相同,第三步初始化数据包,用户根据自己需要定义和封装数据包。封装完成后调pcap_sendpacket()函数将该数据发送出去,然后释放网络设备。FPGA 收到指令后对数据包进行解析,然后根据设定指令对雷达进行控制。
2.2 图像显示模块及显示界面设计
当应用程序收到雷达回波数据,由于回波数据量大并且图像刷新频率很高,采用Windows 的GDI绘图往往达不到速度要求,而且会出现闪烁及丢帧现象[7]。因此采用直接对显存进行操作的方法,本设计我们采用图形硬件的软件接口OpenGL 来完成雷达图像实时显示。
本系统不仅要显示雷达图像,同时还要对雷达图像进行处理、对雷达状态进行控制。考虑到实际航海雷达界面布局,我们将主窗口分为两部分:图像显示区、图像处理与控制区。图像显示区基于CView 类,显示雷达原始视频信号、目标船舶信息,以及方位线、刻度盘、距离环等辅助信息。图像处理与控制区基于CFormView 类,实现对雷达图像的显示控制,慢累积、滤波,偏心、余辉显示、雷达状态控制等,如图4、图5、图6所示。
图3 WinPcap 发送数据包流程
图4 船用雷达显示系统界面
图5 船用雷达原始回波图
图6 信号处理后船用雷达回波图
2.3 关键技术
2.3.1 WinPcap 性能优化
提高基于WinPcap 的雷达显示系统性能是充分发挥该系统功能的必要条件。从应用开发的角度考虑,系统结构设计、缓冲区的运用、多线程的运用、编程代码的优化等都会一定程度上提高系统整体性能。本系统采用多线程设计,单独开辟一个线程用于实时读取网卡数据存入内存,主线程用于图像显示及人机交互。同时通过调整用户级缓存来缓解应用程序读取缓冲区的数据和网络数据到来之间的速度差异。
2.3.2 坐标转换
雷达回波信号为极坐标形式,显示器显示信号是通过直角坐标来显示的。极坐标到直角坐标的转换过程实际上是映射关系。直角坐标点数在固定大小平面内是固定的,而极坐标由于角度与半径不同却存在很大的差异,因此这种映射不能一一对应,于是就产生了漏点和重点[8]。本系统采用优化查表法来去除漏点和重点,其核心思想是一次寻址得到一个或多个直角坐标的值。同时查找表只记录了0° ~45°极坐标到直角坐标的转换,其他转换通过映射、查表法和转换处理完成,极大地缩减了查找表存储空间。
3 结束语
本文重点研究了船用雷达显示系统中采集卡和PC 机之间高速数据传输的实现,有效降低了船用雷达硬件成本。文中所设计的显示系统选择Windows 7 作为系统平台,利用Visual Studio2010 进行开发,已经成功应用于某型船用雷达设备研发、测试。能够实时、动态地显示雷达探测范围内的所有目标,系统稳定。
[1]刘玉和.高分辨率雷达显控系统设计[D].西安:西安电子科技大学,2011.
[2]田聪.雷达信号采集存储与传输系统设计[D].西安:西安电子科技大学,2012.
[3]王力超.基于Winpcap 和Visual C++的局域网监听实验[J].实验室研究与探索,2006,12:189-190.
[4]王胜杰,王建.基于千兆以太网的PC 机与FPGA 的高速数据传输[J].信息技术,2011(8):156-158.
[5]吕雪峰,彭文波,宋泽宇.网络分析技术揭秘原理、实践与WinPcap 深入解析[M].北京:机械工业出版社,2012.
[6]张伟,王韬,潘艳辉.基于WinPcap 的数据包捕获及应用[J].计算机工程与设计,2008,(7):1649-1651.
[7]张鑫.雷达图像显示处理[D].大连:大连海事大学,2011.
[8]李宏波,李浩,张可.基于FPGA 的脉冲雷达成像研究与实现[J].火控雷达技术,2011,40(3):61-64.